From e8fb4a63331376393de8713d88e59e5c61e899ea Mon Sep 17 00:00:00 2001 From: islam <2553451+qalandarov@users.noreply.github.com> Date: Sat, 4 Apr 2026 00:32:05 +0100 Subject: [PATCH 001/216] Extract Noise into a dedicated module --- .github/workflows/swift-tests.yml | 2 + Package.swift | 5 ++- bitchat.xcodeproj/project.pbxproj | 20 +++++++++ bitchat/Services/KeychainManager.swift | 3 +- bitchat/Services/NoiseEncryptionService.swift | 1 + .../EndToEnd/PrivateChatE2ETests.swift | 1 + .../Integration/IntegrationTests.swift | 1 + .../Integration/TestNetworkHelper.swift | 1 + localPackages/Noise/Package.swift | 38 +++++++++++++++++ .../Noise/Sources}/Noise/NoiseProtocol.swift | 7 ++-- .../Sources}/Noise/NoiseRateLimiter.swift | 12 +++--- .../Noise/NoiseSecurityConstants.swift | 10 ++--- .../Sources}/Noise/NoiseSecurityError.swift | 2 +- .../Noise/NoiseSecurityValidator.swift | 6 +-- .../Noise/Sources}/Noise/NoiseSession.swift | 12 +++--- .../Sources}/Noise/NoiseSessionError.swift | 2 +- .../Sources}/Noise/NoiseSessionManager.swift | 30 ++++++------- .../Sources}/Noise/NoiseSessionState.swift | 0 .../Sources/Noise/SecureMemoryCleaner.swift | 14 +++++++ .../Sources}/Noise/SecureNoiseSession.swift | 0 .../Noise/Tests/NoiseTests/MockKeychain.swift | 34 +++++++++++++++ .../NoiseTests}/NoiseCoverageTests.swift | 3 +- .../NoiseTests}/NoiseProtocolTests.swift | 14 +++---- .../NoiseTests}/NoiseRateLimiterTests.swift | 2 +- .../Tests/NoiseTests}/NoiseTestVectors.json | 0 .../Noise/Tests/NoiseTests/TestHelpers.swift | 42 +++++++++++++++++++ 26 files changed, 209 insertions(+), 53 deletions(-) create mode 100644 localPackages/Noise/Package.swift rename {bitchat => localPackages/Noise/Sources}/Noise/NoiseProtocol.swift (99%) rename {bitchat => localPackages/Noise/Sources}/Noise/NoiseRateLimiter.swift (94%) rename {bitchat => localPackages/Noise/Sources}/Noise/NoiseSecurityConstants.swift (80%) rename {bitchat => localPackages/Noise/Sources}/Noise/NoiseSecurityError.swift (89%) rename {bitchat => localPackages/Noise/Sources}/Noise/NoiseSecurityValidator.swift (70%) rename {bitchat => localPackages/Noise/Sources}/Noise/NoiseSession.swift (97%) rename {bitchat => localPackages/Noise/Sources}/Noise/NoiseSessionError.swift (84%) rename {bitchat => localPackages/Noise/Sources}/Noise/NoiseSessionManager.swift (87%) rename {bitchat => localPackages/Noise/Sources}/Noise/NoiseSessionState.swift (100%) create mode 100644 localPackages/Noise/Sources/Noise/SecureMemoryCleaner.swift rename {bitchat => localPackages/Noise/Sources}/Noise/SecureNoiseSession.swift (100%) create mode 100644 localPackages/Noise/Tests/NoiseTests/MockKeychain.swift rename {bitchatTests/Noise => localPackages/Noise/Tests/NoiseTests}/NoiseCoverageTests.swift (99%) rename {bitchatTests/Noise => localPackages/Noise/Tests/NoiseTests}/NoiseProtocolTests.swift (99%) rename {bitchatTests/Noise => localPackages/Noise/Tests/NoiseTests}/NoiseRateLimiterTests.swift (98%) rename {bitchatTests/Noise => localPackages/Noise/Tests/NoiseTests}/NoiseTestVectors.json (100%) create mode 100644 localPackages/Noise/Tests/NoiseTests/TestHelpers.swift diff --git a/.github/workflows/swift-tests.yml b/.github/workflows/swift-tests.yml index a56b9030..54c121e5 100644 --- a/.github/workflows/swift-tests.yml +++ b/.github/workflows/swift-tests.yml @@ -21,6 +21,8 @@ jobs: path: localPackages/BitLogger - name: BitFoundation path: localPackages/BitFoundation + - name: Noise + path: localPackages/Noise steps: - name: Checkout code diff --git a/Package.swift b/Package.swift index d7bc2cb6..9eb6a935 100644 --- a/Package.swift +++ b/Package.swift @@ -17,6 +17,7 @@ let package = Package( ], dependencies:[ .package(path: "localPackages/Arti"), + .package(path: "localPackages/Noise"), .package(path: "localPackages/BitFoundation"), .package(path: "localPackages/BitLogger"), .package(url: "https://github.com/21-DOT-DEV/swift-secp256k1", exact: "0.21.1") @@ -28,6 +29,7 @@ let package = Package( .product(name: "P256K", package: "swift-secp256k1"), .product(name: "BitFoundation", package: "BitFoundation"), .product(name: "BitLogger", package: "BitLogger"), + .product(name: "Noise", package: "Noise"), .product(name: "Tor", package: "Arti") ], path: "bitchat", @@ -56,8 +58,7 @@ let package = Package( "README.md" ], resources: [ - .process("Localization"), - .process("Noise") + .process("Localization") ] ) ] diff --git a/bitchat.xcodeproj/project.pbxproj b/bitchat.xcodeproj/project.pbxproj index a648a09f..6f04ce99 100644 --- a/bitchat.xcodeproj/project.pbxproj +++ b/bitchat.xcodeproj/project.pbxproj @@ -10,6 +10,8 @@ 17901751FD8010AFC8E750F2 /* bitchatShareExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 61F92EBA29C47C0FCC482F1F /* bitchatShareExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 3EE336D150427F736F32B56C /* P256K in Frameworks */ = {isa = PBXBuildFile; productRef = B1D9136AA0083366353BFA2F /* P256K */; }; 885BBED78092484A5B069461 /* P256K in Frameworks */ = {isa = PBXBuildFile; productRef = 4EB6BA1B8464F1EA38F4E286 /* P256K */; }; + A63163B62F80CB2500B8B128 /* Noise in Frameworks */ = {isa = PBXBuildFile; productRef = A63163B52F80CB2500B8B128 /* Noise */; }; + A63163B82F80CB2D00B8B128 /* Noise in Frameworks */ = {isa = PBXBuildFile; productRef = A63163B72F80CB2D00B8B128 /* Noise */; }; A6BCF9482F80953E001CF9B9 /* BitFoundation in Frameworks */ = {isa = PBXBuildFile; productRef = A6BCF9472F80953E001CF9B9 /* BitFoundation */; }; A6BCF94A2F809550001CF9B9 /* BitFoundation in Frameworks */ = {isa = PBXBuildFile; productRef = A6BCF9492F809550001CF9B9 /* BitFoundation */; }; A6E3E5702E77036A0032EA8A /* BitLogger in Frameworks */ = {isa = PBXBuildFile; productRef = A6E3E56F2E77036A0032EA8A /* BitLogger */; }; @@ -156,6 +158,7 @@ isa = PBXFrameworksBuildPhase; files = ( A6E3E5722E7703760032EA8A /* BitLogger in Frameworks */, + A63163B82F80CB2D00B8B128 /* Noise in Frameworks */, 3EE336D150427F736F32B56C /* P256K in Frameworks */, A6E3EA812E7706A80032EA8A /* Tor in Frameworks */, A6BCF94A2F809550001CF9B9 /* BitFoundation in Frameworks */, @@ -165,6 +168,7 @@ isa = PBXFrameworksBuildPhase; files = ( A6E3E5702E77036A0032EA8A /* BitLogger in Frameworks */, + A63163B62F80CB2500B8B128 /* Noise in Frameworks */, 885BBED78092484A5B069461 /* P256K in Frameworks */, A6E3EA7F2E7706720032EA8A /* Tor in Frameworks */, A6BCF9482F80953E001CF9B9 /* BitFoundation in Frameworks */, @@ -228,6 +232,7 @@ A6E3E5712E7703760032EA8A /* BitLogger */, A6E3EA802E7706A80032EA8A /* Tor */, A6BCF9492F809550001CF9B9 /* BitFoundation */, + A63163B72F80CB2D00B8B128 /* Noise */, ); productName = bitchat_macOS; productReference = 8F3A7C058C2C8E1A06C8CF8B /* bitchat.app */; @@ -309,6 +314,7 @@ A6E3E56F2E77036A0032EA8A /* BitLogger */, A6E3EA7E2E7706720032EA8A /* Tor */, A6BCF9472F80953E001CF9B9 /* BitFoundation */, + A63163B52F80CB2500B8B128 /* Noise */, ); productName = bitchat_iOS; productReference = 96D0D41CA19EE5A772AA8434 /* bitchat.app */; @@ -351,6 +357,7 @@ A6E3E56E2E77036A0032EA8A /* XCLocalSwiftPackageReference "localPackages/BitLogger" */, A6E3EA7D2E7706720032EA8A /* XCLocalSwiftPackageReference "localPackages/Arti" */, A6BCF9462F80953E001CF9B9 /* XCLocalSwiftPackageReference "localPackages/BitFoundation" */, + A63163B42F80CB2500B8B128 /* XCLocalSwiftPackageReference "localPackages/Noise" */, ); preferredProjectObjectVersion = 90; projectDirPath = ""; @@ -916,6 +923,10 @@ /* End XCConfigurationList section */ /* Begin XCLocalSwiftPackageReference section */ + A63163B42F80CB2500B8B128 /* XCLocalSwiftPackageReference "localPackages/Noise" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = localPackages/Noise; + }; A6BCF9462F80953E001CF9B9 /* XCLocalSwiftPackageReference "localPackages/BitFoundation" */ = { isa = XCLocalSwiftPackageReference; relativePath = localPackages/BitFoundation; @@ -947,6 +958,15 @@ package = B8C407587481BBB190741C93 /* XCRemoteSwiftPackageReference "swift-secp256k1" */; productName = P256K; }; + A63163B52F80CB2500B8B128 /* Noise */ = { + isa = XCSwiftPackageProductDependency; + productName = Noise; + }; + A63163B72F80CB2D00B8B128 /* Noise */ = { + isa = XCSwiftPackageProductDependency; + package = A63163B42F80CB2500B8B128 /* XCLocalSwiftPackageReference "localPackages/Noise" */; + productName = Noise; + }; A6BCF9472F80953E001CF9B9 /* BitFoundation */ = { isa = XCSwiftPackageProductDependency; productName = BitFoundation; diff --git a/bitchat/Services/KeychainManager.swift b/bitchat/Services/KeychainManager.swift index 574bdf9f..2ed3cf25 100644 --- a/bitchat/Services/KeychainManager.swift +++ b/bitchat/Services/KeychainManager.swift @@ -7,6 +7,7 @@ // import BitLogger +import protocol Noise.SecureMemoryCleaner import Foundation import Security @@ -51,7 +52,7 @@ enum KeychainSaveResult { } } -protocol KeychainManagerProtocol { +protocol KeychainManagerProtocol: SecureMemoryCleaner { func saveIdentityKey(_ keyData: Data, forKey key: String) -> Bool func getIdentityKey(forKey key: String) -> Data? func deleteIdentityKey(forKey key: String) -> Bool diff --git a/bitchat/Services/NoiseEncryptionService.swift b/bitchat/Services/NoiseEncryptionService.swift index 70e43c0d..740f8206 100644 --- a/bitchat/Services/NoiseEncryptionService.swift +++ b/bitchat/Services/NoiseEncryptionService.swift @@ -84,6 +84,7 @@ import BitLogger import BitFoundation +import Noise import Foundation import CryptoKit diff --git a/bitchatTests/EndToEnd/PrivateChatE2ETests.swift b/bitchatTests/EndToEnd/PrivateChatE2ETests.swift index 6f5c7891..4e69d349 100644 --- a/bitchatTests/EndToEnd/PrivateChatE2ETests.swift +++ b/bitchatTests/EndToEnd/PrivateChatE2ETests.swift @@ -10,6 +10,7 @@ import Testing import CryptoKit import struct Foundation.UUID import BitFoundation +import Noise @testable import bitchat struct PrivateChatE2ETests { diff --git a/bitchatTests/Integration/IntegrationTests.swift b/bitchatTests/Integration/IntegrationTests.swift index 1907cf33..4199da64 100644 --- a/bitchatTests/Integration/IntegrationTests.swift +++ b/bitchatTests/Integration/IntegrationTests.swift @@ -10,6 +10,7 @@ import Foundation import CryptoKit import Testing import BitFoundation +import Noise @testable import bitchat struct IntegrationTests { diff --git a/bitchatTests/Integration/TestNetworkHelper.swift b/bitchatTests/Integration/TestNetworkHelper.swift index 3b633e54..b9fc5a35 100644 --- a/bitchatTests/Integration/TestNetworkHelper.swift +++ b/bitchatTests/Integration/TestNetworkHelper.swift @@ -9,6 +9,7 @@ import Foundation import CryptoKit import BitFoundation +import Noise @testable import bitchat final class TestNetworkHelper { diff --git a/localPackages/Noise/Package.swift b/localPackages/Noise/Package.swift new file mode 100644 index 00000000..805ad9e4 --- /dev/null +++ b/localPackages/Noise/Package.swift @@ -0,0 +1,38 @@ +// swift-tools-version: 5.9 + +import PackageDescription + +let package = Package( + name: "Noise", + platforms: [ + .iOS(.v16), + .macOS(.v13) + ], + products: [ + .library( + name: "Noise", + targets: ["Noise"] + ), + ], + dependencies: [ + .package(path: "../BitLogger"), + .package(path: "../BitFoundation"), + ], + targets: [ + .target( + name: "Noise", + dependencies: [ + .product(name: "BitLogger", package: "BitLogger"), + .product(name: "BitFoundation", package: "BitFoundation"), + ], + path: "Sources" + ), + .testTarget( + name: "NoiseTests", + dependencies: ["Noise"], + resources: [ + .process("NoiseTestVectors.json") + ] + ), + ] +) diff --git a/bitchat/Noise/NoiseProtocol.swift b/localPackages/Noise/Sources/Noise/NoiseProtocol.swift similarity index 99% rename from bitchat/Noise/NoiseProtocol.swift rename to localPackages/Noise/Sources/Noise/NoiseProtocol.swift index faa18f31..41c6447a 100644 --- a/bitchat/Noise/NoiseProtocol.swift +++ b/localPackages/Noise/Sources/Noise/NoiseProtocol.swift @@ -78,6 +78,7 @@ /// import BitLogger +import BitFoundation import Foundation import CryptoKit @@ -532,7 +533,7 @@ final class NoiseSymmetricState { final class NoiseHandshakeState { private let role: NoiseRole private let pattern: NoisePattern - private let keychain: KeychainManagerProtocol + private let keychain: SecureMemoryCleaner private var symmetricState: NoiseSymmetricState // Keys @@ -555,7 +556,7 @@ final class NoiseHandshakeState { init( role: NoiseRole, pattern: NoisePattern, - keychain: KeychainManagerProtocol, + keychain: SecureMemoryCleaner, localStaticKey: Curve25519.KeyAgreement.PrivateKey? = nil, remoteStaticKey: Curve25519.KeyAgreement.PublicKey? = nil, prologue: Data = Data(), @@ -923,7 +924,7 @@ extension NoisePattern { // MARK: - Errors -enum NoiseError: Error { +public enum NoiseError: Error { case uninitializedCipher case invalidCiphertext case handshakeComplete diff --git a/bitchat/Noise/NoiseRateLimiter.swift b/localPackages/Noise/Sources/Noise/NoiseRateLimiter.swift similarity index 94% rename from bitchat/Noise/NoiseRateLimiter.swift rename to localPackages/Noise/Sources/Noise/NoiseRateLimiter.swift index 7581244f..fccb6000 100644 --- a/bitchat/Noise/NoiseRateLimiter.swift +++ b/localPackages/Noise/Sources/Noise/NoiseRateLimiter.swift @@ -10,7 +10,7 @@ import BitLogger import BitFoundation import Foundation -final class NoiseRateLimiter { +public final class NoiseRateLimiter { private var handshakeTimestamps: [PeerID: [Date]] = [:] private var messageTimestamps: [PeerID: [Date]] = [:] @@ -19,8 +19,10 @@ final class NoiseRateLimiter { private var globalMessageTimestamps: [Date] = [] private let queue = DispatchQueue(label: "chat.bitchat.noise.ratelimit", attributes: .concurrent) - - func allowHandshake(from peerID: PeerID) -> Bool { + + public init() {} + + public func allowHandshake(from peerID: PeerID) -> Bool { return queue.sync(flags: .barrier) { let now = Date() let oneMinuteAgo = now.addingTimeInterval(-60) @@ -49,7 +51,7 @@ final class NoiseRateLimiter { } } - func allowMessage(from peerID: PeerID) -> Bool { + public func allowMessage(from peerID: PeerID) -> Bool { return queue.sync(flags: .barrier) { let now = Date() let oneSecondAgo = now.addingTimeInterval(-1) @@ -85,7 +87,7 @@ final class NoiseRateLimiter { } } - func resetAll() { + public func resetAll() { queue.async(flags: .barrier) { self.handshakeTimestamps.removeAll() self.messageTimestamps.removeAll() diff --git a/bitchat/Noise/NoiseSecurityConstants.swift b/localPackages/Noise/Sources/Noise/NoiseSecurityConstants.swift similarity index 80% rename from bitchat/Noise/NoiseSecurityConstants.swift rename to localPackages/Noise/Sources/Noise/NoiseSecurityConstants.swift index 17781352..8b30299c 100644 --- a/bitchat/Noise/NoiseSecurityConstants.swift +++ b/localPackages/Noise/Sources/Noise/NoiseSecurityConstants.swift @@ -8,7 +8,7 @@ import Foundation -enum NoiseSecurityConstants { +public enum NoiseSecurityConstants { // Maximum message size to prevent memory exhaustion static let maxMessageSize = 65535 // 64KB as per Noise spec @@ -28,10 +28,10 @@ enum NoiseSecurityConstants { static let maxSessionsPerPeer = 3 // Rate limiting - static let maxHandshakesPerMinute = 10 - static let maxMessagesPerSecond = 100 + public static let maxHandshakesPerMinute = 10 + public static let maxMessagesPerSecond = 100 // Global rate limiting (across all peers) - static let maxGlobalHandshakesPerMinute = 30 - static let maxGlobalMessagesPerSecond = 500 + public static let maxGlobalHandshakesPerMinute = 30 + public static let maxGlobalMessagesPerSecond = 500 } diff --git a/bitchat/Noise/NoiseSecurityError.swift b/localPackages/Noise/Sources/Noise/NoiseSecurityError.swift similarity index 89% rename from bitchat/Noise/NoiseSecurityError.swift rename to localPackages/Noise/Sources/Noise/NoiseSecurityError.swift index aff73c8b..5663af0a 100644 --- a/bitchat/Noise/NoiseSecurityError.swift +++ b/localPackages/Noise/Sources/Noise/NoiseSecurityError.swift @@ -8,7 +8,7 @@ import Foundation -enum NoiseSecurityError: Error { +public enum NoiseSecurityError: Error { case sessionExpired case sessionExhausted case messageTooLarge diff --git a/bitchat/Noise/NoiseSecurityValidator.swift b/localPackages/Noise/Sources/Noise/NoiseSecurityValidator.swift similarity index 70% rename from bitchat/Noise/NoiseSecurityValidator.swift rename to localPackages/Noise/Sources/Noise/NoiseSecurityValidator.swift index 355d8fd7..f2a02e00 100644 --- a/bitchat/Noise/NoiseSecurityValidator.swift +++ b/localPackages/Noise/Sources/Noise/NoiseSecurityValidator.swift @@ -8,15 +8,15 @@ import Foundation -struct NoiseSecurityValidator { +public struct NoiseSecurityValidator { /// Validate message size - static func validateMessageSize(_ data: Data) -> Bool { + public static func validateMessageSize(_ data: Data) -> Bool { return data.count <= NoiseSecurityConstants.maxMessageSize } /// Validate handshake message size - static func validateHandshakeMessageSize(_ data: Data) -> Bool { + public static func validateHandshakeMessageSize(_ data: Data) -> Bool { return data.count <= NoiseSecurityConstants.maxHandshakeMessageSize } } diff --git a/bitchat/Noise/NoiseSession.swift b/localPackages/Noise/Sources/Noise/NoiseSession.swift similarity index 97% rename from bitchat/Noise/NoiseSession.swift rename to localPackages/Noise/Sources/Noise/NoiseSession.swift index 1df2f0ba..b36a6d90 100644 --- a/bitchat/Noise/NoiseSession.swift +++ b/localPackages/Noise/Sources/Noise/NoiseSession.swift @@ -11,10 +11,10 @@ import Foundation import CryptoKit import BitFoundation -class NoiseSession { +public class NoiseSession { let peerID: PeerID let role: NoiseRole - private let keychain: KeychainManagerProtocol + private let keychain: SecureMemoryCleaner private var state: NoiseSessionState = .uninitialized private var handshakeState: NoiseHandshakeState? private var sendCipher: NoiseCipherState? @@ -34,7 +34,7 @@ class NoiseSession { init( peerID: PeerID, role: NoiseRole, - keychain: KeychainManagerProtocol, + keychain: SecureMemoryCleaner, localStaticKey: Curve25519.KeyAgreement.PrivateKey, remoteStaticKey: Curve25519.KeyAgreement.PublicKey? = nil ) { @@ -182,7 +182,7 @@ class NoiseSession { } } - func isEstablished() -> Bool { + public func isEstablished() -> Bool { return sessionQueue.sync { if case .established = state { return true @@ -217,8 +217,8 @@ class NoiseSession { sentHandshakeMessages.removeAll() // Clear handshake hash - if var hash = handshakeHash { - keychain.secureClear(&hash) + if handshakeHash != nil { + keychain.secureClear(&handshakeHash!) } handshakeHash = nil diff --git a/bitchat/Noise/NoiseSessionError.swift b/localPackages/Noise/Sources/Noise/NoiseSessionError.swift similarity index 84% rename from bitchat/Noise/NoiseSessionError.swift rename to localPackages/Noise/Sources/Noise/NoiseSessionError.swift index 24e172e7..0cda921c 100644 --- a/bitchat/Noise/NoiseSessionError.swift +++ b/localPackages/Noise/Sources/Noise/NoiseSessionError.swift @@ -6,7 +6,7 @@ // For more information, see // -enum NoiseSessionError: Error, Equatable { +public enum NoiseSessionError: Error, Equatable { case invalidState case notEstablished case sessionNotFound diff --git a/bitchat/Noise/NoiseSessionManager.swift b/localPackages/Noise/Sources/Noise/NoiseSessionManager.swift similarity index 87% rename from bitchat/Noise/NoiseSessionManager.swift rename to localPackages/Noise/Sources/Noise/NoiseSessionManager.swift index 9029b228..9c9c129d 100644 --- a/bitchat/Noise/NoiseSessionManager.swift +++ b/localPackages/Noise/Sources/Noise/NoiseSessionManager.swift @@ -11,18 +11,18 @@ import CryptoKit import Foundation import BitFoundation -final class NoiseSessionManager { +public final class NoiseSessionManager { private var sessions: [PeerID: NoiseSession] = [:] private let localStaticKey: Curve25519.KeyAgreement.PrivateKey - private let keychain: KeychainManagerProtocol + private let keychain: SecureMemoryCleaner private let sessionFactory: (PeerID, NoiseRole) -> NoiseSession private let managerQueue = DispatchQueue(label: "chat.bitchat.noise.manager", attributes: .concurrent) // Callbacks - var onSessionEstablished: ((PeerID, Curve25519.KeyAgreement.PublicKey) -> Void)? + public var onSessionEstablished: ((PeerID, Curve25519.KeyAgreement.PublicKey) -> Void)? var onSessionFailed: ((PeerID, Error) -> Void)? - init(localStaticKey: Curve25519.KeyAgreement.PrivateKey, keychain: KeychainManagerProtocol) { + public init(localStaticKey: Curve25519.KeyAgreement.PrivateKey, keychain: SecureMemoryCleaner) { self.localStaticKey = localStaticKey self.keychain = keychain self.sessionFactory = { peerID, role in @@ -38,7 +38,7 @@ final class NoiseSessionManager { #if DEBUG init( localStaticKey: Curve25519.KeyAgreement.PrivateKey, - keychain: KeychainManagerProtocol, + keychain: SecureMemoryCleaner, sessionFactory: @escaping (PeerID, NoiseRole) -> NoiseSession ) { self.localStaticKey = localStaticKey @@ -49,13 +49,13 @@ final class NoiseSessionManager { // MARK: - Session Management - func getSession(for peerID: PeerID) -> NoiseSession? { + public func getSession(for peerID: PeerID) -> NoiseSession? { return managerQueue.sync { return sessions[peerID] } } - func removeSession(for peerID: PeerID) { + public func removeSession(for peerID: PeerID) { managerQueue.sync(flags: .barrier) { if let session = sessions.removeValue(forKey: peerID) { session.reset() // Clear sensitive data before removing @@ -63,7 +63,7 @@ final class NoiseSessionManager { } } - func removeAllSessions() { + public func removeAllSessions() { managerQueue.sync(flags: .barrier) { for (_, session) in sessions { session.reset() @@ -74,7 +74,7 @@ final class NoiseSessionManager { // MARK: - Handshake Helpers - func initiateHandshake(with peerID: PeerID) throws -> Data { + public func initiateHandshake(with peerID: PeerID) throws -> Data { return try managerQueue.sync(flags: .barrier) { // Check if we already have an established session if let existingSession = sessions[peerID], existingSession.isEstablished() { @@ -103,7 +103,7 @@ final class NoiseSessionManager { } } - func handleIncomingHandshake(from peerID: PeerID, message: Data) throws -> Data? { + public func handleIncomingHandshake(from peerID: PeerID, message: Data) throws -> Data? { // Process everything within the synchronized block to prevent race conditions return try managerQueue.sync(flags: .barrier) { var shouldCreateNew = false @@ -173,7 +173,7 @@ final class NoiseSessionManager { // MARK: - Encryption/Decryption - func encrypt(_ plaintext: Data, for peerID: PeerID) throws -> Data { + public func encrypt(_ plaintext: Data, for peerID: PeerID) throws -> Data { guard let session = getSession(for: peerID) else { throw NoiseSessionError.sessionNotFound } @@ -181,7 +181,7 @@ final class NoiseSessionManager { return try session.encrypt(plaintext) } - func decrypt(_ ciphertext: Data, from peerID: PeerID) throws -> Data { + public func decrypt(_ ciphertext: Data, from peerID: PeerID) throws -> Data { guard let session = getSession(for: peerID) else { throw NoiseSessionError.sessionNotFound } @@ -191,13 +191,13 @@ final class NoiseSessionManager { // MARK: - Key Management - func getRemoteStaticKey(for peerID: PeerID) -> Curve25519.KeyAgreement.PublicKey? { + public func getRemoteStaticKey(for peerID: PeerID) -> Curve25519.KeyAgreement.PublicKey? { return getSession(for: peerID)?.getRemoteStaticPublicKey() } // MARK: - Session Rekeying - func getSessionsNeedingRekey() -> [(peerID: PeerID, needsRekey: Bool)] { + public func getSessionsNeedingRekey() -> [(peerID: PeerID, needsRekey: Bool)] { return managerQueue.sync { var needingRekey: [(peerID: PeerID, needsRekey: Bool)] = [] @@ -213,7 +213,7 @@ final class NoiseSessionManager { } } - func initiateRekey(for peerID: PeerID) throws { + public func initiateRekey(for peerID: PeerID) throws { // Remove old session removeSession(for: peerID) diff --git a/bitchat/Noise/NoiseSessionState.swift b/localPackages/Noise/Sources/Noise/NoiseSessionState.swift similarity index 100% rename from bitchat/Noise/NoiseSessionState.swift rename to localPackages/Noise/Sources/Noise/NoiseSessionState.swift diff --git a/localPackages/Noise/Sources/Noise/SecureMemoryCleaner.swift b/localPackages/Noise/Sources/Noise/SecureMemoryCleaner.swift new file mode 100644 index 00000000..37da7010 --- /dev/null +++ b/localPackages/Noise/Sources/Noise/SecureMemoryCleaner.swift @@ -0,0 +1,14 @@ +// +// SecureMemoryCleaner.swift +// bitchat +// +// This is free and unencumbered software released into the public domain. +// For more information, see +// + +import struct Foundation.Data + +public protocol SecureMemoryCleaner { + func secureClear(_ data: inout Data) + func secureClear(_ string: inout String) +} diff --git a/bitchat/Noise/SecureNoiseSession.swift b/localPackages/Noise/Sources/Noise/SecureNoiseSession.swift similarity index 100% rename from bitchat/Noise/SecureNoiseSession.swift rename to localPackages/Noise/Sources/Noise/SecureNoiseSession.swift diff --git a/localPackages/Noise/Tests/NoiseTests/MockKeychain.swift b/localPackages/Noise/Tests/NoiseTests/MockKeychain.swift new file mode 100644 index 00000000..3cd6c723 --- /dev/null +++ b/localPackages/Noise/Tests/NoiseTests/MockKeychain.swift @@ -0,0 +1,34 @@ +// +// MockKeychain.swift +// bitchat +// +// This is free and unencumbered software released into the public domain. +// For more information, see +// + +import Foundation +@testable import Noise + +// TODO: Combine with the one from the main target +final class MockKeychain: SecureMemoryCleaner { + /// Thread-safe counter for secureClear calls + private let lock = NSLock() + private var _secureClearDataCallCount = 0 + + var secureClearDataCallCount: Int { + lock.lock() + defer { lock.unlock() } + return _secureClearDataCallCount + } + + func secureClear(_ data: inout Data) { + lock.lock() + _secureClearDataCallCount += 1 + lock.unlock() + data = Data() + } + + func secureClear(_ string: inout String) { + string = "" + } +} diff --git a/bitchatTests/Noise/NoiseCoverageTests.swift b/localPackages/Noise/Tests/NoiseTests/NoiseCoverageTests.swift similarity index 99% rename from bitchatTests/Noise/NoiseCoverageTests.swift rename to localPackages/Noise/Tests/NoiseTests/NoiseCoverageTests.swift index 601b7061..04f4bb27 100644 --- a/bitchatTests/Noise/NoiseCoverageTests.swift +++ b/localPackages/Noise/Tests/NoiseTests/NoiseCoverageTests.swift @@ -2,8 +2,7 @@ import CryptoKit import Foundation import Testing import BitFoundation - -@testable import bitchat +@testable import Noise @Suite("Noise Coverage Tests") struct NoiseCoverageTests { diff --git a/bitchatTests/Noise/NoiseProtocolTests.swift b/localPackages/Noise/Tests/NoiseTests/NoiseProtocolTests.swift similarity index 99% rename from bitchatTests/Noise/NoiseProtocolTests.swift rename to localPackages/Noise/Tests/NoiseTests/NoiseProtocolTests.swift index 6ba8dbfa..5cfe185c 100644 --- a/bitchatTests/Noise/NoiseProtocolTests.swift +++ b/localPackages/Noise/Tests/NoiseTests/NoiseProtocolTests.swift @@ -10,7 +10,7 @@ import CryptoKit import Foundation import Testing import BitFoundation -@testable import bitchat +@testable import Noise // MARK: - Test Vector Support @@ -613,9 +613,7 @@ struct NoiseProtocolTests { private func loadTestVectors() throws -> [NoiseTestVector] { // Try to load from test bundle - let testBundle = Bundle(for: MockKeychain.self) - guard let url = testBundle.url(forResource: "NoiseTestVectors", withExtension: "json") - else { + guard let url = Bundle.module.url(forResource: "NoiseTestVectors", withExtension: "json") else { throw NSError( domain: "NoiseTests", code: 1, userInfo: [ @@ -794,7 +792,7 @@ struct NoiseProtocolTests { @Test func secureClearCalledDuringHandshake() throws { // Use TrackingMockKeychain to verify secureClear is called - let trackingKeychain = TrackingMockKeychain() + let trackingKeychain = MockKeychain() let aliceKey = Curve25519.KeyAgreement.PrivateKey() let bobKey = Curve25519.KeyAgreement.PrivateKey() @@ -843,7 +841,7 @@ struct NoiseProtocolTests { @Test func encryptionWorksAfterSecureClear() throws { // Verify that encryption/decryption still works correctly after adding secureClear - let trackingKeychain = TrackingMockKeychain() + let trackingKeychain = MockKeychain() let aliceKey = Curve25519.KeyAgreement.PrivateKey() let bobKey = Curve25519.KeyAgreement.PrivateKey() @@ -900,8 +898,8 @@ struct NoiseProtocolTests { // Verify secureClear is called in both writeMessage and readMessage paths // We do this by checking the count increases at each step - let aliceKeychain = TrackingMockKeychain() - let bobKeychain = TrackingMockKeychain() + let aliceKeychain = MockKeychain() + let bobKeychain = MockKeychain() let aliceKey = Curve25519.KeyAgreement.PrivateKey() let bobKey = Curve25519.KeyAgreement.PrivateKey() diff --git a/bitchatTests/Noise/NoiseRateLimiterTests.swift b/localPackages/Noise/Tests/NoiseTests/NoiseRateLimiterTests.swift similarity index 98% rename from bitchatTests/Noise/NoiseRateLimiterTests.swift rename to localPackages/Noise/Tests/NoiseTests/NoiseRateLimiterTests.swift index 623fe22e..74bac77c 100644 --- a/bitchatTests/Noise/NoiseRateLimiterTests.swift +++ b/localPackages/Noise/Tests/NoiseTests/NoiseRateLimiterTests.swift @@ -1,6 +1,6 @@ import XCTest import BitFoundation -@testable import bitchat +@testable import Noise final class NoiseRateLimiterTests: XCTestCase { func test_allowHandshake_blocksAfterPerPeerLimit() { diff --git a/bitchatTests/Noise/NoiseTestVectors.json b/localPackages/Noise/Tests/NoiseTests/NoiseTestVectors.json similarity index 100% rename from bitchatTests/Noise/NoiseTestVectors.json rename to localPackages/Noise/Tests/NoiseTests/NoiseTestVectors.json diff --git a/localPackages/Noise/Tests/NoiseTests/TestHelpers.swift b/localPackages/Noise/Tests/NoiseTests/TestHelpers.swift new file mode 100644 index 00000000..f96a91bf --- /dev/null +++ b/localPackages/Noise/Tests/NoiseTests/TestHelpers.swift @@ -0,0 +1,42 @@ +// +// TestHelpers.swift +// bitchatTests +// +// This is free and unencumbered software released into the public domain. +// For more information, see +// + +import Foundation +import CryptoKit +import BitFoundation + +// TODO: Combine with the one from the main target +final class TestHelpers { + static func generateRandomData(length: Int) -> Data { + var data = Data(count: length) + _ = data.withUnsafeMutableBytes { bytes in + SecRandomCopyBytes(kSecRandomDefault, length, bytes.baseAddress!) + } + return data + } + + @MainActor + static func waitUntil( + _ condition: @escaping () -> Bool, + timeout: TimeInterval = 5, + pollInterval: TimeInterval = 0.01 + ) async -> Bool { + let start = Date() + while !condition() { + if Date().timeIntervalSince(start) > timeout { + return condition() + } + try? await sleep(pollInterval) + } + return true + } +} + +func sleep(_ seconds: TimeInterval) async throws { + try await Task.sleep(nanoseconds: UInt64(seconds * 1_000_000_000)) +} From fa45ee3aeae1f7b03425d5313ccc2720ea4d90bb Mon Sep 17 00:00:00 2001 From: islam <2553451+qalandarov@users.noreply.github.com> Date: Sat, 4 Apr 2026 10:25:59 +0100 Subject: [PATCH 002/216] Extract Nostr into a dedicated module --- .github/workflows/swift-tests.yml | 2 + Package.swift | 5 +- bitchat.xcodeproj/project.pbxproj | 20 + bitchat/BitchatApp.swift | 5 +- bitchat/Nostr/NostrLiveFactories.swift | 118 +++++ bitchat/Services/BLE/BLEService.swift | 1 + bitchat/Services/CommandProcessor.swift | 1 + bitchat/Services/GeohashPresenceService.swift | 3 +- bitchat/Services/KeychainManager.swift | 3 +- bitchat/Services/LocationNotesManager.swift | 3 +- .../Services/NetworkActivationService.swift | 1 + bitchat/Services/NostrTransport.swift | 1 + bitchat/Services/UnifiedPeerService.swift | 1 + bitchat/ViewModels/ChatViewModel.swift | 3 +- .../Extensions/ChatViewModel+Nostr.swift | 1 + .../ChatViewModel+PrivateChat.swift | 1 + .../Components/CommandSuggestionsView.swift | 3 +- .../Views/Components/TextMessageView.swift | 3 +- bitchat/Views/VerificationViews.swift | 1 + bitchatTests/BLEServiceCoreTests.swift | 1 + .../ChatViewModelDeliveryStatusTests.swift | 1 + .../ChatViewModelExtensionsTests.swift | 1 + .../ChatViewModelRefactoringTests.swift | 1 + bitchatTests/ChatViewModelTests.swift | 1 + bitchatTests/ChatViewModelTorTests.swift | 1 + bitchatTests/CommandProcessorTests.swift | 1 + .../Fragmentation/FragmentationTests.swift | 1 + bitchatTests/GeohashPresenceTests.swift | 1 + bitchatTests/LocationChannelsTests.swift | 1 + bitchatTests/LocationNotesManagerTests.swift | 1 + .../Nostr/GeoRelayDirectoryTests.swift | 2 + bitchatTests/NostrProtocolTests.swift | 1 + .../GeohashPresenceServiceTests.swift | 1 + .../Services/NostrRelayManagerTests.swift | 7 +- .../Services/NostrTransportTests.swift | 1 + .../Services/PrivateChatManagerTests.swift | 1 + .../Services/UnifiedPeerServiceTests.swift | 1 + bitchatTests/ViewSmokeTests.swift | 1 + localPackages/Nostr/Package.resolved | 15 + localPackages/Nostr/Package.swift | 37 ++ .../Nostr/Sources}/Nostr/Bech32.swift | 57 ++- .../Sources}/Nostr/GeoRelayDirectory.swift | 260 +++++----- .../Nostr/Sources}/Nostr/NostrIdentity.swift | 45 +- .../Sources}/Nostr/NostrIdentityBridge.swift | 85 ++-- .../Nostr/Sources}/Nostr/NostrProtocol.swift | 265 +++------- .../Sources}/Nostr/NostrRelayManager.swift | 474 +++++++----------- .../Nostr/XChaCha20Poly1305Compat.swift | 9 - localPackages/Nostr/Tests/Bech32Tests.swift | 41 ++ .../Tests}/XChaCha20Poly1305CompatTests.swift | 2 +- 49 files changed, 778 insertions(+), 714 deletions(-) create mode 100644 bitchat/Nostr/NostrLiveFactories.swift create mode 100644 localPackages/Nostr/Package.resolved create mode 100644 localPackages/Nostr/Package.swift rename {bitchat => localPackages/Nostr/Sources}/Nostr/Bech32.swift (87%) rename {bitchat => localPackages/Nostr/Sources}/Nostr/GeoRelayDirectory.swift (66%) rename {bitchat => localPackages/Nostr/Sources}/Nostr/NostrIdentity.swift (63%) rename {bitchat => localPackages/Nostr/Sources}/Nostr/NostrIdentityBridge.swift (70%) rename {bitchat => localPackages/Nostr/Sources}/Nostr/NostrProtocol.swift (71%) rename {bitchat => localPackages/Nostr/Sources}/Nostr/NostrRelayManager.swift (73%) rename {bitchat => localPackages/Nostr/Sources}/Nostr/XChaCha20Poly1305Compat.swift (93%) create mode 100644 localPackages/Nostr/Tests/Bech32Tests.swift rename {bitchatTests => localPackages/Nostr/Tests}/XChaCha20Poly1305CompatTests.swift (99%) diff --git a/.github/workflows/swift-tests.yml b/.github/workflows/swift-tests.yml index 54c121e5..31856006 100644 --- a/.github/workflows/swift-tests.yml +++ b/.github/workflows/swift-tests.yml @@ -23,6 +23,8 @@ jobs: path: localPackages/BitFoundation - name: Noise path: localPackages/Noise + - name: Nostr + path: localPackages/Nostr steps: - name: Checkout code diff --git a/Package.swift b/Package.swift index 9eb6a935..c679af91 100644 --- a/Package.swift +++ b/Package.swift @@ -20,6 +20,7 @@ let package = Package( .package(path: "localPackages/Noise"), .package(path: "localPackages/BitFoundation"), .package(path: "localPackages/BitLogger"), + .package(path: "localPackages/Nostr"), .package(url: "https://github.com/21-DOT-DEV/swift-secp256k1", exact: "0.21.1") ], targets: [ @@ -30,6 +31,7 @@ let package = Package( .product(name: "BitFoundation", package: "BitFoundation"), .product(name: "BitLogger", package: "BitLogger"), .product(name: "Noise", package: "Noise"), + .product(name: "Nostr", package: "Nostr"), .product(name: "Tor", package: "Arti") ], path: "bitchat", @@ -50,7 +52,8 @@ let package = Package( name: "bitchatTests", dependencies: [ "bitchat", - .product(name: "BitFoundation", package: "BitFoundation") + .product(name: "BitFoundation", package: "BitFoundation"), + .product(name: "Nostr", package: "Nostr") ], path: "bitchatTests", exclude: [ diff --git a/bitchat.xcodeproj/project.pbxproj b/bitchat.xcodeproj/project.pbxproj index 6f04ce99..b2451ace 100644 --- a/bitchat.xcodeproj/project.pbxproj +++ b/bitchat.xcodeproj/project.pbxproj @@ -12,6 +12,8 @@ 885BBED78092484A5B069461 /* P256K in Frameworks */ = {isa = PBXBuildFile; productRef = 4EB6BA1B8464F1EA38F4E286 /* P256K */; }; A63163B62F80CB2500B8B128 /* Noise in Frameworks */ = {isa = PBXBuildFile; productRef = A63163B52F80CB2500B8B128 /* Noise */; }; A63163B82F80CB2D00B8B128 /* Noise in Frameworks */ = {isa = PBXBuildFile; productRef = A63163B72F80CB2D00B8B128 /* Noise */; }; + A63180832F8103AB00B8B128 /* Nostr in Frameworks */ = {isa = PBXBuildFile; productRef = A63180822F8103AB00B8B128 /* Nostr */; }; + A63180852F8103B600B8B128 /* Nostr in Frameworks */ = {isa = PBXBuildFile; productRef = A63180842F8103B600B8B128 /* Nostr */; }; A6BCF9482F80953E001CF9B9 /* BitFoundation in Frameworks */ = {isa = PBXBuildFile; productRef = A6BCF9472F80953E001CF9B9 /* BitFoundation */; }; A6BCF94A2F809550001CF9B9 /* BitFoundation in Frameworks */ = {isa = PBXBuildFile; productRef = A6BCF9492F809550001CF9B9 /* BitFoundation */; }; A6E3E5702E77036A0032EA8A /* BitLogger in Frameworks */ = {isa = PBXBuildFile; productRef = A6E3E56F2E77036A0032EA8A /* BitLogger */; }; @@ -160,6 +162,7 @@ A6E3E5722E7703760032EA8A /* BitLogger in Frameworks */, A63163B82F80CB2D00B8B128 /* Noise in Frameworks */, 3EE336D150427F736F32B56C /* P256K in Frameworks */, + A63180852F8103B600B8B128 /* Nostr in Frameworks */, A6E3EA812E7706A80032EA8A /* Tor in Frameworks */, A6BCF94A2F809550001CF9B9 /* BitFoundation in Frameworks */, ); @@ -170,6 +173,7 @@ A6E3E5702E77036A0032EA8A /* BitLogger in Frameworks */, A63163B62F80CB2500B8B128 /* Noise in Frameworks */, 885BBED78092484A5B069461 /* P256K in Frameworks */, + A63180832F8103AB00B8B128 /* Nostr in Frameworks */, A6E3EA7F2E7706720032EA8A /* Tor in Frameworks */, A6BCF9482F80953E001CF9B9 /* BitFoundation in Frameworks */, ); @@ -233,6 +237,7 @@ A6E3EA802E7706A80032EA8A /* Tor */, A6BCF9492F809550001CF9B9 /* BitFoundation */, A63163B72F80CB2D00B8B128 /* Noise */, + A63180842F8103B600B8B128 /* Nostr */, ); productName = bitchat_macOS; productReference = 8F3A7C058C2C8E1A06C8CF8B /* bitchat.app */; @@ -315,6 +320,7 @@ A6E3EA7E2E7706720032EA8A /* Tor */, A6BCF9472F80953E001CF9B9 /* BitFoundation */, A63163B52F80CB2500B8B128 /* Noise */, + A63180822F8103AB00B8B128 /* Nostr */, ); productName = bitchat_iOS; productReference = 96D0D41CA19EE5A772AA8434 /* bitchat.app */; @@ -358,6 +364,7 @@ A6E3EA7D2E7706720032EA8A /* XCLocalSwiftPackageReference "localPackages/Arti" */, A6BCF9462F80953E001CF9B9 /* XCLocalSwiftPackageReference "localPackages/BitFoundation" */, A63163B42F80CB2500B8B128 /* XCLocalSwiftPackageReference "localPackages/Noise" */, + A63180812F8103AB00B8B128 /* XCLocalSwiftPackageReference "localPackages/Nostr" */, ); preferredProjectObjectVersion = 90; projectDirPath = ""; @@ -927,6 +934,10 @@ isa = XCLocalSwiftPackageReference; relativePath = localPackages/Noise; }; + A63180812F8103AB00B8B128 /* XCLocalSwiftPackageReference "localPackages/Nostr" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = localPackages/Nostr; + }; A6BCF9462F80953E001CF9B9 /* XCLocalSwiftPackageReference "localPackages/BitFoundation" */ = { isa = XCLocalSwiftPackageReference; relativePath = localPackages/BitFoundation; @@ -967,6 +978,15 @@ package = A63163B42F80CB2500B8B128 /* XCLocalSwiftPackageReference "localPackages/Noise" */; productName = Noise; }; + A63180822F8103AB00B8B128 /* Nostr */ = { + isa = XCSwiftPackageProductDependency; + productName = Nostr; + }; + A63180842F8103B600B8B128 /* Nostr */ = { + isa = XCSwiftPackageProductDependency; + package = A63180812F8103AB00B8B128 /* XCLocalSwiftPackageReference "localPackages/Nostr" */; + productName = Nostr; + }; A6BCF9472F80953E001CF9B9 /* BitFoundation */ = { isa = XCSwiftPackageProductDependency; productName = BitFoundation; diff --git a/bitchat/BitchatApp.swift b/bitchat/BitchatApp.swift index 128ea1b7..8cf15c67 100644 --- a/bitchat/BitchatApp.swift +++ b/bitchat/BitchatApp.swift @@ -6,6 +6,7 @@ // For more information, see // +import Nostr import Tor import SwiftUI import BitFoundation @@ -27,9 +28,11 @@ struct BitchatApp: App { @NSApplicationDelegateAdaptor(MacAppDelegate.self) var appDelegate #endif - private let idBridge = NostrIdentityBridge() + private let idBridge = NostrIdentityBridge(keychain: KeychainManager()) init() { + GeoRelayDirectory.setupShared(dependencies: .live()) + NostrRelayManager.setupShared(dependencies: .live()) let keychain = KeychainManager() let idBridge = self.idBridge _chatViewModel = StateObject( diff --git a/bitchat/Nostr/NostrLiveFactories.swift b/bitchat/Nostr/NostrLiveFactories.swift new file mode 100644 index 00000000..2cd8a692 --- /dev/null +++ b/bitchat/Nostr/NostrLiveFactories.swift @@ -0,0 +1,118 @@ +import Nostr +import Combine +import Foundation +import Tor +#if os(iOS) +import UIKit +#elseif os(macOS) +import AppKit +#endif + +// MARK: - GeoRelayDirectory Live Dependencies + +extension GeoRelayDirectoryDependencies { + @MainActor + static func live() -> Self { + #if os(iOS) + let activeNotificationName: Notification.Name? = UIApplication.didBecomeActiveNotification + #elseif os(macOS) + let activeNotificationName: Notification.Name? = NSApplication.didBecomeActiveNotification + #else + let activeNotificationName: Notification.Name? = nil + #endif + + return Self( + userDefaults: .standard, + notificationCenter: .default, + now: Date.init, + remoteURL: URL(string: "https://raw.githubusercontent.com/permissionlesstech/georelays/refs/heads/main/nostr_relays.csv")!, + fetchInterval: TransportConfig.geoRelayFetchIntervalSeconds, + refreshCheckInterval: TransportConfig.geoRelayRefreshCheckIntervalSeconds, + retryInitialSeconds: TransportConfig.geoRelayRetryInitialSeconds, + retryMaxSeconds: TransportConfig.geoRelayRetryMaxSeconds, + awaitTorReady: { await TorManager.shared.awaitReady() }, + makeFetchData: { + let session = TorURLSession.shared.session + return { request in + let (data, _) = try await session.data(for: request) + return data + } + }, + readData: { try? Data(contentsOf: $0) }, + writeData: { data, url in + try data.write(to: url, options: .atomic) + }, + cacheURL: { + do { + let base = try FileManager.default.url( + for: .applicationSupportDirectory, + in: .userDomainMask, + appropriateFor: nil, + create: true + ) + let dir = base.appendingPathComponent("bitchat", isDirectory: true) + try? FileManager.default.createDirectory(at: dir, withIntermediateDirectories: true) + return dir.appendingPathComponent("georelays_cache.csv") + } catch { + return nil + } + }, + bundledCSVURLs: { + [ + Bundle.main.url(forResource: "nostr_relays", withExtension: "csv"), + Bundle.main.url(forResource: "online_relays_gps", withExtension: "csv"), + Bundle.main.url(forResource: "online_relays_gps", withExtension: "csv", subdirectory: "relays") + ].compactMap { $0 } + }, + currentDirectoryPath: { FileManager.default.currentDirectoryPath }, + retrySleep: { delay in + let nanoseconds = UInt64(delay * 1_000_000_000) + try? await Task.sleep(nanoseconds: nanoseconds) + }, + torReadyNotificationName: .TorDidBecomeReady, + activeNotificationName: activeNotificationName, + autoStart: true + ) + } +} + +// MARK: - NostrRelayManager Live Dependencies + +extension NostrRelayManagerDependencies { + @MainActor + static func live() -> Self { + Self( + activationAllowed: { NetworkActivationService.shared.activationAllowed }, + userTorEnabled: { NetworkActivationService.shared.userTorEnabled }, + hasMutualFavorites: { !FavoritesPersistenceService.shared.mutualFavorites.isEmpty }, + hasLocationPermission: { LocationChannelManager.shared.permissionState == .authorized }, + mutualFavoritesPublisher: FavoritesPersistenceService.shared.$mutualFavorites.eraseToAnyPublisher(), + locationPermissionPublisher: LocationChannelManager.shared.$permissionState + .map { state -> LocationPermissionState in + switch state { + case .notDetermined:.notDetermined + case .authorized: .authorized + case .denied: .denied + case .restricted: .denied + } + } + .eraseToAnyPublisher(), + torEnforced: { TorManager.shared.torEnforced }, + torIsReady: { TorManager.shared.isReady }, + torIsForeground: { TorManager.shared.isForeground() }, + awaitTorReady: { completion in + Task.detached { + let ready = await TorManager.shared.awaitReady() + await MainActor.run { + completion(ready) + } + } + }, + makeSession: { NostrRelayManager.makeURLSession(TorURLSession.shared.session) }, + scheduleAfter: { delay, action in + DispatchQueue.main.asyncAfter(deadline: .now() + delay, execute: action) + }, + now: Date.init + ) + } +} diff --git a/bitchat/Services/BLE/BLEService.swift b/bitchat/Services/BLE/BLEService.swift index 055c254f..b6b6dd7f 100644 --- a/bitchat/Services/BLE/BLEService.swift +++ b/bitchat/Services/BLE/BLEService.swift @@ -1,5 +1,6 @@ import BitLogger import BitFoundation +import Nostr import Foundation import CoreBluetooth import Combine diff --git a/bitchat/Services/CommandProcessor.swift b/bitchat/Services/CommandProcessor.swift index bba73aac..efd78c05 100644 --- a/bitchat/Services/CommandProcessor.swift +++ b/bitchat/Services/CommandProcessor.swift @@ -6,6 +6,7 @@ // This is free and unencumbered software released into the public domain. // +import Nostr import Foundation import BitFoundation diff --git a/bitchat/Services/GeohashPresenceService.swift b/bitchat/Services/GeohashPresenceService.swift index e311c5c4..eb3aba49 100644 --- a/bitchat/Services/GeohashPresenceService.swift +++ b/bitchat/Services/GeohashPresenceService.swift @@ -8,6 +8,7 @@ // This is free and unencumbered software released into the public domain. // +import Nostr import Foundation import Combine import BitLogger @@ -74,7 +75,7 @@ final class GeohashPresenceService: ObservableObject { ] private init() { - let idBridge = NostrIdentityBridge() + let idBridge = NostrIdentityBridge(keychain: KeychainManager()) self.availableChannelsProvider = { LocationStateManager.shared.availableChannels } self.locationChanges = LocationStateManager.shared.$availableChannels.eraseToAnyPublisher() self.torReadyPublisher = NotificationCenter.default.publisher(for: .TorDidBecomeReady) diff --git a/bitchat/Services/KeychainManager.swift b/bitchat/Services/KeychainManager.swift index 2ed3cf25..7cc7ec01 100644 --- a/bitchat/Services/KeychainManager.swift +++ b/bitchat/Services/KeychainManager.swift @@ -7,6 +7,7 @@ // import BitLogger +import protocol Nostr.NostrKeychainStoring import protocol Noise.SecureMemoryCleaner import Foundation import Security @@ -52,7 +53,7 @@ enum KeychainSaveResult { } } -protocol KeychainManagerProtocol: SecureMemoryCleaner { +protocol KeychainManagerProtocol: SecureMemoryCleaner, NostrKeychainStoring { func saveIdentityKey(_ keyData: Data, forKey key: String) -> Bool func getIdentityKey(forKey key: String) -> Data? func deleteIdentityKey(forKey key: String) -> Bool diff --git a/bitchat/Services/LocationNotesManager.swift b/bitchat/Services/LocationNotesManager.swift index 22c5d0e2..5ffca126 100644 --- a/bitchat/Services/LocationNotesManager.swift +++ b/bitchat/Services/LocationNotesManager.swift @@ -1,4 +1,5 @@ import BitLogger +import Nostr import Foundation /// Dependencies for location notes, allowing tests to stub relay/identity behavior. @@ -15,7 +16,7 @@ struct LocationNotesDependencies { var deriveIdentity: (_ geohash: String) throws -> NostrIdentity var now: () -> Date - private static let idBridge = NostrIdentityBridge() + private static let idBridge = NostrIdentityBridge(keychain: KeychainManager()) static let live = LocationNotesDependencies( relayLookup: { geohash, count in diff --git a/bitchat/Services/NetworkActivationService.swift b/bitchat/Services/NetworkActivationService.swift index a9795024..cf6bd271 100644 --- a/bitchat/Services/NetworkActivationService.swift +++ b/bitchat/Services/NetworkActivationService.swift @@ -1,3 +1,4 @@ +import Nostr import Foundation import BitLogger import Combine diff --git a/bitchat/Services/NostrTransport.swift b/bitchat/Services/NostrTransport.swift index b822a48b..89df4b83 100644 --- a/bitchat/Services/NostrTransport.swift +++ b/bitchat/Services/NostrTransport.swift @@ -1,5 +1,6 @@ import BitLogger import BitFoundation +import Nostr import Foundation import Combine diff --git a/bitchat/Services/UnifiedPeerService.swift b/bitchat/Services/UnifiedPeerService.swift index 3d180c68..773a742e 100644 --- a/bitchat/Services/UnifiedPeerService.swift +++ b/bitchat/Services/UnifiedPeerService.swift @@ -8,6 +8,7 @@ import BitLogger import BitFoundation +import Nostr import Foundation import Combine import SwiftUI diff --git a/bitchat/ViewModels/ChatViewModel.swift b/bitchat/ViewModels/ChatViewModel.swift index a6f5b23c..4a3f56fd 100644 --- a/bitchat/ViewModels/ChatViewModel.swift +++ b/bitchat/ViewModels/ChatViewModel.swift @@ -79,6 +79,7 @@ import BitLogger import BitFoundation +import Nostr import Foundation import SwiftUI import Combine @@ -1967,7 +1968,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, CommandContextProv try? await Task.sleep(nanoseconds: TransportConfig.uiAsyncShortSleepNs) // 0.1 seconds // Reinitialize Nostr relay manager with new identity - nostrRelayManager = NostrRelayManager() + nostrRelayManager = NostrRelayManager(dependencies: .live()) setupNostrMessageHandling() nostrRelayManager?.connect() } diff --git a/bitchat/ViewModels/Extensions/ChatViewModel+Nostr.swift b/bitchat/ViewModels/Extensions/ChatViewModel+Nostr.swift index b36aa49c..5b6daffe 100644 --- a/bitchat/ViewModels/Extensions/ChatViewModel+Nostr.swift +++ b/bitchat/ViewModels/Extensions/ChatViewModel+Nostr.swift @@ -5,6 +5,7 @@ // Geohash and Nostr logic for ChatViewModel // +import Nostr import Foundation import Combine import BitLogger diff --git a/bitchat/ViewModels/Extensions/ChatViewModel+PrivateChat.swift b/bitchat/ViewModels/Extensions/ChatViewModel+PrivateChat.swift index 146c3959..2f376354 100644 --- a/bitchat/ViewModels/Extensions/ChatViewModel+PrivateChat.swift +++ b/bitchat/ViewModels/Extensions/ChatViewModel+PrivateChat.swift @@ -5,6 +5,7 @@ // Private chat and media transfer logic for ChatViewModel // +import Nostr import Foundation import Combine import BitLogger diff --git a/bitchat/Views/Components/CommandSuggestionsView.swift b/bitchat/Views/Components/CommandSuggestionsView.swift index 4c9d0213..09e2b3a5 100644 --- a/bitchat/Views/Components/CommandSuggestionsView.swift +++ b/bitchat/Views/Components/CommandSuggestionsView.swift @@ -5,6 +5,7 @@ // Created by Islam on 29/10/2025. // +import Nostr import SwiftUI struct CommandSuggestionsView: View { @@ -76,7 +77,7 @@ struct CommandSuggestionsView: View { let keychain = KeychainManager() let viewModel = ChatViewModel( keychain: keychain, - idBridge: NostrIdentityBridge(), + idBridge: NostrIdentityBridge(keychain: keychain), identityManager: SecureIdentityStateManager(keychain) ) diff --git a/bitchat/Views/Components/TextMessageView.swift b/bitchat/Views/Components/TextMessageView.swift index 194dc002..5542f48a 100644 --- a/bitchat/Views/Components/TextMessageView.swift +++ b/bitchat/Views/Components/TextMessageView.swift @@ -6,6 +6,7 @@ // For more information, see // +import Nostr import SwiftUI struct TextMessageView: View { @@ -89,7 +90,7 @@ struct TextMessageView: View { .environmentObject( ChatViewModel( keychain: keychain, - idBridge: NostrIdentityBridge(), + idBridge: NostrIdentityBridge(keychain: keychain), identityManager: SecureIdentityStateManager(keychain) ) ) diff --git a/bitchat/Views/VerificationViews.swift b/bitchat/Views/VerificationViews.swift index 180e2b46..ec5c2772 100644 --- a/bitchat/Views/VerificationViews.swift +++ b/bitchat/Views/VerificationViews.swift @@ -1,3 +1,4 @@ +import Nostr import SwiftUI import CoreImage import CoreImage.CIFilterBuiltins diff --git a/bitchatTests/BLEServiceCoreTests.swift b/bitchatTests/BLEServiceCoreTests.swift index 8849f089..2e10b6bb 100644 --- a/bitchatTests/BLEServiceCoreTests.swift +++ b/bitchatTests/BLEServiceCoreTests.swift @@ -6,6 +6,7 @@ // import Testing +import Nostr import Foundation import CoreBluetooth import BitFoundation diff --git a/bitchatTests/ChatViewModelDeliveryStatusTests.swift b/bitchatTests/ChatViewModelDeliveryStatusTests.swift index 057a97c3..c3e46b4a 100644 --- a/bitchatTests/ChatViewModelDeliveryStatusTests.swift +++ b/bitchatTests/ChatViewModelDeliveryStatusTests.swift @@ -6,6 +6,7 @@ // import Testing +import Nostr import Foundation import BitFoundation @testable import bitchat diff --git a/bitchatTests/ChatViewModelExtensionsTests.swift b/bitchatTests/ChatViewModelExtensionsTests.swift index 13934872..10a076bc 100644 --- a/bitchatTests/ChatViewModelExtensionsTests.swift +++ b/bitchatTests/ChatViewModelExtensionsTests.swift @@ -6,6 +6,7 @@ // import Testing +import Nostr import Foundation import Combine #if os(iOS) diff --git a/bitchatTests/ChatViewModelRefactoringTests.swift b/bitchatTests/ChatViewModelRefactoringTests.swift index fcb3f13f..36b11429 100644 --- a/bitchatTests/ChatViewModelRefactoringTests.swift +++ b/bitchatTests/ChatViewModelRefactoringTests.swift @@ -7,6 +7,7 @@ // import Testing +import Nostr import Foundation import BitFoundation @testable import bitchat diff --git a/bitchatTests/ChatViewModelTests.swift b/bitchatTests/ChatViewModelTests.swift index 1be3b578..26c307f9 100644 --- a/bitchatTests/ChatViewModelTests.swift +++ b/bitchatTests/ChatViewModelTests.swift @@ -7,6 +7,7 @@ // import Testing +import Nostr import Foundation import BitFoundation @testable import bitchat diff --git a/bitchatTests/ChatViewModelTorTests.swift b/bitchatTests/ChatViewModelTorTests.swift index d4697dd8..077cd1b1 100644 --- a/bitchatTests/ChatViewModelTorTests.swift +++ b/bitchatTests/ChatViewModelTorTests.swift @@ -6,6 +6,7 @@ // import Testing +import Nostr import Foundation @testable import bitchat diff --git a/bitchatTests/CommandProcessorTests.swift b/bitchatTests/CommandProcessorTests.swift index 12e57d27..2c6eb74d 100644 --- a/bitchatTests/CommandProcessorTests.swift +++ b/bitchatTests/CommandProcessorTests.swift @@ -1,4 +1,5 @@ import Foundation +import Nostr import Testing import BitFoundation @testable import bitchat diff --git a/bitchatTests/Fragmentation/FragmentationTests.swift b/bitchatTests/Fragmentation/FragmentationTests.swift index c645b1f9..56487a40 100644 --- a/bitchatTests/Fragmentation/FragmentationTests.swift +++ b/bitchatTests/Fragmentation/FragmentationTests.swift @@ -7,6 +7,7 @@ // import Testing +import Nostr import Foundation import CoreBluetooth import BitFoundation diff --git a/bitchatTests/GeohashPresenceTests.swift b/bitchatTests/GeohashPresenceTests.swift index dcb5e3bc..3d5782a3 100644 --- a/bitchatTests/GeohashPresenceTests.swift +++ b/bitchatTests/GeohashPresenceTests.swift @@ -7,6 +7,7 @@ // import Testing +import Nostr import Foundation import Combine @testable import bitchat diff --git a/bitchatTests/LocationChannelsTests.swift b/bitchatTests/LocationChannelsTests.swift index 7f5651a9..c226edb9 100644 --- a/bitchatTests/LocationChannelsTests.swift +++ b/bitchatTests/LocationChannelsTests.swift @@ -1,4 +1,5 @@ import Testing +import Nostr import Foundation @testable import bitchat diff --git a/bitchatTests/LocationNotesManagerTests.swift b/bitchatTests/LocationNotesManagerTests.swift index f8efb50a..8abe18de 100644 --- a/bitchatTests/LocationNotesManagerTests.swift +++ b/bitchatTests/LocationNotesManagerTests.swift @@ -1,4 +1,5 @@ import Testing +import Nostr import Foundation @testable import bitchat diff --git a/bitchatTests/Nostr/GeoRelayDirectoryTests.swift b/bitchatTests/Nostr/GeoRelayDirectoryTests.swift index b516f708..e3e72e89 100644 --- a/bitchatTests/Nostr/GeoRelayDirectoryTests.swift +++ b/bitchatTests/Nostr/GeoRelayDirectoryTests.swift @@ -1,4 +1,5 @@ import Foundation +import Nostr import Tor import XCTest @testable import bitchat @@ -303,6 +304,7 @@ final class GeoRelayDirectoryTests: XCTestCase { retrySleep: { delay in await retryRecorder.record(delay) }, + torReadyNotificationName: .TorDidBecomeReady, activeNotificationName: activeNotificationName, autoStart: autoStart ) diff --git a/bitchatTests/NostrProtocolTests.swift b/bitchatTests/NostrProtocolTests.swift index 4ea8020f..e675df4f 100644 --- a/bitchatTests/NostrProtocolTests.swift +++ b/bitchatTests/NostrProtocolTests.swift @@ -5,6 +5,7 @@ // Tests for NIP-17 gift-wrapped private messages // +import Nostr import Testing import CryptoKit import Foundation diff --git a/bitchatTests/Services/GeohashPresenceServiceTests.swift b/bitchatTests/Services/GeohashPresenceServiceTests.swift index f6be1f25..2629a2e7 100644 --- a/bitchatTests/Services/GeohashPresenceServiceTests.swift +++ b/bitchatTests/Services/GeohashPresenceServiceTests.swift @@ -1,4 +1,5 @@ import Combine +import Nostr import XCTest @testable import bitchat diff --git a/bitchatTests/Services/NostrRelayManagerTests.swift b/bitchatTests/Services/NostrRelayManagerTests.swift index 5d3ce8df..6db62421 100644 --- a/bitchatTests/Services/NostrRelayManagerTests.swift +++ b/bitchatTests/Services/NostrRelayManagerTests.swift @@ -1,3 +1,4 @@ +import Nostr import Combine import XCTest @testable import bitchat @@ -697,7 +698,7 @@ final class NostrRelayManagerTests: XCTestCase { } private func makeContext( - permission: LocationChannelManager.PermissionState, + permission: LocationPermissionState, favorites: Set = [], activationAllowed: Bool = true, userTorEnabled: Bool = false, @@ -705,7 +706,7 @@ final class NostrRelayManagerTests: XCTestCase { torIsReady: Bool = true, torIsForeground: Bool = true ) -> RelayManagerTestContext { - let permissionSubject = CurrentValueSubject(permission) + let permissionSubject = CurrentValueSubject(permission) let favoritesSubject = CurrentValueSubject, Never>(favorites) let sessionFactory = MockRelaySessionFactory() let scheduler = MockRelayScheduler() @@ -782,7 +783,7 @@ final class NostrRelayManagerTests: XCTestCase { @MainActor private struct RelayManagerTestContext { let manager: NostrRelayManager - let permissionSubject: CurrentValueSubject + let permissionSubject: CurrentValueSubject let favoritesSubject: CurrentValueSubject, Never> let sessionFactory: MockRelaySessionFactory let scheduler: MockRelayScheduler diff --git a/bitchatTests/Services/NostrTransportTests.swift b/bitchatTests/Services/NostrTransportTests.swift index cb10d7fc..6e74d238 100644 --- a/bitchatTests/Services/NostrTransportTests.swift +++ b/bitchatTests/Services/NostrTransportTests.swift @@ -7,6 +7,7 @@ // import Foundation +import Nostr import Testing import BitFoundation @testable import bitchat diff --git a/bitchatTests/Services/PrivateChatManagerTests.swift b/bitchatTests/Services/PrivateChatManagerTests.swift index a75dac5f..2c81a547 100644 --- a/bitchatTests/Services/PrivateChatManagerTests.swift +++ b/bitchatTests/Services/PrivateChatManagerTests.swift @@ -6,6 +6,7 @@ // import Testing +import Nostr import Foundation import BitFoundation @testable import bitchat diff --git a/bitchatTests/Services/UnifiedPeerServiceTests.swift b/bitchatTests/Services/UnifiedPeerServiceTests.swift index c910af9b..26aa52b7 100644 --- a/bitchatTests/Services/UnifiedPeerServiceTests.swift +++ b/bitchatTests/Services/UnifiedPeerServiceTests.swift @@ -6,6 +6,7 @@ // import Testing +import Nostr import Foundation import BitFoundation @testable import bitchat diff --git a/bitchatTests/ViewSmokeTests.swift b/bitchatTests/ViewSmokeTests.swift index cdf9a8df..04b6ce53 100644 --- a/bitchatTests/ViewSmokeTests.swift +++ b/bitchatTests/ViewSmokeTests.swift @@ -1,4 +1,5 @@ import Testing +import Nostr import Foundation import SwiftUI import CoreGraphics diff --git a/localPackages/Nostr/Package.resolved b/localPackages/Nostr/Package.resolved new file mode 100644 index 00000000..e1ae5e3e --- /dev/null +++ b/localPackages/Nostr/Package.resolved @@ -0,0 +1,15 @@ +{ + "originHash" : "6a29e071e2546e255f894c733cad2a53ab20e153bf12e813d16830b195a5970d", + "pins" : [ + { + "identity" : "swift-secp256k1", + "kind" : "remoteSourceControl", + "location" : "https://github.com/21-DOT-DEV/swift-secp256k1", + "state" : { + "revision" : "8c62aba8a3011c9bcea232e5ee007fb0b34a15e2", + "version" : "0.21.1" + } + } + ], + "version" : 3 +} diff --git a/localPackages/Nostr/Package.swift b/localPackages/Nostr/Package.swift new file mode 100644 index 00000000..554a0d31 --- /dev/null +++ b/localPackages/Nostr/Package.swift @@ -0,0 +1,37 @@ +// swift-tools-version: 5.9 + +import PackageDescription + +let package = Package( + name: "Nostr", + platforms: [ + .iOS(.v16), + .macOS(.v13) + ], + products: [ + .library( + name: "Nostr", + targets: ["Nostr"] + ), + ], + dependencies: [ + .package(path: "../BitLogger"), + .package(path: "../BitFoundation"), + .package(url: "https://github.com/21-DOT-DEV/swift-secp256k1", exact: "0.21.1"), + ], + targets: [ + .target( + name: "Nostr", + dependencies: [ + .product(name: "BitLogger", package: "BitLogger"), + .product(name: "BitFoundation", package: "BitFoundation"), + .product(name: "P256K", package: "swift-secp256k1"), + ], + path: "Sources" + ), + .testTarget( + name: "NostrTests", + dependencies: ["Nostr"] + ), + ] +) diff --git a/bitchat/Nostr/Bech32.swift b/localPackages/Nostr/Sources/Nostr/Bech32.swift similarity index 87% rename from bitchat/Nostr/Bech32.swift rename to localPackages/Nostr/Sources/Nostr/Bech32.swift index dc798560..13d7a940 100644 --- a/bitchat/Nostr/Bech32.swift +++ b/localPackages/Nostr/Sources/Nostr/Bech32.swift @@ -1,38 +1,37 @@ import Foundation /// Bech32 encoding for Nostr (minimal implementation) -enum Bech32 { +public enum Bech32 { private static let charset = "qpzry9x8gf2tvdw0s3jn54khce6mua7l" private static let generator = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3] - - static func encode(hrp: String, data: Data) throws -> String { + + public static func encode(hrp: String, data: Data) throws -> String { let values = convertBits(from: 8, to: 5, pad: true, data: Array(data)) let checksum = createChecksum(hrp: hrp, values: values) let combined = values + checksum - - return hrp + "1" + combined.map { + + return hrp + "1" + combined.map { let index = charset.index(charset.startIndex, offsetBy: Int($0)) return String(charset[index]) }.joined() } - - static func decode(_ bech32String: String) throws -> (hrp: String, data: Data) { - // Find the last occurrence of '1' + + public static func decode(_ bech32String: String) throws -> (hrp: String, data: Data) { guard let separatorIndex = bech32String.lastIndex(of: "1") else { throw Bech32Error.invalidFormat } - + let hrp = String(bech32String[..= 6 else { throw Bech32Error.invalidChecksum } - + let payloadValues = Array(values.dropLast(6)) let checksum = Array(values.suffix(6)) let expectedChecksum = createChecksum(hrp: hrp, values: payloadValues) - + guard checksum == expectedChecksum else { throw Bech32Error.invalidChecksum } - + // Convert back to bytes let bytes = convertBits(from: 5, to: 8, pad: false, data: payloadValues) return (hrp: hrp, data: Data(bytes)) } - + enum Bech32Error: Error { case invalidFormat case invalidCharacter case invalidChecksum } - + private static func convertBits(from: Int, to: Int, pad: Bool, data: [UInt8]) -> [UInt8] { var acc = 0 var bits = 0 var result = [UInt8]() let maxv = (1 << to) - 1 - + for value in data { acc = (acc << from) | Int(value) bits += from - + while bits >= to { bits -= to result.append(UInt8((acc >> bits) & maxv)) } } - + if pad && bits > 0 { result.append(UInt8((acc << (to - bits)) & maxv)) } - + return result } - + private static func createChecksum(hrp: String, values: [UInt8]) -> [UInt8] { let checksumValues = hrpExpand(hrp) + values + [0, 0, 0, 0, 0, 0] let polymod = polymod(checksumValues) ^ 1 var checksum = [UInt8]() - + for i in 0..<6 { checksum.append(UInt8((polymod >> (5 * (5 - i))) & 31)) } - + return checksum } - + private static func hrpExpand(_ hrp: String) -> [UInt8] { var result = [UInt8]() for c in hrp { guard let asciiValue = c.asciiValue else { - return [] // Return empty array for invalid input + return [] } result.append(UInt8(asciiValue >> 5)) } result.append(0) for c in hrp { guard let asciiValue = c.asciiValue else { - return [] // Return empty array for invalid input + return [] } result.append(UInt8(asciiValue & 31)) } return result } - + private static func polymod(_ values: [UInt8]) -> Int { var chk = 1 for value in values { diff --git a/bitchat/Nostr/GeoRelayDirectory.swift b/localPackages/Nostr/Sources/Nostr/GeoRelayDirectory.swift similarity index 66% rename from bitchat/Nostr/GeoRelayDirectory.swift rename to localPackages/Nostr/Sources/Nostr/GeoRelayDirectory.swift index 653fc285..3b5905ed 100644 --- a/bitchat/Nostr/GeoRelayDirectory.swift +++ b/localPackages/Nostr/Sources/Nostr/GeoRelayDirectory.swift @@ -1,101 +1,72 @@ import BitLogger import Foundation -import Tor -#if os(iOS) -import UIKit -#elseif os(macOS) -import AppKit -#endif -/// Directory of online Nostr relays with approximate GPS locations, used for geohash routing. -struct GeoRelayDirectoryDependencies { - var userDefaults: UserDefaults - var notificationCenter: NotificationCenter - var now: () -> Date - var remoteURL: URL - var fetchInterval: TimeInterval - var refreshCheckInterval: TimeInterval - var retryInitialSeconds: TimeInterval - var retryMaxSeconds: TimeInterval - var awaitTorReady: @Sendable () async -> Bool - var makeFetchData: @MainActor @Sendable () -> (@Sendable (URLRequest) async throws -> Data) - var readData: (URL) -> Data? - var writeData: (Data, URL) throws -> Void - var cacheURL: () -> URL? - var bundledCSVURLs: () -> [URL] - var currentDirectoryPath: () -> String? - var retrySleep: (TimeInterval) async -> Void - var activeNotificationName: Notification.Name? - var autoStart: Bool -} +public struct GeoRelayDirectoryDependencies { + public var userDefaults: UserDefaults + public var notificationCenter: NotificationCenter + public var now: () -> Date + public var remoteURL: URL + public var fetchInterval: TimeInterval + public var refreshCheckInterval: TimeInterval + public var retryInitialSeconds: TimeInterval + public var retryMaxSeconds: TimeInterval + public var awaitTorReady: @Sendable () async -> Bool + public var makeFetchData: @MainActor @Sendable () -> (@Sendable (URLRequest) async throws -> Data) + public var readData: (URL) -> Data? + public var writeData: (Data, URL) throws -> Void + public var cacheURL: () -> URL? + public var bundledCSVURLs: () -> [URL] + public var currentDirectoryPath: () -> String? + public var retrySleep: (TimeInterval) async -> Void + public var torReadyNotificationName: Notification.Name? + public var activeNotificationName: Notification.Name? + public var autoStart: Bool -private extension GeoRelayDirectoryDependencies { - @MainActor - static func live() -> Self { -#if os(iOS) - let activeNotificationName: Notification.Name? = UIApplication.didBecomeActiveNotification -#elseif os(macOS) - let activeNotificationName: Notification.Name? = NSApplication.didBecomeActiveNotification -#else - let activeNotificationName: Notification.Name? = nil -#endif - - return Self( - userDefaults: .standard, - notificationCenter: .default, - now: Date.init, - remoteURL: URL(string: "https://raw.githubusercontent.com/permissionlesstech/georelays/refs/heads/main/nostr_relays.csv")!, - fetchInterval: TransportConfig.geoRelayFetchIntervalSeconds, - refreshCheckInterval: TransportConfig.geoRelayRefreshCheckIntervalSeconds, - retryInitialSeconds: TransportConfig.geoRelayRetryInitialSeconds, - retryMaxSeconds: TransportConfig.geoRelayRetryMaxSeconds, - awaitTorReady: { await TorManager.shared.awaitReady() }, - makeFetchData: { - let session = TorURLSession.shared.session - return { request in - let (data, _) = try await session.data(for: request) - return data - } - }, - readData: { try? Data(contentsOf: $0) }, - writeData: { data, url in - try data.write(to: url, options: .atomic) - }, - cacheURL: { - do { - let base = try FileManager.default.url( - for: .applicationSupportDirectory, - in: .userDomainMask, - appropriateFor: nil, - create: true - ) - let dir = base.appendingPathComponent("bitchat", isDirectory: true) - try? FileManager.default.createDirectory(at: dir, withIntermediateDirectories: true) - return dir.appendingPathComponent("georelays_cache.csv") - } catch { - return nil - } - }, - bundledCSVURLs: { - [ - Bundle.main.url(forResource: "nostr_relays", withExtension: "csv"), - Bundle.main.url(forResource: "online_relays_gps", withExtension: "csv"), - Bundle.main.url(forResource: "online_relays_gps", withExtension: "csv", subdirectory: "relays") - ].compactMap { $0 } - }, - currentDirectoryPath: { FileManager.default.currentDirectoryPath }, - retrySleep: { delay in - let nanoseconds = UInt64(delay * 1_000_000_000) - try? await Task.sleep(nanoseconds: nanoseconds) - }, - activeNotificationName: activeNotificationName, - autoStart: true - ) + public init( + userDefaults: UserDefaults, + notificationCenter: NotificationCenter, + now: @escaping () -> Date, + remoteURL: URL, + fetchInterval: TimeInterval, + refreshCheckInterval: TimeInterval, + retryInitialSeconds: TimeInterval, + retryMaxSeconds: TimeInterval, + awaitTorReady: @Sendable @escaping () async -> Bool, + makeFetchData: @MainActor @Sendable @escaping () -> (@Sendable (URLRequest) async throws -> Data), + readData: @escaping (URL) -> Data?, + writeData: @escaping (Data, URL) throws -> Void, + cacheURL: @escaping () -> URL?, + bundledCSVURLs: @escaping () -> [URL], + currentDirectoryPath: @escaping () -> String?, + retrySleep: @escaping (TimeInterval) async -> Void, + torReadyNotificationName: Notification.Name?, + activeNotificationName: Notification.Name?, + autoStart: Bool + ) { + self.userDefaults = userDefaults + self.notificationCenter = notificationCenter + self.now = now + self.remoteURL = remoteURL + self.fetchInterval = fetchInterval + self.refreshCheckInterval = refreshCheckInterval + self.retryInitialSeconds = retryInitialSeconds + self.retryMaxSeconds = retryMaxSeconds + self.awaitTorReady = awaitTorReady + self.makeFetchData = makeFetchData + self.readData = readData + self.writeData = writeData + self.cacheURL = cacheURL + self.bundledCSVURLs = bundledCSVURLs + self.currentDirectoryPath = currentDirectoryPath + self.retrySleep = retrySleep + self.torReadyNotificationName = torReadyNotificationName + self.activeNotificationName = activeNotificationName + self.autoStart = autoStart } } @MainActor -final class GeoRelayDirectory { +public final class GeoRelayDirectory { private final class CleanupState { let notificationCenter: NotificationCenter var observers: [NSObjectProtocol] = [] @@ -113,10 +84,16 @@ final class GeoRelayDirectory { } } - struct Entry: Hashable, Sendable { - let host: String - let lat: Double - let lon: Double + public struct Entry: Hashable, Sendable { + public let host: String + public let lat: Double + public let lon: Double + + public init(host: String, lat: Double, lon: Double) { + self.host = host + self.lat = lat + self.lon = lon + } } private enum DetachedFetchOutcome: Sendable { @@ -126,9 +103,13 @@ final class GeoRelayDirectory { case network(String) } - static let shared = GeoRelayDirectory() + nonisolated(unsafe) public static var shared: GeoRelayDirectory! - private(set) var entries: [Entry] = [] + public static func setupShared(dependencies: GeoRelayDirectoryDependencies) { + shared = GeoRelayDirectory(dependencies: dependencies) + } + + private(set) public var entries: [Entry] = [] private let lastFetchKey = "georelay.lastFetchAt" private let dependencies: GeoRelayDirectoryDependencies private let cleanupState: CleanupState @@ -136,18 +117,7 @@ final class GeoRelayDirectory { private var retryAttempt: Int = 0 private var isFetching: Bool = false - private init() { - self.dependencies = .live() - self.cleanupState = CleanupState(notificationCenter: dependencies.notificationCenter) - entries = loadLocalEntries() - if dependencies.autoStart { - registerObservers() - startRefreshTimer() - prefetchIfNeeded() - } - } - - internal init(dependencies: GeoRelayDirectoryDependencies) { + public init(dependencies: GeoRelayDirectoryDependencies) { self.dependencies = dependencies self.cleanupState = CleanupState(notificationCenter: dependencies.notificationCenter) entries = loadLocalEntries() @@ -159,13 +129,13 @@ final class GeoRelayDirectory { } /// Returns up to `count` relay URLs (wss://) closest to the geohash center. - func closestRelays(toGeohash geohash: String, count: Int = 5) -> [String] { - let center = Geohash.decodeCenter(geohash) + public func closestRelays(toGeohash geohash: String, count: Int = 5) -> [String] { + let center = decodeGeohashCenter(geohash) return closestRelays(toLat: center.lat, lon: center.lon, count: count) } /// Returns up to `count` relay URLs (wss://) closest to the given coordinate. - func closestRelays(toLat lat: Double, lon: Double, count: Int = 5) -> [String] { + public func closestRelays(toLat lat: Double, lon: Double, count: Int = 5) -> [String] { guard !entries.isEmpty, count > 0 else { return [] } if entries.count <= count { @@ -195,7 +165,7 @@ final class GeoRelayDirectory { } // MARK: - Remote Fetch - func prefetchIfNeeded(force: Bool = false) { + public func prefetchIfNeeded(force: Bool = false) { guard !isFetching else { return } let now = dependencies.now() @@ -205,7 +175,6 @@ final class GeoRelayDirectory { guard now.timeIntervalSince(last) >= dependencies.fetchInterval else { return } } else if last != .distantPast, now.timeIntervalSince(last) < dependencies.retryInitialSeconds { - // Skip forced fetches if we just refreshed moments ago. return } @@ -343,7 +312,6 @@ final class GeoRelayDirectory { // MARK: - Loading private func loadLocalEntries() -> [Entry] { - // Prefer cached file if present if let cache = dependencies.cacheURL(), let data = dependencies.readData(cache), let text = String(data: data, encoding: .utf8) { @@ -351,7 +319,6 @@ final class GeoRelayDirectory { if !arr.isEmpty { return arr } } - // Try bundled resource(s) let bundleCandidates = dependencies.bundledCSVURLs() for url in bundleCandidates { @@ -362,7 +329,6 @@ final class GeoRelayDirectory { } } - // Try filesystem path (development/test) if let cwd = dependencies.currentDirectoryPath(), let data = dependencies.readData(URL(fileURLWithPath: cwd).appendingPathComponent("relays/online_relays_gps.csv")), let text = String(data: data, encoding: .utf8) { @@ -373,7 +339,7 @@ final class GeoRelayDirectory { return [] } - nonisolated static func parseCSV(_ text: String) -> [Entry] { + nonisolated public static func parseCSV(_ text: String) -> [Entry] { var result: Set = [] let lines = text.split(whereSeparator: { $0.isNewline }) for (idx, raw) in lines.enumerated() { @@ -397,17 +363,19 @@ final class GeoRelayDirectory { private func registerObservers() { let center = dependencies.notificationCenter - let torReady = center.addObserver( - forName: .TorDidBecomeReady, - object: nil, - queue: .main - ) { [weak self] _ in - guard let self else { return } - Task { @MainActor in - self.prefetchIfNeeded(force: true) + if let torReadyName = dependencies.torReadyNotificationName { + let torReady = center.addObserver( + forName: torReadyName, + object: nil, + queue: .main + ) { [weak self] _ in + guard let self else { return } + Task { @MainActor in + self.prefetchIfNeeded(force: true) + } } + cleanupState.observers.append(torReady) } - cleanupState.observers.append(torReady) if let activeNotificationName = dependencies.activeNotificationName { let didBecomeActive = center.addObserver( @@ -439,17 +407,49 @@ final class GeoRelayDirectory { RunLoop.main.add(timer, forMode: .common) } - var debugRetryAttempt: Int { retryAttempt } - var debugHasRetryTask: Bool { cleanupState.retryTask != nil } - var debugObserverCount: Int { cleanupState.observers.count } + public var debugRetryAttempt: Int { retryAttempt } + public var debugHasRetryTask: Bool { cleanupState.retryTask != nil } + public var debugObserverCount: Int { cleanupState.observers.count } } // MARK: - Distance private func haversineKm(_ lat1: Double, _ lon1: Double, _ lat2: Double, _ lon2: Double) -> Double { - let r = 6371.0 // Earth radius in km + let r = 6371.0 let dLat = (lat2 - lat1) * .pi / 180 let dLon = (lon2 - lon1) * .pi / 180 let a = sin(dLat/2) * sin(dLat/2) + cos(lat1 * .pi/180) * cos(lat2 * .pi/180) * sin(dLon/2) * sin(dLon/2) let c = 2 * atan2(sqrt(a), sqrt(1 - a)) return r * c } + +// MARK: - Geohash decode (inline to avoid external dependency) + +private let geohashBase32Map: [Character: Int] = { + let chars = Array("0123456789bcdefghjkmnpqrstuvwxyz") + var map: [Character: Int] = [:] + for (i, c) in chars.enumerated() { map[c] = i } + return map +}() + +private func decodeGeohashCenter(_ geohash: String) -> (lat: Double, lon: Double) { + var latInterval: (Double, Double) = (-90.0, 90.0) + var lonInterval: (Double, Double) = (-180.0, 180.0) + + var isEven = true + for ch in geohash.lowercased() { + guard let cd = geohashBase32Map[ch] else { continue } + for mask in [16, 8, 4, 2, 1] { + if isEven { + let mid = (lonInterval.0 + lonInterval.1) / 2 + if (cd & mask) != 0 { lonInterval.0 = mid } else { lonInterval.1 = mid } + } else { + let mid = (latInterval.0 + latInterval.1) / 2 + if (cd & mask) != 0 { latInterval.0 = mid } else { latInterval.1 = mid } + } + isEven.toggle() + } + } + let lat = (latInterval.0 + latInterval.1) / 2 + let lon = (lonInterval.0 + lonInterval.1) / 2 + return (lat, lon) +} diff --git a/bitchat/Nostr/NostrIdentity.swift b/localPackages/Nostr/Sources/Nostr/NostrIdentity.swift similarity index 63% rename from bitchat/Nostr/NostrIdentity.swift rename to localPackages/Nostr/Sources/Nostr/NostrIdentity.swift index 72fb7bbf..73cf387b 100644 --- a/bitchat/Nostr/NostrIdentity.swift +++ b/localPackages/Nostr/Sources/Nostr/NostrIdentity.swift @@ -2,59 +2,56 @@ import Foundation import P256K /// Manages Nostr identity (secp256k1 keypair) for NIP-17 private messaging -struct NostrIdentity: Codable { - let privateKey: Data - let publicKey: Data - let npub: String // Bech32-encoded public key - let createdAt: Date - - /// Memberwise initializer - init(privateKey: Data, publicKey: Data, npub: String, createdAt: Date) { +public struct NostrIdentity: Codable, Sendable { + public let privateKey: Data + public let publicKey: Data + public let npub: String // Bech32-encoded public key + public let createdAt: Date + + public init(privateKey: Data, publicKey: Data, npub: String, createdAt: Date) { self.privateKey = privateKey self.publicKey = publicKey self.npub = npub self.createdAt = createdAt } - + /// Generate a new Nostr identity - static func generate() throws -> NostrIdentity { - // Generate Schnorr key for Nostr + public static func generate() throws -> NostrIdentity { let schnorrKey = try P256K.Schnorr.PrivateKey() let xOnlyPubkey = Data(schnorrKey.xonly.bytes) let npub = try Bech32.encode(hrp: "npub", data: xOnlyPubkey) - + return NostrIdentity( privateKey: schnorrKey.dataRepresentation, - publicKey: xOnlyPubkey, // Store x-only public key + publicKey: xOnlyPubkey, npub: npub, createdAt: Date() ) } - + /// Initialize from existing private key data - init(privateKeyData: Data) throws { + public init(privateKeyData: Data) throws { let schnorrKey = try P256K.Schnorr.PrivateKey(dataRepresentation: privateKeyData) let xOnlyPubkey = Data(schnorrKey.xonly.bytes) - + self.privateKey = privateKeyData self.publicKey = xOnlyPubkey self.npub = try Bech32.encode(hrp: "npub", data: xOnlyPubkey) self.createdAt = Date() } - + /// Get signing key for event signatures - func signingKey() throws -> P256K.Signing.PrivateKey { + public func signingKey() throws -> P256K.Signing.PrivateKey { try P256K.Signing.PrivateKey(dataRepresentation: privateKey) } - + /// Get Schnorr signing key for Nostr event signatures - func schnorrSigningKey() throws -> P256K.Schnorr.PrivateKey { + public func schnorrSigningKey() throws -> P256K.Schnorr.PrivateKey { try P256K.Schnorr.PrivateKey(dataRepresentation: privateKey) } - + /// Get hex-encoded public key (for Nostr events) - var publicKeyHex: String { - // Public key is already stored as x-only (32 bytes) - return publicKey.hexEncodedString() + public var publicKeyHex: String { + publicKey.hexEncodedString() } } diff --git a/bitchat/Nostr/NostrIdentityBridge.swift b/localPackages/Nostr/Sources/Nostr/NostrIdentityBridge.swift similarity index 70% rename from bitchat/Nostr/NostrIdentityBridge.swift rename to localPackages/Nostr/Sources/Nostr/NostrIdentityBridge.swift index 01d929e0..05537af9 100644 --- a/bitchat/Nostr/NostrIdentityBridge.swift +++ b/localPackages/Nostr/Sources/Nostr/NostrIdentityBridge.swift @@ -1,51 +1,54 @@ import Foundation import CryptoKit +/// Minimal keychain access required by NostrIdentityBridge. +public protocol NostrKeychainStoring: Sendable { + func save(key: String, data: Data, service: String, accessible: CFString?) + func load(key: String, service: String) -> Data? +} + /// Bridge between Noise and Nostr identities -final class NostrIdentityBridge { +public final class NostrIdentityBridge { private let keychainService = "chat.bitchat.nostr" private let currentIdentityKey = "nostr-current-identity" private let deviceSeedKey = "nostr-device-seed" - // In-memory cache to avoid transient keychain access issues - private var deviceSeedCache: Data? + private let deviceSeedCache: NSLock = NSLock() + private var _deviceSeedCacheValue: Data? // Cache derived identities to avoid repeated crypto during view rendering - private var derivedIdentityCache: [String: NostrIdentity] = [:] + private var _derivedIdentityCache: [String: NostrIdentity] = [:] private let cacheLock = NSLock() - private let keychain: KeychainManagerProtocol + private let keychain: any NostrKeychainStoring - init(keychain: KeychainManagerProtocol = KeychainManager()) { + public init(keychain: any NostrKeychainStoring) { self.keychain = keychain } - + /// Get or create the current Nostr identity - func getCurrentNostrIdentity() throws -> NostrIdentity? { - // Check if we already have a Nostr identity + public func getCurrentNostrIdentity() throws -> NostrIdentity? { if let existingData = keychain.load(key: currentIdentityKey, service: keychainService), let identity = try? JSONDecoder().decode(NostrIdentity.self, from: existingData) { return identity } - - // Generate new Nostr identity + let nostrIdentity = try NostrIdentity.generate() - - // Store it + let data = try JSONEncoder().encode(nostrIdentity) keychain.save(key: currentIdentityKey, data: data, service: keychainService, accessible: nil) - + return nostrIdentity } - + /// Associate a Nostr identity with a Noise public key (for favorites) - func associateNostrIdentity(_ nostrPubkey: String, with noisePublicKey: Data) { + public func associateNostrIdentity(_ nostrPubkey: String, with noisePublicKey: Data) { let key = "nostr-noise-\(noisePublicKey.base64EncodedString())" if let data = nostrPubkey.data(using: .utf8) { keychain.save(key: key, data: data, service: keychainService, accessible: nil) } } - + /// Get Nostr public key associated with a Noise public key - func getNostrPublicKey(for noisePublicKey: Data) -> String? { + public func getNostrPublicKey(for noisePublicKey: Data) -> String? { let key = "nostr-noise-\(noisePublicKey.base64EncodedString())" guard let data = keychain.load(key: key, service: keychainService), let pubkey = String(data: data, encoding: .utf8) else { @@ -53,9 +56,9 @@ final class NostrIdentityBridge { } return pubkey } - + /// Clear all Nostr identity associations and current identity - func clearAllAssociations() { + public func clearAllAssociations() { let query: [String: Any] = [ kSecClass as String: kSecClassGenericPassword, kSecAttrService as String: keychainService, @@ -76,42 +79,45 @@ final class NostrIdentityBridge { } SecItemDelete(deleteQuery as CFDictionary) } - } else if status == errSecItemNotFound { - // nothing persisted; no action needed } - deviceSeedCache = nil + deviceSeedCache.lock() + _deviceSeedCacheValue = nil + deviceSeedCache.unlock() } // MARK: - Per-Geohash Identities (Location Channels) - /// Returns a stable device seed used to derive unlinkable per-geohash identities. - /// Stored only on device keychain. private func getOrCreateDeviceSeed() -> Data { - if let cached = deviceSeedCache { return cached } + deviceSeedCache.lock() + if let cached = _deviceSeedCacheValue { + deviceSeedCache.unlock() + return cached + } + deviceSeedCache.unlock() + if let existing = keychain.load(key: deviceSeedKey, service: keychainService) { - // Migrate to AfterFirstUnlockThisDeviceOnly for stability during lock keychain.save(key: deviceSeedKey, data: existing, service: keychainService, accessible: kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly) - deviceSeedCache = existing + deviceSeedCache.lock() + _deviceSeedCacheValue = existing + deviceSeedCache.unlock() return existing } var seed = Data(count: 32) _ = seed.withUnsafeMutableBytes { ptr in SecRandomCopyBytes(kSecRandomDefault, 32, ptr.baseAddress!) } - // Ensure availability after first unlock to prevent unintended rotation when locked keychain.save(key: deviceSeedKey, data: seed, service: keychainService, accessible: kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly) - deviceSeedCache = seed + deviceSeedCache.lock() + _deviceSeedCacheValue = seed + deviceSeedCache.unlock() return seed } /// Derive a deterministic, unlinkable Nostr identity for a given geohash. - /// Uses HMAC-SHA256(deviceSeed, geohash) as private key material, with fallback rehashing - /// if the candidate is not a valid secp256k1 private key. - func deriveIdentity(forGeohash geohash: String) throws -> NostrIdentity { - // Check cache first to avoid repeated crypto + keychain I/O during view rendering + public func deriveIdentity(forGeohash geohash: String) throws -> NostrIdentity { cacheLock.lock() - if let cached = derivedIdentityCache[geohash] { + if let cached = _derivedIdentityCache[geohash] { cacheLock.unlock() return cached } @@ -132,24 +138,21 @@ final class NostrIdentityBridge { return Data(code) } - // Try a few iterations to ensure a valid key can be formed for i in 0..<10 { let keyData = candidateKey(iteration: UInt32(i)) if let identity = try? NostrIdentity(privateKeyData: keyData) { - // Cache the result cacheLock.lock() - derivedIdentityCache[geohash] = identity + _derivedIdentityCache[geohash] = identity cacheLock.unlock() return identity } } - // As a final fallback, hash the seed+msg and try again + let fallback = (seed + msg).sha256Hash() let identity = try NostrIdentity(privateKeyData: fallback) - // Cache the result cacheLock.lock() - derivedIdentityCache[geohash] = identity + _derivedIdentityCache[geohash] = identity cacheLock.unlock() return identity diff --git a/bitchat/Nostr/NostrProtocol.swift b/localPackages/Nostr/Sources/Nostr/NostrProtocol.swift similarity index 71% rename from bitchat/Nostr/NostrProtocol.swift rename to localPackages/Nostr/Sources/Nostr/NostrProtocol.swift index 4a05eaf7..69087578 100644 --- a/bitchat/Nostr/NostrProtocol.swift +++ b/localPackages/Nostr/Sources/Nostr/NostrProtocol.swift @@ -1,17 +1,15 @@ +import BitFoundation import BitLogger import Foundation import CryptoKit import P256K import Security -// Note: This file depends on Data extension from BinaryEncodingUtils.swift -// Make sure BinaryEncodingUtils.swift is included in the target - /// NIP-17 Protocol Implementation for Private Direct Messages -struct NostrProtocol { - +public struct NostrProtocol { + /// Nostr event kinds - enum EventKind: Int { + public enum EventKind: Int, Sendable { case metadata = 0 case textNote = 1 case dm = 14 // NIP-17 DM rumor kind @@ -20,88 +18,71 @@ struct NostrProtocol { case ephemeralEvent = 20000 case geohashPresence = 20001 } - + /// Create a NIP-17 private message - static func createPrivateMessage( + public static func createPrivateMessage( content: String, recipientPubkey: String, senderIdentity: NostrIdentity ) throws -> NostrEvent { - - // Creating private message - - // 1. Create the rumor (unsigned event) let rumor = NostrEvent( pubkey: senderIdentity.publicKeyHex, createdAt: Date(), - kind: .dm, // NIP-17: DM rumor kind 14 + kind: .dm, tags: [], content: content ) - - // 2. Create ephemeral key for this message + let ephemeralKey = try P256K.Schnorr.PrivateKey() - // Created ephemeral key for seal - - // 3. Seal the rumor (encrypt to recipient) + let sealedEvent = try createSeal( rumor: rumor, recipientPubkey: recipientPubkey, senderKey: ephemeralKey ) - - // 4. Gift wrap the sealed event (encrypt to recipient again) + let giftWrap = try createGiftWrap( seal: sealedEvent, recipientPubkey: recipientPubkey, senderKey: ephemeralKey ) - - // Created gift wrap - + return giftWrap } - + /// Decrypt a received NIP-17 message /// Returns the content, sender pubkey, and the actual message timestamp (not the randomized gift wrap timestamp) - static func decryptPrivateMessage( + public static func decryptPrivateMessage( giftWrap: NostrEvent, recipientIdentity: NostrIdentity ) throws -> (content: String, senderPubkey: String, timestamp: Int) { - - // Starting decryption - - // 1. Unwrap the gift wrap let seal: NostrEvent do { seal = try unwrapGiftWrap( giftWrap: giftWrap, recipientKey: recipientIdentity.schnorrSigningKey() ) - // Successfully unwrapped gift wrap } catch { SecureLogger.error("❌ Failed to unwrap gift wrap: \(error)", category: .session) throw error } - - // 2. Open the seal + let rumor: NostrEvent do { rumor = try openSeal( seal: seal, recipientKey: recipientIdentity.schnorrSigningKey() ) - // Successfully opened seal } catch { SecureLogger.error("❌ Failed to open seal: \(error)", category: .session) throw error } - + return (content: rumor.content, senderPubkey: rumor.pubkey, timestamp: rumor.created_at) } /// Create a geohash-scoped ephemeral public message (kind 20000) - static func createEphemeralGeohashEvent( + public static func createEphemeralGeohashEvent( content: String, geohash: String, senderIdentity: NostrIdentity, @@ -128,7 +109,7 @@ struct NostrProtocol { /// Create a geohash presence heartbeat (kind 20001) /// Must contain empty content and NO nickname tag - static func createGeohashPresenceEvent( + public static func createGeohashPresenceEvent( geohash: String, senderIdentity: NostrIdentity ) throws -> NostrEvent { @@ -145,7 +126,7 @@ struct NostrProtocol { } /// Create a persistent location note (kind 1: text note) tagged to a street-level geohash. - static func createGeohashTextNote( + public static func createGeohashTextNote( content: String, geohash: String, senderIdentity: NostrIdentity, @@ -165,22 +146,21 @@ struct NostrProtocol { let schnorrKey = try senderIdentity.schnorrSigningKey() return try event.sign(with: schnorrKey) } - + // MARK: - Private Methods - + private static func createSeal( rumor: NostrEvent, recipientPubkey: String, senderKey: P256K.Schnorr.PrivateKey ) throws -> NostrEvent { - let rumorJSON = try rumor.jsonString() let encrypted = try encrypt( plaintext: rumorJSON, recipientPubkey: recipientPubkey, senderKey: senderKey ) - + let seal = NostrEvent( pubkey: Data(senderKey.xonly.bytes).hexEncodedString(), createdAt: randomizedTimestamp(), @@ -188,130 +168,108 @@ struct NostrProtocol { tags: [], content: encrypted ) - - // Sign the seal with the sender's Schnorr private key + return try seal.sign(with: senderKey) } - + private static func createGiftWrap( seal: NostrEvent, recipientPubkey: String, - senderKey: P256K.Schnorr.PrivateKey // This is the ephemeral key used for the seal + senderKey: P256K.Schnorr.PrivateKey ) throws -> NostrEvent { - let sealJSON = try seal.jsonString() - - // Create new ephemeral key for gift wrap let wrapKey = try P256K.Schnorr.PrivateKey() - // Creating gift wrap with ephemeral key - - // Encrypt the seal with the new ephemeral key (not the seal's key) + let encrypted = try encrypt( plaintext: sealJSON, recipientPubkey: recipientPubkey, - senderKey: wrapKey // Use the gift wrap ephemeral key + senderKey: wrapKey ) - + let giftWrap = NostrEvent( pubkey: Data(wrapKey.xonly.bytes).hexEncodedString(), createdAt: randomizedTimestamp(), kind: .giftWrap, - tags: [["p", recipientPubkey]], // Tag recipient + tags: [["p", recipientPubkey]], content: encrypted ) - - // Sign the gift wrap with the wrap Schnorr private key + return try giftWrap.sign(with: wrapKey) } - + private static func unwrapGiftWrap( giftWrap: NostrEvent, recipientKey: P256K.Schnorr.PrivateKey ) throws -> NostrEvent { - - // Unwrapping gift wrap - let decrypted = try decrypt( ciphertext: giftWrap.content, senderPubkey: giftWrap.pubkey, recipientKey: recipientKey ) - + guard let data = decrypted.data(using: .utf8), let sealDict = try JSONSerialization.jsonObject(with: data) as? [String: Any] else { throw NostrError.invalidEvent } - - let seal = try NostrEvent(from: sealDict) - // Unwrapped seal - - return seal + + return try NostrEvent(from: sealDict) } - + private static func openSeal( seal: NostrEvent, recipientKey: P256K.Schnorr.PrivateKey ) throws -> NostrEvent { - let decrypted = try decrypt( ciphertext: seal.content, senderPubkey: seal.pubkey, recipientKey: recipientKey ) - + guard let data = decrypted.data(using: .utf8), let rumorDict = try JSONSerialization.jsonObject(with: data) as? [String: Any] else { throw NostrError.invalidEvent } - + return try NostrEvent(from: rumorDict) } - + // MARK: - Encryption (NIP-44 v2) - + private static func encrypt( plaintext: String, recipientPubkey: String, senderKey: P256K.Schnorr.PrivateKey ) throws -> String { - guard let recipientPubkeyData = Data(hexString: recipientPubkey) else { throw NostrError.invalidPublicKey } - - // Encrypting message (NIP-44 v2: XChaCha20-Poly1305, versioned) - - // Derive shared secret + let sharedSecret = try deriveSharedSecret( privateKey: senderKey, publicKey: recipientPubkeyData ) - // Derive NIP-44 v2 symmetric key (HKDF-SHA256 with label in info) let key = try deriveNIP44V2Key(from: sharedSecret) - - // 24-byte random nonce for XChaCha20-Poly1305 + var nonce24 = Data(count: 24) _ = nonce24.withUnsafeMutableBytes { ptr in SecRandomCopyBytes(kSecRandomDefault, 24, ptr.baseAddress!) } - + let pt = Data(plaintext.utf8) let sealed = try XChaCha20Poly1305Compat.seal(plaintext: pt, key: key, nonce24: nonce24) - - // v2: base64url(nonce24 || ciphertext || tag) + var combined = Data() combined.append(nonce24) combined.append(sealed.ciphertext) combined.append(sealed.tag) return "v2:" + base64URLEncode(combined) } - + private static func decrypt( ciphertext: String, senderPubkey: String, recipientKey: P256K.Schnorr.PrivateKey ) throws -> String { - // Expect NIP-44 v2 format guard ciphertext.hasPrefix("v2:") else { throw NostrError.invalidCiphertext } let encoded = String(ciphertext.dropFirst(3)) guard let data = base64URLDecode(encoded), @@ -325,7 +283,6 @@ struct NostrProtocol { let tag = rest.suffix(16) let ct = rest.dropLast(16) - // Try decryption with even-Y then odd-Y when sender pubkey is x-only func attemptDecrypt(using pubKeyData: Data) throws -> Data { let ss = try deriveSharedSecret(privateKey: recipientKey, publicKey: pubKeyData) let key = try deriveNIP44V2Key(from: ss) @@ -337,7 +294,6 @@ struct NostrProtocol { ) } - // If 32 bytes (x-only) try both parities, otherwise single try if senderPubkeyData.count == 32 { let even = Data([0x02]) + senderPubkeyData if let pt = try? attemptDecrypt(using: even) { @@ -351,32 +307,23 @@ struct NostrProtocol { return String(data: pt, encoding: .utf8) ?? "" } } - + private static func deriveSharedSecret( privateKey: P256K.Schnorr.PrivateKey, publicKey: Data ) throws -> Data { - // Deriving shared secret - - // Convert Schnorr private key to KeyAgreement private key let keyAgreementPrivateKey = try P256K.KeyAgreement.PrivateKey( dataRepresentation: privateKey.dataRepresentation ) - - // Create KeyAgreement public key from the public key data - // For ECDH, we need the full 33-byte compressed public key (with 0x02 or 0x03 prefix) + var fullPublicKey = Data() - if publicKey.count == 32 { // X-only key, need to add prefix - // For x-only keys in Nostr/Bitcoin, we need to try both possible Y coordinates - // First try with even Y (0x02 prefix) + if publicKey.count == 32 { fullPublicKey.append(0x02) fullPublicKey.append(publicKey) - // Trying with even Y coordinate } else { fullPublicKey = publicKey } - - // Try to create public key, if it fails with even Y, try odd Y + let keyAgreementPublicKey: P256K.KeyAgreement.PublicKey do { keyAgreementPublicKey = try P256K.KeyAgreement.PublicKey( @@ -385,8 +332,6 @@ struct NostrProtocol { ) } catch { if publicKey.count == 32 { - // Try with odd Y (0x03 prefix) - // Even Y failed, trying odd Y fullPublicKey = Data() fullPublicKey.append(0x03) fullPublicKey.append(publicKey) @@ -398,85 +343,32 @@ struct NostrProtocol { throw error } } - - // Perform ECDH + let sharedSecret = try keyAgreementPrivateKey.sharedSecretFromKeyAgreement( with: keyAgreementPublicKey, format: .compressed ) - - // Convert SharedSecret to Data - let sharedSecretData = sharedSecret.withUnsafeBytes { Data($0) } - // ECDH shared secret derived - - // Return raw ECDH shared secret; HKDF is applied by deriveNIP44V2Key - return sharedSecretData + + return sharedSecret.withUnsafeBytes { Data($0) } } - - // Direct version that doesn't try to add prefixes - private static func deriveSharedSecretDirect( - privateKey: P256K.Schnorr.PrivateKey, - publicKey: Data - ) throws -> Data { - // Direct shared secret calculation - - // Convert Schnorr private key to KeyAgreement private key - let keyAgreementPrivateKey = try P256K.KeyAgreement.PrivateKey( - dataRepresentation: privateKey.dataRepresentation - ) - - // Use the public key as-is (should already have prefix) - let keyAgreementPublicKey = try P256K.KeyAgreement.PublicKey( - dataRepresentation: publicKey, - format: .compressed - ) - - // Perform ECDH - let sharedSecret = try keyAgreementPrivateKey.sharedSecretFromKeyAgreement( - with: keyAgreementPublicKey, - format: .compressed - ) - - // Convert SharedSecret to Data - let sharedSecretData = sharedSecret.withUnsafeBytes { Data($0) } - - // Return raw ECDH shared secret; HKDF is applied by deriveNIP44V2Key - return sharedSecretData - } - + private static func randomizedTimestamp() -> Date { - // Add random offset to current time for privacy - // This prevents timing correlation attacks while the actual message timestamp - // is preserved in the encrypted rumor - let offset = TimeInterval.random(in: -900...900) // +/- 15 minutes - let now = Date() - let randomized = now.addingTimeInterval(offset) - - // Log with explicit UTC and local time for debugging - let formatter = DateFormatter() - // - formatter.dateFormat = "yyyy-MM-dd HH:mm:ss" - formatter.timeZone = TimeZone(abbreviation: "UTC") - - formatter.timeZone = TimeZone.current - - // Timestamp randomized for privacy - - return randomized + let offset = TimeInterval.random(in: -900...900) + return Date().addingTimeInterval(offset) } } /// Nostr Event structure -struct NostrEvent: Codable { - var id: String - let pubkey: String - let created_at: Int - let kind: Int - let tags: [[String]] - let content: String - var sig: String? - - init( +public struct NostrEvent: Codable, Sendable { + public var id: String + public let pubkey: String + public let created_at: Int + public let kind: Int + public let tags: [[String]] + public let content: String + public var sig: String? + + public init( pubkey: String, createdAt: Date, kind: NostrProtocol.EventKind, @@ -489,10 +381,10 @@ struct NostrEvent: Codable { self.tags = tags self.content = content self.sig = nil - self.id = "" // Will be set during signing + self.id = "" } - - init(from dict: [String: Any]) throws { + + public init(from dict: [String: Any]) throws { guard let pubkey = dict["pubkey"] as? String, let createdAt = dict["created_at"] as? Int, let kind = dict["kind"] as? Int, @@ -500,7 +392,7 @@ struct NostrEvent: Codable { let content = dict["content"] as? String else { throw NostrError.invalidEvent } - + self.id = dict["id"] as? String ?? "" self.pubkey = pubkey self.created_at = createdAt @@ -509,20 +401,19 @@ struct NostrEvent: Codable { self.content = content self.sig = dict["sig"] as? String } - - func sign(with key: P256K.Schnorr.PrivateKey) throws -> NostrEvent { + + public func sign(with key: P256K.Schnorr.PrivateKey) throws -> NostrEvent { let (eventId, eventIdHash) = try calculateEventId() - - // Sign with Schnorr (BIP-340) + var messageBytes = [UInt8](eventIdHash) var auxRand = [UInt8](repeating: 0, count: 32) _ = auxRand.withUnsafeMutableBytes { ptr in SecRandomCopyBytes(kSecRandomDefault, 32, ptr.baseAddress!) } let schnorrSignature = try key.signature(message: &messageBytes, auxiliaryRand: &auxRand) - + let signatureHex = schnorrSignature.dataRepresentation.hexEncodedString() - + var signed = self signed.id = eventId signed.sig = signatureHex @@ -531,7 +422,7 @@ struct NostrEvent: Codable { /// Validate that the event ID and Schnorr signature match the content and pubkey. /// Returns false when the signature is missing, malformed, or does not verify. - func isValidSignature() -> Bool { + public func isValidSignature() -> Bool { guard let sig = sig, let sigData = Data(hexString: sig), let pubData = Data(hexString: pubkey), @@ -548,7 +439,7 @@ struct NostrEvent: Codable { let xonly = P256K.Schnorr.XonlyKey(dataRepresentation: pubData) return xonly.isValid(signature, for: &messageBytes) } - + private func calculateEventId() throws -> (String, Data) { let serialized = [ 0, @@ -558,12 +449,12 @@ struct NostrEvent: Codable { tags, content ] as [Any] - + let data = try JSONSerialization.data(withJSONObject: serialized, options: [.withoutEscapingSlashes]) return (data.sha256Fingerprint(), data.sha256Hash()) } - - func jsonString() throws -> String { + + public func jsonString() throws -> String { let encoder = JSONEncoder() encoder.outputFormatting = [.withoutEscapingSlashes] let data = try encoder.encode(self) @@ -571,7 +462,7 @@ struct NostrEvent: Codable { } } -enum NostrError: Error { +public enum NostrError: Error, Sendable { case invalidPublicKey case invalidPrivateKey case invalidEvent diff --git a/bitchat/Nostr/NostrRelayManager.swift b/localPackages/Nostr/Sources/Nostr/NostrRelayManager.swift similarity index 73% rename from bitchat/Nostr/NostrRelayManager.swift rename to localPackages/Nostr/Sources/Nostr/NostrRelayManager.swift index ebfeadaa..869d2fa4 100644 --- a/bitchat/Nostr/NostrRelayManager.swift +++ b/localPackages/Nostr/Sources/Nostr/NostrRelayManager.swift @@ -2,9 +2,8 @@ import BitLogger import Foundation import Network import Combine -import Tor -protocol NostrRelayConnectionProtocol: AnyObject { +public protocol NostrRelayConnectionProtocol: AnyObject { func resume() func cancel(with closeCode: URLSessionWebSocketTask.CloseCode, reason: Data?) func send(_ message: URLSessionWebSocketTask.Message, completionHandler: @escaping (Error?) -> Void) @@ -12,7 +11,7 @@ protocol NostrRelayConnectionProtocol: AnyObject { func sendPing(pongReceiveHandler: @escaping (Error?) -> Void) } -protocol NostrRelaySessionProtocol { +public protocol NostrRelaySessionProtocol { func webSocketTask(with url: URL) -> NostrRelayConnectionProtocol } @@ -52,75 +51,91 @@ private struct URLSessionAdapter: NostrRelaySessionProtocol { } } -struct NostrRelayManagerDependencies { - var activationAllowed: () -> Bool - var userTorEnabled: () -> Bool - var hasMutualFavorites: () -> Bool - var hasLocationPermission: () -> Bool - var mutualFavoritesPublisher: AnyPublisher, Never> - var locationPermissionPublisher: AnyPublisher - var torEnforced: () -> Bool - var torIsReady: () -> Bool - var torIsForeground: () -> Bool - var awaitTorReady: (@escaping (Bool) -> Void) -> Void - var makeSession: () -> NostrRelaySessionProtocol - var scheduleAfter: @Sendable (TimeInterval, @escaping @Sendable () -> Void) -> Void - var now: () -> Date +public enum LocationPermissionState: Equatable, Sendable { + case notDetermined + case authorized + case denied } -private extension NostrRelayManagerDependencies { - @MainActor - static func live() -> Self { - Self( - activationAllowed: { NetworkActivationService.shared.activationAllowed }, - userTorEnabled: { NetworkActivationService.shared.userTorEnabled }, - hasMutualFavorites: { !FavoritesPersistenceService.shared.mutualFavorites.isEmpty }, - hasLocationPermission: { LocationChannelManager.shared.permissionState == .authorized }, - mutualFavoritesPublisher: FavoritesPersistenceService.shared.$mutualFavorites.eraseToAnyPublisher(), - locationPermissionPublisher: LocationChannelManager.shared.$permissionState.eraseToAnyPublisher(), - torEnforced: { TorManager.shared.torEnforced }, - torIsReady: { TorManager.shared.isReady }, - torIsForeground: { TorManager.shared.isForeground() }, - awaitTorReady: { completion in - Task.detached { - let ready = await TorManager.shared.awaitReady() - await MainActor.run { - completion(ready) - } - } - }, - makeSession: { URLSessionAdapter(base: TorURLSession.shared.session) }, - scheduleAfter: { delay, action in - DispatchQueue.main.asyncAfter(deadline: .now() + delay, execute: action) - }, - now: Date.init - ) +public struct NostrRelayManagerDependencies { + public var activationAllowed: () -> Bool + public var userTorEnabled: () -> Bool + public var hasMutualFavorites: () -> Bool + public var hasLocationPermission: () -> Bool + public var mutualFavoritesPublisher: AnyPublisher, Never> + public var locationPermissionPublisher: AnyPublisher + public var torEnforced: () -> Bool + public var torIsReady: () -> Bool + public var torIsForeground: () -> Bool + public var awaitTorReady: (@escaping (Bool) -> Void) -> Void + public var makeSession: () -> NostrRelaySessionProtocol + public var scheduleAfter: @Sendable (TimeInterval, @escaping @Sendable () -> Void) -> Void + public var now: () -> Date + + public init( + activationAllowed: @escaping () -> Bool, + userTorEnabled: @escaping () -> Bool, + hasMutualFavorites: @escaping () -> Bool, + hasLocationPermission: @escaping () -> Bool, + mutualFavoritesPublisher: AnyPublisher, Never>, + locationPermissionPublisher: AnyPublisher, + torEnforced: @escaping () -> Bool, + torIsReady: @escaping () -> Bool, + torIsForeground: @escaping () -> Bool, + awaitTorReady: @escaping (@escaping (Bool) -> Void) -> Void, + makeSession: @escaping () -> NostrRelaySessionProtocol, + scheduleAfter: @Sendable @escaping (TimeInterval, @escaping @Sendable () -> Void) -> Void, + now: @escaping () -> Date + ) { + self.activationAllowed = activationAllowed + self.userTorEnabled = userTorEnabled + self.hasMutualFavorites = hasMutualFavorites + self.hasLocationPermission = hasLocationPermission + self.mutualFavoritesPublisher = mutualFavoritesPublisher + self.locationPermissionPublisher = locationPermissionPublisher + self.torEnforced = torEnforced + self.torIsReady = torIsReady + self.torIsForeground = torIsForeground + self.awaitTorReady = awaitTorReady + self.makeSession = makeSession + self.scheduleAfter = scheduleAfter + self.now = now } } /// Manages WebSocket connections to Nostr relays @MainActor -final class NostrRelayManager: ObservableObject { - static let shared = NostrRelayManager() +public final class NostrRelayManager: ObservableObject { + nonisolated(unsafe) public static var shared: NostrRelayManager! + + public static func setupShared(dependencies: NostrRelayManagerDependencies) { + shared = NostrRelayManager(dependencies: dependencies) + } + + /// Wraps a URLSession into a NostrRelaySessionProtocol for use in live dependencies. + public static func makeURLSession(_ session: URLSession) -> NostrRelaySessionProtocol { + URLSessionAdapter(base: session) + } + // Track gift-wraps (kind 1059) we initiated so we can log OK acks at info - private(set) static var pendingGiftWrapIDs = Set() - static func registerPendingGiftWrap(id: String) { + private(set) public static var pendingGiftWrapIDs = Set() + public static func registerPendingGiftWrap(id: String) { pendingGiftWrapIDs.insert(id) } - - struct Relay: Identifiable { - let id = UUID() - let url: String - var isConnected: Bool = false - var lastError: Error? - var lastConnectedAt: Date? - var messagesSent: Int = 0 - var messagesReceived: Int = 0 - var reconnectAttempts: Int = 0 - var lastDisconnectedAt: Date? - var nextReconnectTime: Date? + + public struct Relay: Identifiable { + public let id = UUID() + public let url: String + public var isConnected: Bool = false + public var lastError: Error? + public var lastConnectedAt: Date? + public var messagesSent: Int = 0 + public var messagesReceived: Int = 0 + public var reconnectAttempts: Int = 0 + public var lastDisconnectedAt: Date? + public var nextReconnectTime: Date? } - + // Default relay list (can be customized) private static let defaultRelays = [ "wss://relay.damus.io", @@ -128,35 +143,30 @@ final class NostrRelayManager: ObservableObject { "wss://relay.primal.net", "wss://offchain.pub", "wss://nostr21.com" - // For local testing, you can add: "ws://localhost:8080" ] private static let defaultRelaySet = Set(defaultRelays) - - @Published private(set) var relays: [Relay] = [] - @Published private(set) var isConnected = false - + + @Published private(set) public var relays: [Relay] = [] + @Published private(set) public var isConnected = false + private let dependencies: NostrRelayManagerDependencies private var allowDefaultRelays: Bool = false private var hasMutualFavorites: Bool = false private var hasLocationPermission: Bool = false private var connections: [String: NostrRelayConnectionProtocol] = [:] - private var subscriptions: [String: Set] = [:] // relay URL -> active subscription IDs - private var pendingSubscriptions: [String: [String: String]] = [:] // relay URL -> (subscription id -> encoded REQ JSON) + private var subscriptions: [String: Set] = [:] + private var pendingSubscriptions: [String: [String: String]] = [:] private var messageHandlers: [String: (NostrEvent) -> Void] = [:] - // Coalesce duplicate subscribe requests for the same id within a short window private var subscribeCoalesce: [String: Date] = [:] private var cancellables = Set() - // Track EOSE per subscription to signal when initial stored events are done private struct EOSETracker { var pendingRelays: Set var callback: () -> Void var timer: Timer? } private var eoseTrackers: [String: EOSETracker] = [:] - - // Message queue for reliability - // Pending sends held only for relays that are not yet connected. + private struct PendingSend { var event: NostrEvent var pendingRelays: Set @@ -165,22 +175,20 @@ final class NostrRelayManager: ObservableObject { private let messageQueueLock = NSLock() private let encoder = JSONEncoder() private var shouldUseTor: Bool { dependencies.userTorEnabled() } - - // Exponential backoff configuration - private let initialBackoffInterval: TimeInterval = TransportConfig.nostrRelayInitialBackoffSeconds - private let maxBackoffInterval: TimeInterval = TransportConfig.nostrRelayMaxBackoffSeconds - private let backoffMultiplier: Double = TransportConfig.nostrRelayBackoffMultiplier - private let maxReconnectAttempts = TransportConfig.nostrRelayMaxReconnectAttempts - - // Bump generation to invalidate scheduled reconnects when we reset/disconnect + + // Exponential backoff configuration (matches TransportConfig values) + private let initialBackoffInterval: TimeInterval = 1.0 + private let maxBackoffInterval: TimeInterval = 300.0 + private let backoffMultiplier: Double = 2.0 + private let maxReconnectAttempts = 10 + private var connectionGeneration: Int = 0 - - init() { - self.dependencies = .live() + + public init(dependencies: NostrRelayManagerDependencies) { + self.dependencies = dependencies hasMutualFavorites = dependencies.hasMutualFavorites() hasLocationPermission = dependencies.hasLocationPermission() applyDefaultRelayPolicy(force: true) - // Deterministic JSON shape for outbound requests self.encoder.outputFormatting = .sortedKeys dependencies.mutualFavoritesPublisher .receive(on: DispatchQueue.main) @@ -202,39 +210,10 @@ final class NostrRelayManager: ObservableObject { .store(in: &cancellables) } - internal init(dependencies: NostrRelayManagerDependencies) { - self.dependencies = dependencies - hasMutualFavorites = dependencies.hasMutualFavorites() - hasLocationPermission = dependencies.hasLocationPermission() - applyDefaultRelayPolicy(force: true) - // Deterministic JSON shape for outbound requests - self.encoder.outputFormatting = .sortedKeys - dependencies.mutualFavoritesPublisher - .receive(on: DispatchQueue.main) - .sink { [weak self] favorites in - guard let self = self else { return } - self.hasMutualFavorites = !favorites.isEmpty - self.applyDefaultRelayPolicy() - } - .store(in: &cancellables) - dependencies.locationPermissionPublisher - .receive(on: DispatchQueue.main) - .sink { [weak self] state in - guard let self = self else { return } - let authorized = (state == .authorized) - if authorized == self.hasLocationPermission { return } - self.hasLocationPermission = authorized - self.applyDefaultRelayPolicy() - } - .store(in: &cancellables) - } - /// Connect to all configured relays - func connect() { - // Global network policy gate + public func connect() { guard dependencies.activationAllowed() else { return } if shouldUseTor { - // Ensure Tor is started early and wait for readiness off-main; then hop back to connect. dependencies.awaitTorReady { [weak self] ready in guard let self = self else { return } if !ready { @@ -253,28 +232,26 @@ final class NostrRelayManager: ObservableObject { } } } - + /// Disconnect from all relays - func disconnect() { + public func disconnect() { connectionGeneration &+= 1 + for (_, task) in connections { task.cancel(with: .goingAway, reason: nil) } connections.removeAll() - // Clear known subscriptions and any queued subs since connections are gone subscriptions.removeAll() pendingSubscriptions.removeAll() updateConnectionStatus() } - + /// Ensure connections exist to the given relay URLs (idempotent). - func ensureConnections(to relayUrls: [String]) { - // Global network policy gate + public func ensureConnections(to relayUrls: [String]) { guard dependencies.activationAllowed() else { return } let targets = allowedRelayList(from: relayUrls) guard !targets.isEmpty else { return } if shouldUseTor && dependencies.torEnforced() && !dependencies.torIsReady() { - // Defer until Tor is fully ready; avoid queuing connection attempts early dependencies.awaitTorReady { [weak self] ready in guard let self = self else { return } if ready { self.ensureConnections(to: relayUrls) } @@ -292,11 +269,9 @@ final class NostrRelayManager: ObservableObject { } /// Send an event to specified relays (or all if none specified) - func sendEvent(_ event: NostrEvent, to relayUrls: [String]? = nil) { - // Global network policy gate + public func sendEvent(_ event: NostrEvent, to relayUrls: [String]? = nil) { guard dependencies.activationAllowed() else { return } if shouldUseTor && dependencies.torEnforced() && !dependencies.torIsReady() { - // Defer sends until Tor is ready to avoid premature queueing dependencies.awaitTorReady { [weak self] ready in guard let self = self else { return } if ready { self.sendEvent(event, to: relayUrls) } @@ -308,7 +283,6 @@ final class NostrRelayManager: ObservableObject { guard !targetRelays.isEmpty else { return } ensureConnections(to: targetRelays) - // Attempt immediate send to relays with active connections; queue the rest var stillPending = Set() for relayUrl in targetRelays { if let connection = connections[relayUrl] { @@ -324,13 +298,11 @@ final class NostrRelayManager: ObservableObject { } } - /// Try to flush any queued messages for relays that are now connected. private func flushMessageQueue(for relayUrl: String? = nil) { messageQueueLock.lock() defer { messageQueueLock.unlock() } guard !messageQueue.isEmpty else { return } if let target = relayUrl { - // Flush only for a specific relay for i in (0.. Void, onEOSE: (() -> Void)? = nil ) { - // Global network policy gate guard dependencies.activationAllowed() else { return } - // Coalesce rapid duplicate subscribe requests only if a handler already exists let now = dependencies.now() if messageHandlers[id] != nil { if let last = subscribeCoalesce[id], now.timeIntervalSince(last) < 1.0 { @@ -381,7 +350,6 @@ final class NostrRelayManager: ObservableObject { } subscribeCoalesce[id] = now if shouldUseTor && dependencies.torEnforced() && !dependencies.torIsReady() { - // Defer subscription setup until Tor is ready; avoid queuing subs early dependencies.awaitTorReady { [weak self] ready in guard let self = self else { return } if ready { @@ -391,23 +359,19 @@ final class NostrRelayManager: ObservableObject { return } messageHandlers[id] = handler - + let req = NostrRequest.subscribe(id: id, filters: [filter]) - + do { let message = try encoder.encode(req) - guard let messageString = String(data: message, encoding: .utf8) else { + guard let messageString = String(data: message, encoding: .utf8) else { SecureLogger.error("❌ Failed to encode subscription request", category: .session) - return + return } - - // SecureLogger.debug("📋 Subscription filter JSON: \(messageString.prefix(200))...", category: .session) - - // Target specific relays if provided; else default. Filter permanently failed relays. + let baseUrls = relayUrls ?? Self.defaultRelays let candidateUrls = baseUrls.filter { !isPermanentlyFailed($0) } let urls = allowedRelayList(from: candidateUrls) - // Always queue subscriptions; sending happens when a relay reports connected let existingSet = Set(relays.map { $0.url }) for url in urls where !existingSet.contains(url) { relays.append(Relay(url: url)) @@ -417,13 +381,11 @@ final class NostrRelayManager: ObservableObject { map[id] = messageString self.pendingSubscriptions[url] = map } - // Initialize EOSE tracking if requested if let onEOSE = onEOSE { if urls.isEmpty { onEOSE() } else { var tracker = EOSETracker(pendingRelays: Set(urls), callback: onEOSE, timer: nil) - // Fallback timeout to avoid hanging if a relay never sends EOSE tracker.timer = Timer.scheduledTimer(withTimeInterval: 2.0, repeats: false) { [weak self] _ in Task { @MainActor in guard let self = self else { return } @@ -438,9 +400,7 @@ final class NostrRelayManager: ObservableObject { } } SecureLogger.debug("📋 Queued subscription id=\(id) for \(urls.count) relay(s)", category: .session) - // Ensure we actually have sockets opening to these relays so queued REQs can flush ensureConnections(to: urls) - // If some targets are already connected, flush immediately for them for url in urls { if let r = relays.first(where: { $0.url == url }), r.isConnected { flushPendingSubscriptions(for: url) @@ -500,56 +460,46 @@ final class NostrRelayManager: ObservableObject { } return result } - + /// Unsubscribe from a subscription - func unsubscribe(id: String) { + public func unsubscribe(id: String) { messageHandlers.removeValue(forKey: id) - // Allow immediate re-subscription by clearing coalescer timestamp subscribeCoalesce.removeValue(forKey: id) - + let req = NostrRequest.close(id: id) let message = try? encoder.encode(req) - + guard let messageData = message, let messageString = String(data: messageData, encoding: .utf8) else { return } - - // Send unsubscribe to all relays + for (relayUrl, connection) in connections { if subscriptions[relayUrl]?.contains(id) == true { subscriptions[relayUrl]?.remove(id) - connection.send(.string(messageString)) { _ in - // Local state is cleared before sending so callers can re-subscribe immediately. - } + connection.send(.string(messageString)) { _ in } } } } - + // MARK: - Private Methods - + private func connectToRelay(_ urlString: String) { - // Global network policy gate guard dependencies.activationAllowed() else { return } - guard let url = URL(string: urlString) else { + guard let url = URL(string: urlString) else { SecureLogger.warning("Invalid relay URL: \(urlString)", category: .session) - return + return } - // Avoid initiating connections while app is backgrounded; we'll reconnect on foreground if shouldUseTor && dependencies.torEnforced() && !dependencies.torIsForeground() { return } - - // Skip if we already have a connection object + if connections[urlString] != nil { return } if isPermanentlyFailed(urlString) { return } - - // Attempting to connect to Nostr relay via the proxied session - - // If Tor is enforced but not ready, delay connection until it is. + if shouldUseTor && dependencies.torEnforced() && !dependencies.torIsReady() { dependencies.awaitTorReady { [weak self] ready in guard let self = self else { return } @@ -558,35 +508,30 @@ final class NostrRelayManager: ObservableObject { } return } - + let session = dependencies.makeSession() let task = session.webSocketTask(with: url) - + connections[urlString] = task task.resume() - - // Start receiving messages + receiveMessage(from: task, relayUrl: urlString) - - // Send initial ping to verify connection + task.sendPing { [weak self] error in DispatchQueue.main.async { if error == nil { SecureLogger.debug("✅ Connected to Nostr relay: \(urlString)", category: .session) self?.updateRelayStatus(urlString, isConnected: true) - // Flush any pending subscriptions for this relay self?.flushPendingSubscriptions(for: urlString) } else { SecureLogger.error("❌ Failed to connect to Nostr relay \(urlString): \(error?.localizedDescription ?? "Unknown error")", category: .session) self?.updateRelayStatus(urlString, isConnected: false, error: error) - // Trigger disconnection handler for proper backoff self?.handleDisconnection(relayUrl: urlString, error: error ?? NSError(domain: "NostrRelay", code: -1, userInfo: nil)) } } } } - /// Send any queued subscriptions for a relay that just connected. private func flushPendingSubscriptions(for relayUrl: String) { guard let map = pendingSubscriptions[relayUrl], !map.isEmpty else { return } guard let connection = connections[relayUrl] else { return } @@ -606,26 +551,24 @@ final class NostrRelayManager: ObservableObject { } pendingSubscriptions[relayUrl] = nil } - + private func receiveMessage(from task: NostrRelayConnectionProtocol, relayUrl: String) { task.receive { [weak self] result in guard let self = self else { return } - + switch result { case .success(let message): - // Parse off-main to reduce UI jank, then hop back for state updates Task.detached(priority: .utility) { guard let parsed = ParsedInbound(message) else { return } await MainActor.run { self.handleParsedMessage(parsed, from: relayUrl) } } - - // Continue receiving + Task { @MainActor in self.receiveMessage(from: task, relayUrl: relayUrl) } - + case .failure(let error): DispatchQueue.main.async { self.handleDisconnection(relayUrl: relayUrl, error: error) @@ -633,12 +576,7 @@ final class NostrRelayManager: ObservableObject { } } } - - // Parsed inbound message type (off-main) - // Note: declared at file scope below to avoid MainActor isolation inside this class - // and keep parsing off the main actor. - // Handle parsed message on MainActor (state updates and handlers) private func handleParsedMessage(_ parsed: ParsedInbound, from relayUrl: String) { switch parsed { case .event(let subId, let event): @@ -680,23 +618,21 @@ final class NostrRelayManager: ObservableObject { break } } - + private func sendToRelay(event: NostrEvent, connection: NostrRelayConnectionProtocol, relayUrl: String) { let req = NostrRequest.event(event) - + do { let data = try encoder.encode(req) let message = String(data: data, encoding: .utf8) ?? "" - + SecureLogger.debug("📤 Send kind=\(event.kind) id=\(event.id.prefix(16))… relay=\(relayUrl)", category: .session) - + connection.send(.string(message)) { [weak self] error in DispatchQueue.main.async { if let error = error { SecureLogger.error("❌ Failed to send event to \(relayUrl): \(error)", category: .session) } else { - // SecureLogger.debug("✅ Event sent to relay: \(relayUrl)", category: .session) - // Update relay stats if let index = self?.relays.firstIndex(where: { $0.url == relayUrl }) { self?.relays[index].messagesSent += 1 } @@ -707,32 +643,30 @@ final class NostrRelayManager: ObservableObject { SecureLogger.error("Failed to encode event: \(error)", category: .session) } } - + private func updateRelayStatus(_ url: String, isConnected: Bool, error: Error? = nil) { if let index = relays.firstIndex(where: { $0.url == url }) { relays[index].isConnected = isConnected relays[index].lastError = error if isConnected { relays[index].lastConnectedAt = dependencies.now() - relays[index].reconnectAttempts = 0 // Reset on successful connection + relays[index].reconnectAttempts = 0 relays[index].nextReconnectTime = nil } else { relays[index].lastDisconnectedAt = dependencies.now() } } updateConnectionStatus() - // If we just connected to this relay, flush any queued sends targeting it if isConnected { flushMessageQueue(for: url) } } - + private func updateConnectionStatus() { isConnected = relays.contains { $0.isConnected } } - + private func handleDisconnection(relayUrl: String, error: Error) { - // If networking is disallowed, do not schedule reconnection if !dependencies.activationAllowed() { connections.removeValue(forKey: relayUrl) subscriptions.removeValue(forKey: relayUrl) @@ -742,11 +676,10 @@ final class NostrRelayManager: ObservableObject { connections.removeValue(forKey: relayUrl) subscriptions.removeValue(forKey: relayUrl) updateRelayStatus(relayUrl, isConnected: false, error: error) - - // Check if this is a DNS or handshake error; treat as permanent + let errorDescription = error.localizedDescription.lowercased() let ns = error as NSError - if errorDescription.contains("hostname could not be found") || + if errorDescription.contains("hostname could not be found") || errorDescription.contains("dns") || (ns.domain == NSURLErrorDomain && ns.code == NSURLErrorBadServerResponse) { if relays.first(where: { $0.url == relayUrl })?.lastError == nil { @@ -760,106 +693,90 @@ final class NostrRelayManager: ObservableObject { pendingSubscriptions[relayUrl] = nil return } - - // Implement exponential backoff for non-DNS errors + guard let index = relays.firstIndex(where: { $0.url == relayUrl }) else { return } - + relays[index].reconnectAttempts += 1 - - // Stop attempting after max attempts + if relays[index].reconnectAttempts >= maxReconnectAttempts { SecureLogger.warning("Max reconnection attempts (\(maxReconnectAttempts)) reached for \(relayUrl)", category: .session) return } - - // Calculate backoff interval + let backoffInterval = min( initialBackoffInterval * pow(backoffMultiplier, Double(relays[index].reconnectAttempts - 1)), maxBackoffInterval ) - + let nextReconnectTime = dependencies.now().addingTimeInterval(backoffInterval) relays[index].nextReconnectTime = nextReconnectTime - - - // Schedule reconnection with exponential backoff + let gen = connectionGeneration dependencies.scheduleAfter(backoffInterval) { [weak self] in Task { @MainActor [weak self] in guard let self = self else { return } - // Ignore stale scheduled reconnects from a previous generation guard gen == self.connectionGeneration else { return } - // Check if we should still reconnect (relay might have been removed) if self.relays.contains(where: { $0.url == relayUrl }) { self.connectToRelay(relayUrl) } } } } - + // MARK: - Public Utility Methods - - /// Manually retry connection to a specific relay - func retryConnection(to relayUrl: String) { + + public func retryConnection(to relayUrl: String) { guard let index = relays.firstIndex(where: { $0.url == relayUrl }) else { return } - - // Reset reconnection attempts + relays[index].reconnectAttempts = 0 relays[index].nextReconnectTime = nil relays[index].lastError = nil - - // Disconnect if connected + if let connection = connections[relayUrl] { connection.cancel(with: .goingAway, reason: nil) connections.removeValue(forKey: relayUrl) } - - // Attempt immediate reconnection + connectToRelay(relayUrl) } - - /// Get detailed status for all relays - func getRelayStatuses() -> [(url: String, isConnected: Bool, reconnectAttempts: Int, nextReconnectTime: Date?)] { + + public func getRelayStatuses() -> [(url: String, isConnected: Bool, reconnectAttempts: Int, nextReconnectTime: Date?)] { return relays.map { relay in - (url: relay.url, - isConnected: relay.isConnected, + (url: relay.url, + isConnected: relay.isConnected, reconnectAttempts: relay.reconnectAttempts, nextReconnectTime: relay.nextReconnectTime) } } - var debugPendingMessageQueueCount: Int { + public var debugPendingMessageQueueCount: Int { messageQueueLock.lock() defer { messageQueueLock.unlock() } return messageQueue.count } - func debugPendingSubscriptionCount(for relayUrl: String) -> Int { + public func debugPendingSubscriptionCount(for relayUrl: String) -> Int { pendingSubscriptions[relayUrl]?.count ?? 0 } - func debugFlushMessageQueue() { + public func debugFlushMessageQueue() { flushMessageQueue(for: nil) } - + /// Reset all relay connections - func resetAllConnections() { + public func resetAllConnections() { disconnect() - // New generation begins now connectionGeneration &+= 1 - - // Reset all relay states + for index in relays.indices { relays[index].reconnectAttempts = 0 relays[index].nextReconnectTime = nil relays[index].lastError = nil } - - // Reconnect + connect() } - // MARK: - Failure classification private func isPermanentlyFailed(_ url: String) -> Bool { guard let r = relays.first(where: { $0.url == url }) else { return false } if r.reconnectAttempts >= maxReconnectAttempts { return true } @@ -879,7 +796,7 @@ private enum ParsedInbound { case ok(eventId: String, success: Bool, reason: String) case eose(subscriptionId: String) case notice(String) - + init?(_ message: URLSessionWebSocketTask.Message) { guard let data = message.data, let array = try? JSONSerialization.jsonObject(with: data) as? [Any], @@ -938,26 +855,26 @@ private extension URLSessionWebSocketTask.Message { // MARK: - Nostr Protocol Types -enum NostrRequest: Encodable { +public enum NostrRequest: Encodable { case event(NostrEvent) case subscribe(id: String, filters: [NostrFilter]) case close(id: String) - - func encode(to encoder: Encoder) throws { + + public func encode(to encoder: Encoder) throws { var container = encoder.unkeyedContainer() - + switch self { case .event(let event): try container.encode("EVENT") try container.encode(event) - + case .subscribe(let id, let filters): try container.encode("REQ") try container.encode(id) for filter in filters { try container.encode(filter) } - + case .close(let id): try container.encode("CLOSE") try container.encode(id) @@ -965,57 +882,51 @@ enum NostrRequest: Encodable { } } -struct NostrFilter: Encodable { - var ids: [String]? - var authors: [String]? - var kinds: [Int]? - var since: Int? - var until: Int? - var limit: Int? - - // Tag filters - stored internally but encoded specially +public struct NostrFilter: Encodable { + public var ids: [String]? + public var authors: [String]? + public var kinds: [Int]? + public var since: Int? + public var until: Int? + public var limit: Int? + fileprivate var tagFilters: [String: [String]]? - - init() { - // Default initializer - } - - // Custom encoding to handle tag filters properly + + public init() {} + enum CodingKeys: String, CodingKey { case ids, authors, kinds, since, until, limit } - - func encode(to encoder: Encoder) throws { + + public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: DynamicCodingKey.self) - - // Encode standard fields + if let ids = ids { try container.encode(ids, forKey: DynamicCodingKey(stringValue: "ids")) } if let authors = authors { try container.encode(authors, forKey: DynamicCodingKey(stringValue: "authors")) } if let kinds = kinds { try container.encode(kinds, forKey: DynamicCodingKey(stringValue: "kinds")) } if let since = since { try container.encode(since, forKey: DynamicCodingKey(stringValue: "since")) } if let until = until { try container.encode(until, forKey: DynamicCodingKey(stringValue: "until")) } if let limit = limit { try container.encode(limit, forKey: DynamicCodingKey(stringValue: "limit")) } - - // Encode tag filters with # prefix + if let tagFilters = tagFilters { for (tag, values) in tagFilters { try container.encode(values, forKey: DynamicCodingKey(stringValue: "#\(tag)")) } } } - - // For NIP-17 gift wraps - static func giftWrapsFor(pubkey: String, since: Date? = nil) -> NostrFilter { + + // For NIP-17 gift wraps (limit matches TransportConfig.nostrRelayDefaultFetchLimit) + public static func giftWrapsFor(pubkey: String, since: Date? = nil) -> NostrFilter { var filter = NostrFilter() - filter.kinds = [1059] // Gift wrap kind + filter.kinds = [1059] filter.since = since?.timeIntervalSince1970.toInt() filter.tagFilters = ["p": [pubkey]] - filter.limit = TransportConfig.nostrRelayDefaultFetchLimit // reasonable limit + filter.limit = 100 return filter } // For location channels: geohash-scoped ephemeral events (kind 20000) and presence (kind 20001) - static func geohashEphemeral(_ geohash: String, since: Date? = nil, limit: Int = 1000) -> NostrFilter { + public static func geohashEphemeral(_ geohash: String, since: Date? = nil, limit: Int = 1000) -> NostrFilter { var filter = NostrFilter() filter.kinds = [20000, 20001] filter.since = since?.timeIntervalSince1970.toInt() @@ -1025,7 +936,7 @@ struct NostrFilter: Encodable { } // For location notes: persistent text notes (kind 1) tagged with geohash - static func geohashNotes(_ geohash: String, since: Date? = nil, limit: Int = 200) -> NostrFilter { + public static func geohashNotes(_ geohash: String, since: Date? = nil, limit: Int = 200) -> NostrFilter { var filter = NostrFilter() filter.kinds = [1] filter.since = since?.timeIntervalSince1970.toInt() @@ -1035,7 +946,7 @@ struct NostrFilter: Encodable { } // For location notes with neighbors: subscribe to multiple geohashes (center + neighbors) - static func geohashNotes(_ geohashes: [String], since: Date? = nil, limit: Int = 200) -> NostrFilter { + public static func geohashNotes(_ geohashes: [String], since: Date? = nil, limit: Int = 200) -> NostrFilter { var filter = NostrFilter() filter.kinds = [1] filter.since = since?.timeIntervalSince1970.toInt() @@ -1045,15 +956,14 @@ struct NostrFilter: Encodable { } } -// Dynamic coding key for tag filters private struct DynamicCodingKey: CodingKey { var stringValue: String var intValue: Int? { nil } - + init(stringValue: String) { self.stringValue = stringValue } - + init?(intValue: Int) { return nil } diff --git a/bitchat/Nostr/XChaCha20Poly1305Compat.swift b/localPackages/Nostr/Sources/Nostr/XChaCha20Poly1305Compat.swift similarity index 93% rename from bitchat/Nostr/XChaCha20Poly1305Compat.swift rename to localPackages/Nostr/Sources/Nostr/XChaCha20Poly1305Compat.swift index 13794508..244b4ad5 100644 --- a/bitchat/Nostr/XChaCha20Poly1305Compat.swift +++ b/localPackages/Nostr/Sources/Nostr/XChaCha20Poly1305Compat.swift @@ -6,7 +6,6 @@ import CryptoKit /// as per XChaCha20 construction. enum XChaCha20Poly1305Compat { - /// Errors that can occur during XChaCha20-Poly1305 operations enum Error: Swift.Error { case invalidKeyLength(expected: Int, got: Int) case invalidNonceLength(expected: Int, got: Int) @@ -59,7 +58,6 @@ enum XChaCha20Poly1305Compat { } private static func hchacha20(key: Data, nonce16: Data) throws -> Data { - // HChaCha20 based on the original ChaCha20 core with a 16-byte nonce. guard key.count == 32 else { throw Error.invalidKeyLength(expected: 32, got: key.count) } @@ -70,28 +68,22 @@ enum XChaCha20Poly1305Compat { // Constants "expand 32-byte k" var state: [UInt32] = [ 0x61707865, 0x3320646e, 0x79622d32, 0x6b206574, - // key (8 words) key.loadLEWord(0), key.loadLEWord(4), key.loadLEWord(8), key.loadLEWord(12), key.loadLEWord(16), key.loadLEWord(20), key.loadLEWord(24), key.loadLEWord(28), - // nonce (4 words) nonce16.loadLEWord(0), nonce16.loadLEWord(4), nonce16.loadLEWord(8), nonce16.loadLEWord(12) ] - // 20 rounds (10 double rounds) for _ in 0..<10 { - // Column rounds quarterRound(&state, 0, 4, 8, 12) quarterRound(&state, 1, 5, 9, 13) quarterRound(&state, 2, 6, 10, 14) quarterRound(&state, 3, 7, 11, 15) - // Diagonal rounds quarterRound(&state, 0, 5, 10, 15) quarterRound(&state, 1, 6, 11, 12) quarterRound(&state, 2, 7, 8, 13) quarterRound(&state, 3, 4, 9, 14) } - // Output subkey: state[0..3] and state[12..15] var out = Data(count: 32) out.storeLEWord(state[0], at: 0) out.storeLEWord(state[1], at: 4) @@ -132,4 +124,3 @@ private extension Data { replaceSubrange(offset..<(offset+4), with: bytes) } } - diff --git a/localPackages/Nostr/Tests/Bech32Tests.swift b/localPackages/Nostr/Tests/Bech32Tests.swift new file mode 100644 index 00000000..26c274d7 --- /dev/null +++ b/localPackages/Nostr/Tests/Bech32Tests.swift @@ -0,0 +1,41 @@ +import Testing +import Foundation +@testable import Nostr + +@Suite("Bech32") +struct Bech32Tests { + @Test("Round-trip encode/decode") + func roundTrip() throws { + let original = Data([0xde, 0xad, 0xbe, 0xef, 0xca, 0xfe]) + let encoded = try Bech32.encode(hrp: "test", data: original) + let decoded = try Bech32.decode(encoded) + #expect(decoded.hrp == "test") + #expect(decoded.data == original) + } + + @Test("HRP is preserved") + func hrpPreserved() throws { + let data = Data(repeating: 0x42, count: 32) + let encoded = try Bech32.encode(hrp: "npub", data: data) + #expect(encoded.hasPrefix("npub1")) + let decoded = try Bech32.decode(encoded) + #expect(decoded.hrp == "npub") + } + + @Test("Decoding invalid checksum throws") + func invalidChecksum() throws { + var encoded = try Bech32.encode(hrp: "test", data: Data([1, 2, 3])) + // Corrupt the last character + encoded = String(encoded.dropLast()) + (encoded.last == "q" ? "p" : "q") + #expect(throws: Bech32.Bech32Error.self) { + try Bech32.decode(encoded) + } + } + + @Test("Decoding string without separator throws") + func missingSeparator() { + #expect(throws: Bech32.Bech32Error.self) { + try Bech32.decode("noseparatorhere") + } + } +} diff --git a/bitchatTests/XChaCha20Poly1305CompatTests.swift b/localPackages/Nostr/Tests/XChaCha20Poly1305CompatTests.swift similarity index 99% rename from bitchatTests/XChaCha20Poly1305CompatTests.swift rename to localPackages/Nostr/Tests/XChaCha20Poly1305CompatTests.swift index 9b607a9b..5130c77c 100644 --- a/bitchatTests/XChaCha20Poly1305CompatTests.swift +++ b/localPackages/Nostr/Tests/XChaCha20Poly1305CompatTests.swift @@ -8,7 +8,7 @@ import Testing import struct Foundation.Data -@testable import bitchat +@testable import Nostr struct XChaCha20Poly1305CompatTests { From c60eff2c1115d5b7b2aaa3a95ee42887924ea98c Mon Sep 17 00:00:00 2001 From: Islam <2553451+qalandarov@users.noreply.github.com> Date: Wed, 15 Apr 2026 18:26:48 +0100 Subject: [PATCH 003/216] Move additional files/tests to BitFoundation (#1102) --- bitchat/Models/BitchatMessage+Media.swift | 1 + bitchat/Noise/NoiseProtocol.swift | 1 + bitchat/Nostr/NostrIdentityBridge.swift | 1 + bitchat/Protocols/BitchatFilePacket.swift | 1 + bitchat/Protocols/BitchatProtocol.swift | 63 ------ bitchat/Services/KeychainManager.swift | 68 +----- .../NotificationStreamAssembler.swift | 1 + bitchat/Services/TransportConfig.swift | 3 - bitchat/Sync/PacketIdUtil.swift | 1 + bitchat/Sync/SyncTypeFlags.swift | 1 + .../ViewModels/PublicMessagePipeline.swift | 1 + bitchat/ViewModels/PublicTimelineStore.swift | 1 + .../Views/Components/DeliveryStatusView.swift | 1 + .../Views/Components/TextMessageView.swift | 1 + bitchat/Views/Media/MediaMessageView.swift | 1 + .../BitchatMessage+Preview.swift | 1 + .../PreviewKeychainManager.swift | 1 + bitchatTests/BLEServiceTests.swift | 2 +- .../EndToEnd/PrivateChatE2ETests.swift | 2 +- .../EndToEnd/PublicChatE2ETests.swift | 2 +- .../Integration/IntegrationTests.swift | 2 +- .../Integration/TestNetworkHelper.swift | 2 +- bitchatTests/Mocks/MockBLEService.swift | 2 +- bitchatTests/Mocks/MockKeychain.swift | 1 + bitchatTests/NoiseEncryptionTests.swift | 78 +++++++ .../NotificationStreamAssemblerTests.swift | 1 + .../Protocols/BinaryEncodingUtilsTests.swift | 1 + bitchatTests/PublicMessagePipelineTests.swift | 1 + localPackages/BitFoundation/Package.swift | 6 + .../BitFoundation}/BinaryEncodingUtils.swift | 26 +-- .../BitFoundation}/BinaryProtocol.swift | 43 ++-- .../BitFoundation}/BitchatMessage.swift | 47 ++-- .../BitFoundation}/BitchatPacket.swift | 34 +-- .../BitFoundation}/CompressionUtil.swift | 6 +- .../Sources/BitFoundation/Constants.swift | 12 ++ .../BitFoundation/DeliveryStatus.swift | 35 +++ .../BitFoundation}/FileTransferLimits.swift | 14 +- .../KeychainManagerProtocol.swift | 78 +++++++ .../BitFoundation}/MessagePadding.swift | 2 +- .../Sources/BitFoundation/MessageType.swift | 39 ++++ .../BinaryProtocolPaddingTests.swift | 2 +- .../BinaryProtocolTests.swift | 13 +- .../KeychainErrorHandlingTests.swift | 63 +----- .../BitFoundationTests/MockKeychain.swift | 201 ++++++++++++++++++ .../BitFoundationTests/TestConstants.swift | 28 +++ .../BitFoundationTests/TestHelpers.swift | 143 +++++++++++++ 46 files changed, 741 insertions(+), 293 deletions(-) create mode 100644 bitchatTests/NoiseEncryptionTests.swift rename {bitchat/Protocols => localPackages/BitFoundation/Sources/BitFoundation}/BinaryEncodingUtils.swift (86%) rename {bitchat/Protocols => localPackages/BitFoundation/Sources/BitFoundation}/BinaryProtocol.swift (94%) rename {bitchat/Models => localPackages/BitFoundation/Sources/BitFoundation}/BitchatMessage.swift (91%) rename {bitchat/Models => localPackages/BitFoundation/Sources/BitFoundation}/BitchatPacket.swift (78%) rename {bitchat/Utils => localPackages/BitFoundation/Sources/BitFoundation}/CompressionUtil.swift (95%) create mode 100644 localPackages/BitFoundation/Sources/BitFoundation/Constants.swift create mode 100644 localPackages/BitFoundation/Sources/BitFoundation/DeliveryStatus.swift rename {bitchat/Utils => localPackages/BitFoundation/Sources/BitFoundation}/FileTransferLimits.swift (72%) create mode 100644 localPackages/BitFoundation/Sources/BitFoundation/KeychainManagerProtocol.swift rename {bitchat/Models => localPackages/BitFoundation/Sources/BitFoundation}/MessagePadding.swift (98%) create mode 100644 localPackages/BitFoundation/Sources/BitFoundation/MessageType.swift rename {bitchatTests/Protocol => localPackages/BitFoundation/Tests/BitFoundationTests}/BinaryProtocolPaddingTests.swift (97%) rename {bitchatTests/Protocol => localPackages/BitFoundation/Tests/BitFoundationTests}/BinaryProtocolTests.swift (99%) rename {bitchatTests => localPackages/BitFoundation/Tests/BitFoundationTests}/KeychainErrorHandlingTests.swift (67%) create mode 100644 localPackages/BitFoundation/Tests/BitFoundationTests/MockKeychain.swift create mode 100644 localPackages/BitFoundation/Tests/BitFoundationTests/TestConstants.swift create mode 100644 localPackages/BitFoundation/Tests/BitFoundationTests/TestHelpers.swift diff --git a/bitchat/Models/BitchatMessage+Media.swift b/bitchat/Models/BitchatMessage+Media.swift index aa2a59f0..5706654c 100644 --- a/bitchat/Models/BitchatMessage+Media.swift +++ b/bitchat/Models/BitchatMessage+Media.swift @@ -6,6 +6,7 @@ // For more information, see // +import BitFoundation import Foundation extension BitchatMessage { diff --git a/bitchat/Noise/NoiseProtocol.swift b/bitchat/Noise/NoiseProtocol.swift index faa18f31..665a5001 100644 --- a/bitchat/Noise/NoiseProtocol.swift +++ b/bitchat/Noise/NoiseProtocol.swift @@ -78,6 +78,7 @@ /// import BitLogger +import BitFoundation import Foundation import CryptoKit diff --git a/bitchat/Nostr/NostrIdentityBridge.swift b/bitchat/Nostr/NostrIdentityBridge.swift index 01d929e0..c9fa8014 100644 --- a/bitchat/Nostr/NostrIdentityBridge.swift +++ b/bitchat/Nostr/NostrIdentityBridge.swift @@ -1,3 +1,4 @@ +import BitFoundation import Foundation import CryptoKit diff --git a/bitchat/Protocols/BitchatFilePacket.swift b/bitchat/Protocols/BitchatFilePacket.swift index 26a27ae2..6002744d 100644 --- a/bitchat/Protocols/BitchatFilePacket.swift +++ b/bitchat/Protocols/BitchatFilePacket.swift @@ -7,6 +7,7 @@ // import Foundation +import BitFoundation import BitLogger /// TLV payload for Bluetooth mesh file transfers (voice notes, images, generic files). diff --git a/bitchat/Protocols/BitchatProtocol.swift b/bitchat/Protocols/BitchatProtocol.swift index a13f3056..4ebe6509 100644 --- a/bitchat/Protocols/BitchatProtocol.swift +++ b/bitchat/Protocols/BitchatProtocol.swift @@ -62,40 +62,6 @@ import Foundation import CoreBluetooth import BitFoundation -// MARK: - Message Types - -/// Simplified BitChat protocol message types. -/// Reduced from 24 types to just 6 essential ones. -/// All private communication metadata (receipts, status) is embedded in noiseEncrypted payloads. -enum MessageType: UInt8 { - // Public messages (unencrypted) - case announce = 0x01 // "I'm here" with nickname - case message = 0x02 // Public chat message - case leave = 0x03 // "I'm leaving" - case requestSync = 0x21 // GCS filter-based sync request (local-only) - - // Noise encryption - case noiseHandshake = 0x10 // Handshake (init or response determined by payload) - case noiseEncrypted = 0x11 // All encrypted payloads (messages, receipts, etc.) - - // Fragmentation (simplified) - case fragment = 0x20 // Single fragment type for large messages - case fileTransfer = 0x22 // Binary file/audio/image payloads - - var description: String { - switch self { - case .announce: return "announce" - case .message: return "message" - case .leave: return "leave" - case .requestSync: return "requestSync" - case .noiseHandshake: return "noiseHandshake" - case .noiseEncrypted: return "noiseEncrypted" - case .fragment: return "fragment" - case .fileTransfer: return "fileTransfer" - } - } -} - // MARK: - Noise Payload Types /// Types of payloads embedded within noiseEncrypted messages. @@ -132,35 +98,6 @@ enum LazyHandshakeState { case failed(Error) // Handshake failed } -// MARK: - Delivery Status - -// Delivery status for messages -enum DeliveryStatus: Codable, Equatable, Hashable { - case sending - case sent // Left our device - case delivered(to: String, at: Date) // Confirmed by recipient - case read(by: String, at: Date) // Seen by recipient - case failed(reason: String) - case partiallyDelivered(reached: Int, total: Int) // For rooms - - var displayText: String { - switch self { - case .sending: - return "Sending..." - case .sent: - return "Sent" - case .delivered(let nickname, _): - return "Delivered to \(nickname)" - case .read(let nickname, _): - return "Read by \(nickname)" - case .failed(let reason): - return "Failed: \(reason)" - case .partiallyDelivered(let reached, let total): - return "Delivered to \(reached)/\(total)" - } - } -} - // MARK: - Delegate Protocol protocol BitchatDelegate: AnyObject { diff --git a/bitchat/Services/KeychainManager.swift b/bitchat/Services/KeychainManager.swift index 574bdf9f..e469f98d 100644 --- a/bitchat/Services/KeychainManager.swift +++ b/bitchat/Services/KeychainManager.swift @@ -7,76 +7,10 @@ // import BitLogger +import BitFoundation import Foundation import Security -// MARK: - Keychain Error Types -// BCH-01-009: Proper error classification to distinguish expected states from critical failures - -/// Result of a keychain read operation with proper error classification -enum KeychainReadResult { - case success(Data) - case itemNotFound // Expected: key doesn't exist yet - case accessDenied // Critical: app lacks keychain access - case deviceLocked // Recoverable: device is locked - case authenticationFailed // Recoverable: biometric/passcode failed - case otherError(OSStatus) // Unexpected error - - var isRecoverableError: Bool { - switch self { - case .deviceLocked, .authenticationFailed: - return true - default: - return false - } - } -} - -/// Result of a keychain save operation with proper error classification -enum KeychainSaveResult { - case success - case duplicateItem // Can retry with update - case accessDenied // Critical: app lacks keychain access - case deviceLocked // Recoverable: device is locked - case storageFull // Critical: no space available - case otherError(OSStatus) - - var isRecoverableError: Bool { - switch self { - case .duplicateItem, .deviceLocked: - return true - default: - return false - } - } -} - -protocol KeychainManagerProtocol { - func saveIdentityKey(_ keyData: Data, forKey key: String) -> Bool - func getIdentityKey(forKey key: String) -> Data? - func deleteIdentityKey(forKey key: String) -> Bool - func deleteAllKeychainData() -> Bool - - func secureClear(_ data: inout Data) - func secureClear(_ string: inout String) - - func verifyIdentityKeyExists() -> Bool - - // BCH-01-009: Methods with proper error classification - /// Get identity key with detailed result for error handling - func getIdentityKeyWithResult(forKey key: String) -> KeychainReadResult - /// Save identity key with detailed result for error handling - func saveIdentityKeyWithResult(_ keyData: Data, forKey key: String) -> KeychainSaveResult - - // MARK: - Generic Data Storage (consolidated from KeychainHelper) - /// Save data with a custom service name - func save(key: String, data: Data, service: String, accessible: CFString?) - /// Load data from a custom service - func load(key: String, service: String) -> Data? - /// Delete data from a custom service - func delete(key: String, service: String) -} - final class KeychainManager: KeychainManagerProtocol { // Use consistent service name for all keychain items private let service = BitchatApp.bundleID diff --git a/bitchat/Services/NotificationStreamAssembler.swift b/bitchat/Services/NotificationStreamAssembler.swift index cbef4506..0a46ffbd 100644 --- a/bitchat/Services/NotificationStreamAssembler.swift +++ b/bitchat/Services/NotificationStreamAssembler.swift @@ -7,6 +7,7 @@ // import BitLogger +import BitFoundation import Foundation struct NotificationStreamAssembler { diff --git a/bitchat/Services/TransportConfig.swift b/bitchat/Services/TransportConfig.swift index 5265af59..6153c266 100644 --- a/bitchat/Services/TransportConfig.swift +++ b/bitchat/Services/TransportConfig.swift @@ -133,9 +133,6 @@ enum TransportConfig { static let nostrShortKeyDisplayLength: Int = 8 static let nostrConvKeyPrefixLength: Int = 16 - // Compression - static let compressionThresholdBytes: Int = 100 - // Message deduplication static let messageDedupMaxAgeSeconds: TimeInterval = 300 static let messageDedupMaxCount: Int = 1000 diff --git a/bitchat/Sync/PacketIdUtil.swift b/bitchat/Sync/PacketIdUtil.swift index 08b7910d..3c6c0bdc 100644 --- a/bitchat/Sync/PacketIdUtil.swift +++ b/bitchat/Sync/PacketIdUtil.swift @@ -1,3 +1,4 @@ +import struct BitFoundation.BitchatPacket import Foundation import CryptoKit diff --git a/bitchat/Sync/SyncTypeFlags.swift b/bitchat/Sync/SyncTypeFlags.swift index 15e22d89..19261314 100644 --- a/bitchat/Sync/SyncTypeFlags.swift +++ b/bitchat/Sync/SyncTypeFlags.swift @@ -1,3 +1,4 @@ +import BitFoundation import Foundation /// Bitfield describing which message types are covered by a REQUEST_SYNC round. diff --git a/bitchat/ViewModels/PublicMessagePipeline.swift b/bitchat/ViewModels/PublicMessagePipeline.swift index a1b794e8..516160e9 100644 --- a/bitchat/ViewModels/PublicMessagePipeline.swift +++ b/bitchat/ViewModels/PublicMessagePipeline.swift @@ -5,6 +5,7 @@ // Handles batching and deduplication of public chat messages before surfacing them to the UI. // +import BitFoundation import Foundation @MainActor diff --git a/bitchat/ViewModels/PublicTimelineStore.swift b/bitchat/ViewModels/PublicTimelineStore.swift index 92a76cc6..6e03382f 100644 --- a/bitchat/ViewModels/PublicTimelineStore.swift +++ b/bitchat/ViewModels/PublicTimelineStore.swift @@ -5,6 +5,7 @@ // Maintains mesh and geohash public timelines with simple caps and helpers. // +import BitFoundation import Foundation struct PublicTimelineStore { diff --git a/bitchat/Views/Components/DeliveryStatusView.swift b/bitchat/Views/Components/DeliveryStatusView.swift index 13c045ee..4f3025ec 100644 --- a/bitchat/Views/Components/DeliveryStatusView.swift +++ b/bitchat/Views/Components/DeliveryStatusView.swift @@ -7,6 +7,7 @@ // import SwiftUI +import BitFoundation struct DeliveryStatusView: View { @Environment(\.colorScheme) private var colorScheme diff --git a/bitchat/Views/Components/TextMessageView.swift b/bitchat/Views/Components/TextMessageView.swift index 194dc002..7b89a781 100644 --- a/bitchat/Views/Components/TextMessageView.swift +++ b/bitchat/Views/Components/TextMessageView.swift @@ -7,6 +7,7 @@ // import SwiftUI +import BitFoundation struct TextMessageView: View { @Environment(\.colorScheme) private var colorScheme: ColorScheme diff --git a/bitchat/Views/Media/MediaMessageView.swift b/bitchat/Views/Media/MediaMessageView.swift index 76669489..0673e522 100644 --- a/bitchat/Views/Media/MediaMessageView.swift +++ b/bitchat/Views/Media/MediaMessageView.swift @@ -6,6 +6,7 @@ // import SwiftUI +import BitFoundation struct MediaMessageView: View { @Environment(\.colorScheme) private var colorScheme diff --git a/bitchat/_PreviewHelpers/BitchatMessage+Preview.swift b/bitchat/_PreviewHelpers/BitchatMessage+Preview.swift index 25a530cd..e57a1471 100644 --- a/bitchat/_PreviewHelpers/BitchatMessage+Preview.swift +++ b/bitchat/_PreviewHelpers/BitchatMessage+Preview.swift @@ -6,6 +6,7 @@ // For more information, see // +import BitFoundation import Foundation extension BitchatMessage { diff --git a/bitchat/_PreviewHelpers/PreviewKeychainManager.swift b/bitchat/_PreviewHelpers/PreviewKeychainManager.swift index 464eaa3d..49e63d3f 100644 --- a/bitchat/_PreviewHelpers/PreviewKeychainManager.swift +++ b/bitchat/_PreviewHelpers/PreviewKeychainManager.swift @@ -6,6 +6,7 @@ // For more information, see // +import BitFoundation import Foundation final class PreviewKeychainManager: KeychainManagerProtocol { diff --git a/bitchatTests/BLEServiceTests.swift b/bitchatTests/BLEServiceTests.swift index 2a32e838..d704f009 100644 --- a/bitchatTests/BLEServiceTests.swift +++ b/bitchatTests/BLEServiceTests.swift @@ -8,7 +8,7 @@ import Testing import CoreBluetooth -import BitFoundation +@testable import BitFoundation // to avoid unnecessary public's @testable import bitchat struct BLEServiceTests { diff --git a/bitchatTests/EndToEnd/PrivateChatE2ETests.swift b/bitchatTests/EndToEnd/PrivateChatE2ETests.swift index 6f5c7891..dc8de7ab 100644 --- a/bitchatTests/EndToEnd/PrivateChatE2ETests.swift +++ b/bitchatTests/EndToEnd/PrivateChatE2ETests.swift @@ -9,7 +9,7 @@ import Testing import CryptoKit import struct Foundation.UUID -import BitFoundation +@testable import BitFoundation // to avoid unnecessary public's @testable import bitchat struct PrivateChatE2ETests { diff --git a/bitchatTests/EndToEnd/PublicChatE2ETests.swift b/bitchatTests/EndToEnd/PublicChatE2ETests.swift index d380c4c5..6672e678 100644 --- a/bitchatTests/EndToEnd/PublicChatE2ETests.swift +++ b/bitchatTests/EndToEnd/PublicChatE2ETests.swift @@ -8,7 +8,7 @@ import Testing import struct Foundation.UUID -import BitFoundation +@testable import BitFoundation // to avoid unnecessary public's @testable import bitchat struct PublicChatE2ETests { diff --git a/bitchatTests/Integration/IntegrationTests.swift b/bitchatTests/Integration/IntegrationTests.swift index 1907cf33..52b4d2de 100644 --- a/bitchatTests/Integration/IntegrationTests.swift +++ b/bitchatTests/Integration/IntegrationTests.swift @@ -9,7 +9,7 @@ import Foundation import CryptoKit import Testing -import BitFoundation +@testable import BitFoundation // to avoid unnecessary public's @testable import bitchat struct IntegrationTests { diff --git a/bitchatTests/Integration/TestNetworkHelper.swift b/bitchatTests/Integration/TestNetworkHelper.swift index 3b633e54..277e1f52 100644 --- a/bitchatTests/Integration/TestNetworkHelper.swift +++ b/bitchatTests/Integration/TestNetworkHelper.swift @@ -8,7 +8,7 @@ import Foundation import CryptoKit -import BitFoundation +@testable import BitFoundation // to avoid unnecessary public's @testable import bitchat final class TestNetworkHelper { diff --git a/bitchatTests/Mocks/MockBLEService.swift b/bitchatTests/Mocks/MockBLEService.swift index 352efa90..e4fb6ae5 100644 --- a/bitchatTests/Mocks/MockBLEService.swift +++ b/bitchatTests/Mocks/MockBLEService.swift @@ -8,7 +8,7 @@ import Foundation import CoreBluetooth -import BitFoundation +@testable import BitFoundation // to avoid unnecessary public's @testable import bitchat /// In-memory BLE test harness used by E2E/Integration tests. diff --git a/bitchatTests/Mocks/MockKeychain.swift b/bitchatTests/Mocks/MockKeychain.swift index 76b32952..2c8d7c32 100644 --- a/bitchatTests/Mocks/MockKeychain.swift +++ b/bitchatTests/Mocks/MockKeychain.swift @@ -7,6 +7,7 @@ // import Foundation +import BitFoundation @testable import bitchat final class MockKeychain: KeychainManagerProtocol { diff --git a/bitchatTests/NoiseEncryptionTests.swift b/bitchatTests/NoiseEncryptionTests.swift new file mode 100644 index 00000000..66996dfc --- /dev/null +++ b/bitchatTests/NoiseEncryptionTests.swift @@ -0,0 +1,78 @@ +// +// NoiseEncryptionTests.swift +// bitchat +// +// This is free and unencumbered software released into the public domain. +// For more information, see +// + +import Testing +@testable import bitchat + +struct NoiseEncryptionTests { + @Test func generatesNewIdentityWhenMissing() throws { + let keychain = MockKeychain() + + // Create service with empty keychain - should generate new identity + let service = NoiseEncryptionService(keychain: keychain) + + // Should have generated and saved keys + #expect(service.getStaticPublicKeyData().count == 32) + #expect(service.getSigningPublicKeyData().count == 32) + + // Keys should be persisted + let noiseKeyResult = keychain.getIdentityKeyWithResult(forKey: "noiseStaticKey") + switch noiseKeyResult { + case .success: + // Expected - key was saved + break + default: + throw KeychainTestError("Expected noise key to be saved") + } + } + + @Test func loadsExistingIdentity() throws { + let keychain = MockKeychain() + + // Create first service to generate identity + let service1 = NoiseEncryptionService(keychain: keychain) + let originalPublicKey = service1.getStaticPublicKeyData() + let originalSigningKey = service1.getSigningPublicKeyData() + + // Create second service - should load same identity + let service2 = NoiseEncryptionService(keychain: keychain) + + #expect(service2.getStaticPublicKeyData() == originalPublicKey) + #expect(service2.getSigningPublicKeyData() == originalSigningKey) + } + + @Test func handlesAccessDeniedGracefully() throws { + let keychain = MockKeychain() + keychain.simulatedReadError = .accessDenied + + // Service should still initialize with ephemeral key + let service = NoiseEncryptionService(keychain: keychain) + + // Should have an identity (ephemeral) + #expect(service.getStaticPublicKeyData().count == 32) + #expect(service.getSigningPublicKeyData().count == 32) + } + + @Test func handlesDeviceLockedGracefully() throws { + let keychain = MockKeychain() + keychain.simulatedReadError = .deviceLocked + + // Service should still initialize with ephemeral key + let service = NoiseEncryptionService(keychain: keychain) + + // Should have an identity (ephemeral) + #expect(service.getStaticPublicKeyData().count == 32) + } +} + +// TODO: Reuse +private struct KeychainTestError: Error, CustomStringConvertible { + let message: String + init(_ message: String) { self.message = message } + var description: String { message } +} diff --git a/bitchatTests/NotificationStreamAssemblerTests.swift b/bitchatTests/NotificationStreamAssemblerTests.swift index fdd37255..7d78fb0a 100644 --- a/bitchatTests/NotificationStreamAssemblerTests.swift +++ b/bitchatTests/NotificationStreamAssemblerTests.swift @@ -1,5 +1,6 @@ import Testing import Foundation +import BitFoundation @testable import bitchat struct NotificationStreamAssemblerTests { diff --git a/bitchatTests/Protocols/BinaryEncodingUtilsTests.swift b/bitchatTests/Protocols/BinaryEncodingUtilsTests.swift index 0d5fa442..09047b9a 100644 --- a/bitchatTests/Protocols/BinaryEncodingUtilsTests.swift +++ b/bitchatTests/Protocols/BinaryEncodingUtilsTests.swift @@ -1,5 +1,6 @@ import Foundation import XCTest +@testable import BitFoundation // to avoid unnecessary public's @testable import bitchat final class BinaryEncodingUtilsTests: XCTestCase { diff --git a/bitchatTests/PublicMessagePipelineTests.swift b/bitchatTests/PublicMessagePipelineTests.swift index dd716cdc..9bf0a5cf 100644 --- a/bitchatTests/PublicMessagePipelineTests.swift +++ b/bitchatTests/PublicMessagePipelineTests.swift @@ -7,6 +7,7 @@ import Testing import Foundation +import BitFoundation @testable import bitchat @MainActor diff --git a/localPackages/BitFoundation/Package.swift b/localPackages/BitFoundation/Package.swift index 927ce283..a1de1be1 100644 --- a/localPackages/BitFoundation/Package.swift +++ b/localPackages/BitFoundation/Package.swift @@ -14,9 +14,15 @@ let package = Package( targets: ["BitFoundation"] ) ], + dependencies: [ + .package(path: "../BitLogger") + ], targets: [ .target( name: "BitFoundation", + dependencies: [ + .product(name: "BitLogger", package: "BitLogger"), + ], path: "Sources" ), .testTarget( diff --git a/bitchat/Protocols/BinaryEncodingUtils.swift b/localPackages/BitFoundation/Sources/BitFoundation/BinaryEncodingUtils.swift similarity index 86% rename from bitchat/Protocols/BinaryEncodingUtils.swift rename to localPackages/BitFoundation/Sources/BitFoundation/BinaryEncodingUtils.swift index 8157d6a9..43d3ec5e 100644 --- a/bitchat/Protocols/BinaryEncodingUtils.swift +++ b/localPackages/BitFoundation/Sources/BitFoundation/BinaryEncodingUtils.swift @@ -5,15 +5,15 @@ // Binary encoding utilities for efficient protocol messages // -import Foundation -import BitFoundation +import struct Foundation.Data +import struct Foundation.Date // MARK: - Binary Encoding Utilities extension Data { // MARK: Writing - @inlinable mutating func appendUInt8(_ value: UInt8) { + @inlinable public mutating func appendUInt8(_ value: UInt8) { self.append(value) } @@ -35,7 +35,7 @@ extension Data { } } - mutating func appendString(_ string: String, maxLength: Int = 255) { + public mutating func appendString(_ string: String, maxLength: Int = 255) { guard let data = string.data(using: .utf8) else { return } let length = Swift.min(data.count, maxLength) @@ -48,7 +48,7 @@ extension Data { self.append(data.prefix(length)) } - mutating func appendData(_ data: Data, maxLength: Int = 65535) { + public mutating func appendData(_ data: Data, maxLength: Int = 65535) { let length = Swift.min(data.count, maxLength) if maxLength <= 255 { @@ -60,12 +60,12 @@ extension Data { self.append(data.prefix(length)) } - mutating func appendDate(_ date: Date) { + public mutating func appendDate(_ date: Date) { let timestamp = UInt64(date.timeIntervalSince1970 * 1000) // milliseconds self.appendUInt64(timestamp) } - mutating func appendUUID(_ uuid: String) { + public mutating func appendUUID(_ uuid: String) { // Convert UUID string to 16 bytes var uuidData = Data(count: 16) @@ -86,7 +86,7 @@ extension Data { // MARK: Reading - @inlinable func readUInt8(at offset: inout Int) -> UInt8? { + @inlinable public func readUInt8(at offset: inout Int) -> UInt8? { guard offset >= 0 && offset < self.count else { return nil } let value = self[offset] offset += 1 @@ -120,7 +120,7 @@ extension Data { return value } - func readString(at offset: inout Int, maxLength: Int = 255) -> String? { + public func readString(at offset: inout Int, maxLength: Int = 255) -> String? { let length: Int if maxLength <= 255 { @@ -139,7 +139,7 @@ extension Data { return String(data: stringData, encoding: .utf8) } - func readData(at offset: inout Int, maxLength: Int = 65535) -> Data? { + public func readData(at offset: inout Int, maxLength: Int = 65535) -> Data? { let length: Int if maxLength <= 255 { @@ -158,12 +158,12 @@ extension Data { return data } - func readDate(at offset: inout Int) -> Date? { + public func readDate(at offset: inout Int) -> Date? { guard let timestamp = readUInt64(at: &offset) else { return nil } return Date(timeIntervalSince1970: Double(timestamp) / 1000.0) } - func readUUID(at offset: inout Int) -> String? { + public func readUUID(at offset: inout Int) -> String? { guard offset + 16 <= self.count else { return nil } let uuidData = self[offset.. Data? { + public func readFixedBytes(at offset: inout Int, count: Int) -> Data? { guard offset + count <= self.count else { return nil } let data = self[offset.. Data { - // Find the first null byte - if let nullIndex = self.firstIndex(of: 0) { - return self.prefix(nullIndex) - } - return self - } -} +import struct Foundation.Data +import class Foundation.NSData +private import BitLogger /// Implements binary encoding and decoding for BitChat protocol messages. /// Provides static methods for converting between BitchatPacket objects and /// their binary wire format representation. /// - Note: All multi-byte values use network byte order (big-endian) -struct BinaryProtocol { - static let v1HeaderSize = 14 +public struct BinaryProtocol { + public static let v1HeaderSize = 14 static let v2HeaderSize = 16 - static let senderIDSize = 8 - static let recipientIDSize = 8 - static let signatureSize = 64 + public static let senderIDSize = 8 + public static let recipientIDSize = 8 + public static let signatureSize = 64 // Field offsets within packet header - struct Offsets { + public struct Offsets { static let version = 0 static let type = 1 static let ttl = 2 static let timestamp = 3 - static let flags = 11 // After version(1) + type(1) + ttl(1) + timestamp(8) + public static let flags = 11 // After version(1) + type(1) + ttl(1) + timestamp(8) } - static func headerSize(for version: UInt8) -> Int? { + public static func headerSize(for version: UInt8) -> Int? { switch version { case 1: return v1HeaderSize case 2: return v2HeaderSize @@ -133,11 +124,11 @@ struct BinaryProtocol { return version == 2 ? 4 : 2 } - struct Flags { - static let hasRecipient: UInt8 = 0x01 - static let hasSignature: UInt8 = 0x02 - static let isCompressed: UInt8 = 0x04 - static let hasRoute: UInt8 = 0x08 + public struct Flags { + public static let hasRecipient: UInt8 = 0x01 + public static let hasSignature: UInt8 = 0x02 + public static let isCompressed: UInt8 = 0x04 + public static let hasRoute: UInt8 = 0x08 static let isRSR: UInt8 = 0x10 } @@ -266,7 +257,7 @@ struct BinaryProtocol { } // Decode binary data to BitchatPacket - static func decode(_ data: Data) -> BitchatPacket? { + public static func decode(_ data: Data) -> BitchatPacket? { // Try decode as-is first (robust when padding wasn't applied) if let pkt = decodeCore(data) { return pkt } // If that fails, try after removing padding diff --git a/bitchat/Models/BitchatMessage.swift b/localPackages/BitFoundation/Sources/BitFoundation/BitchatMessage.swift similarity index 91% rename from bitchat/Models/BitchatMessage.swift rename to localPackages/BitFoundation/Sources/BitFoundation/BitchatMessage.swift index 002858cc..aa91eccc 100644 --- a/bitchat/Models/BitchatMessage.swift +++ b/localPackages/BitFoundation/Sources/BitFoundation/BitchatMessage.swift @@ -6,34 +6,39 @@ // For more information, see // -import Foundation -import BitFoundation +import class Foundation.DateFormatter + +import struct Foundation.AttributedString +import struct Foundation.Data +import struct Foundation.Date +import struct Foundation.TimeInterval +import struct Foundation.UUID /// Represents a user-visible message in the BitChat system. /// Handles both broadcast messages and private encrypted messages, /// with support for mentions, replies, and delivery tracking. /// - Note: This is the primary data model for chat messages -final class BitchatMessage: Codable { - let id: String - let sender: String - let content: String - let timestamp: Date - let isRelay: Bool - let originalSender: String? - let isPrivate: Bool - let recipientNickname: String? - let senderPeerID: PeerID? - let mentions: [String]? // Array of mentioned nicknames - var deliveryStatus: DeliveryStatus? // Delivery tracking - +public final class BitchatMessage: Codable { + public let id: String + public let sender: String + public let content: String + public let timestamp: Date + public let isRelay: Bool + public let originalSender: String? + public let isPrivate: Bool + public let recipientNickname: String? + public let senderPeerID: PeerID? + public let mentions: [String]? // Array of mentioned nicknames + public var deliveryStatus: DeliveryStatus? // Delivery tracking + // Cached formatted text (not included in Codable) private var _cachedFormattedText: [String: AttributedString] = [:] - func getCachedFormattedText(isDark: Bool, isSelf: Bool) -> AttributedString? { + public func getCachedFormattedText(isDark: Bool, isSelf: Bool) -> AttributedString? { return _cachedFormattedText["\(isDark)-\(isSelf)"] } - func setCachedFormattedText(_ text: AttributedString, isDark: Bool, isSelf: Bool) { + public func setCachedFormattedText(_ text: AttributedString, isDark: Bool, isSelf: Bool) { _cachedFormattedText["\(isDark)-\(isSelf)"] = text } @@ -43,7 +48,7 @@ final class BitchatMessage: Codable { case isPrivate, recipientNickname, senderPeerID, mentions, deliveryStatus } - init( + public init( id: String? = nil, sender: String, content: String, @@ -73,7 +78,7 @@ final class BitchatMessage: Codable { // MARK: - Equatable Conformance extension BitchatMessage: Equatable { - static func == (lhs: BitchatMessage, rhs: BitchatMessage) -> Bool { + public static func == (lhs: BitchatMessage, rhs: BitchatMessage) -> Bool { return lhs.id == rhs.id && lhs.sender == rhs.sender && lhs.content == rhs.content && @@ -331,14 +336,14 @@ extension BitchatMessage { return formatter }() - var formattedTimestamp: String { + public var formattedTimestamp: String { Self.timestampFormatter.string(from: timestamp) } } extension Array where Element == BitchatMessage { /// Filters out empty ones and deduplicate by ID while preserving order (from oldest to newest) - func cleanedAndDeduped() -> [Element] { + public func cleanedAndDeduped() -> [Element] { let arr = filter { $0.content.trimmed.isEmpty == false } guard arr.count > 1 else { return arr diff --git a/bitchat/Models/BitchatPacket.swift b/localPackages/BitFoundation/Sources/BitFoundation/BitchatPacket.swift similarity index 78% rename from bitchat/Models/BitchatPacket.swift rename to localPackages/BitFoundation/Sources/BitFoundation/BitchatPacket.swift index 004f5414..b46a552d 100644 --- a/bitchat/Models/BitchatPacket.swift +++ b/localPackages/BitFoundation/Sources/BitFoundation/BitchatPacket.swift @@ -6,26 +6,26 @@ // For more information, see // -import Foundation -import BitFoundation +import struct Foundation.Data +import struct Foundation.Date /// The core packet structure for all BitChat protocol messages. /// Encapsulates all data needed for routing through the mesh network, /// including TTL for hop limiting and optional encryption. /// - Note: Packets larger than BLE MTU (512 bytes) are automatically fragmented -struct BitchatPacket: Codable { +public struct BitchatPacket: Codable { let version: UInt8 - let type: UInt8 - let senderID: Data - let recipientID: Data? - let timestamp: UInt64 - let payload: Data - var signature: Data? - var ttl: UInt8 - var route: [Data]? - var isRSR: Bool + public let type: UInt8 + public let senderID: Data + public let recipientID: Data? + public let timestamp: UInt64 + public let payload: Data + public var signature: Data? + public var ttl: UInt8 + public var route: [Data]? + public var isRSR: Bool - init(type: UInt8, senderID: Data, recipientID: Data?, timestamp: UInt64, payload: Data, signature: Data?, ttl: UInt8, version: UInt8 = 1, route: [Data]? = nil, isRSR: Bool = false) { + public init(type: UInt8, senderID: Data, recipientID: Data?, timestamp: UInt64, payload: Data, signature: Data?, ttl: UInt8, version: UInt8 = 1, route: [Data]? = nil, isRSR: Bool = false) { self.version = version self.type = type self.senderID = senderID @@ -66,18 +66,18 @@ struct BitchatPacket: Codable { BinaryProtocol.encode(self) } - func toBinaryData(padding: Bool = true) -> Data? { + public func toBinaryData(padding: Bool = true) -> Data? { BinaryProtocol.encode(self, padding: padding) } // Backward-compatible helper (defaults to padded encoding) - func toBinaryData() -> Data? { + public func toBinaryData() -> Data? { toBinaryData(padding: true) } /// Create binary representation for signing (without signature and TTL fields) /// TTL is excluded because it changes during packet relay operations - func toBinaryDataForSigning() -> Data? { + public func toBinaryDataForSigning() -> Data? { // Create a copy without signature and with fixed TTL for signing // TTL must be excluded because it changes during relay let unsignedPacket = BitchatPacket( @@ -95,7 +95,7 @@ struct BitchatPacket: Codable { return BinaryProtocol.encode(unsignedPacket) } - static func from(_ data: Data) -> BitchatPacket? { + public static func from(_ data: Data) -> BitchatPacket? { BinaryProtocol.decode(data) } } diff --git a/bitchat/Utils/CompressionUtil.swift b/localPackages/BitFoundation/Sources/BitFoundation/CompressionUtil.swift similarity index 95% rename from bitchat/Utils/CompressionUtil.swift rename to localPackages/BitFoundation/Sources/BitFoundation/CompressionUtil.swift index 0e238ced..5bd7bd2b 100644 --- a/bitchat/Utils/CompressionUtil.swift +++ b/localPackages/BitFoundation/Sources/BitFoundation/CompressionUtil.swift @@ -6,12 +6,12 @@ // For more information, see // -import Foundation -import Compression +import struct Foundation.Data +private import Compression struct CompressionUtil { // Compression threshold - don't compress if data is smaller than this - static let compressionThreshold = TransportConfig.compressionThresholdBytes // bytes + static let compressionThreshold = Constants.compressionThresholdBytes // bytes // Compress data using zlib algorithm (most compatible) static func compress(_ data: Data) -> Data? { diff --git a/localPackages/BitFoundation/Sources/BitFoundation/Constants.swift b/localPackages/BitFoundation/Sources/BitFoundation/Constants.swift new file mode 100644 index 00000000..ac043d87 --- /dev/null +++ b/localPackages/BitFoundation/Sources/BitFoundation/Constants.swift @@ -0,0 +1,12 @@ +// +// Constants.swift +// BitFoundation +// +// This is free and unencumbered software released into the public domain. +// For more information, see +// + +enum Constants { + // Compression + static let compressionThresholdBytes: Int = 100 +} diff --git a/localPackages/BitFoundation/Sources/BitFoundation/DeliveryStatus.swift b/localPackages/BitFoundation/Sources/BitFoundation/DeliveryStatus.swift new file mode 100644 index 00000000..8f06ff74 --- /dev/null +++ b/localPackages/BitFoundation/Sources/BitFoundation/DeliveryStatus.swift @@ -0,0 +1,35 @@ +// +// DeliveryStatus.swift +// BitFoundation +// +// This is free and unencumbered software released into the public domain. +// For more information, see +// + +import struct Foundation.Date + +public enum DeliveryStatus: Codable, Equatable, Hashable { + case sending + case sent // Left our device + case delivered(to: String, at: Date) // Confirmed by recipient + case read(by: String, at: Date) // Seen by recipient + case failed(reason: String) + case partiallyDelivered(reached: Int, total: Int) // For rooms + + public var displayText: String { + switch self { + case .sending: + return "Sending..." + case .sent: + return "Sent" + case .delivered(let nickname, _): + return "Delivered to \(nickname)" + case .read(let nickname, _): + return "Read by \(nickname)" + case .failed(let reason): + return "Failed: \(reason)" + case .partiallyDelivered(let reached, let total): + return "Delivered to \(reached)/\(total)" + } + } +} diff --git a/bitchat/Utils/FileTransferLimits.swift b/localPackages/BitFoundation/Sources/BitFoundation/FileTransferLimits.swift similarity index 72% rename from bitchat/Utils/FileTransferLimits.swift rename to localPackages/BitFoundation/Sources/BitFoundation/FileTransferLimits.swift index e7fd7d27..4c54f79c 100644 --- a/bitchat/Utils/FileTransferLimits.swift +++ b/localPackages/BitFoundation/Sources/BitFoundation/FileTransferLimits.swift @@ -1,15 +1,13 @@ -import Foundation - /// Centralized thresholds for Bluetooth file transfers to keep payload sizes sane on constrained radios. -enum FileTransferLimits { +public enum FileTransferLimits { /// Absolute ceiling enforced for any file payload (voice, image, other). - static let maxPayloadBytes: Int = 1 * 1024 * 1024 // 1 MiB + public static let maxPayloadBytes: Int = 1 * 1024 * 1024 // 1 MiB /// Voice notes stay small for low-latency relays. - static let maxVoiceNoteBytes: Int = 512 * 1024 // 512 KiB + public static let maxVoiceNoteBytes: Int = 512 * 1024 // 512 KiB /// Compressed images after downscaling should comfortably fit under this budget. - static let maxImageBytes: Int = 512 * 1024 // 512 KiB + public static let maxImageBytes: Int = 512 * 1024 // 512 KiB /// Worst-case size once TLV metadata and binary packet framing are included for the largest payloads. - static let maxFramedFileBytes: Int = { + public static let maxFramedFileBytes: Int = { let maxMetadataBytes = Int(UInt16.max) * 2 // fileName + mimeType TLVs let tlvEnvelopeOverhead = 18 + maxMetadataBytes // TLV tags + lengths + metadata bytes let binaryEnvelopeOverhead = BinaryProtocol.v2HeaderSize @@ -19,7 +17,7 @@ enum FileTransferLimits { return maxPayloadBytes + tlvEnvelopeOverhead + binaryEnvelopeOverhead }() - static func isValidPayload(_ size: Int) -> Bool { + public static func isValidPayload(_ size: Int) -> Bool { size <= maxPayloadBytes } } diff --git a/localPackages/BitFoundation/Sources/BitFoundation/KeychainManagerProtocol.swift b/localPackages/BitFoundation/Sources/BitFoundation/KeychainManagerProtocol.swift new file mode 100644 index 00000000..ea78288e --- /dev/null +++ b/localPackages/BitFoundation/Sources/BitFoundation/KeychainManagerProtocol.swift @@ -0,0 +1,78 @@ +// +// KeychainManagerProtocol.swift +// BitFoundation +// +// This is free and unencumbered software released into the public domain. +// For more information, see +// + +import struct Foundation.Data +import class CoreFoundation.CFString +import typealias Darwin.OSStatus + +public protocol KeychainManagerProtocol { + func saveIdentityKey(_ keyData: Data, forKey key: String) -> Bool + func getIdentityKey(forKey key: String) -> Data? + func deleteIdentityKey(forKey key: String) -> Bool + func deleteAllKeychainData() -> Bool + + func secureClear(_ data: inout Data) + func secureClear(_ string: inout String) + + func verifyIdentityKeyExists() -> Bool + + // BCH-01-009: Methods with proper error classification + /// Get identity key with detailed result for error handling + func getIdentityKeyWithResult(forKey key: String) -> KeychainReadResult + /// Save identity key with detailed result for error handling + func saveIdentityKeyWithResult(_ keyData: Data, forKey key: String) -> KeychainSaveResult + + // MARK: - Generic Data Storage (consolidated from KeychainHelper) + /// Save data with a custom service name + func save(key: String, data: Data, service: String, accessible: CFString?) + /// Load data from a custom service + func load(key: String, service: String) -> Data? + /// Delete data from a custom service + func delete(key: String, service: String) +} + +// MARK: - Keychain Error Types +// BCH-01-009: Proper error classification to distinguish expected states from critical failures + +/// Result of a keychain read operation with proper error classification +public enum KeychainReadResult { + case success(Data) + case itemNotFound // Expected: key doesn't exist yet + case accessDenied // Critical: app lacks keychain access + case deviceLocked // Recoverable: device is locked + case authenticationFailed // Recoverable: biometric/passcode failed + case otherError(OSStatus) // Unexpected error + + public var isRecoverableError: Bool { + switch self { + case .deviceLocked, .authenticationFailed: + return true + default: + return false + } + } +} + +/// Result of a keychain save operation with proper error classification +public enum KeychainSaveResult { + case success + case duplicateItem // Can retry with update + case accessDenied // Critical: app lacks keychain access + case deviceLocked // Recoverable: device is locked + case storageFull // Critical: no space available + case otherError(OSStatus) + + public var isRecoverableError: Bool { + switch self { + case .duplicateItem, .deviceLocked: + return true + default: + return false + } + } +} diff --git a/bitchat/Models/MessagePadding.swift b/localPackages/BitFoundation/Sources/BitFoundation/MessagePadding.swift similarity index 98% rename from bitchat/Models/MessagePadding.swift rename to localPackages/BitFoundation/Sources/BitFoundation/MessagePadding.swift index c9acd795..0d29c8bc 100644 --- a/bitchat/Models/MessagePadding.swift +++ b/localPackages/BitFoundation/Sources/BitFoundation/MessagePadding.swift @@ -6,7 +6,7 @@ // For more information, see // -import Foundation +import struct Foundation.Data /// Provides privacy-preserving message padding to obscure actual content length. /// Uses PKCS#7-style padding with random bytes to prevent traffic analysis. diff --git a/localPackages/BitFoundation/Sources/BitFoundation/MessageType.swift b/localPackages/BitFoundation/Sources/BitFoundation/MessageType.swift new file mode 100644 index 00000000..5c54781f --- /dev/null +++ b/localPackages/BitFoundation/Sources/BitFoundation/MessageType.swift @@ -0,0 +1,39 @@ +// +// MessageType.swift +// BitFoundation +// +// This is free and unencumbered software released into the public domain. +// For more information, see +// + +/// Simplified BitChat protocol message types. +/// Reduced from 24 types to just 6 essential ones. +/// All private communication metadata (receipts, status) is embedded in noiseEncrypted payloads. +public enum MessageType: UInt8 { + // Public messages (unencrypted) + case announce = 0x01 // "I'm here" with nickname + case message = 0x02 // Public chat message + case leave = 0x03 // "I'm leaving" + case requestSync = 0x21 // GCS filter-based sync request (local-only) + + // Noise encryption + case noiseHandshake = 0x10 // Handshake (init or response determined by payload) + case noiseEncrypted = 0x11 // All encrypted payloads (messages, receipts, etc.) + + // Fragmentation (simplified) + case fragment = 0x20 // Single fragment type for large messages + case fileTransfer = 0x22 // Binary file/audio/image payloads + + public var description: String { + switch self { + case .announce: return "announce" + case .message: return "message" + case .leave: return "leave" + case .requestSync: return "requestSync" + case .noiseHandshake: return "noiseHandshake" + case .noiseEncrypted: return "noiseEncrypted" + case .fragment: return "fragment" + case .fileTransfer: return "fileTransfer" + } + } +} diff --git a/bitchatTests/Protocol/BinaryProtocolPaddingTests.swift b/localPackages/BitFoundation/Tests/BitFoundationTests/BinaryProtocolPaddingTests.swift similarity index 97% rename from bitchatTests/Protocol/BinaryProtocolPaddingTests.swift rename to localPackages/BitFoundation/Tests/BitFoundationTests/BinaryProtocolPaddingTests.swift index a5e3f44f..7e87fae5 100644 --- a/bitchatTests/Protocol/BinaryProtocolPaddingTests.swift +++ b/localPackages/BitFoundation/Tests/BitFoundationTests/BinaryProtocolPaddingTests.swift @@ -6,7 +6,7 @@ // import Testing -@testable import bitchat +@testable import BitFoundation struct BinaryProtocolPaddingTests { @Test func padded_vs_unpadded_length() throws { diff --git a/bitchatTests/Protocol/BinaryProtocolTests.swift b/localPackages/BitFoundation/Tests/BitFoundationTests/BinaryProtocolTests.swift similarity index 99% rename from bitchatTests/Protocol/BinaryProtocolTests.swift rename to localPackages/BitFoundation/Tests/BitFoundationTests/BinaryProtocolTests.swift index 61a5c906..4016080f 100644 --- a/bitchatTests/Protocol/BinaryProtocolTests.swift +++ b/localPackages/BitFoundation/Tests/BitFoundationTests/BinaryProtocolTests.swift @@ -8,8 +8,7 @@ import Testing import Foundation -import BitFoundation -@testable import bitchat +@testable import BitFoundation struct BinaryProtocolTests { @@ -806,3 +805,13 @@ struct BinaryProtocolTests { // We don't assert the result, just that no crash happens } } + +private extension Data { + func trimmingNullBytes() -> Data { + // Find the first null byte + if let nullIndex = self.firstIndex(of: 0) { + return self.prefix(nullIndex) + } + return self + } +} diff --git a/bitchatTests/KeychainErrorHandlingTests.swift b/localPackages/BitFoundation/Tests/BitFoundationTests/KeychainErrorHandlingTests.swift similarity index 67% rename from bitchatTests/KeychainErrorHandlingTests.swift rename to localPackages/BitFoundation/Tests/BitFoundationTests/KeychainErrorHandlingTests.swift index ad48c1e3..5d5f94f6 100644 --- a/bitchatTests/KeychainErrorHandlingTests.swift +++ b/localPackages/BitFoundation/Tests/BitFoundationTests/KeychainErrorHandlingTests.swift @@ -9,7 +9,7 @@ import Testing import Foundation -@testable import bitchat +import BitFoundation struct KeychainErrorHandlingTests { @@ -145,67 +145,6 @@ struct KeychainErrorHandlingTests { throw KeychainTestError("Expected save success, got \(saveResult)") } } - - // MARK: - NoiseEncryptionService Integration Tests - - @Test func noiseEncryptionService_generatesNewIdentityWhenMissing() throws { - let keychain = MockKeychain() - - // Create service with empty keychain - should generate new identity - let service = NoiseEncryptionService(keychain: keychain) - - // Should have generated and saved keys - #expect(service.getStaticPublicKeyData().count == 32) - #expect(service.getSigningPublicKeyData().count == 32) - - // Keys should be persisted - let noiseKeyResult = keychain.getIdentityKeyWithResult(forKey: "noiseStaticKey") - switch noiseKeyResult { - case .success: - // Expected - key was saved - break - default: - throw KeychainTestError("Expected noise key to be saved") - } - } - - @Test func noiseEncryptionService_loadsExistingIdentity() throws { - let keychain = MockKeychain() - - // Create first service to generate identity - let service1 = NoiseEncryptionService(keychain: keychain) - let originalPublicKey = service1.getStaticPublicKeyData() - let originalSigningKey = service1.getSigningPublicKeyData() - - // Create second service - should load same identity - let service2 = NoiseEncryptionService(keychain: keychain) - - #expect(service2.getStaticPublicKeyData() == originalPublicKey) - #expect(service2.getSigningPublicKeyData() == originalSigningKey) - } - - @Test func noiseEncryptionService_handlesAccessDeniedGracefully() throws { - let keychain = MockKeychain() - keychain.simulatedReadError = .accessDenied - - // Service should still initialize with ephemeral key - let service = NoiseEncryptionService(keychain: keychain) - - // Should have an identity (ephemeral) - #expect(service.getStaticPublicKeyData().count == 32) - #expect(service.getSigningPublicKeyData().count == 32) - } - - @Test func noiseEncryptionService_handlesDeviceLockedGracefully() throws { - let keychain = MockKeychain() - keychain.simulatedReadError = .deviceLocked - - // Service should still initialize with ephemeral key - let service = NoiseEncryptionService(keychain: keychain) - - // Should have an identity (ephemeral) - #expect(service.getStaticPublicKeyData().count == 32) - } } // Helper error type for tests diff --git a/localPackages/BitFoundation/Tests/BitFoundationTests/MockKeychain.swift b/localPackages/BitFoundation/Tests/BitFoundationTests/MockKeychain.swift new file mode 100644 index 00000000..5d4071ec --- /dev/null +++ b/localPackages/BitFoundation/Tests/BitFoundationTests/MockKeychain.swift @@ -0,0 +1,201 @@ +// +// MockKeychain.swift +// bitchat +// +// This is free and unencumbered software released into the public domain. +// For more information, see +// + +import Foundation +import BitFoundation + +// TODO: Create a module for test helpers +final class MockKeychain: KeychainManagerProtocol { + private var storage: [String: Data] = [:] + private var serviceStorage: [String: [String: Data]] = [:] + + // BCH-01-009: Configurable error simulation for testing + var simulatedReadError: KeychainReadResult? + var simulatedSaveError: KeychainSaveResult? + + func saveIdentityKey(_ keyData: Data, forKey key: String) -> Bool { + storage[key] = keyData + return true + } + + func getIdentityKey(forKey key: String) -> Data? { + storage[key] + } + + func deleteIdentityKey(forKey key: String) -> Bool { + storage.removeValue(forKey: key) + return true + } + + func deleteAllKeychainData() -> Bool { + storage.removeAll() + serviceStorage.removeAll() + return true + } + + func secureClear(_ data: inout Data) { + data = Data() + } + + func secureClear(_ string: inout String) { + string = "" + } + + func verifyIdentityKeyExists() -> Bool { + storage["identity_noiseStaticKey"] != nil + } + + // BCH-01-009: New methods with proper error classification + func getIdentityKeyWithResult(forKey key: String) -> KeychainReadResult { + if let simulated = simulatedReadError { + return simulated + } + if let data = storage[key] { + return .success(data) + } + return .itemNotFound + } + + func saveIdentityKeyWithResult(_ keyData: Data, forKey key: String) -> KeychainSaveResult { + if let simulated = simulatedSaveError { + return simulated + } + storage[key] = keyData + return .success + } + + // MARK: - Generic Data Storage (consolidated from KeychainHelper) + + func save(key: String, data: Data, service: String, accessible: CFString?) { + if serviceStorage[service] == nil { + serviceStorage[service] = [:] + } + serviceStorage[service]?[key] = data + } + + func load(key: String, service: String) -> Data? { + serviceStorage[service]?[key] + } + + func delete(key: String, service: String) { + serviceStorage[service]?.removeValue(forKey: key) + } +} + +/// Typealias for backwards compatibility with tests using MockKeychainHelper +typealias MockKeychainHelper = MockKeychain + +/// Mock keychain that tracks secureClear calls for testing DH secret clearing +final class TrackingMockKeychain: KeychainManagerProtocol { + private var storage: [String: Data] = [:] + private var serviceStorage: [String: [String: Data]] = [:] + + /// Thread-safe counter for secureClear calls + private let lock = NSLock() + private var _secureClearDataCallCount = 0 + private var _secureClearStringCallCount = 0 + + // BCH-01-009: Configurable error simulation for testing + var simulatedReadError: KeychainReadResult? + var simulatedSaveError: KeychainSaveResult? + + var secureClearDataCallCount: Int { + lock.lock() + defer { lock.unlock() } + return _secureClearDataCallCount + } + + var secureClearStringCallCount: Int { + lock.lock() + defer { lock.unlock() } + return _secureClearStringCallCount + } + + var totalSecureClearCallCount: Int { + return secureClearDataCallCount + secureClearStringCallCount + } + + func resetCounts() { + lock.lock() + defer { lock.unlock() } + _secureClearDataCallCount = 0 + _secureClearStringCallCount = 0 + } + + func saveIdentityKey(_ keyData: Data, forKey key: String) -> Bool { + storage[key] = keyData + return true + } + + func getIdentityKey(forKey key: String) -> Data? { + storage[key] + } + + func deleteIdentityKey(forKey key: String) -> Bool { + storage.removeValue(forKey: key) + return true + } + + func deleteAllKeychainData() -> Bool { + storage.removeAll() + serviceStorage.removeAll() + return true + } + + func secureClear(_ data: inout Data) { + lock.lock() + _secureClearDataCallCount += 1 + lock.unlock() + data = Data() + } + + func secureClear(_ string: inout String) { + lock.lock() + _secureClearStringCallCount += 1 + lock.unlock() + string = "" + } + + func verifyIdentityKeyExists() -> Bool { + storage["identity_noiseStaticKey"] != nil + } + + // BCH-01-009: New methods with proper error classification + func getIdentityKeyWithResult(forKey key: String) -> KeychainReadResult { + if let simulated = simulatedReadError { + return simulated + } + if let data = storage[key] { + return .success(data) + } + return .itemNotFound + } + + func saveIdentityKeyWithResult(_ keyData: Data, forKey key: String) -> KeychainSaveResult { + if let simulated = simulatedSaveError { + return simulated + } + storage[key] = keyData + return .success + } + + func save(key: String, data: Data, service: String, accessible: CFString?) { + if serviceStorage[service] == nil { + serviceStorage[service] = [:] + } + serviceStorage[service]?[key] = data + } + + func load(key: String, service: String) -> Data? { + serviceStorage[service]?[key] + } + + func delete(key: String, service: String) { + serviceStorage[service]?.removeValue(forKey: key) + } +} diff --git a/localPackages/BitFoundation/Tests/BitFoundationTests/TestConstants.swift b/localPackages/BitFoundation/Tests/BitFoundationTests/TestConstants.swift new file mode 100644 index 00000000..f2f7b35b --- /dev/null +++ b/localPackages/BitFoundation/Tests/BitFoundationTests/TestConstants.swift @@ -0,0 +1,28 @@ +// +// TestConstants.swift +// bitchatTests +// +// This is free and unencumbered software released into the public domain. +// For more information, see +// + +import Foundation + +// TODO: Create a module for test helpers +struct TestConstants { + static let defaultTimeout: TimeInterval = 5.0 + static let shortTimeout: TimeInterval = 1.0 + static let longTimeout: TimeInterval = 10.0 + + static let testNickname1 = "Alice" + static let testNickname2 = "Bob" + static let testNickname3 = "Charlie" + static let testNickname4 = "David" + + static let testMessage1 = "Hello, World!" + static let testMessage2 = "How are you?" + static let testMessage3 = "This is a test message" + static let testLongMessage = String(repeating: "This is a long message. ", count: 100) + + static let testSignature = Data(repeating: 0xAB, count: 64) +} diff --git a/localPackages/BitFoundation/Tests/BitFoundationTests/TestHelpers.swift b/localPackages/BitFoundation/Tests/BitFoundationTests/TestHelpers.swift new file mode 100644 index 00000000..5c8ca7c0 --- /dev/null +++ b/localPackages/BitFoundation/Tests/BitFoundationTests/TestHelpers.swift @@ -0,0 +1,143 @@ +// +// TestHelpers.swift +// bitchatTests +// +// This is free and unencumbered software released into the public domain. +// For more information, see +// + +import Foundation +import CryptoKit +@testable import BitFoundation + +// TODO: Create a module for test helpers +final class TestHelpers { + + // MARK: - Key Generation + + static func generateTestKeyPair() -> (privateKey: Curve25519.KeyAgreement.PrivateKey, publicKey: Curve25519.KeyAgreement.PublicKey) { + let privateKey = Curve25519.KeyAgreement.PrivateKey() + let publicKey = privateKey.publicKey + return (privateKey, publicKey) + } + + static func generateTestIdentity(peerID: String, nickname: String) -> (peerID: String, nickname: String, privateKey: Curve25519.KeyAgreement.PrivateKey, publicKey: Curve25519.KeyAgreement.PublicKey) { + let (privateKey, publicKey) = generateTestKeyPair() + return (peerID: peerID, nickname: nickname, privateKey: privateKey, publicKey: publicKey) + } + + // MARK: - Message Creation + + static func createTestMessage( + content: String = TestConstants.testMessage1, + sender: String = TestConstants.testNickname1, + senderPeerID: PeerID = PeerID(str: UUID().uuidString), + isPrivate: Bool = false, + recipientNickname: String? = nil, + mentions: [String]? = nil + ) -> BitchatMessage { + return BitchatMessage( + id: UUID().uuidString, + sender: sender, + content: content, + timestamp: Date(), + isRelay: false, + originalSender: nil, + isPrivate: isPrivate, + recipientNickname: recipientNickname, + senderPeerID: senderPeerID, + mentions: mentions + ) + } + + static func createTestPacket( + type: UInt8 = 0x01, + senderID: PeerID = PeerID(str: UUID().uuidString), + recipientID: PeerID? = nil, + payload: Data = "test payload".data(using: .utf8)!, + signature: Data? = nil, + ttl: UInt8 = 3 + ) -> BitchatPacket { + return BitchatPacket( + type: type, + senderID: senderID.id.data(using: .utf8)!, + recipientID: recipientID?.id.data(using: .utf8), + timestamp: UInt64(Date().timeIntervalSince1970 * 1000), + payload: payload, + signature: signature, + ttl: ttl + ) + } + + // MARK: - Data Generation + + static func generateRandomData(length: Int) -> Data { + var data = Data(count: length) + _ = data.withUnsafeMutableBytes { bytes in + SecRandomCopyBytes(kSecRandomDefault, length, bytes.baseAddress!) + } + return data + } + + static func generateTestPeerID() -> String { + return "PEER" + UUID().uuidString.prefix(8) + } + + // MARK: - Async Helpers + + static func waitFor(_ condition: @escaping () -> Bool, timeout: TimeInterval = TestConstants.defaultTimeout) async throws { + let start = Date() + while !condition() { + if Date().timeIntervalSince(start) > timeout { + throw TestError.timeout + } + try await sleep(0.01) + } + } + + @MainActor + static func waitUntil( + _ condition: @escaping () -> Bool, + timeout: TimeInterval = TestConstants.defaultTimeout, + pollInterval: TimeInterval = 0.01 + ) async -> Bool { + let start = Date() + while !condition() { + if Date().timeIntervalSince(start) > timeout { + return condition() + } + try? await sleep(pollInterval) + } + return true + } + + static func expectAsync( + timeout: TimeInterval = TestConstants.defaultTimeout, + operation: @escaping () async throws -> T + ) async throws -> T { + return try await withThrowingTaskGroup(of: T.self) { group in + group.addTask { + return try await operation() + } + + group.addTask { + try await sleep(1) + throw TestError.timeout + } + + let result = try await group.next()! + group.cancelAll() + return result + } + } +} + +enum TestError: Error { + case timeout + case unexpectedValue + case testFailure(String) +} + +func sleep(_ seconds: TimeInterval) async throws { + try await Task.sleep(nanoseconds: UInt64(seconds * 1_000_000_000)) +} From 602d2316efb7d29d47713ebaf7588c58ce220daa Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 19 Apr 2026 06:34:27 +0000 Subject: [PATCH 004/216] Automated update of relay data - Sun Apr 19 06:34:27 UTC 2026 --- relays/online_relays_gps.csv | 597 ++++++++++++++++++----------------- 1 file changed, 301 insertions(+), 296 deletions(-) diff --git a/relays/online_relays_gps.csv b/relays/online_relays_gps.csv index ff98357e..070df420 100644 --- a/relays/online_relays_gps.csv +++ b/relays/online_relays_gps.csv @@ -1,304 +1,309 @@ Relay URL,Latitude,Longitude -schnorr.me,43.6532,-79.3832 -nostr.computingcache.com,34.0356,-118.442 -nostr.oxtr.dev,50.4754,12.3683 -wot.codingarena.top,50.4754,12.3683 -relay.orangepill.ovh,49.1689,-0.358841 -offchain.pub,39.1585,-94.5728 -relay.veganostr.com,60.1699,24.9384 -strfry.atlantislabs.space,43.6532,-79.3832 -relay.plebeian.market,50.1109,8.68213 -kotukonostr.onrender.com,37.7775,-122.397 -rilo.nostria.app,43.6532,-79.3832 -nostr.2b9t.xyz,34.0549,-118.243 -nostr.ovia.to,43.6532,-79.3832 -plebchain.club,43.6532,-79.3832 -nostr-relay.zeabur.app,25.0797,121.234 -relay.trustr.ing,49.8667,-125.133 -vault.iris.to,43.6532,-79.3832 -lightning.red,53.3498,-6.26031 -nostr.mikoshi.de,50.1109,8.68213 -syb.lol,34.0549,-118.243 -relay.ngengine.org,43.6532,-79.3832 strfry.shock.network,39.0438,-77.4874 -relay.openfarmtools.org,60.1699,24.9384 -nostr-dev.wellorder.net,45.5201,-122.99 -nostr.nodesmap.com,59.3327,18.0656 -nostr.stakey.net,52.3676,4.90414 -relay.bithome.site,52.3563,4.95714 -relay.puresignal.news,43.6532,-79.3832 -strfry.elswa-dev.online,50.1109,8.68213 -relay.nyves.nl,51.1792,5.89444 -strfry.apps3.slidestr.net,40.4167,-3.70329 -social.amanah.eblessing.co,48.1046,11.6002 -inbox.mycelium.social,38.627,-90.1994 -relay.zone667.com,60.1699,24.9384 -nostr.rblb.it,43.7094,10.6582 -testrelay.era21.space,43.6532,-79.3832 -relay.agorist.space,52.3734,4.89406 -nostr.mom,50.4754,12.3683 -relay.ohstr.com,43.6532,-79.3832 -nostr.ac,38.958,-77.3592 -relay.toastr.net,40.8054,-74.0241 -nostr.bitcoiner.social,47.6743,-117.112 -nostr.carroarmato0.be,51.0368,3.21186 -nostrbtc.com,43.6532,-79.3832 -nostr.rtvslawenia.com,49.4543,11.0746 -relay.notoshi.win,13.966,101.513 -relay-dev.gulugulu.moe,43.6532,-79.3832 -nostr.tac.lol,47.4748,-122.273 -nrs-02.darkcloudarcade.com,39.9526,-75.1652 -ephemeral.snowflare.cc,43.6532,-79.3832 -nostr.chrissexton.org,43.6532,-79.3832 -nostr.pbfs.io,50.4754,12.3683 -strfry.bonsai.com,37.8716,-122.273 -nostr-server-production.up.railway.app,45.5019,-73.5674 -relay-fra.zombi.cloudrodion.com,48.8566,2.35222 -nostr-rs-relay-qj1h.onrender.com,37.7775,-122.397 -librerelay.aaroniumii.com,43.6532,-79.3832 -nostr-rs-relay.dev.fedibtc.com,39.0438,-77.4874 -nostr.rblb.it:7777,43.7094,10.6582 -nostriches.club,43.6532,-79.3832 -purplerelay.com,43.6532,-79.3832 -relay.earthly.city,34.0362,-118.443 -wot.rejecttheframe.xyz,43.6532,-79.3832 -relay.olas.app,50.4754,12.3683 -relay.binaryrobot.com,43.6532,-79.3832 -nostr.huszonegy.world,47.4979,19.0402 -nostr.thalheim.io,60.1699,24.9384 -nostr.islandarea.net,35.4669,-97.6473 -nostr-relay.nextblockvending.com,47.2343,-119.853 -nostr-relay.zimage.com,34.0549,-118.243 -nostr.thebiglake.org,32.71,-96.6745 -nostr-relay-1.trustlessenterprise.com,43.6532,-79.3832 -relay.devcsu.fr,48.8575,2.35138 -relay.getsafebox.app,43.6532,-79.3832 -inbox.scuba323.com,40.8218,-74.45 -ribo.us.nostria.app,43.6532,-79.3832 -relay.fundstr.me,42.3601,-71.0589 -ms.chinacounty.com,39.9042,116.407 -relay.0xchat.com,43.6532,-79.3832 -nostr.twinkle.lol,51.902,7.6657 -nostr.spicyz.io,43.6532,-79.3832 -bucket.coracle.social,37.7775,-122.397 -soloco.nl,43.6532,-79.3832 -nostr.sathoarder.com,48.5734,7.75211 -bitcoiner.social,47.6743,-117.112 -reraw.pbla2fish.cc,43.6532,-79.3832 -ribo.nostria.app,43.6532,-79.3832 -nostr.bgbitcoin.club,50.4754,12.3683 -relayrs.notoshi.win,43.6532,-79.3832 -okn.czas.plus,50.1109,8.68213 -nostr-relay.corb.net,38.8353,-104.822 -nostr.robosats.org,64.1476,-21.9392 -relay.lightning.pub,39.0438,-77.4874 -r.bitcoinhold.net,43.6532,-79.3832 -nostr-relay.xbytez.io,50.6924,3.20113 -relay.nostr-check.me,43.6532,-79.3832 -wot.dergigi.com,64.1476,-21.9392 -nostr-01.yakihonne.com,1.32123,103.695 -relay.layer.systems,49.0291,8.35695 -premium.primal.net,43.6532,-79.3832 -nostr-relay.cbrx.io,43.6532,-79.3832 -nostr.spaceshell.xyz,43.6532,-79.3832 -kasztanowa.bieda.it,43.6532,-79.3832 -relay.qstr.app,50.1109,8.68213 -nostr2.girino.org,43.6532,-79.3832 -nostr-verified.wellorder.net,45.5201,-122.99 -relay.paulstephenborile.com,49.4543,11.0746 -herbstmeister.com,34.0549,-118.243 -cache.trustr.ing,45.4473,-73.7533 -nostr-kyomu-haskell.onrender.com,37.7775,-122.397 -relay.lab.rytswd.com,49.4543,11.0746 -strfry.bitsbytom.com,51.4968,-0.018337 -relay.btcforplebs.com,43.6532,-79.3832 -relay.snotr.nl:49999,52.0195,4.42946 -relay.mostro.network,40.8302,-74.1299 -relay.klabo.world,47.2343,-119.853 -relay.kubo.watch,51.1792,5.89444 -relay.nostr.net,43.6532,-79.3832 -blossom.gnostr.cloud,43.6532,-79.3832 -nostr.myshosholoza.co.za,52.3913,4.66545 -relay.bitmacro.cloud,43.6532,-79.3832 -relay.nostrverse.net,43.6532,-79.3832 -relay.nostrcheck.me,43.6532,-79.3832 -nostr.luisschwab.net,43.6532,-79.3832 -relay.bikel.ink,60.1699,24.9384 -nostr.zoracle.org,45.6018,-121.185 -nostr.bitczat.pl,60.1699,24.9384 -relay.angor.io,48.1046,11.6002 -nostr.girino.org,43.6532,-79.3832 -relay.bullishbounty.com,43.6532,-79.3832 -relay.endfiat.money,59.3327,18.0656 -santo.iguanatech.net,40.8302,-74.1299 -nostr.88mph.life,52.1941,-2.21905 -nostr-03.dorafactory.org,1.35208,103.82 -relay01.lnfi.network,35.6764,139.65 -nostr.data.haus,50.4754,12.3683 -npub1spxdug4m3y24hpx5crm0el4zhkk0wafs8kp6m0xu0wecygqej2xqq8gyhx.fips.network,43.6532,-79.3832 -nrs-01.darkcloudarcade.com,39.1008,-94.5811 -relay.satmaxt.xyz,43.6532,-79.3832 -ynostr.yael.at,60.1699,24.9384 -relay.sigit.io,50.4754,12.3683 -relay.homeinhk.xyz,35.694,139.754 -relay.bnos.space,43.6532,-79.3832 -nittom.nostr1.com,38.6327,-90.1961 -relay.openresist.com,43.6532,-79.3832 -relay.mmwaves.de,48.8575,2.35138 -relay.artx.market,43.6548,-79.3885 -relay.lanavault.space,60.1699,24.9384 -eu.nostr.pikachat.org,49.4543,11.0746 -relay.satnam.pub,43.6532,-79.3832 -relay.keykeeper.world,40.7824,-74.0711 -relay.mccormick.cx,52.3563,4.95714 -nostr.aruku.kro.kr,37.3589,127.115 -x.kojira.io,43.6532,-79.3832 -relay.camelus.app,45.5201,-122.99 -purpura.cloud,43.6532,-79.3832 -relay.malxte.de,52.52,13.405 -relay.bao.network,43.6532,-79.3832 -relay.nostu.be,40.4167,-3.70329 -relay.bitcoindistrict.org,43.6532,-79.3832 -relay5.bitransfer.org,43.6532,-79.3832 -relay.tapestry.ninja,40.8054,-74.0241 -relay.edufeed.org,49.4521,11.0767 -relayone.soundhsa.com,39.1008,-94.5811 -nostr.quali.chat,60.1699,24.9384 -myvoiceourstory.org,37.3598,-121.981 nostr.4rs.nl,49.0291,8.35696 -fanfares.nostr1.com,38.6327,-90.1961 -freelay.sovbit.host,64.1476,-21.9392 -bcast.girino.org,43.6532,-79.3832 -seed-options-few-cache.trycloudflare.com,43.6532,-79.3832 -relay.dwadziesciajeden.pl,52.2297,21.0122 -satsage.xyz,37.3986,-121.964 -relay.satlantis.io,32.8769,-80.0114 -nostr-pub.wellorder.net,45.5201,-122.99 -relay-testnet.k8s.layer3.news,37.3387,-121.885 -nostr-rs-relay-ishosta.phamthanh.me,43.6532,-79.3832 -temp.iris.to,43.6532,-79.3832 -relay.wellorder.net,45.5201,-122.99 -relay.nostriot.com,41.5695,-83.9786 -relay.libernet.app,43.6532,-79.3832 -nostr.nadajnik.org,50.1109,8.68213 -nostr.na.social,43.6532,-79.3832 -wot.sudocarlos.com,43.6532,-79.3832 -relay.cypherflow.ai,48.8575,2.35138 -nostr.vulpem.com,49.4543,11.0746 +soloco.nl,43.6532,-79.3832 +relay.openfarmtools.org,60.1699,24.9384 +testrelay.era21.space,43.6532,-79.3832 relay.erybody.com,41.4513,-81.7021 -relay.agora.social,50.7383,15.0648 -nos.lol,50.4754,12.3683 -insta-relay.apps3.slidestr.net,40.4167,-3.70329 -relay.fckstate.net,59.3293,18.0686 -relay.bornheimer.app,51.5072,-0.127586 -chat-relay.zap-work.com,43.6532,-79.3832 -relay.ditto.pub,43.6532,-79.3832 -nostr.snowbla.de,60.1699,24.9384 -relay.jeffg.fyi,43.6532,-79.3832 -nostrcheck.me,43.6532,-79.3832 -bcast.seutoba.com.br,43.6532,-79.3832 -relay2.angor.io,48.1046,11.6002 -nostr.dlcdevkit.com,40.0992,-83.1141 -nostr.n7ekb.net,36.1527,-95.9902 -cs-relay.nostrdev.com,50.4754,12.3683 -ribo.eu.nostria.app,43.6532,-79.3832 -nostr.agentcampfire.com,52.3676,4.90414 -wot.nostr.place,32.7767,-96.797 -relay.anmore.me,49.281,-123.117 -relay.mostr.pub,43.6532,-79.3832 -adre.su,59.9311,30.3609 -nostr.self-determined.de,53.495,10.2542 -nostr.wecsats.io,43.6532,-79.3832 -theoutpost.life,64.1476,-21.9392 -relay.lanacoin-eternity.com,40.8302,-74.1299 -nostr.chaima.info,50.1109,8.68213 -r.0kb.io,32.789,-96.7989 -nostrue.com,40.8054,-74.0241 -nostr.hekster.org,37.3986,-121.964 -relay.guggero.org,46.5971,9.59652 -us-east.nostr.pikachat.org,39.0438,-77.4874 -relay.primal.net,43.6532,-79.3832 -nostrride.io,37.3986,-121.964 -relay.lacompagniemaximus.com,45.3147,-73.8785 -nostrelay.circum.space,52.3676,4.90414 -nostr.dpinkerton.com,39.1008,-94.5811 -nexus.libernet.app,43.6532,-79.3832 -dev.relay.edufeed.org,49.4521,11.0767 -nostr.defucc.me,50.1109,8.68213 -relay.npubhaus.com,43.6532,-79.3832 -strfry.openhoofd.nl,51.9229,4.40833 -nostr-relay.online,43.6532,-79.3832 -dev.relay.stream,43.6532,-79.3832 -relay.arx-ccn.com,50.4754,12.3683 -relay-rpi.edufeed.org,49.4521,11.0767 -relay.illuminodes.com,47.6061,-122.333 -relay.nostrhub.fr,48.1045,11.6004 -wot.shaving.kiwi,43.6532,-79.3832 -relay.agentry.com,42.8864,-78.8784 -bitchat.nostr1.com,38.6327,-90.1961 -relay.nostrian-conquest.com,41.223,-111.974 -no.str.cr,10.074,-84.2155 -nostr.blankfors.se,60.1699,24.9384 -bridge.tagomago.me,3.139,101.687 -nostr.ps1829.com,33.8851,130.883 -wot.nostr.party,36.1627,-86.7816 -relay.threenine.services,51.5222,-0.62916 -relay.mitchelltribe.com,39.0438,-77.4874 -relay.trotters.cc,43.6532,-79.3832 -nos.xmark.cc,50.6924,3.20113 -relay2.ngengine.org,43.6532,-79.3832 -relay.samt.st,40.8302,-74.1299 -relay.solife.me,43.6532,-79.3832 -relay.staging.commonshub.brussels,49.4543,11.0746 -orly-relay.imwald.eu,48.8575,2.35138 -prl.plus,55.7628,37.5983 -nostr.tadryanom.me,43.6532,-79.3832 -nstr.a0a1.space,52.3563,4.95714 -nostr.bond,50.1109,8.68213 -relay.islandbitcoin.com,12.8498,77.6545 -yabu.me,35.6092,139.73 -relay.minibolt.info,43.6532,-79.3832 -relay.shadowbip.com,50.1109,8.68213 -slick.mjex.me,39.0418,-77.4744 -articles.layer3.news,37.3387,-121.885 -nostr.night7.space,50.4754,12.3683 -relay2.liberbitworld.org,22.3193,114.169 -testnet-relay.samt.st,40.8302,-74.1299 -relay.wavlake.com,41.2619,-95.8608 -dev.architectcontext.aarpia.net,51.5222,-0.62916 -nostr.aruku.ovh,1.27994,103.849 -relay.nostrdice.com,-33.8688,151.209 -nostr.liberty.fans,36.9104,-89.5875 -testr.nymble.world,40.8054,-74.0241 -relay.gulugulu.moe,43.6532,-79.3832 -nostr-relay.psfoundation.info,39.0438,-77.4874 -relay.flashapp.me,43.6548,-79.3885 -relay.dreamith.to,43.6532,-79.3832 -relay-nl.zombi.cloudrodion.com,50.8943,6.06237 -nostrcity-club.fly.dev,48.8566,2.35222 -srtrelay.c-stellar.net,43.6532,-79.3832 -relay.sharegap.net,43.6532,-79.3832 -relay.nostrzh.org,43.6532,-79.3832 -nostr.overmind.lol,43.6532,-79.3832 -relay.nostriches.club,43.6532,-79.3832 -nostr.red5d.dev,43.6532,-79.3832 -relay.purplefrog.cloud,35.6916,139.768 -relay.cosmicbolt.net,37.3986,-121.964 relay-dev.satlantis.io,40.8302,-74.1299 -speakeasy.cellar.social,49.4543,11.0746 -relay.seq1.net,43.6532,-79.3832 -relay-freeharmonypeople.space,38.7223,-9.13934 -top.testrelay.top,43.6532,-79.3832 -relay.nostr.place,32.7767,-96.797 -holland-excited-charming-experiencing.trycloudflare.com,43.6532,-79.3832 -relay.cyphernomad.com,60.1699,24.9384 -relay.decentnewsroom.com,50.4754,12.3683 -spookstr2.nostr1.com,38.6327,-90.1961 -relay.wavefunc.live,41.8781,-87.6298 -wot.dtonon.com,43.6532,-79.3832 +nostr.ac,38.958,-77.3592 +relay.lacompagniemaximus.com,45.3147,-73.8785 +nostr.bgbitcoin.club,50.4754,12.3683 +nostr.aruku.kro.kr,37.3589,127.115 +nostr.carroarmato0.be,51.0368,3.21186 +relay.fountain.fm,43.6532,-79.3832 +inbox.mycelium.social,38.627,-90.1994 +nostr.tac.lol,47.4748,-122.273 +adre.su,59.9311,30.3609 nostr.simplex.icu,50.1109,8.68213 -relay.typedcypher.com,51.5072,-0.127586 -relay.bebond.net,43.6532,-79.3832 +relay.orangepill.ovh,49.1689,-0.358841 +relay.nostriches.club,43.6532,-79.3832 +relay.nostrian-conquest.com,41.223,-111.974 +nostr.bitczat.pl,60.1699,24.9384 +relay.mccormick.cx,52.3563,4.95714 +nostr-rs-relay-qj1h.onrender.com,37.7775,-122.397 +relay.agentry.com,42.8864,-78.8784 +relay.nostrzh.org,43.6532,-79.3832 +nostr.oxtr.dev,50.4754,12.3683 +relay.binaryrobot.com,43.6532,-79.3832 +nostr.snowbla.de,60.1699,24.9384 +nittom.nostr1.com,38.6327,-90.1961 +relay.endfiat.money,59.3327,18.0656 +relay.bitcoindistrict.org,43.6532,-79.3832 +relay.illuminodes.com,47.6061,-122.333 +relay.gulugulu.moe,43.6532,-79.3832 +relay.bornheimer.app,51.5072,-0.127586 +relay.bullishbounty.com,43.6532,-79.3832 +nostr.thebiglake.org,32.71,-96.6745 +nostr.myshosholoza.co.za,52.3913,4.66545 +nostr-03.dorafactory.org,1.35208,103.82 +nostr-relay.corb.net,38.8353,-104.822 +nos4smartnkind.tech,40.1872,44.5152 +relay.ditto.pub,43.6532,-79.3832 +nostr-relay.xbytez.io,50.6924,3.20113 +nostr-01.yakihonne.com,1.32123,103.695 +bcast.girino.org,43.6532,-79.3832 +nostr.2b9t.xyz,34.0549,-118.243 +insta-relay.apps3.slidestr.net,40.4167,-3.70329 +nostr.defucc.me,50.1109,8.68213 +nostr.nadajnik.org,50.1109,8.68213 +relay2.angor.io,48.1046,11.6002 +relay.libernet.app,43.6532,-79.3832 +nostr.blankfors.se,60.1699,24.9384 +relay.mitchelltribe.com,39.0438,-77.4874 +nostrbtc.com,43.6532,-79.3832 +nostr.ps1829.com,33.8851,130.883 +nostr.chaima.info,50.1109,8.68213 +relay02.lnfi.network,35.6764,139.65 +relay.mostr.pub,43.6532,-79.3832 +nostr.self-determined.de,53.495,10.2542 +cs-relay.nostrdev.com,50.4754,12.3683 +relay.lightning.pub,39.0438,-77.4874 +relay.ohstr.com,43.6532,-79.3832 +yabu.me,35.6092,139.73 +nostr.islandarea.net,35.4669,-97.6473 +dm-test-nostr-rs-42-disabled.samt.st,43.6532,-79.3832 +sandbox.registros.aarpia.net,50.1109,8.68213 +nostr.night7.space,50.4754,12.3683 +relay.bao.network,43.6532,-79.3832 +relay.wavlake.com,41.2619,-95.8608 +relay.klabo.world,47.2343,-119.853 +relay5.bitransfer.org,43.6532,-79.3832 +relay.threenine.services,51.5222,-0.62916 +relay.gorrdy.cz,43.6532,-79.3832 +nostrcity-club.fly.dev,48.8566,2.35222 +relay.plebeian.market,50.1109,8.68213 +wot.codingarena.top,50.4754,12.3683 +relayone.soundhsa.com,39.1008,-94.5811 +dm-test-strfry-generic.samt.st,43.6532,-79.3832 nostr.notribe.net,40.8302,-74.1299 +nostr.nodesmap.com,59.3327,18.0656 +strfry.apps3.slidestr.net,40.4167,-3.70329 +nostrride.io,37.3986,-121.964 +nostr.wecsats.io,43.6532,-79.3832 +nrs-01.darkcloudarcade.com,39.1008,-94.5811 +nostr.rblb.it:7777,43.7094,10.6582 +nostr.spaceshell.xyz,43.6532,-79.3832 +nostr.vulpem.com,49.4543,11.0746 +nostr.azzamo.net,52.2633,21.0283 +social.amanah.eblessing.co,48.1046,11.6002 +relay.wellorder.net,45.5201,-122.99 +top.testrelay.top,43.6532,-79.3832 +relay.bitmacro.cloud,43.6532,-79.3832 +relay.keykeeper.world,40.7824,-74.0711 0x-nostr-relay.fly.dev,48.8566,2.35222 -relay.samcorn.synology.me,39.2904,-76.6122 +offchain.pub,39.1585,-94.5728 +aeon.libretechsystems.xyz,55.486,9.86577 +relay.satlantis.io,32.8769,-80.0114 +relay.nostrdice.com,-33.8688,151.209 +artisanspyramid.libretechsystems.xyz,55.486,9.86577 +no.str.cr,10.074,-84.2155 +dm-test-strfry-discovery.samt.st,43.6532,-79.3832 +strfry.openhoofd.nl,51.9229,4.40833 +x.kojira.io,43.6532,-79.3832 +relay.lanavault.space,60.1699,24.9384 +relay.primal.net,43.6532,-79.3832 +relay.samt.st,40.8302,-74.1299 +relay.trotters.cc,43.6532,-79.3832 +nostr.twinkle.lol,51.902,7.6657 +bucket.coracle.social,37.7775,-122.397 +relay.bikel.ink,60.1699,24.9384 +librerelay.aaroniumii.com,43.6532,-79.3832 +relay.bebond.net,43.6532,-79.3832 +nostr.spicyz.io,43.6532,-79.3832 +nostrelay.circum.space,52.3676,4.90414 +strfry.bitsbytom.com,51.4968,-0.018337 +relay.malxte.de,52.52,13.405 +relay-nl.zombi.cloudrodion.com,50.8943,6.06237 +r.bitcoinhold.net,43.6532,-79.3832 +relay.mmwaves.de,48.8575,2.35138 +blossom.gnostr.cloud,43.6532,-79.3832 +relay.nostr.net,43.6532,-79.3832 +articles.layer3.news,37.3387,-121.885 +nostr.bond,50.1109,8.68213 +relay.vrtmrz.net,43.6532,-79.3832 +seed-options-few-cache.trycloudflare.com,43.6532,-79.3832 +nostr.girino.org,43.6532,-79.3832 +relay.tapestry.ninja,40.8054,-74.0241 +lightning.red,53.3498,-6.26031 +nostr.tadryanom.me,43.6532,-79.3832 +relay.sovbit.dev,60.1699,24.9384 +relay.nostrcheck.me,43.6532,-79.3832 +relay.purplefrog.cloud,35.6916,139.768 +purplerelay.com,43.6532,-79.3832 +wot.dtonon.com,43.6532,-79.3832 +schnorr.me,43.6532,-79.3832 +nostr.rblb.it,43.7094,10.6582 +nostr.quali.chat,60.1699,24.9384 +nostr-relay.zeabur.app,25.0797,121.234 +nostr.dpinkerton.com,39.1008,-94.5811 +nostr.overmind.lol,43.6532,-79.3832 +wot.shaving.kiwi,43.6532,-79.3832 +relay.getsafebox.app,43.6532,-79.3832 +relayone.geektank.ai,39.1008,-94.5811 +relay.angor.io,48.1046,11.6002 +relay.qstr.app,50.1109,8.68213 +srtrelay.c-stellar.net,43.6532,-79.3832 +ribo.us.nostria.app,43.6532,-79.3832 +nostr.n7ekb.net,36.1527,-95.9902 +bitchat.nostr1.com,38.6327,-90.1961 +wot.dergigi.com,64.1476,-21.9392 +relay.internationalright-wing.org,-22.5022,-48.7114 +wheat.happytavern.co,43.6532,-79.3832 +relay.nostrverse.net,43.6532,-79.3832 +relay.ngengine.org,43.6532,-79.3832 +freelay.sovbit.dev,60.1699,24.9384 +nostr-relay.cbrx.io,43.6532,-79.3832 +relay.camelus.app,45.5201,-122.99 +chat-relay.zap-work.com,43.6532,-79.3832 +relay.wavefunc.live,41.8781,-87.6298 +relay.ru.ac.th,13.7607,100.627 +relay.decentnewsroom.com,50.4754,12.3683 +relay.jeffg.fyi,43.6532,-79.3832 +strfry.atlantislabs.space,43.6532,-79.3832 +eu.nostr.pikachat.org,49.4543,11.0746 +nostr2.girino.org,43.6532,-79.3832 +speakeasy.cellar.social,49.4543,11.0746 +relay.satmaxt.xyz,43.6532,-79.3832 +relay-dev.gulugulu.moe,43.6532,-79.3832 +relay.olas.app,50.4754,12.3683 +relay-rpi.edufeed.org,49.4521,11.0767 +testnet-relay.samt.st,40.8302,-74.1299 +relay.openresist.com,43.6532,-79.3832 +relay.notoshi.win,13.3622,100.983 +relay.nostriot.com,41.5695,-83.9786 +myvoiceourstory.org,37.3598,-121.981 +spookstr2.nostr1.com,38.6327,-90.1961 +relay.satnam.pub,43.6532,-79.3832 +relay.liberbitworld.org,43.6532,-79.3832 +nrs-02.darkcloudarcade.com,39.9526,-75.1652 +okn.czas.plus,50.1109,8.68213 +ms.chinacounty.com,39.9042,116.407 +slick.mjex.me,39.0418,-77.4744 +wot.nostr.party,36.1627,-86.7816 +bitcoiner.social,47.6743,-117.112 +relay.solife.me,43.6532,-79.3832 +vault.iris.to,43.6532,-79.3832 +nostr.na.social,43.6532,-79.3832 +nostr.luisschwab.net,43.6532,-79.3832 +nostr.dlcdevkit.com,40.0992,-83.1141 +relay.nostu.be,40.4167,-3.70329 +dev.relay.stream,43.6532,-79.3832 +nostr-relay.zimage.com,34.0549,-118.243 +relay.zone667.com,60.1699,24.9384 +relay.artx.market,43.6548,-79.3885 +relay.npubhaus.com,43.6532,-79.3832 +nostr.robosats.org,64.1476,-21.9392 +relay.nostrhub.fr,48.1045,11.6004 +rusty-uat.siberian-albacore.ts.net:8443,35.6764,139.65 +relay-fra.zombi.cloudrodion.com,48.8566,2.35222 +premium.primal.net,43.6532,-79.3832 +nostr.88mph.life,52.1941,-2.21905 +relay.tagayasu.xyz,43.6715,-79.38 +nostr.rtvslawenia.com,49.4543,11.0746 +relay.fizx.uk,51.9194,19.1451 +relay.chorus.community,48.5333,10.7 +relay.directsponsor.net,42.8864,-78.8784 +relay.agorist.space,52.3734,4.89406 +nostr-pub.wellorder.net,45.5201,-122.99 +relay.paulstephenborile.com,49.4543,11.0746 +wot.nostr.place,32.7767,-96.797 +nostr-verified.wellorder.net,45.5201,-122.99 +nostr.liberty.fans,36.9104,-89.5875 +r.0kb.io,32.789,-96.7989 +nostr-kyomu-haskell.onrender.com,37.7775,-122.397 +relay.skynetnomad.com,31.8469,-81.5959 +relay.agora.social,50.7383,15.0648 +nostr.sathoarder.com,48.5734,7.75211 +relay.mostro.network,40.8302,-74.1299 +relay.bnos.space,43.6532,-79.3832 +fenrir-s.notoshi.win,43.6532,-79.3832 +relay.seq1.net,43.6532,-79.3832 +nostr-relay.psfoundation.info,39.0438,-77.4874 +nostr.bitcoiner.social,47.6743,-117.112 +relay.snotr.nl:49999,52.0195,4.42946 +relay.flashapp.me,43.6548,-79.3885 +dev-nostr.bityacht.io,43.6532,-79.3832 +nostr.mom,50.4754,12.3683 +nostr.faultables.net,43.6532,-79.3832 +relay.veganostr.com,60.1699,24.9384 +relay.bithome.site,52.3563,4.95714 +relay.staging.commonshub.brussels,49.4543,11.0746 +relay2.ngengine.org,43.6532,-79.3832 +kotukonostr.onrender.com,37.7775,-122.397 +satsage.xyz,37.3986,-121.964 +relayrs.notoshi.win,43.6532,-79.3832 +relay.layer.systems,49.0291,8.35695 +relay.0xchat.com,43.6532,-79.3832 +relay-testnet.k8s.layer3.news,37.3387,-121.885 +strfry.bonsai.com,37.8716,-122.273 +nexus.libernet.app,43.6532,-79.3832 +nos.lol,50.4754,12.3683 +nostr.thalheim.io,60.1699,24.9384 +video.czas.plus,50.1109,8.68213 +nostr-rs-relay-ishosta.phamthanh.me,43.6532,-79.3832 +relay.degmods.com,50.4754,12.3683 +herbstmeister.com,34.0549,-118.243 +nostriches.club,43.6532,-79.3832 +nostr2.thalheim.io,49.4543,11.0746 +relay.rushmi0.win,43.6532,-79.3832 +relay.trustr.ing,49.8667,-125.133 +relay.cosmicbolt.net,37.3986,-121.964 +theoutpost.life,64.1476,-21.9392 +relay.arx-ccn.com,50.4754,12.3683 +nostr-relay.nextblockvending.com,47.2343,-119.853 +wot.rejecttheframe.xyz,43.6532,-79.3832 +nostr-relay-1.trustlessenterprise.com,43.6532,-79.3832 +relay-freeharmonypeople.space,38.7223,-9.13934 +nostr.strelok.spb.ru,59.9311,30.3609 +ynostr.yael.at,60.1699,24.9384 +nostr.mikoshi.de,51.2821,6.78285 +dev.relay.edufeed.org,49.4521,11.0767 +relay-arg.zombi.cloudrodion.com,1.35208,103.82 +librepress.libretechsystems.xyz,55.4724,9.87335 +relay.sigit.io,50.4754,12.3683 +nostr.computingcache.com,34.0356,-118.442 +kasztanowa.bieda.it,43.6532,-79.3832 +relay.devcsu.fr,48.8575,2.35138 +us-east.nostr.pikachat.org,39.0438,-77.4874 +nostrcheck.me,43.6532,-79.3832 +nostr-relay.online,43.6532,-79.3832 +ribo.eu.nostria.app,43.6532,-79.3832 +relay.nostr-check.me,43.6532,-79.3832 +ithurtswhenip.ee,51.223,6.78245 +relay.lanacoin-eternity.com,40.8302,-74.1299 +nostr.zoracle.org,45.6018,-121.185 +purpura.cloud,43.6532,-79.3832 +orly-relay.imwald.eu,48.8575,2.35138 +nostr.spacecitynode.com,29.7057,-95.2706 +nostr-dev.wellorder.net,45.5201,-122.99 +syb.lol,34.0549,-118.243 +nostr-rs-relay.dev.fedibtc.com,39.0438,-77.4874 +cache.trustr.ing,45.4473,-73.7533 +relay.edufeed.org,49.4521,11.0767 +test.thedude.cloud,50.1109,8.68213 +relay.lab.rytswd.com,49.4543,11.0746 +relay.islandbitcoin.com,12.8498,77.6545 +nostr.data.haus,50.4754,12.3683 +relay.laantungir.net,-19.4692,-42.5315 +relay.anmore.me,49.281,-123.117 +nostr-relay.amethyst.name,39.0067,-77.4291 +nostr.pbfs.io,50.4754,12.3683 +relay.wisp.talk,49.4543,11.0746 +reraw.pbla2fish.cc,43.6532,-79.3832 +relay.nostr.place,32.7767,-96.797 +relay.homeinhk.xyz,35.694,139.754 +fanfares.nostr1.com,38.6327,-90.1961 +relay.sloannetworks.com,37.5234,-77.3158 +ephemeral.snowflare.cc,43.6532,-79.3832 +temp.iris.to,43.6532,-79.3832 +nostr.hekster.org,37.3986,-121.964 +v-relay.d02.vrtmrz.net,34.6937,135.502 +rilo.nostria.app,43.6532,-79.3832 +ribo.nostria.app,43.6532,-79.3832 +relay.shadowbip.com,50.1109,8.68213 +nostr.stakey.net,52.3676,4.90414 +relay.minibolt.info,43.6532,-79.3832 +prl.plus,55.7628,37.5983 +relay.dwadziesciajeden.pl,52.2297,21.0122 +freelay.sovbit.host,64.1476,-21.9392 From bafa461f26bdb11467a5161eb7474962e0be4351 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 26 Apr 2026 06:37:54 +0000 Subject: [PATCH 005/216] Automated update of relay data - Sun Apr 26 06:37:54 UTC 2026 --- relays/online_relays_gps.csv | 598 +++++++++++++++++------------------ 1 file changed, 294 insertions(+), 304 deletions(-) diff --git a/relays/online_relays_gps.csv b/relays/online_relays_gps.csv index 070df420..b6ed6cba 100644 --- a/relays/online_relays_gps.csv +++ b/relays/online_relays_gps.csv @@ -1,309 +1,299 @@ Relay URL,Latitude,Longitude -strfry.shock.network,39.0438,-77.4874 -nostr.4rs.nl,49.0291,8.35696 -soloco.nl,43.6532,-79.3832 -relay.openfarmtools.org,60.1699,24.9384 -testrelay.era21.space,43.6532,-79.3832 -relay.erybody.com,41.4513,-81.7021 -relay-dev.satlantis.io,40.8302,-74.1299 -nostr.ac,38.958,-77.3592 -relay.lacompagniemaximus.com,45.3147,-73.8785 -nostr.bgbitcoin.club,50.4754,12.3683 -nostr.aruku.kro.kr,37.3589,127.115 -nostr.carroarmato0.be,51.0368,3.21186 -relay.fountain.fm,43.6532,-79.3832 -inbox.mycelium.social,38.627,-90.1994 -nostr.tac.lol,47.4748,-122.273 -adre.su,59.9311,30.3609 nostr.simplex.icu,50.1109,8.68213 -relay.orangepill.ovh,49.1689,-0.358841 -relay.nostriches.club,43.6532,-79.3832 -relay.nostrian-conquest.com,41.223,-111.974 -nostr.bitczat.pl,60.1699,24.9384 -relay.mccormick.cx,52.3563,4.95714 -nostr-rs-relay-qj1h.onrender.com,37.7775,-122.397 -relay.agentry.com,42.8864,-78.8784 -relay.nostrzh.org,43.6532,-79.3832 -nostr.oxtr.dev,50.4754,12.3683 -relay.binaryrobot.com,43.6532,-79.3832 -nostr.snowbla.de,60.1699,24.9384 -nittom.nostr1.com,38.6327,-90.1961 -relay.endfiat.money,59.3327,18.0656 -relay.bitcoindistrict.org,43.6532,-79.3832 -relay.illuminodes.com,47.6061,-122.333 -relay.gulugulu.moe,43.6532,-79.3832 -relay.bornheimer.app,51.5072,-0.127586 -relay.bullishbounty.com,43.6532,-79.3832 -nostr.thebiglake.org,32.71,-96.6745 -nostr.myshosholoza.co.za,52.3913,4.66545 -nostr-03.dorafactory.org,1.35208,103.82 -nostr-relay.corb.net,38.8353,-104.822 -nos4smartnkind.tech,40.1872,44.5152 -relay.ditto.pub,43.6532,-79.3832 -nostr-relay.xbytez.io,50.6924,3.20113 -nostr-01.yakihonne.com,1.32123,103.695 -bcast.girino.org,43.6532,-79.3832 -nostr.2b9t.xyz,34.0549,-118.243 -insta-relay.apps3.slidestr.net,40.4167,-3.70329 -nostr.defucc.me,50.1109,8.68213 -nostr.nadajnik.org,50.1109,8.68213 -relay2.angor.io,48.1046,11.6002 -relay.libernet.app,43.6532,-79.3832 -nostr.blankfors.se,60.1699,24.9384 -relay.mitchelltribe.com,39.0438,-77.4874 -nostrbtc.com,43.6532,-79.3832 -nostr.ps1829.com,33.8851,130.883 -nostr.chaima.info,50.1109,8.68213 -relay02.lnfi.network,35.6764,139.65 -relay.mostr.pub,43.6532,-79.3832 -nostr.self-determined.de,53.495,10.2542 -cs-relay.nostrdev.com,50.4754,12.3683 -relay.lightning.pub,39.0438,-77.4874 -relay.ohstr.com,43.6532,-79.3832 -yabu.me,35.6092,139.73 -nostr.islandarea.net,35.4669,-97.6473 -dm-test-nostr-rs-42-disabled.samt.st,43.6532,-79.3832 -sandbox.registros.aarpia.net,50.1109,8.68213 -nostr.night7.space,50.4754,12.3683 -relay.bao.network,43.6532,-79.3832 -relay.wavlake.com,41.2619,-95.8608 -relay.klabo.world,47.2343,-119.853 -relay5.bitransfer.org,43.6532,-79.3832 -relay.threenine.services,51.5222,-0.62916 -relay.gorrdy.cz,43.6532,-79.3832 -nostrcity-club.fly.dev,48.8566,2.35222 -relay.plebeian.market,50.1109,8.68213 -wot.codingarena.top,50.4754,12.3683 -relayone.soundhsa.com,39.1008,-94.5811 -dm-test-strfry-generic.samt.st,43.6532,-79.3832 -nostr.notribe.net,40.8302,-74.1299 -nostr.nodesmap.com,59.3327,18.0656 -strfry.apps3.slidestr.net,40.4167,-3.70329 -nostrride.io,37.3986,-121.964 -nostr.wecsats.io,43.6532,-79.3832 -nrs-01.darkcloudarcade.com,39.1008,-94.5811 -nostr.rblb.it:7777,43.7094,10.6582 -nostr.spaceshell.xyz,43.6532,-79.3832 -nostr.vulpem.com,49.4543,11.0746 -nostr.azzamo.net,52.2633,21.0283 -social.amanah.eblessing.co,48.1046,11.6002 -relay.wellorder.net,45.5201,-122.99 -top.testrelay.top,43.6532,-79.3832 -relay.bitmacro.cloud,43.6532,-79.3832 -relay.keykeeper.world,40.7824,-74.0711 -0x-nostr-relay.fly.dev,48.8566,2.35222 -offchain.pub,39.1585,-94.5728 -aeon.libretechsystems.xyz,55.486,9.86577 -relay.satlantis.io,32.8769,-80.0114 -relay.nostrdice.com,-33.8688,151.209 -artisanspyramid.libretechsystems.xyz,55.486,9.86577 -no.str.cr,10.074,-84.2155 -dm-test-strfry-discovery.samt.st,43.6532,-79.3832 -strfry.openhoofd.nl,51.9229,4.40833 -x.kojira.io,43.6532,-79.3832 -relay.lanavault.space,60.1699,24.9384 -relay.primal.net,43.6532,-79.3832 -relay.samt.st,40.8302,-74.1299 -relay.trotters.cc,43.6532,-79.3832 -nostr.twinkle.lol,51.902,7.6657 -bucket.coracle.social,37.7775,-122.397 -relay.bikel.ink,60.1699,24.9384 -librerelay.aaroniumii.com,43.6532,-79.3832 -relay.bebond.net,43.6532,-79.3832 -nostr.spicyz.io,43.6532,-79.3832 -nostrelay.circum.space,52.3676,4.90414 -strfry.bitsbytom.com,51.4968,-0.018337 -relay.malxte.de,52.52,13.405 -relay-nl.zombi.cloudrodion.com,50.8943,6.06237 -r.bitcoinhold.net,43.6532,-79.3832 -relay.mmwaves.de,48.8575,2.35138 -blossom.gnostr.cloud,43.6532,-79.3832 -relay.nostr.net,43.6532,-79.3832 -articles.layer3.news,37.3387,-121.885 -nostr.bond,50.1109,8.68213 -relay.vrtmrz.net,43.6532,-79.3832 -seed-options-few-cache.trycloudflare.com,43.6532,-79.3832 -nostr.girino.org,43.6532,-79.3832 -relay.tapestry.ninja,40.8054,-74.0241 -lightning.red,53.3498,-6.26031 -nostr.tadryanom.me,43.6532,-79.3832 -relay.sovbit.dev,60.1699,24.9384 -relay.nostrcheck.me,43.6532,-79.3832 -relay.purplefrog.cloud,35.6916,139.768 -purplerelay.com,43.6532,-79.3832 -wot.dtonon.com,43.6532,-79.3832 -schnorr.me,43.6532,-79.3832 -nostr.rblb.it,43.7094,10.6582 -nostr.quali.chat,60.1699,24.9384 -nostr-relay.zeabur.app,25.0797,121.234 -nostr.dpinkerton.com,39.1008,-94.5811 -nostr.overmind.lol,43.6532,-79.3832 -wot.shaving.kiwi,43.6532,-79.3832 -relay.getsafebox.app,43.6532,-79.3832 -relayone.geektank.ai,39.1008,-94.5811 -relay.angor.io,48.1046,11.6002 -relay.qstr.app,50.1109,8.68213 -srtrelay.c-stellar.net,43.6532,-79.3832 -ribo.us.nostria.app,43.6532,-79.3832 -nostr.n7ekb.net,36.1527,-95.9902 -bitchat.nostr1.com,38.6327,-90.1961 -wot.dergigi.com,64.1476,-21.9392 -relay.internationalright-wing.org,-22.5022,-48.7114 -wheat.happytavern.co,43.6532,-79.3832 -relay.nostrverse.net,43.6532,-79.3832 -relay.ngengine.org,43.6532,-79.3832 -freelay.sovbit.dev,60.1699,24.9384 -nostr-relay.cbrx.io,43.6532,-79.3832 -relay.camelus.app,45.5201,-122.99 -chat-relay.zap-work.com,43.6532,-79.3832 -relay.wavefunc.live,41.8781,-87.6298 -relay.ru.ac.th,13.7607,100.627 -relay.decentnewsroom.com,50.4754,12.3683 -relay.jeffg.fyi,43.6532,-79.3832 -strfry.atlantislabs.space,43.6532,-79.3832 -eu.nostr.pikachat.org,49.4543,11.0746 -nostr2.girino.org,43.6532,-79.3832 -speakeasy.cellar.social,49.4543,11.0746 -relay.satmaxt.xyz,43.6532,-79.3832 -relay-dev.gulugulu.moe,43.6532,-79.3832 -relay.olas.app,50.4754,12.3683 -relay-rpi.edufeed.org,49.4521,11.0767 -testnet-relay.samt.st,40.8302,-74.1299 -relay.openresist.com,43.6532,-79.3832 -relay.notoshi.win,13.3622,100.983 -relay.nostriot.com,41.5695,-83.9786 -myvoiceourstory.org,37.3598,-121.981 -spookstr2.nostr1.com,38.6327,-90.1961 -relay.satnam.pub,43.6532,-79.3832 -relay.liberbitworld.org,43.6532,-79.3832 -nrs-02.darkcloudarcade.com,39.9526,-75.1652 -okn.czas.plus,50.1109,8.68213 -ms.chinacounty.com,39.9042,116.407 -slick.mjex.me,39.0418,-77.4744 -wot.nostr.party,36.1627,-86.7816 -bitcoiner.social,47.6743,-117.112 -relay.solife.me,43.6532,-79.3832 -vault.iris.to,43.6532,-79.3832 -nostr.na.social,43.6532,-79.3832 -nostr.luisschwab.net,43.6532,-79.3832 -nostr.dlcdevkit.com,40.0992,-83.1141 -relay.nostu.be,40.4167,-3.70329 -dev.relay.stream,43.6532,-79.3832 -nostr-relay.zimage.com,34.0549,-118.243 -relay.zone667.com,60.1699,24.9384 -relay.artx.market,43.6548,-79.3885 -relay.npubhaus.com,43.6532,-79.3832 -nostr.robosats.org,64.1476,-21.9392 -relay.nostrhub.fr,48.1045,11.6004 -rusty-uat.siberian-albacore.ts.net:8443,35.6764,139.65 -relay-fra.zombi.cloudrodion.com,48.8566,2.35222 -premium.primal.net,43.6532,-79.3832 -nostr.88mph.life,52.1941,-2.21905 -relay.tagayasu.xyz,43.6715,-79.38 -nostr.rtvslawenia.com,49.4543,11.0746 -relay.fizx.uk,51.9194,19.1451 -relay.chorus.community,48.5333,10.7 -relay.directsponsor.net,42.8864,-78.8784 -relay.agorist.space,52.3734,4.89406 -nostr-pub.wellorder.net,45.5201,-122.99 -relay.paulstephenborile.com,49.4543,11.0746 -wot.nostr.place,32.7767,-96.797 -nostr-verified.wellorder.net,45.5201,-122.99 -nostr.liberty.fans,36.9104,-89.5875 -r.0kb.io,32.789,-96.7989 -nostr-kyomu-haskell.onrender.com,37.7775,-122.397 -relay.skynetnomad.com,31.8469,-81.5959 -relay.agora.social,50.7383,15.0648 -nostr.sathoarder.com,48.5734,7.75211 -relay.mostro.network,40.8302,-74.1299 -relay.bnos.space,43.6532,-79.3832 -fenrir-s.notoshi.win,43.6532,-79.3832 -relay.seq1.net,43.6532,-79.3832 -nostr-relay.psfoundation.info,39.0438,-77.4874 -nostr.bitcoiner.social,47.6743,-117.112 -relay.snotr.nl:49999,52.0195,4.42946 -relay.flashapp.me,43.6548,-79.3885 -dev-nostr.bityacht.io,43.6532,-79.3832 -nostr.mom,50.4754,12.3683 -nostr.faultables.net,43.6532,-79.3832 -relay.veganostr.com,60.1699,24.9384 -relay.bithome.site,52.3563,4.95714 -relay.staging.commonshub.brussels,49.4543,11.0746 -relay2.ngengine.org,43.6532,-79.3832 -kotukonostr.onrender.com,37.7775,-122.397 -satsage.xyz,37.3986,-121.964 -relayrs.notoshi.win,43.6532,-79.3832 -relay.layer.systems,49.0291,8.35695 -relay.0xchat.com,43.6532,-79.3832 -relay-testnet.k8s.layer3.news,37.3387,-121.885 -strfry.bonsai.com,37.8716,-122.273 -nexus.libernet.app,43.6532,-79.3832 -nos.lol,50.4754,12.3683 -nostr.thalheim.io,60.1699,24.9384 -video.czas.plus,50.1109,8.68213 -nostr-rs-relay-ishosta.phamthanh.me,43.6532,-79.3832 -relay.degmods.com,50.4754,12.3683 -herbstmeister.com,34.0549,-118.243 -nostriches.club,43.6532,-79.3832 -nostr2.thalheim.io,49.4543,11.0746 -relay.rushmi0.win,43.6532,-79.3832 -relay.trustr.ing,49.8667,-125.133 -relay.cosmicbolt.net,37.3986,-121.964 -theoutpost.life,64.1476,-21.9392 -relay.arx-ccn.com,50.4754,12.3683 -nostr-relay.nextblockvending.com,47.2343,-119.853 -wot.rejecttheframe.xyz,43.6532,-79.3832 -nostr-relay-1.trustlessenterprise.com,43.6532,-79.3832 -relay-freeharmonypeople.space,38.7223,-9.13934 -nostr.strelok.spb.ru,59.9311,30.3609 -ynostr.yael.at,60.1699,24.9384 -nostr.mikoshi.de,51.2821,6.78285 -dev.relay.edufeed.org,49.4521,11.0767 -relay-arg.zombi.cloudrodion.com,1.35208,103.82 -librepress.libretechsystems.xyz,55.4724,9.87335 -relay.sigit.io,50.4754,12.3683 -nostr.computingcache.com,34.0356,-118.442 -kasztanowa.bieda.it,43.6532,-79.3832 -relay.devcsu.fr,48.8575,2.35138 -us-east.nostr.pikachat.org,39.0438,-77.4874 -nostrcheck.me,43.6532,-79.3832 -nostr-relay.online,43.6532,-79.3832 -ribo.eu.nostria.app,43.6532,-79.3832 -relay.nostr-check.me,43.6532,-79.3832 -ithurtswhenip.ee,51.223,6.78245 -relay.lanacoin-eternity.com,40.8302,-74.1299 -nostr.zoracle.org,45.6018,-121.185 -purpura.cloud,43.6532,-79.3832 -orly-relay.imwald.eu,48.8575,2.35138 -nostr.spacecitynode.com,29.7057,-95.2706 -nostr-dev.wellorder.net,45.5201,-122.99 -syb.lol,34.0549,-118.243 -nostr-rs-relay.dev.fedibtc.com,39.0438,-77.4874 -cache.trustr.ing,45.4473,-73.7533 -relay.edufeed.org,49.4521,11.0767 -test.thedude.cloud,50.1109,8.68213 -relay.lab.rytswd.com,49.4543,11.0746 -relay.islandbitcoin.com,12.8498,77.6545 -nostr.data.haus,50.4754,12.3683 -relay.laantungir.net,-19.4692,-42.5315 -relay.anmore.me,49.281,-123.117 -nostr-relay.amethyst.name,39.0067,-77.4291 -nostr.pbfs.io,50.4754,12.3683 -relay.wisp.talk,49.4543,11.0746 -reraw.pbla2fish.cc,43.6532,-79.3832 -relay.nostr.place,32.7767,-96.797 -relay.homeinhk.xyz,35.694,139.754 -fanfares.nostr1.com,38.6327,-90.1961 -relay.sloannetworks.com,37.5234,-77.3158 -ephemeral.snowflare.cc,43.6532,-79.3832 -temp.iris.to,43.6532,-79.3832 -nostr.hekster.org,37.3986,-121.964 v-relay.d02.vrtmrz.net,34.6937,135.502 -rilo.nostria.app,43.6532,-79.3832 -ribo.nostria.app,43.6532,-79.3832 -relay.shadowbip.com,50.1109,8.68213 -nostr.stakey.net,52.3676,4.90414 +relay.angor.io,48.1046,11.6002 +nostr.twinkle.lol,51.902,7.6657 +relay.klabo.world,47.2343,-119.853 +cache.trustr.ing,45.4473,-73.7533 +soloco.nl,43.6532,-79.3832 +rusty-uat.siberian-albacore.ts.net:8443,35.6764,139.65 +relay.artx.market,43.6548,-79.3885 +relay.lacompagniemaximus.com,45.3147,-73.8785 +relay.qstr.app,50.1109,8.68213 +nostr.islandarea.net,35.4669,-97.6473 +relay.homeinhk.xyz,35.694,139.754 +nostr.overmind.lol,43.6532,-79.3832 +no.str.cr,10.074,-84.2155 +relay.nostrcheck.me,43.6532,-79.3832 +wot.makenomistakes.ca,43.7064,-79.3986 +nostr.computingcache.com,34.0356,-118.442 +relay.bebond.net,43.6532,-79.3832 +nostr.luisschwab.net,43.6532,-79.3832 +strfry.bitsbytom.com,51.4968,-0.018337 +nostr.2b9t.xyz,34.0549,-118.243 +wot.dergigi.com,64.1476,-21.9392 +offchain.pub,39.1585,-94.5728 +nostr-kyomu-haskell.onrender.com,37.7775,-122.397 +relay.lab.rytswd.com,49.4543,11.0746 +relay.hook.cafe,43.6532,-79.3832 +nostr-relay.cbrx.io,43.6532,-79.3832 +testnet-relay.samt.st,40.8302,-74.1299 relay.minibolt.info,43.6532,-79.3832 +nostr.na.social,43.6532,-79.3832 +relay.erybody.com,41.4513,-81.7021 +relay.malxte.de,52.52,13.405 +kasztanowa.bieda.it,43.6532,-79.3832 +relay.internationalright-wing.org,-22.5022,-48.7114 +relay.purplefrog.cloud,35.6916,139.768 +nostr.vulpem.com,49.4543,11.0746 +relay.arx-ccn.com,50.4754,12.3683 +relay.mitchelltribe.com,39.0438,-77.4874 +nostr.bond,50.1109,8.68213 +bitcoiner.social,47.6743,-117.112 +slick.mjex.me,39.0418,-77.4744 +relay.libernet.app,43.6532,-79.3832 +relay.damus.io,43.6532,-79.3832 +strfry.openhoofd.nl,51.9229,4.40833 +relay.agorist.space,52.3734,4.89406 +relay.trotters.cc,43.6532,-79.3832 +relay.illuminodes.com,47.6061,-122.333 +testr.nymble.world,40.8054,-74.0241 +wot.rejecttheframe.xyz,43.6532,-79.3832 +nostr.carroarmato0.be,51.0368,3.21186 +nostr.mikoshi.de,51.2821,6.78285 +nrs-02.darkcloudarcade.com,39.9526,-75.1652 +nostr.n7ekb.net,36.1527,-95.9902 +nostr.hekster.org,37.3986,-121.964 +nostr.faultables.net,43.6532,-79.3832 +relayrs.notoshi.win,43.6532,-79.3832 +nostr.easycryptosend.it,43.6532,-79.3832 +purplerelay.com,43.6532,-79.3832 +relay.tagayasu.xyz,43.6715,-79.38 +r.0kb.io,32.789,-96.7989 +herbstmeister.com,34.0549,-118.243 +dev.relay.stream,43.6532,-79.3832 +relay-freeharmonypeople.space,38.7223,-9.13934 +r.bitcoinhold.net,43.6532,-79.3832 +nostr.aruku.kro.kr,37.3589,127.115 +relay.nostriches.club,43.6532,-79.3832 +dm-test-strfry-discovery.samt.st,43.6532,-79.3832 +nos.lol,50.4754,12.3683 +nostr.tagomago.me,3.139,101.687 +nostr.plantroon.com,50.1013,8.62643 +relay.nostrhub.fr,48.1045,11.6004 +relay.fundstr.me,42.3601,-71.0589 +ephemeral.snowflare.cc,43.6532,-79.3832 +relay.layer.systems,49.0291,8.35695 +nostr-relay-1.trustlessenterprise.com,43.6532,-79.3832 +relay.edufeed.org,49.4521,11.0767 +nrs-01.darkcloudarcade.com,39.1008,-94.5811 +relay.inforsupports.com,43.6532,-79.3832 +relay.nostr.net,43.6532,-79.3832 +seed-options-few-cache.trycloudflare.com,43.6532,-79.3832 +relay.nostrzh.org,43.6532,-79.3832 +top.testrelay.top,43.6532,-79.3832 +relay.decentnewsroom.com,50.4754,12.3683 +myvoiceourstory.org,37.3598,-121.981 +nostrja-kari.heguro.com,43.6532,-79.3832 +relay.hostr.network,41.2619,-95.8608 +nostr.wecsats.io,43.6532,-79.3832 +nostr.4rs.nl,49.0291,8.35696 +rilo.nostria.app,43.6532,-79.3832 +nostr-01.yakihonne.com,1.32123,103.695 +nostr.notribe.net,40.8302,-74.1299 +relay.mccormick.cx,52.3563,4.95714 +relay.openfarmtools.org,60.1699,24.9384 +yabu.me,35.6092,139.73 +nostr.girino.org,43.6532,-79.3832 +relay.agora.social,50.7383,15.0648 +wot.nostr.place,32.7767,-96.797 +nostr.tac.lol,47.4748,-122.273 +nostr.spacecitynode.com,29.7057,-95.2706 +relay.sigit.io,50.4754,12.3683 +nostr-verified.wellorder.net,45.5201,-122.99 +nostr-rs-relay.dev.fedibtc.com,39.0438,-77.4874 +nostr-relay.amethyst.name,39.0067,-77.4291 +relay.dreamith.to,43.6532,-79.3832 +relay.sloannetworks.com,37.5234,-77.3158 +nostr.zoracle.org,45.6018,-121.185 +ribo.us.nostria.app,43.6532,-79.3832 +us-east.nostr.pikachat.org,39.0438,-77.4874 +relay.lanacoin-eternity.com,40.8302,-74.1299 +relay.wellorder.net,45.5201,-122.99 +speakeasy.cellar.social,49.4543,11.0746 +relay.notoshi.win,13.3622,100.983 +relay.nostrian-conquest.com,41.223,-111.974 +relay.astrolabe.finance,39.0438,-77.4874 +rele.speyhard.fi,50.1109,8.68213 +eu.nostr.pikachat.org,49.4543,11.0746 +bridge.tagomago.me,3.139,101.687 +aeon.libretechsystems.xyz,55.486,9.86577 +relay.samt.st,40.8302,-74.1299 +nostrbtc.com,43.6532,-79.3832 +relay.henryxplace.eu.org:9988,31.2304,121.474 +relay.islandbitcoin.com,12.8498,77.6545 +testrelay.era21.space,43.6532,-79.3832 +sandbox.registros.aarpia.net,50.1109,8.68213 +relay.flashapp.me,43.6548,-79.3885 +librerelay.aaroniumii.com,43.6532,-79.3832 +premium.primal.net,43.6532,-79.3832 +relay.gulugulu.moe,43.6532,-79.3832 +nostr.thalheim.io,60.1699,24.9384 +relay.bnos.space,43.6532,-79.3832 +adre.su,59.9311,30.3609 +relay.veganostr.com,60.1699,24.9384 +relay.plebeian.market,50.1109,8.68213 +relay.mostro.network,40.8302,-74.1299 +relayone.soundhsa.com,39.1008,-94.5811 +relay.threenine.services,51.5222,-0.62916 +nostr.blankfors.se,60.1699,24.9384 +nostr.nodesmap.com,59.3327,18.0656 +nostriches.club,43.6532,-79.3832 +relay.ditto.pub,43.6532,-79.3832 +relay.npubhaus.com,43.6532,-79.3832 +relay.paulstephenborile.com,49.4543,11.0746 +nostr.dlcdevkit.com,40.0992,-83.1141 +vault.iris.to,43.6532,-79.3832 +test.thedude.cloud,50.1109,8.68213 +dev-relay.nostreon.com,60.1699,24.9384 +relay.nostriot.com,41.5695,-83.9786 +relay-dev.gulugulu.moe,43.6532,-79.3832 +freelay.sovbit.dev,60.1699,24.9384 +relay-fra.zombi.cloudrodion.com,48.8566,2.35222 +relay.bikel.ink,60.1699,24.9384 +nostr-rs-relay-ishosta.phamthanh.me,43.6532,-79.3832 +relay.zone667.com,60.1699,24.9384 +relay.olas.app,60.1699,24.9384 +relay.degmods.com,50.4754,12.3683 +nostr.spicyz.io,43.6532,-79.3832 +relay.bornheimer.app,51.5072,-0.127586 +purpura.cloud,43.6532,-79.3832 +ribo.nostria.app,43.6532,-79.3832 +wot.shaving.kiwi,43.6532,-79.3832 +nostr.azzamo.net,52.2633,21.0283 +relay.keykeeper.world,40.7824,-74.0711 +nostrelay.circum.space,52.3676,4.90414 +nostrcheck.me,43.6532,-79.3832 +relay.snotr.nl:49999,52.0195,4.42946 +nostr-relay.xbytez.io,50.6924,3.20113 +relay.nostrverse.net,43.6532,-79.3832 +bcast.girino.org,43.6532,-79.3832 +blossom.gnostr.cloud,43.6532,-79.3832 +dm-test-strfry-generic.samt.st,43.6532,-79.3832 +relay.nostr-check.me,43.6532,-79.3832 +schnorr.me,43.6532,-79.3832 +nostr.tadryanom.me,43.6532,-79.3832 +relay.satmaxt.xyz,43.6532,-79.3832 +relay.binaryrobot.com,43.6532,-79.3832 +temp.iris.to,43.6532,-79.3832 +nittom.nostr1.com,40.7057,-74.0136 +nostr.88mph.life,52.1941,-2.21905 +nostrride.io,37.3986,-121.964 +nostr-relay.corb.net,38.8353,-104.822 +relay.fizx.uk,51.9194,19.1451 +ynostr.yael.at,60.1699,24.9384 +relay.liberbitworld.org,43.6532,-79.3832 +relay-rpi.edufeed.org,49.4521,11.0767 +relay.shadowbip.com,50.1109,8.68213 +nostr-pub.wellorder.net,45.5201,-122.99 +relay.openresist.com,43.6532,-79.3832 +relay.typedcypher.com,51.5072,-0.127586 +bendernostur.duckdns.org:8443,50.1109,8.68213 +relay.bitmacro.cloud,43.6532,-79.3832 +relay.nostrdice.com,-33.8688,151.209 +relay02.lnfi.network,35.6764,139.65 +nostr-relay.nextblockvending.com,47.2343,-119.853 +x.kojira.io,43.6532,-79.3832 +nostr-dev.wellorder.net,45.5201,-122.99 +relay.ohstr.com,43.6532,-79.3832 +wot.nostr.party,36.1627,-86.7816 +spookstr2.nostr1.com,40.7057,-74.0136 +wot.dtonon.com,43.6532,-79.3832 +relay-nl.zombi.cloudrodion.com,50.8943,6.06237 +artisanspyramid.libretechsystems.xyz,55.486,9.86577 +ribo.eu.nostria.app,43.6532,-79.3832 +nostr2.girino.org,43.6532,-79.3832 +nostr-rs-relay-qj1h.onrender.com,37.7775,-122.397 +relay.satlantis.io,40.8054,-74.0241 +nostrsgp.notribe.net,1.32123,103.695 +nostr.quali.chat,60.1699,24.9384 +bitchat.nostr1.com,40.7057,-74.0136 +nostr.sathoarder.com,48.5734,7.75211 +relay.cosmicbolt.net,37.3986,-121.964 +nostr.mom,50.4754,12.3683 +nostr.oxtr.dev,50.4754,12.3683 +strfry.bonsai.com,37.8716,-122.273 +relay.getsafebox.app,43.6532,-79.3832 +relay.staging.commonshub.brussels,49.4543,11.0746 +relay.orangepill.ovh,49.1689,-0.358841 +relay.mostr.pub,43.6532,-79.3832 +relay-arg.zombi.cloudrodion.com,1.35208,103.82 +relay.0xchat.com,43.6532,-79.3832 +srtrelay.c-stellar.net,43.6532,-79.3832 +relay.saturnali.net,46.2044,6.14316 +strfry.shock.network,39.0438,-77.4874 +fanfares.nostr1.com,40.7057,-74.0136 +nostrcity-club.fly.dev,48.8566,2.35222 +nostr.ps1829.com,33.8851,130.883 +relay.bao.network,43.6532,-79.3832 +relay.jeffg.fyi,43.6532,-79.3832 +video.czas.plus,50.1109,8.68213 +librepress.libretechsystems.xyz,55.4724,9.87335 +relay.laantungir.net,-19.4692,-42.5315 +relay5.bitransfer.org,43.6532,-79.3832 +nostr-relay.psfoundation.info,39.0438,-77.4874 +relay.fountain.fm,43.6532,-79.3832 +relay.wisp.talk,49.4543,11.0746 +nostr-relay.zeabur.app,25.0797,121.234 +relay.nostrmap.net,60.1699,24.9384 +relay01.lnfi.network,35.6764,139.65 +relay.satnam.pub,43.6532,-79.3832 +0x-nostr-relay.fly.dev,48.8566,2.35222 +relay.beginningend.com,35.2227,-97.4786 +cs-relay.nostrdev.com,50.4754,12.3683 +relay.cypherflow.ai,48.8575,2.35138 +nostr.spaceshell.xyz,43.6532,-79.3832 +relay.ru.ac.th,13.7607,100.627 +nostr.data.haus,50.4754,12.3683 +bucket.coracle.social,37.7775,-122.397 +nostr.bitcoiner.social,47.6743,-117.112 +relay.gorrdy.cz,43.6532,-79.3832 +relay.sovbit.dev,60.1699,24.9384 +wot.codingarena.top,50.4754,12.3683 +relay.directsponsor.net,42.8864,-78.8784 +nostr2.thalheim.io,49.4543,11.0746 +nostr.pbfs.io,50.4754,12.3683 +relay.bullishbounty.com,43.6532,-79.3832 +nostr.bitczat.pl,60.1699,24.9384 +nostr.rtvslawenia.com,49.4543,11.0746 +relay-testnet.k8s.layer3.news,37.3387,-121.885 +relay.lightning.pub,39.0438,-77.4874 +nostr.dpinkerton.com,49.2509,-123.01 +nostr.myshosholoza.co.za,52.3913,4.66545 +relay.solife.me,43.6532,-79.3832 +relay.agentry.com,42.8864,-78.8784 +chat-relay.zap-work.com,43.6532,-79.3832 +reraw.pbla2fish.cc,43.6532,-79.3832 +nostr.chaima.info,50.1109,8.68213 +nostr.snowbla.de,60.1699,24.9384 +relay.vrtmrz.net,43.6532,-79.3832 +relay.goodmorningbitcoin.com,43.6532,-79.3832 +relay2.angor.io,48.1046,11.6002 +nexus.libernet.app,43.6532,-79.3832 +relay-dev.satlantis.io,40.8302,-74.1299 +inbox.mycelium.social,38.627,-90.1994 +relay.trustr.ing,49.8667,-125.133 +relay1.nostrchat.io,60.1699,24.9384 +dev.relay.edufeed.org,49.4521,11.0767 +satsage.xyz,37.3986,-121.964 +fenrir-s.notoshi.win,43.6532,-79.3832 +articles.layer3.news,37.3387,-121.885 +nostr.thebiglake.org,32.71,-96.6745 +nostr.defucc.me,50.1109,8.68213 +relay.lanavault.space,60.1699,24.9384 +relay.credenso.cafe,43.3601,-80.3127 +relay.seq1.net,43.6532,-79.3832 +social.amanah.eblessing.co,48.1046,11.6002 +relay.devcsu.fr,48.8575,2.35138 +dev-nostr.bityacht.io,43.6532,-79.3832 +dm-test-nostr-rs-42-disabled.samt.st,43.6532,-79.3832 +relay.endfiat.money,59.3327,18.0656 +relay.tapestry.ninja,40.8054,-74.0241 +relay.wavlake.com,41.2619,-95.8608 +relay.wavefunc.live,41.8781,-87.6298 +nostr.self-determined.de,53.495,10.2542 +kotukonostr.onrender.com,37.7775,-122.397 +relay.mmwaves.de,48.8575,2.35138 +syb.lol,34.0549,-118.243 prl.plus,55.7628,37.5983 -relay.dwadziesciajeden.pl,52.2297,21.0122 -freelay.sovbit.host,64.1476,-21.9392 +nostr.stakey.net,52.3676,4.90414 From 43eef0d49c8de8e1c5790e12682f1dadc17a160e Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 3 May 2026 06:51:02 +0000 Subject: [PATCH 006/216] Automated update of relay data - Sun May 3 06:51:02 UTC 2026 --- relays/online_relays_gps.csv | 561 +++++++++++++++++------------------ 1 file changed, 279 insertions(+), 282 deletions(-) diff --git a/relays/online_relays_gps.csv b/relays/online_relays_gps.csv index b6ed6cba..25de11a1 100644 --- a/relays/online_relays_gps.csv +++ b/relays/online_relays_gps.csv @@ -1,299 +1,296 @@ Relay URL,Latitude,Longitude -nostr.simplex.icu,50.1109,8.68213 -v-relay.d02.vrtmrz.net,34.6937,135.502 -relay.angor.io,48.1046,11.6002 -nostr.twinkle.lol,51.902,7.6657 -relay.klabo.world,47.2343,-119.853 -cache.trustr.ing,45.4473,-73.7533 -soloco.nl,43.6532,-79.3832 -rusty-uat.siberian-albacore.ts.net:8443,35.6764,139.65 -relay.artx.market,43.6548,-79.3885 -relay.lacompagniemaximus.com,45.3147,-73.8785 -relay.qstr.app,50.1109,8.68213 -nostr.islandarea.net,35.4669,-97.6473 -relay.homeinhk.xyz,35.694,139.754 -nostr.overmind.lol,43.6532,-79.3832 -no.str.cr,10.074,-84.2155 -relay.nostrcheck.me,43.6532,-79.3832 -wot.makenomistakes.ca,43.7064,-79.3986 -nostr.computingcache.com,34.0356,-118.442 -relay.bebond.net,43.6532,-79.3832 -nostr.luisschwab.net,43.6532,-79.3832 -strfry.bitsbytom.com,51.4968,-0.018337 -nostr.2b9t.xyz,34.0549,-118.243 -wot.dergigi.com,64.1476,-21.9392 -offchain.pub,39.1585,-94.5728 -nostr-kyomu-haskell.onrender.com,37.7775,-122.397 -relay.lab.rytswd.com,49.4543,11.0746 -relay.hook.cafe,43.6532,-79.3832 -nostr-relay.cbrx.io,43.6532,-79.3832 -testnet-relay.samt.st,40.8302,-74.1299 -relay.minibolt.info,43.6532,-79.3832 -nostr.na.social,43.6532,-79.3832 -relay.erybody.com,41.4513,-81.7021 -relay.malxte.de,52.52,13.405 -kasztanowa.bieda.it,43.6532,-79.3832 -relay.internationalright-wing.org,-22.5022,-48.7114 -relay.purplefrog.cloud,35.6916,139.768 -nostr.vulpem.com,49.4543,11.0746 -relay.arx-ccn.com,50.4754,12.3683 -relay.mitchelltribe.com,39.0438,-77.4874 -nostr.bond,50.1109,8.68213 -bitcoiner.social,47.6743,-117.112 -slick.mjex.me,39.0418,-77.4744 -relay.libernet.app,43.6532,-79.3832 -relay.damus.io,43.6532,-79.3832 -strfry.openhoofd.nl,51.9229,4.40833 -relay.agorist.space,52.3734,4.89406 -relay.trotters.cc,43.6532,-79.3832 -relay.illuminodes.com,47.6061,-122.333 -testr.nymble.world,40.8054,-74.0241 -wot.rejecttheframe.xyz,43.6532,-79.3832 -nostr.carroarmato0.be,51.0368,3.21186 -nostr.mikoshi.de,51.2821,6.78285 -nrs-02.darkcloudarcade.com,39.9526,-75.1652 -nostr.n7ekb.net,36.1527,-95.9902 -nostr.hekster.org,37.3986,-121.964 -nostr.faultables.net,43.6532,-79.3832 -relayrs.notoshi.win,43.6532,-79.3832 -nostr.easycryptosend.it,43.6532,-79.3832 -purplerelay.com,43.6532,-79.3832 -relay.tagayasu.xyz,43.6715,-79.38 -r.0kb.io,32.789,-96.7989 -herbstmeister.com,34.0549,-118.243 -dev.relay.stream,43.6532,-79.3832 -relay-freeharmonypeople.space,38.7223,-9.13934 -r.bitcoinhold.net,43.6532,-79.3832 -nostr.aruku.kro.kr,37.3589,127.115 -relay.nostriches.club,43.6532,-79.3832 -dm-test-strfry-discovery.samt.st,43.6532,-79.3832 -nos.lol,50.4754,12.3683 -nostr.tagomago.me,3.139,101.687 -nostr.plantroon.com,50.1013,8.62643 -relay.nostrhub.fr,48.1045,11.6004 -relay.fundstr.me,42.3601,-71.0589 -ephemeral.snowflare.cc,43.6532,-79.3832 -relay.layer.systems,49.0291,8.35695 -nostr-relay-1.trustlessenterprise.com,43.6532,-79.3832 -relay.edufeed.org,49.4521,11.0767 -nrs-01.darkcloudarcade.com,39.1008,-94.5811 -relay.inforsupports.com,43.6532,-79.3832 -relay.nostr.net,43.6532,-79.3832 -seed-options-few-cache.trycloudflare.com,43.6532,-79.3832 -relay.nostrzh.org,43.6532,-79.3832 -top.testrelay.top,43.6532,-79.3832 -relay.decentnewsroom.com,50.4754,12.3683 +spookstr2.nostr1.com,40.7057,-74.0136 +espelho.girino.org,43.6532,-79.3832 myvoiceourstory.org,37.3598,-121.981 -nostrja-kari.heguro.com,43.6532,-79.3832 -relay.hostr.network,41.2619,-95.8608 -nostr.wecsats.io,43.6532,-79.3832 -nostr.4rs.nl,49.0291,8.35696 -rilo.nostria.app,43.6532,-79.3832 -nostr-01.yakihonne.com,1.32123,103.695 -nostr.notribe.net,40.8302,-74.1299 -relay.mccormick.cx,52.3563,4.95714 -relay.openfarmtools.org,60.1699,24.9384 -yabu.me,35.6092,139.73 -nostr.girino.org,43.6532,-79.3832 -relay.agora.social,50.7383,15.0648 -wot.nostr.place,32.7767,-96.797 -nostr.tac.lol,47.4748,-122.273 -nostr.spacecitynode.com,29.7057,-95.2706 -relay.sigit.io,50.4754,12.3683 -nostr-verified.wellorder.net,45.5201,-122.99 -nostr-rs-relay.dev.fedibtc.com,39.0438,-77.4874 -nostr-relay.amethyst.name,39.0067,-77.4291 -relay.dreamith.to,43.6532,-79.3832 -relay.sloannetworks.com,37.5234,-77.3158 -nostr.zoracle.org,45.6018,-121.185 -ribo.us.nostria.app,43.6532,-79.3832 -us-east.nostr.pikachat.org,39.0438,-77.4874 -relay.lanacoin-eternity.com,40.8302,-74.1299 -relay.wellorder.net,45.5201,-122.99 -speakeasy.cellar.social,49.4543,11.0746 -relay.notoshi.win,13.3622,100.983 -relay.nostrian-conquest.com,41.223,-111.974 -relay.astrolabe.finance,39.0438,-77.4874 -rele.speyhard.fi,50.1109,8.68213 -eu.nostr.pikachat.org,49.4543,11.0746 -bridge.tagomago.me,3.139,101.687 -aeon.libretechsystems.xyz,55.486,9.86577 -relay.samt.st,40.8302,-74.1299 -nostrbtc.com,43.6532,-79.3832 +0x-nostr-relay.fly.dev,37.7648,-122.432 +relay.cypherflow.ai,48.8575,2.35138 +relay2.angor.io,48.1046,11.6002 +fanfares.nostr1.com,40.7057,-74.0136 +relay.trotters.cc,43.6532,-79.3832 +relay.erybody.com,41.4513,-81.7021 +soloco.nl,43.6532,-79.3832 +relay.snotr.nl:49999,52.0195,4.42946 +nostr.vulpem.com,49.4543,11.0746 +nostr.rtvslawenia.com,49.4543,11.0746 +nostr.n7ekb.net,36.1527,-95.9902 +dm-test-nostr-rs-42-disabled.samt.st,43.6532,-79.3832 +schnorr.me,43.6532,-79.3832 +relay.ohstr.com,43.6532,-79.3832 +relay.directsponsor.net,42.8864,-78.8784 +inbox.mycelium.social,38.627,-90.1994 +relay-fra.zombi.cloudrodion.com,48.8566,2.35222 +relay.getsafebox.app,43.6532,-79.3832 relay.henryxplace.eu.org:9988,31.2304,121.474 -relay.islandbitcoin.com,12.8498,77.6545 -testrelay.era21.space,43.6532,-79.3832 -sandbox.registros.aarpia.net,50.1109,8.68213 -relay.flashapp.me,43.6548,-79.3885 +nexus.libernet.app,43.6532,-79.3832 +nos.xmark.cc,50.6924,3.20113 +relay.shadowbip.com,50.1109,8.68213 +nostr.88mph.life,52.1941,-2.21905 +freelay.sovbit.dev,60.1699,24.9384 +social.amanah.eblessing.co,48.1046,11.6002 +nostr.2b9t.xyz,34.0549,-118.243 +nostr.liberty.fans,36.9104,-89.5875 +relay.lightning.pub,39.0438,-77.4874 +relay.openresist.com,43.6532,-79.3832 +nostr.computingcache.com,34.0356,-118.442 +relay.devcsu.fr,48.8575,2.35138 +nostr-kyomu-haskell.onrender.com,37.7775,-122.397 +relay.ngengine.org,43.6532,-79.3832 librerelay.aaroniumii.com,43.6532,-79.3832 -premium.primal.net,43.6532,-79.3832 -relay.gulugulu.moe,43.6532,-79.3832 -nostr.thalheim.io,60.1699,24.9384 +relay.fountain.fm,43.6532,-79.3832 +relay.cosmicbolt.net,37.3986,-121.964 +speakeasy.cellar.social,49.4543,11.0746 +relay.nostx.io,43.6532,-79.3832 +relay.bao.network,43.6532,-79.3832 +offchain.pub,39.1585,-94.5728 +relay.angor.io,48.1046,11.6002 +nostr-dev.wellorder.net,45.5201,-122.99 +relay.nostriches.club,43.6532,-79.3832 +nostrja-kari.heguro.com,43.6532,-79.3832 +relay.beginningend.com,35.2227,-97.4786 +nittom.nostr1.com,40.7057,-74.0136 +ms.chinacounty.com,39.9042,116.407 +relay.dwadziesciajeden.pl,52.2297,21.0122 +relay.mitchelltribe.com,39.0438,-77.4874 +relay-freeharmonypeople.space,41.1542,-8.60964 +nostr.carroarmato0.be,51.0368,3.21186 +relay.mmwaves.de,48.8575,2.35138 +strfry.apps3.slidestr.net,40.4167,-3.70329 +librepress.libretechsystems.xyz,55.4724,9.87335 +wot.codingarena.top,50.4754,12.3683 +relay.staging.commonshub.brussels,49.4543,11.0746 +relay.ditto.pub,43.6532,-79.3832 +wot.sebastix.social,51.1792,5.89444 +inbox.scuba323.com,40.8218,-74.45 +ephemeral.snowflare.cc,43.6532,-79.3832 +nostrsgp.notribe.net,1.32123,103.695 +relay.npubhaus.com,43.6532,-79.3832 +armada.sharegap.net,43.6532,-79.3832 +purplerelay.com,43.6532,-79.3832 +nostr-relay.nextblockvending.com,47.2343,-119.853 +eu.nostr.pikachat.org,49.4543,11.0746 relay.bnos.space,43.6532,-79.3832 -adre.su,59.9311,30.3609 -relay.veganostr.com,60.1699,24.9384 -relay.plebeian.market,50.1109,8.68213 +relay.bullishbounty.com,43.6532,-79.3832 +relay.satlantis.io,40.8054,-74.0241 +relay-dev.satlantis.io,40.8302,-74.1299 +relay.nostrhub.fr,48.1045,11.6004 +relay.nostrmap.net,60.1699,24.9384 +nostr.snowbla.de,60.1699,24.9384 +relay.zone667.com,60.1699,24.9384 +wot.nostr.party,36.1659,-86.7844 +dm-test-strfry-discovery.samt.st,43.6532,-79.3832 +relayrs.notoshi.win,43.6532,-79.3832 +nostr.pbfs.io,50.4754,12.3683 +nostr.ps1829.com,33.8851,130.883 +rilo.nostria.app,43.6532,-79.3832 +relay.astrolabe.finance,39.0438,-77.4874 +strfry.bonsai.com,39.0438,-77.4874 +nostr.bgbitcoin.club,50.4754,12.3683 +ynostr.yael.at,60.1699,24.9384 +wot.shaving.kiwi,43.6532,-79.3832 +relay.arx-ccn.com,50.4754,12.3683 +relay.degmods.com,50.4754,12.3683 +testrelay.era21.space,43.6532,-79.3832 relay.mostro.network,40.8302,-74.1299 +nostr.azzamo.net,52.2633,21.0283 +relay.nearhood.co.uk,51.5072,-0.127586 +nostr-verified.wellorder.net,45.5201,-122.99 +nostr-2.21crypto.ch,47.5356,8.73209 +shu01.shugur.net,21.4902,39.2246 +relay2.ngengine.org,43.6532,-79.3832 +strfry.shock.network,39.0438,-77.4874 +relay.satnam.pub,43.6532,-79.3832 +nostr.sathoarder.com,48.5734,7.75211 +relay.binaryrobot.com,43.6532,-79.3832 +relay.typedcypher.com,51.5072,-0.127586 +relay.mostr.pub,43.6532,-79.3832 +nostr.4rs.nl,49.0291,8.35696 +insta-relay.apps3.slidestr.net,40.4167,-3.70329 +nostr.spicyz.io,43.6532,-79.3832 +relay.flashapp.me,43.6548,-79.3885 +nos.lol,50.4754,12.3683 +relay.plebeian.market,50.1109,8.68213 +r.0kb.io,32.789,-96.7989 +nostrcity-club.fly.dev,37.7648,-122.432 +nostr.robosats.org,64.1476,-21.9392 +wot.makenomistakes.ca,43.7064,-79.3986 +nostrride.io,37.3986,-121.964 +relay.staging.plebeian.market,51.5072,-0.127586 +r.bitcoinhold.net,43.6532,-79.3832 +cs-relay.nostrdev.com,50.4754,12.3683 relayone.soundhsa.com,39.1008,-94.5811 -relay.threenine.services,51.5222,-0.62916 -nostr.blankfors.se,60.1699,24.9384 +relay.klabo.world,47.2343,-119.853 +relay.mccormick.cx,52.3563,4.95714 +bitcoinostr.duckdns.org,41.1976,1.11167 +testnet-relay.samt.st,40.8302,-74.1299 +syb.lol,43.6532,-79.3832 +testr.nymble.world,40.8054,-74.0241 +nostr.spaceshell.xyz,43.6532,-79.3832 +nostr.dpinkerton.com,-27.4971,152.976 +nostr.bond,50.1109,8.68213 +relay.ru.ac.th,13.7607,100.627 +relay.illuminodes.com,47.6061,-122.333 +relay.gulugulu.moe,43.6532,-79.3832 +relay.nostr-check.me,43.6532,-79.3832 +dev.relay.stream,43.6532,-79.3832 nostr.nodesmap.com,59.3327,18.0656 nostriches.club,43.6532,-79.3832 -relay.ditto.pub,43.6532,-79.3832 -relay.npubhaus.com,43.6532,-79.3832 -relay.paulstephenborile.com,49.4543,11.0746 -nostr.dlcdevkit.com,40.0992,-83.1141 -vault.iris.to,43.6532,-79.3832 -test.thedude.cloud,50.1109,8.68213 -dev-relay.nostreon.com,60.1699,24.9384 -relay.nostriot.com,41.5695,-83.9786 -relay-dev.gulugulu.moe,43.6532,-79.3832 -freelay.sovbit.dev,60.1699,24.9384 -relay-fra.zombi.cloudrodion.com,48.8566,2.35222 -relay.bikel.ink,60.1699,24.9384 -nostr-rs-relay-ishosta.phamthanh.me,43.6532,-79.3832 -relay.zone667.com,60.1699,24.9384 relay.olas.app,60.1699,24.9384 -relay.degmods.com,50.4754,12.3683 -nostr.spicyz.io,43.6532,-79.3832 -relay.bornheimer.app,51.5072,-0.127586 -purpura.cloud,43.6532,-79.3832 -ribo.nostria.app,43.6532,-79.3832 -wot.shaving.kiwi,43.6532,-79.3832 -nostr.azzamo.net,52.2633,21.0283 -relay.keykeeper.world,40.7824,-74.0711 -nostrelay.circum.space,52.3676,4.90414 -nostrcheck.me,43.6532,-79.3832 -relay.snotr.nl:49999,52.0195,4.42946 -nostr-relay.xbytez.io,50.6924,3.20113 -relay.nostrverse.net,43.6532,-79.3832 -bcast.girino.org,43.6532,-79.3832 -blossom.gnostr.cloud,43.6532,-79.3832 -dm-test-strfry-generic.samt.st,43.6532,-79.3832 -relay.nostr-check.me,43.6532,-79.3832 -schnorr.me,43.6532,-79.3832 -nostr.tadryanom.me,43.6532,-79.3832 -relay.satmaxt.xyz,43.6532,-79.3832 -relay.binaryrobot.com,43.6532,-79.3832 -temp.iris.to,43.6532,-79.3832 -nittom.nostr1.com,40.7057,-74.0136 -nostr.88mph.life,52.1941,-2.21905 -nostrride.io,37.3986,-121.964 -nostr-relay.corb.net,38.8353,-104.822 -relay.fizx.uk,51.9194,19.1451 -ynostr.yael.at,60.1699,24.9384 -relay.liberbitworld.org,43.6532,-79.3832 -relay-rpi.edufeed.org,49.4521,11.0767 -relay.shadowbip.com,50.1109,8.68213 -nostr-pub.wellorder.net,45.5201,-122.99 -relay.openresist.com,43.6532,-79.3832 -relay.typedcypher.com,51.5072,-0.127586 bendernostur.duckdns.org:8443,50.1109,8.68213 -relay.bitmacro.cloud,43.6532,-79.3832 -relay.nostrdice.com,-33.8688,151.209 -relay02.lnfi.network,35.6764,139.65 -nostr-relay.nextblockvending.com,47.2343,-119.853 -x.kojira.io,43.6532,-79.3832 -nostr-dev.wellorder.net,45.5201,-122.99 -relay.ohstr.com,43.6532,-79.3832 -wot.nostr.party,36.1627,-86.7816 -spookstr2.nostr1.com,40.7057,-74.0136 -wot.dtonon.com,43.6532,-79.3832 -relay-nl.zombi.cloudrodion.com,50.8943,6.06237 -artisanspyramid.libretechsystems.xyz,55.486,9.86577 -ribo.eu.nostria.app,43.6532,-79.3832 -nostr2.girino.org,43.6532,-79.3832 -nostr-rs-relay-qj1h.onrender.com,37.7775,-122.397 -relay.satlantis.io,40.8054,-74.0241 -nostrsgp.notribe.net,1.32123,103.695 -nostr.quali.chat,60.1699,24.9384 -bitchat.nostr1.com,40.7057,-74.0136 -nostr.sathoarder.com,48.5734,7.75211 -relay.cosmicbolt.net,37.3986,-121.964 -nostr.mom,50.4754,12.3683 +vault.iris.to,43.6532,-79.3832 +purpura.cloud,43.6532,-79.3832 +relay.satmaxt.xyz,43.6532,-79.3832 +nostr.luisschwab.net,43.6532,-79.3832 nostr.oxtr.dev,50.4754,12.3683 -strfry.bonsai.com,37.8716,-122.273 -relay.getsafebox.app,43.6532,-79.3832 -relay.staging.commonshub.brussels,49.4543,11.0746 -relay.orangepill.ovh,49.1689,-0.358841 -relay.mostr.pub,43.6532,-79.3832 -relay-arg.zombi.cloudrodion.com,1.35208,103.82 -relay.0xchat.com,43.6532,-79.3832 -srtrelay.c-stellar.net,43.6532,-79.3832 -relay.saturnali.net,46.2044,6.14316 -strfry.shock.network,39.0438,-77.4874 -fanfares.nostr1.com,40.7057,-74.0136 -nostrcity-club.fly.dev,48.8566,2.35222 -nostr.ps1829.com,33.8851,130.883 -relay.bao.network,43.6532,-79.3832 -relay.jeffg.fyi,43.6532,-79.3832 -video.czas.plus,50.1109,8.68213 -librepress.libretechsystems.xyz,55.4724,9.87335 -relay.laantungir.net,-19.4692,-42.5315 -relay5.bitransfer.org,43.6532,-79.3832 -nostr-relay.psfoundation.info,39.0438,-77.4874 -relay.fountain.fm,43.6532,-79.3832 -relay.wisp.talk,49.4543,11.0746 +relay-dev.gulugulu.moe,43.6532,-79.3832 nostr-relay.zeabur.app,25.0797,121.234 -relay.nostrmap.net,60.1699,24.9384 -relay01.lnfi.network,35.6764,139.65 -relay.satnam.pub,43.6532,-79.3832 -0x-nostr-relay.fly.dev,48.8566,2.35222 -relay.beginningend.com,35.2227,-97.4786 -cs-relay.nostrdev.com,50.4754,12.3683 -relay.cypherflow.ai,48.8575,2.35138 -nostr.spaceshell.xyz,43.6532,-79.3832 -relay.ru.ac.th,13.7607,100.627 -nostr.data.haus,50.4754,12.3683 -bucket.coracle.social,37.7775,-122.397 -nostr.bitcoiner.social,47.6743,-117.112 -relay.gorrdy.cz,43.6532,-79.3832 -relay.sovbit.dev,60.1699,24.9384 -wot.codingarena.top,50.4754,12.3683 -relay.directsponsor.net,42.8864,-78.8784 -nostr2.thalheim.io,49.4543,11.0746 -nostr.pbfs.io,50.4754,12.3683 -relay.bullishbounty.com,43.6532,-79.3832 -nostr.bitczat.pl,60.1699,24.9384 -nostr.rtvslawenia.com,49.4543,11.0746 -relay-testnet.k8s.layer3.news,37.3387,-121.885 -relay.lightning.pub,39.0438,-77.4874 -nostr.dpinkerton.com,49.2509,-123.01 -nostr.myshosholoza.co.za,52.3913,4.66545 -relay.solife.me,43.6532,-79.3832 -relay.agentry.com,42.8864,-78.8784 -chat-relay.zap-work.com,43.6532,-79.3832 -reraw.pbla2fish.cc,43.6532,-79.3832 -nostr.chaima.info,50.1109,8.68213 -nostr.snowbla.de,60.1699,24.9384 -relay.vrtmrz.net,43.6532,-79.3832 -relay.goodmorningbitcoin.com,43.6532,-79.3832 -relay2.angor.io,48.1046,11.6002 -nexus.libernet.app,43.6532,-79.3832 -relay-dev.satlantis.io,40.8302,-74.1299 -inbox.mycelium.social,38.627,-90.1994 -relay.trustr.ing,49.8667,-125.133 -relay1.nostrchat.io,60.1699,24.9384 -dev.relay.edufeed.org,49.4521,11.0767 -satsage.xyz,37.3986,-121.964 -fenrir-s.notoshi.win,43.6532,-79.3832 -articles.layer3.news,37.3387,-121.885 -nostr.thebiglake.org,32.71,-96.6745 -nostr.defucc.me,50.1109,8.68213 -relay.lanavault.space,60.1699,24.9384 -relay.credenso.cafe,43.3601,-80.3127 -relay.seq1.net,43.6532,-79.3832 -social.amanah.eblessing.co,48.1046,11.6002 -relay.devcsu.fr,48.8575,2.35138 -dev-nostr.bityacht.io,43.6532,-79.3832 -dm-test-nostr-rs-42-disabled.samt.st,43.6532,-79.3832 -relay.endfiat.money,59.3327,18.0656 -relay.tapestry.ninja,40.8054,-74.0241 -relay.wavlake.com,41.2619,-95.8608 +relay.wisp.talk,49.4543,11.0746 +nostr.mom,50.4754,12.3683 +relay.edufeed.org,49.4521,11.0767 +nostr.tac.lol,47.4748,-122.273 +relay.inforsupports.com,43.6532,-79.3832 +cache.trustr.ing,43.6548,-79.3885 +kasztanowa.bieda.it,43.6532,-79.3832 +wot.dergigi.com,64.1476,-21.9392 relay.wavefunc.live,41.8781,-87.6298 -nostr.self-determined.de,53.495,10.2542 +ribo.us.nostria.app,43.6532,-79.3832 +relay.bikel.ink,60.1699,24.9384 +relay.islandbitcoin.com,12.8498,77.6545 +no.str.cr,9.27447,-83.5797 +satsage.xyz,37.3986,-121.964 +ribo.nostria.app,43.6532,-79.3832 +relay.endfiat.money,59.3327,18.0656 +nostr.night7.space,50.4754,12.3683 +nostr.dlcdevkit.com,40.0992,-83.1141 +nostr.wecsats.io,43.6532,-79.3832 +nrs-01.darkcloudarcade.com,39.1008,-94.5811 +relay.dreamith.to,43.6532,-79.3832 +portal-relay.pareto.space,49.0291,8.35696 +relay.nostrzh.org,43.6532,-79.3832 +relay.malxte.de,52.52,13.405 +nostr.chaima.info,50.1109,8.68213 +relay.nostrdice.com,-33.8688,151.209 +relay.0xchat.com,43.6532,-79.3832 +nostr2.girino.org,43.6532,-79.3832 +nostrelites.org,41.8781,-87.6298 +nostr.bitcoiner.social,47.6743,-117.112 +premium.primal.net,43.6532,-79.3832 +relay.wavlake.com,41.2619,-95.8608 +relay.wellorder.net,45.5201,-122.99 kotukonostr.onrender.com,37.7775,-122.397 -relay.mmwaves.de,48.8575,2.35138 -syb.lol,34.0549,-118.243 +relay.bornheimer.app,51.5072,-0.127586 +srtrelay.c-stellar.net,43.6532,-79.3832 +bcast.girino.org,43.6532,-79.3832 +relay.dyne.org,49.0291,8.35705 +adre.su,59.9311,30.3609 +nostr.tadryanom.me,43.6532,-79.3832 +relay-rpi.edufeed.org,49.4521,11.0767 +bitcoiner.social,47.6743,-117.112 +nostr-relay.xbytez.io,50.6924,3.20113 +strfry.bitsbytom.com,51.4968,-0.018337 +nostr-relay.amethyst.name,39.0438,-77.4874 +nostr.girino.org,43.6532,-79.3832 +nos4smartnkind.tech,40.2662,44.6393 +nostrbtc.com,43.6532,-79.3832 +nostr.islandarea.net,35.4669,-97.6473 +relay.sigit.io,50.4754,12.3683 +relay.samt.st,40.8302,-74.1299 +relay.layer.systems,49.0291,8.35695 +relay.agora.social,50.7383,15.0648 +shu05.shugur.net,48.8575,2.35138 +relay.libernet.app,43.6532,-79.3832 +garden.zap.cooking,40.8302,-74.1299 +relay.minibolt.info,43.6532,-79.3832 +additions-rev-rainbow-task.trycloudflare.com,43.6532,-79.3832 +relay.bebond.net,43.6532,-79.3832 +bitchat.nostr1.com,40.7057,-74.0136 +relay.internationalright-wing.org,-22.5022,-48.7114 +relay.tapestry.ninja,40.8054,-74.0241 +nostrelay.circum.space,52.3676,4.90414 +wot.nostr.place,43.6532,-79.3832 +video.czas.plus,50.1109,8.68213 +relay.bitmacro.cloud,43.6532,-79.3832 +herbstmeister.com,34.0549,-118.243 +articles.layer3.news,37.3387,-121.885 +relay.primal.net,43.6532,-79.3832 +aeon.libretechsystems.xyz,55.486,9.86577 +relay.orangepill.ovh,49.1689,-0.358841 +nostr-rs-relay-ishosta.phamthanh.me,43.6532,-79.3832 +relay.nostrverse.net,43.6532,-79.3832 +nostr.rblb.it,43.6532,-79.3832 +relay.lab.rytswd.com,49.4543,11.0746 +nostr.data.haus,50.4754,12.3683 +nostr-pub.wellorder.net,45.5201,-122.99 +relay.mwaters.net,50.9871,2.12554 +nostr-relay.psfoundation.info,39.0438,-77.4874 +relay.trustr.ing,43.6548,-79.3885 +relay.threenine.services,51.5222,-0.62916 +relay02.lnfi.network,35.6764,139.65 +nostr-relay.cbrx.io,43.6532,-79.3832 +relay.liberbitworld.org,43.6532,-79.3832 +bucket.coracle.social,37.7775,-122.397 +relay.mynostr.app,40.788,-74.0546 +nostr-relay-1.trustlessenterprise.com,43.6532,-79.3832 +relay.fckstate.net,59.3293,18.0686 +x.kojira.io,43.6532,-79.3832 +chat-relay.zap-work.com,43.6532,-79.3832 +nostr.quali.chat,60.1699,24.9384 +relay.nostr.net,43.6532,-79.3832 +relay.nostu.be,40.4167,-3.70329 +nostr.blankfors.se,60.1699,24.9384 +test.thedude.cloud,50.1109,8.68213 +relay.paulstephenborile.com,49.4543,11.0746 prl.plus,55.7628,37.5983 +relay.credenso.cafe,43.3601,-80.3127 +dm-test-strfry-generic.samt.st,43.6532,-79.3832 +relay.sovbit.dev,60.1699,24.9384 +relay.agorist.space,52.3734,4.89406 +nostr.myshosholoza.co.za,52.3913,4.66545 +relay.nostrcheck.me,43.6532,-79.3832 +nostr-rs-relay-qj1h.onrender.com,37.7775,-122.397 +nostr-rs-relay.dev.fedibtc.com,39.0438,-77.4874 +public.crostr.com,43.6532,-79.3832 +dev-relay.nostreon.com,60.1699,24.9384 +relay.sharegap.net,43.6532,-79.3832 +dev.relay.edufeed.org,49.4521,11.0767 +relay.qstr.app,50.1109,8.68213 +relay.lanavault.space,60.1699,24.9384 +temp.iris.to,43.6532,-79.3832 +relay.lanacoin-eternity.com,40.8302,-74.1299 +nostr-01.yakihonne.com,1.32123,103.695 +rele.speyhard.fi,50.1109,8.68213 +blossom.gnostr.cloud,43.6532,-79.3832 +relay.nostr.place,43.6532,-79.3832 +relay.fundstr.me,42.3601,-71.0589 +relay.laantungir.net,-19.4692,-42.5315 +slick.mjex.me,39.0418,-77.4744 +strfry.openhoofd.nl,51.9229,4.40833 +relay.lacompagniemaximus.com,45.3147,-73.8785 +nostr-relay.corb.net,38.8353,-104.822 +ribo.eu.nostria.app,43.6532,-79.3832 +nostr.thebiglake.org,32.71,-96.6745 +relay-arg.zombi.cloudrodion.com,1.35208,103.82 +nostr.plantroon.com,50.1013,8.62643 +strfry.ymir.cloud,43.6532,-79.3832 +nostr.bitczat.pl,60.1699,24.9384 +nostr.thalheim.io,60.1699,24.9384 +nostrcheck.me,43.6532,-79.3832 +relay.jeffg.fyi,43.6532,-79.3832 +relay.hostr.network,41.2619,-95.8608 +top.testrelay.top,43.6532,-79.3832 nostr.stakey.net,52.3676,4.90414 +yabu.me,35.6092,139.73 +nostr.hekster.org,37.3986,-121.964 +relay.seq1.net,43.6532,-79.3832 +relay5.bitransfer.org,43.6532,-79.3832 +nostr.defucc.me,51.5072,-0.127586 +nostr.notribe.net,40.8302,-74.1299 +relay-nl.zombi.cloudrodion.com,50.8943,6.06237 +relay.gorrdy.cz,43.6532,-79.3832 +relay.agentry.com,42.8864,-78.8784 +nostr.self-determined.de,53.495,10.2542 +rusty-uat.siberian-albacore.ts.net:8443,35.6764,139.65 +orly-relay.imwald.eu,48.8575,2.35138 +relay.hook.cafe,43.6532,-79.3832 +relay.decentnewsroom.com,50.4754,12.3683 +us-east.nostr.pikachat.org,39.0438,-77.4874 +nostr.twinkle.lol,51.902,7.6657 From 0d1cdc7644786d55c95c7ff70b3506777bda168b Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 10 May 2026 06:54:21 +0000 Subject: [PATCH 007/216] Automated update of relay data - Sun May 10 06:54:20 UTC 2026 --- relays/online_relays_gps.csv | 563 +++++++++++++++++------------------ 1 file changed, 277 insertions(+), 286 deletions(-) diff --git a/relays/online_relays_gps.csv b/relays/online_relays_gps.csv index 25de11a1..4ba9acdd 100644 --- a/relays/online_relays_gps.csv +++ b/relays/online_relays_gps.csv @@ -1,296 +1,287 @@ Relay URL,Latitude,Longitude spookstr2.nostr1.com,40.7057,-74.0136 -espelho.girino.org,43.6532,-79.3832 -myvoiceourstory.org,37.3598,-121.981 -0x-nostr-relay.fly.dev,37.7648,-122.432 -relay.cypherflow.ai,48.8575,2.35138 -relay2.angor.io,48.1046,11.6002 -fanfares.nostr1.com,40.7057,-74.0136 -relay.trotters.cc,43.6532,-79.3832 -relay.erybody.com,41.4513,-81.7021 -soloco.nl,43.6532,-79.3832 -relay.snotr.nl:49999,52.0195,4.42946 -nostr.vulpem.com,49.4543,11.0746 -nostr.rtvslawenia.com,49.4543,11.0746 -nostr.n7ekb.net,36.1527,-95.9902 -dm-test-nostr-rs-42-disabled.samt.st,43.6532,-79.3832 -schnorr.me,43.6532,-79.3832 -relay.ohstr.com,43.6532,-79.3832 -relay.directsponsor.net,42.8864,-78.8784 -inbox.mycelium.social,38.627,-90.1994 -relay-fra.zombi.cloudrodion.com,48.8566,2.35222 -relay.getsafebox.app,43.6532,-79.3832 -relay.henryxplace.eu.org:9988,31.2304,121.474 -nexus.libernet.app,43.6532,-79.3832 -nos.xmark.cc,50.6924,3.20113 -relay.shadowbip.com,50.1109,8.68213 -nostr.88mph.life,52.1941,-2.21905 -freelay.sovbit.dev,60.1699,24.9384 -social.amanah.eblessing.co,48.1046,11.6002 -nostr.2b9t.xyz,34.0549,-118.243 -nostr.liberty.fans,36.9104,-89.5875 -relay.lightning.pub,39.0438,-77.4874 -relay.openresist.com,43.6532,-79.3832 -nostr.computingcache.com,34.0356,-118.442 -relay.devcsu.fr,48.8575,2.35138 -nostr-kyomu-haskell.onrender.com,37.7775,-122.397 -relay.ngengine.org,43.6532,-79.3832 -librerelay.aaroniumii.com,43.6532,-79.3832 -relay.fountain.fm,43.6532,-79.3832 -relay.cosmicbolt.net,37.3986,-121.964 -speakeasy.cellar.social,49.4543,11.0746 -relay.nostx.io,43.6532,-79.3832 -relay.bao.network,43.6532,-79.3832 -offchain.pub,39.1585,-94.5728 -relay.angor.io,48.1046,11.6002 -nostr-dev.wellorder.net,45.5201,-122.99 -relay.nostriches.club,43.6532,-79.3832 -nostrja-kari.heguro.com,43.6532,-79.3832 -relay.beginningend.com,35.2227,-97.4786 -nittom.nostr1.com,40.7057,-74.0136 -ms.chinacounty.com,39.9042,116.407 -relay.dwadziesciajeden.pl,52.2297,21.0122 -relay.mitchelltribe.com,39.0438,-77.4874 -relay-freeharmonypeople.space,41.1542,-8.60964 -nostr.carroarmato0.be,51.0368,3.21186 -relay.mmwaves.de,48.8575,2.35138 -strfry.apps3.slidestr.net,40.4167,-3.70329 -librepress.libretechsystems.xyz,55.4724,9.87335 -wot.codingarena.top,50.4754,12.3683 -relay.staging.commonshub.brussels,49.4543,11.0746 -relay.ditto.pub,43.6532,-79.3832 -wot.sebastix.social,51.1792,5.89444 -inbox.scuba323.com,40.8218,-74.45 -ephemeral.snowflare.cc,43.6532,-79.3832 -nostrsgp.notribe.net,1.32123,103.695 -relay.npubhaus.com,43.6532,-79.3832 -armada.sharegap.net,43.6532,-79.3832 -purplerelay.com,43.6532,-79.3832 -nostr-relay.nextblockvending.com,47.2343,-119.853 -eu.nostr.pikachat.org,49.4543,11.0746 -relay.bnos.space,43.6532,-79.3832 -relay.bullishbounty.com,43.6532,-79.3832 -relay.satlantis.io,40.8054,-74.0241 -relay-dev.satlantis.io,40.8302,-74.1299 -relay.nostrhub.fr,48.1045,11.6004 -relay.nostrmap.net,60.1699,24.9384 -nostr.snowbla.de,60.1699,24.9384 -relay.zone667.com,60.1699,24.9384 -wot.nostr.party,36.1659,-86.7844 -dm-test-strfry-discovery.samt.st,43.6532,-79.3832 -relayrs.notoshi.win,43.6532,-79.3832 -nostr.pbfs.io,50.4754,12.3683 -nostr.ps1829.com,33.8851,130.883 -rilo.nostria.app,43.6532,-79.3832 -relay.astrolabe.finance,39.0438,-77.4874 -strfry.bonsai.com,39.0438,-77.4874 -nostr.bgbitcoin.club,50.4754,12.3683 -ynostr.yael.at,60.1699,24.9384 -wot.shaving.kiwi,43.6532,-79.3832 -relay.arx-ccn.com,50.4754,12.3683 -relay.degmods.com,50.4754,12.3683 -testrelay.era21.space,43.6532,-79.3832 -relay.mostro.network,40.8302,-74.1299 -nostr.azzamo.net,52.2633,21.0283 -relay.nearhood.co.uk,51.5072,-0.127586 -nostr-verified.wellorder.net,45.5201,-122.99 -nostr-2.21crypto.ch,47.5356,8.73209 -shu01.shugur.net,21.4902,39.2246 -relay2.ngengine.org,43.6532,-79.3832 -strfry.shock.network,39.0438,-77.4874 -relay.satnam.pub,43.6532,-79.3832 -nostr.sathoarder.com,48.5734,7.75211 -relay.binaryrobot.com,43.6532,-79.3832 -relay.typedcypher.com,51.5072,-0.127586 -relay.mostr.pub,43.6532,-79.3832 -nostr.4rs.nl,49.0291,8.35696 -insta-relay.apps3.slidestr.net,40.4167,-3.70329 -nostr.spicyz.io,43.6532,-79.3832 -relay.flashapp.me,43.6548,-79.3885 -nos.lol,50.4754,12.3683 -relay.plebeian.market,50.1109,8.68213 -r.0kb.io,32.789,-96.7989 -nostrcity-club.fly.dev,37.7648,-122.432 -nostr.robosats.org,64.1476,-21.9392 -wot.makenomistakes.ca,43.7064,-79.3986 -nostrride.io,37.3986,-121.964 -relay.staging.plebeian.market,51.5072,-0.127586 -r.bitcoinhold.net,43.6532,-79.3832 -cs-relay.nostrdev.com,50.4754,12.3683 -relayone.soundhsa.com,39.1008,-94.5811 -relay.klabo.world,47.2343,-119.853 -relay.mccormick.cx,52.3563,4.95714 -bitcoinostr.duckdns.org,41.1976,1.11167 -testnet-relay.samt.st,40.8302,-74.1299 -syb.lol,43.6532,-79.3832 -testr.nymble.world,40.8054,-74.0241 -nostr.spaceshell.xyz,43.6532,-79.3832 -nostr.dpinkerton.com,-27.4971,152.976 -nostr.bond,50.1109,8.68213 -relay.ru.ac.th,13.7607,100.627 -relay.illuminodes.com,47.6061,-122.333 -relay.gulugulu.moe,43.6532,-79.3832 -relay.nostr-check.me,43.6532,-79.3832 -dev.relay.stream,43.6532,-79.3832 -nostr.nodesmap.com,59.3327,18.0656 -nostriches.club,43.6532,-79.3832 -relay.olas.app,60.1699,24.9384 -bendernostur.duckdns.org:8443,50.1109,8.68213 -vault.iris.to,43.6532,-79.3832 -purpura.cloud,43.6532,-79.3832 -relay.satmaxt.xyz,43.6532,-79.3832 -nostr.luisschwab.net,43.6532,-79.3832 -nostr.oxtr.dev,50.4754,12.3683 -relay-dev.gulugulu.moe,43.6532,-79.3832 -nostr-relay.zeabur.app,25.0797,121.234 -relay.wisp.talk,49.4543,11.0746 -nostr.mom,50.4754,12.3683 -relay.edufeed.org,49.4521,11.0767 -nostr.tac.lol,47.4748,-122.273 -relay.inforsupports.com,43.6532,-79.3832 -cache.trustr.ing,43.6548,-79.3885 -kasztanowa.bieda.it,43.6532,-79.3832 -wot.dergigi.com,64.1476,-21.9392 -relay.wavefunc.live,41.8781,-87.6298 -ribo.us.nostria.app,43.6532,-79.3832 -relay.bikel.ink,60.1699,24.9384 -relay.islandbitcoin.com,12.8498,77.6545 -no.str.cr,9.27447,-83.5797 -satsage.xyz,37.3986,-121.964 -ribo.nostria.app,43.6532,-79.3832 -relay.endfiat.money,59.3327,18.0656 -nostr.night7.space,50.4754,12.3683 -nostr.dlcdevkit.com,40.0992,-83.1141 -nostr.wecsats.io,43.6532,-79.3832 -nrs-01.darkcloudarcade.com,39.1008,-94.5811 relay.dreamith.to,43.6532,-79.3832 -portal-relay.pareto.space,49.0291,8.35696 -relay.nostrzh.org,43.6532,-79.3832 -relay.malxte.de,52.52,13.405 -nostr.chaima.info,50.1109,8.68213 -relay.nostrdice.com,-33.8688,151.209 -relay.0xchat.com,43.6532,-79.3832 -nostr2.girino.org,43.6532,-79.3832 -nostrelites.org,41.8781,-87.6298 -nostr.bitcoiner.social,47.6743,-117.112 -premium.primal.net,43.6532,-79.3832 -relay.wavlake.com,41.2619,-95.8608 -relay.wellorder.net,45.5201,-122.99 -kotukonostr.onrender.com,37.7775,-122.397 -relay.bornheimer.app,51.5072,-0.127586 -srtrelay.c-stellar.net,43.6532,-79.3832 -bcast.girino.org,43.6532,-79.3832 -relay.dyne.org,49.0291,8.35705 -adre.su,59.9311,30.3609 -nostr.tadryanom.me,43.6532,-79.3832 -relay-rpi.edufeed.org,49.4521,11.0767 -bitcoiner.social,47.6743,-117.112 -nostr-relay.xbytez.io,50.6924,3.20113 -strfry.bitsbytom.com,51.4968,-0.018337 -nostr-relay.amethyst.name,39.0438,-77.4874 -nostr.girino.org,43.6532,-79.3832 -nos4smartnkind.tech,40.2662,44.6393 -nostrbtc.com,43.6532,-79.3832 -nostr.islandarea.net,35.4669,-97.6473 +relay.nostriot.com,41.5695,-83.9786 relay.sigit.io,50.4754,12.3683 -relay.samt.st,40.8302,-74.1299 -relay.layer.systems,49.0291,8.35695 -relay.agora.social,50.7383,15.0648 -shu05.shugur.net,48.8575,2.35138 -relay.libernet.app,43.6532,-79.3832 -garden.zap.cooking,40.8302,-74.1299 -relay.minibolt.info,43.6532,-79.3832 -additions-rev-rainbow-task.trycloudflare.com,43.6532,-79.3832 -relay.bebond.net,43.6532,-79.3832 -bitchat.nostr1.com,40.7057,-74.0136 -relay.internationalright-wing.org,-22.5022,-48.7114 -relay.tapestry.ninja,40.8054,-74.0241 -nostrelay.circum.space,52.3676,4.90414 -wot.nostr.place,43.6532,-79.3832 -video.czas.plus,50.1109,8.68213 -relay.bitmacro.cloud,43.6532,-79.3832 -herbstmeister.com,34.0549,-118.243 -articles.layer3.news,37.3387,-121.885 -relay.primal.net,43.6532,-79.3832 -aeon.libretechsystems.xyz,55.486,9.86577 -relay.orangepill.ovh,49.1689,-0.358841 -nostr-rs-relay-ishosta.phamthanh.me,43.6532,-79.3832 -relay.nostrverse.net,43.6532,-79.3832 -nostr.rblb.it,43.6532,-79.3832 -relay.lab.rytswd.com,49.4543,11.0746 -nostr.data.haus,50.4754,12.3683 -nostr-pub.wellorder.net,45.5201,-122.99 -relay.mwaters.net,50.9871,2.12554 -nostr-relay.psfoundation.info,39.0438,-77.4874 -relay.trustr.ing,43.6548,-79.3885 -relay.threenine.services,51.5222,-0.62916 -relay02.lnfi.network,35.6764,139.65 -nostr-relay.cbrx.io,43.6532,-79.3832 -relay.liberbitworld.org,43.6532,-79.3832 -bucket.coracle.social,37.7775,-122.397 -relay.mynostr.app,40.788,-74.0546 -nostr-relay-1.trustlessenterprise.com,43.6532,-79.3832 -relay.fckstate.net,59.3293,18.0686 -x.kojira.io,43.6532,-79.3832 -chat-relay.zap-work.com,43.6532,-79.3832 -nostr.quali.chat,60.1699,24.9384 -relay.nostr.net,43.6532,-79.3832 -relay.nostu.be,40.4167,-3.70329 -nostr.blankfors.se,60.1699,24.9384 -test.thedude.cloud,50.1109,8.68213 -relay.paulstephenborile.com,49.4543,11.0746 -prl.plus,55.7628,37.5983 -relay.credenso.cafe,43.3601,-80.3127 -dm-test-strfry-generic.samt.st,43.6532,-79.3832 -relay.sovbit.dev,60.1699,24.9384 -relay.agorist.space,52.3734,4.89406 -nostr.myshosholoza.co.za,52.3913,4.66545 -relay.nostrcheck.me,43.6532,-79.3832 -nostr-rs-relay-qj1h.onrender.com,37.7775,-122.397 -nostr-rs-relay.dev.fedibtc.com,39.0438,-77.4874 +nostr.bitcoiner.social,47.6743,-117.112 +relay.keykeeper.world,40.7824,-74.0711 +dev.relay.stream,43.6532,-79.3832 public.crostr.com,43.6532,-79.3832 -dev-relay.nostreon.com,60.1699,24.9384 -relay.sharegap.net,43.6532,-79.3832 -dev.relay.edufeed.org,49.4521,11.0767 -relay.qstr.app,50.1109,8.68213 -relay.lanavault.space,60.1699,24.9384 -temp.iris.to,43.6532,-79.3832 -relay.lanacoin-eternity.com,40.8302,-74.1299 -nostr-01.yakihonne.com,1.32123,103.695 -rele.speyhard.fi,50.1109,8.68213 -blossom.gnostr.cloud,43.6532,-79.3832 -relay.nostr.place,43.6532,-79.3832 -relay.fundstr.me,42.3601,-71.0589 -relay.laantungir.net,-19.4692,-42.5315 -slick.mjex.me,39.0418,-77.4744 -strfry.openhoofd.nl,51.9229,4.40833 -relay.lacompagniemaximus.com,45.3147,-73.8785 -nostr-relay.corb.net,38.8353,-104.822 -ribo.eu.nostria.app,43.6532,-79.3832 -nostr.thebiglake.org,32.71,-96.6745 -relay-arg.zombi.cloudrodion.com,1.35208,103.82 -nostr.plantroon.com,50.1013,8.62643 -strfry.ymir.cloud,43.6532,-79.3832 -nostr.bitczat.pl,60.1699,24.9384 -nostr.thalheim.io,60.1699,24.9384 -nostrcheck.me,43.6532,-79.3832 -relay.jeffg.fyi,43.6532,-79.3832 -relay.hostr.network,41.2619,-95.8608 +relay.bikel.ink,60.1699,24.9384 +ephemeral.snowflare.cc,43.6532,-79.3832 +relay.wellorder.net,45.5201,-122.99 +relay.mwaters.net,50.9871,2.12554 +premium.primal.net,43.6532,-79.3832 +relay.satmaxt.xyz,43.6532,-79.3832 +relay.endfiat.money,59.3327,18.0656 +relay.mmwaves.de,48.8575,2.35138 +relay1.privkey.io,25.7617,-80.1918 +relay.nostrdice.com,-33.8688,151.209 top.testrelay.top,43.6532,-79.3832 -nostr.stakey.net,52.3676,4.90414 -yabu.me,35.6092,139.73 -nostr.hekster.org,37.3986,-121.964 -relay.seq1.net,43.6532,-79.3832 -relay5.bitransfer.org,43.6532,-79.3832 -nostr.defucc.me,51.5072,-0.127586 -nostr.notribe.net,40.8302,-74.1299 -relay-nl.zombi.cloudrodion.com,50.8943,6.06237 -relay.gorrdy.cz,43.6532,-79.3832 +testr.nymble.world,40.8054,-74.0241 +nostr.islandarea.net,35.4669,-97.6473 +nostr-pub.wellorder.net,45.5201,-122.99 +nostr-dev.wellorder.net,45.5201,-122.99 +nostr-relay-1.trustlessenterprise.com,43.6532,-79.3832 +relay.artx.market,43.6548,-79.3885 +nostr.bond,50.1109,8.68213 +nostr.faultables.net,43.6532,-79.3832 +nostr-2.21crypto.ch,47.5356,8.73209 +nostr-relay.psfoundation.info,39.0438,-77.4874 +nostr-relay.xbytez.io,50.6924,3.20113 +aeon.libretechsystems.xyz,55.486,9.86577 +relay.vrtmrz.net,43.6532,-79.3832 +fanfares.nostr1.com,40.7057,-74.0136 relay.agentry.com,42.8864,-78.8784 -nostr.self-determined.de,53.495,10.2542 -rusty-uat.siberian-albacore.ts.net:8443,35.6764,139.65 +ribo.nostria.app,43.6532,-79.3832 +relay.lacompagniemaximus.com,45.3147,-73.8785 +relay.jeffg.fyi,43.6532,-79.3832 +r.bitcoinhold.net,43.6532,-79.3832 +relay-dev.satlantis.io,40.8302,-74.1299 +strfry.shock.network,39.0438,-77.4874 +nostr.myshosholoza.co.za,52.3913,4.66545 +treuzkas.branruz.com,48.8575,2.35138 +relay.cosmicbolt.net,37.3986,-121.964 +adre.su,59.9311,30.3609 +relay.lightning.pub,39.0438,-77.4874 +relay2.angor.io,48.1046,11.6002 +bitchat.nostr1.com,40.7057,-74.0136 +social.amanah.eblessing.co,48.1046,11.6002 +relay.malxte.de,52.52,13.405 +relay.typedcypher.com,51.5072,-0.127586 +relay.nostrhub.fr,48.1045,11.6004 +nostr.thalheim.io,60.1699,24.9384 +nostr-relay.zimage.com,34.0549,-118.243 +nostr.sathoarder.com,48.5734,7.75211 +speakeasy.cellar.social,49.4543,11.0746 +purpura.cloud,43.6532,-79.3832 +r.0kb.io,32.789,-96.7989 +nostr.luisschwab.net,43.6532,-79.3832 +bendernostur.duckdns.org:8443,50.1109,8.68213 +wot.shaving.kiwi,43.6532,-79.3832 +nostr.plantroon.com,50.1013,8.62643 +relay.homeinhk.xyz,35.694,139.754 +articles.layer3.news,37.3387,-121.885 +nostr.rtvslawenia.com,49.4543,11.0746 +relay.bitmacro.cloud,43.6532,-79.3832 +relay.trustr.ing,43.6548,-79.3885 +portal-relay.pareto.space,49.0291,8.35696 +relay-freeharmonypeople.space,41.1542,-8.60964 +nostr.spicyz.io,43.6532,-79.3832 +nostr.tac.lol,47.4748,-122.273 +x.kojira.io,43.6532,-79.3832 +relay.nostriches.club,43.6532,-79.3832 +relay.notoshi.win,14.0644,101.515 +relay.staging.commonshub.brussels,49.4543,11.0746 +relay.cypherflow.ai,48.8575,2.35138 +kotukonostr.onrender.com,37.7775,-122.397 +relay.olas.app,60.1699,24.9384 +relay.nostrian-conquest.com,41.223,-111.974 +relay.trotters.cc,43.6532,-79.3832 +nostr.4rs.nl,49.0291,8.35696 +nostr.dpinkerton.com,-27.4971,152.976 +wot.codingarena.top,50.4754,12.3683 +relay.wavefunc.live,41.8781,-87.6298 +relay.mccormick.cx,52.3563,4.95714 +relay.nostrcheck.me,43.6532,-79.3832 +nostrbtc.com,43.6532,-79.3832 +dev-relay.nostreon.com,60.1699,24.9384 +offchain.pub,39.1585,-94.5728 +relay.veganostr.com,60.1699,24.9384 +nostr.tagomago.me,42.3601,-71.0589 +relay.henryxplace.eu.org:9988,31.2304,121.474 +schnorr.me,43.6532,-79.3832 +nostr.mom,50.4754,12.3683 +chat-relay.zap-work.com,43.6532,-79.3832 +relay.hostr.network,41.2619,-95.8608 +relay.mulatta.io,37.5665,126.978 orly-relay.imwald.eu,48.8575,2.35138 -relay.hook.cafe,43.6532,-79.3832 +strfry.bitsbytom.com,51.4968,-0.018337 +nostriches.club,43.6532,-79.3832 +relay-arg.zombi.cloudrodion.com,1.35208,103.82 +bucket.coracle.social,37.7775,-122.397 +nostr.computingcache.com,34.0356,-118.442 +nostrja-kari.heguro.com,43.6532,-79.3832 +relay.gulugulu.moe,43.6532,-79.3832 +relay.npubhaus.com,43.6532,-79.3832 +nostr-rs-relay-ishosta.phamthanh.me,43.6532,-79.3832 +nostr.blankfors.se,60.1699,24.9384 +relayrs.notoshi.win,43.6532,-79.3832 relay.decentnewsroom.com,50.4754,12.3683 -us-east.nostr.pikachat.org,39.0438,-77.4874 +nostr-relay.corb.net,38.8353,-104.822 +nostr.vulpem.com,49.4543,11.0746 +relay-nl.zombi.cloudrodion.com,50.8943,6.06237 +relay02.lnfi.network,35.6764,139.65 +relay.mostr.pub,43.6532,-79.3832 +relay.mostro.network,40.8302,-74.1299 +relay.ru.ac.th,13.7607,100.627 +soloco.nl,43.6532,-79.3832 +nostr.pbfs.io,50.4754,12.3683 +freelay.sovbit.dev,60.1699,24.9384 +nostr.21crypto.ch,47.5356,8.73209 +relay.bornheimer.app,51.5072,-0.127586 +nostr.wecsats.io,43.6532,-79.3832 +relay.ditto.pub,43.6532,-79.3832 +relay.fundstr.me,42.3601,-71.0589 +nostr-relay.amethyst.name,39.0438,-77.4874 +relay-rpi.edufeed.org,49.4521,11.0767 +nostr.defucc.me,51.5072,-0.127586 +relay-testnet.k8s.layer3.news,37.3387,-121.885 +relay.erybody.com,41.4513,-81.7021 +vault.iris.to,43.6532,-79.3832 +relay.snotr.nl:49999,52.0195,4.42946 +relay.fckstate.net,59.3293,18.0686 +nostr.easycryptosend.it,43.6532,-79.3832 +nrs-01.darkcloudarcade.com,39.1008,-94.5811 +test.thedude.cloud,50.1109,8.68213 +relay.openresist.com,43.6532,-79.3832 +wot.nostr.party,36.1659,-86.7844 +relay.astrolabe.finance,39.0438,-77.4874 +nostr.bitczat.pl,60.1699,24.9384 +relay.klabo.world,47.2343,-119.853 +armada.sharegap.net,43.6532,-79.3832 +relay.zone667.com,60.1699,24.9384 +nostr-rs-relay-qj1h.onrender.com,37.7775,-122.397 +shu04.shugur.net,25.2048,55.2708 +dm-test-strfry-generic.samt.st,43.6532,-79.3832 +nos.lol,50.4754,12.3683 +relay.camelus.app,45.5201,-122.99 +dev.relay.edufeed.org,49.4521,11.0767 +relay.minibolt.info,43.6532,-79.3832 +shu05.shugur.net,48.8575,2.35138 +relay.internationalright-wing.org,-22.5022,-48.7114 +nostr.mikoshi.de,50.1109,8.68213 +relay.dyne.org,49.0291,8.35705 +video.czas.plus,50.1109,8.68213 +relay.tapestry.ninja,40.8054,-74.0241 +srtrelay.c-stellar.net,43.6532,-79.3832 +nostr.data.haus,50.4754,12.3683 +nittom.nostr1.com,40.7057,-74.0136 +ribo.eu.nostria.app,43.6532,-79.3832 +bridge.tagomago.me,42.3601,-71.0589 +strfry.openhoofd.nl,51.9229,4.40833 +bitcoiner.social,47.6743,-117.112 +prl.plus,55.7628,37.5983 +relay.primal.net,43.6532,-79.3832 +relay.angor.io,48.1046,11.6002 +nostrcity-club.fly.dev,37.7648,-122.432 +relay.bebond.net,43.6532,-79.3832 +inbox.mycelium.social,38.627,-90.1994 +ribo.us.nostria.app,43.6532,-79.3832 +relay.agorist.space,52.3734,4.89406 +nostr.azzamo.net,52.2633,21.0283 +relay.inforsupports.com,43.6532,-79.3832 +additions-rev-rainbow-task.trycloudflare.com,43.6532,-79.3832 +strfry.ymir.cloud,43.6532,-79.3832 +relayone.soundhsa.com,39.1008,-94.5811 +relay.wisp.talk,49.4543,11.0746 +relay.ngengine.org,43.6532,-79.3832 +myvoiceourstory.org,37.3598,-121.981 +relay01.lnfi.network,35.6764,139.65 +relay.agora.social,50.7383,15.0648 +relay.nostr-check.me,43.6532,-79.3832 +nostr.dlcdevkit.com,40.0992,-83.1141 +dm-test-nostr-rs-42-disabled.samt.st,43.6532,-79.3832 +relay.illuminodes.com,47.6061,-122.333 +relay.shadowbip.com,50.1109,8.68213 +relay.fountain.fm,43.6532,-79.3832 +nostr2.girino.org,43.6532,-79.3832 +relay.lanacoin-eternity.com,40.8302,-74.1299 +relay.nostx.io,43.6532,-79.3832 +relay.edufeed.org,49.4521,11.0767 nostr.twinkle.lol,51.902,7.6657 +relay.sovbit.dev,60.1699,24.9384 +nostr.self-determined.de,53.495,10.2542 +nostr-relay.cbrx.io,43.6532,-79.3832 +relay.staging.hostr.network,41.2619,-95.8608 +strfry.bonsai.com,39.0438,-77.4874 +yabu.me,35.6092,139.73 +relay.samt.st,40.8302,-74.1299 +wot.rejecttheframe.xyz,43.6532,-79.3832 +nostr.carroarmato0.be,51.0368,3.21186 +nostr.openhoofd.nl,51.9229,4.40833 +nostrelay.circum.space,52.3676,4.90414 +nexus.libernet.app,43.6532,-79.3832 +relay.bao.network,43.6532,-79.3832 +nostr.snowbla.de,60.1699,24.9384 +nostr-rs-relay.dev.fedibtc.com,39.0438,-77.4874 +nostr-verified.wellorder.net,45.5201,-122.99 +relay.flashapp.me,43.6548,-79.3885 +eu.nostr.pikachat.org,49.4543,11.0746 +relay.sharegap.net,43.6532,-79.3832 +wot.nostr.place,43.6532,-79.3832 +testnet-relay.samt.st,40.8302,-74.1299 +librerelay.aaroniumii.com,43.6532,-79.3832 +relay.threenine.services,51.5222,-0.62916 +relay-fra.zombi.cloudrodion.com,48.8566,2.35222 +relay.nostrmap.net,60.1699,24.9384 +nostr.88mph.life,52.1941,-2.21905 +0x-nostr-relay.fly.dev,37.7648,-122.432 +purplerelay.com,43.6532,-79.3832 +nostrride.io,37.3986,-121.964 +relay.wavlake.com,41.2619,-95.8608 +shu03.shugur.net,25.2048,55.2708 +relay.bullishbounty.com,43.6532,-79.3832 +relay.beginningend.com,35.2227,-97.4786 +nostr.nodesmap.com,59.3327,18.0656 +relay.libernet.app,43.6532,-79.3832 +nostr.quali.chat,60.1699,24.9384 +nostr.chaima.info,50.1109,8.68213 +wot.dergigi.com,64.1476,-21.9392 +nostr.ps1829.com,33.8851,130.883 +relay.lanavault.space,60.1699,24.9384 +relay.openfarmtools.org,60.1699,24.9384 +nostr-01.yakihonne.com,1.32123,103.695 +relay.bnos.space,43.6532,-79.3832 +bcast.girino.org,43.6532,-79.3832 +nostr.oxtr.dev,50.4754,12.3683 +relay.paulstephenborile.com,49.4543,11.0746 +rilo.nostria.app,43.6532,-79.3832 +nostr.hifish.org,47.4244,8.57658 +relay.degmods.com,50.4754,12.3683 +relay.ohstr.com,43.6532,-79.3832 +nostr.girino.org,43.6532,-79.3832 +nostrelites.org,41.8781,-87.6298 +nostr-relay.nextblockvending.com,47.2343,-119.853 +nostr-relay.zeabur.app,25.0797,121.234 +relay.binaryrobot.com,43.6532,-79.3832 +relay.directsponsor.net,42.8864,-78.8784 +librepress.libretechsystems.xyz,55.4724,9.87335 +nostr.thebiglake.org,32.71,-96.6745 +temp.iris.to,43.6532,-79.3832 +relay.orangepill.ovh,49.1689,-0.358841 +relay.arx-ccn.com,50.4754,12.3683 +nostr-kyomu-haskell.onrender.com,37.7775,-122.397 +inbox.scuba323.com,40.8218,-74.45 +relay5.bitransfer.org,43.6532,-79.3832 +rele.speyhard.fi,50.1109,8.68213 +nostr.stakey.net,52.3676,4.90414 +satsage.xyz,37.3986,-121.964 +relay.qstr.app,50.1109,8.68213 +relay.nostr.place,43.6532,-79.3832 +cs-relay.nostrdev.com,50.4754,12.3683 +relay.staging.plebeian.market,51.5072,-0.127586 +relay-dev.gulugulu.moe,43.6532,-79.3832 +cache.trustr.ing,43.6548,-79.3885 +nostrcheck.me,43.6532,-79.3832 +relay2.ngengine.org,43.6532,-79.3832 +nostr.tadryanom.me,43.6532,-79.3832 +relay.layer.systems,49.0291,8.35695 +relay.gorrdy.cz,43.6532,-79.3832 +ynostr.yael.at,60.1699,24.9384 +relay.satlantis.io,40.8054,-74.0241 +us-east.nostr.pikachat.org,39.0438,-77.4874 +relay.islandbitcoin.com,12.8498,77.6545 +nos.xmark.cc,50.6924,3.20113 +syb.lol,43.6532,-79.3832 +relay.nostar.org,43.6532,-79.3832 +relay.lab.rytswd.com,49.4543,11.0746 +relay.plebeian.market,50.1109,8.68213 +relay.nearhood.co.uk,51.5072,-0.127586 +nostr.2b9t.xyz,34.0549,-118.243 +relay.nostr.net,43.6532,-79.3832 +nostr.n7ekb.net,36.1527,-95.9902 +relay.getsafebox.app,43.6532,-79.3832 +blossom.gnostr.cloud,43.6532,-79.3832 +relay.mitchelltribe.com,39.0438,-77.4874 +relay.seq1.net,43.6532,-79.3832 From 3daf02732a1b4fa10be96a0a7c853513159b26de Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 17 May 2026 06:57:28 +0000 Subject: [PATCH 008/216] Automated update of relay data - Sun May 17 06:57:28 UTC 2026 --- relays/online_relays_gps.csv | 564 ++++++++++++++++++----------------- 1 file changed, 284 insertions(+), 280 deletions(-) diff --git a/relays/online_relays_gps.csv b/relays/online_relays_gps.csv index 4ba9acdd..9cd6f99b 100644 --- a/relays/online_relays_gps.csv +++ b/relays/online_relays_gps.csv @@ -1,287 +1,291 @@ Relay URL,Latitude,Longitude -spookstr2.nostr1.com,40.7057,-74.0136 -relay.dreamith.to,43.6532,-79.3832 -relay.nostriot.com,41.5695,-83.9786 -relay.sigit.io,50.4754,12.3683 -nostr.bitcoiner.social,47.6743,-117.112 -relay.keykeeper.world,40.7824,-74.0711 -dev.relay.stream,43.6532,-79.3832 -public.crostr.com,43.6532,-79.3832 -relay.bikel.ink,60.1699,24.9384 -ephemeral.snowflare.cc,43.6532,-79.3832 -relay.wellorder.net,45.5201,-122.99 -relay.mwaters.net,50.9871,2.12554 -premium.primal.net,43.6532,-79.3832 -relay.satmaxt.xyz,43.6532,-79.3832 -relay.endfiat.money,59.3327,18.0656 -relay.mmwaves.de,48.8575,2.35138 -relay1.privkey.io,25.7617,-80.1918 -relay.nostrdice.com,-33.8688,151.209 -top.testrelay.top,43.6532,-79.3832 testr.nymble.world,40.8054,-74.0241 -nostr.islandarea.net,35.4669,-97.6473 -nostr-pub.wellorder.net,45.5201,-122.99 -nostr-dev.wellorder.net,45.5201,-122.99 -nostr-relay-1.trustlessenterprise.com,43.6532,-79.3832 -relay.artx.market,43.6548,-79.3885 -nostr.bond,50.1109,8.68213 -nostr.faultables.net,43.6532,-79.3832 -nostr-2.21crypto.ch,47.5356,8.73209 -nostr-relay.psfoundation.info,39.0438,-77.4874 -nostr-relay.xbytez.io,50.6924,3.20113 -aeon.libretechsystems.xyz,55.486,9.86577 -relay.vrtmrz.net,43.6532,-79.3832 -fanfares.nostr1.com,40.7057,-74.0136 -relay.agentry.com,42.8864,-78.8784 -ribo.nostria.app,43.6532,-79.3832 -relay.lacompagniemaximus.com,45.3147,-73.8785 -relay.jeffg.fyi,43.6532,-79.3832 -r.bitcoinhold.net,43.6532,-79.3832 -relay-dev.satlantis.io,40.8302,-74.1299 -strfry.shock.network,39.0438,-77.4874 -nostr.myshosholoza.co.za,52.3913,4.66545 -treuzkas.branruz.com,48.8575,2.35138 -relay.cosmicbolt.net,37.3986,-121.964 -adre.su,59.9311,30.3609 -relay.lightning.pub,39.0438,-77.4874 -relay2.angor.io,48.1046,11.6002 -bitchat.nostr1.com,40.7057,-74.0136 -social.amanah.eblessing.co,48.1046,11.6002 -relay.malxte.de,52.52,13.405 -relay.typedcypher.com,51.5072,-0.127586 -relay.nostrhub.fr,48.1045,11.6004 -nostr.thalheim.io,60.1699,24.9384 -nostr-relay.zimage.com,34.0549,-118.243 -nostr.sathoarder.com,48.5734,7.75211 -speakeasy.cellar.social,49.4543,11.0746 -purpura.cloud,43.6532,-79.3832 -r.0kb.io,32.789,-96.7989 -nostr.luisschwab.net,43.6532,-79.3832 -bendernostur.duckdns.org:8443,50.1109,8.68213 -wot.shaving.kiwi,43.6532,-79.3832 -nostr.plantroon.com,50.1013,8.62643 -relay.homeinhk.xyz,35.694,139.754 -articles.layer3.news,37.3387,-121.885 -nostr.rtvslawenia.com,49.4543,11.0746 -relay.bitmacro.cloud,43.6532,-79.3832 -relay.trustr.ing,43.6548,-79.3885 -portal-relay.pareto.space,49.0291,8.35696 -relay-freeharmonypeople.space,41.1542,-8.60964 -nostr.spicyz.io,43.6532,-79.3832 -nostr.tac.lol,47.4748,-122.273 -x.kojira.io,43.6532,-79.3832 -relay.nostriches.club,43.6532,-79.3832 -relay.notoshi.win,14.0644,101.515 -relay.staging.commonshub.brussels,49.4543,11.0746 -relay.cypherflow.ai,48.8575,2.35138 -kotukonostr.onrender.com,37.7775,-122.397 -relay.olas.app,60.1699,24.9384 -relay.nostrian-conquest.com,41.223,-111.974 -relay.trotters.cc,43.6532,-79.3832 -nostr.4rs.nl,49.0291,8.35696 -nostr.dpinkerton.com,-27.4971,152.976 -wot.codingarena.top,50.4754,12.3683 -relay.wavefunc.live,41.8781,-87.6298 relay.mccormick.cx,52.3563,4.95714 -relay.nostrcheck.me,43.6532,-79.3832 -nostrbtc.com,43.6532,-79.3832 -dev-relay.nostreon.com,60.1699,24.9384 -offchain.pub,39.1585,-94.5728 -relay.veganostr.com,60.1699,24.9384 -nostr.tagomago.me,42.3601,-71.0589 -relay.henryxplace.eu.org:9988,31.2304,121.474 -schnorr.me,43.6532,-79.3832 -nostr.mom,50.4754,12.3683 -chat-relay.zap-work.com,43.6532,-79.3832 -relay.hostr.network,41.2619,-95.8608 -relay.mulatta.io,37.5665,126.978 -orly-relay.imwald.eu,48.8575,2.35138 -strfry.bitsbytom.com,51.4968,-0.018337 -nostriches.club,43.6532,-79.3832 -relay-arg.zombi.cloudrodion.com,1.35208,103.82 -bucket.coracle.social,37.7775,-122.397 -nostr.computingcache.com,34.0356,-118.442 -nostrja-kari.heguro.com,43.6532,-79.3832 -relay.gulugulu.moe,43.6532,-79.3832 -relay.npubhaus.com,43.6532,-79.3832 -nostr-rs-relay-ishosta.phamthanh.me,43.6532,-79.3832 -nostr.blankfors.se,60.1699,24.9384 -relayrs.notoshi.win,43.6532,-79.3832 -relay.decentnewsroom.com,50.4754,12.3683 -nostr-relay.corb.net,38.8353,-104.822 -nostr.vulpem.com,49.4543,11.0746 -relay-nl.zombi.cloudrodion.com,50.8943,6.06237 -relay02.lnfi.network,35.6764,139.65 -relay.mostr.pub,43.6532,-79.3832 -relay.mostro.network,40.8302,-74.1299 -relay.ru.ac.th,13.7607,100.627 -soloco.nl,43.6532,-79.3832 -nostr.pbfs.io,50.4754,12.3683 -freelay.sovbit.dev,60.1699,24.9384 -nostr.21crypto.ch,47.5356,8.73209 -relay.bornheimer.app,51.5072,-0.127586 -nostr.wecsats.io,43.6532,-79.3832 -relay.ditto.pub,43.6532,-79.3832 -relay.fundstr.me,42.3601,-71.0589 -nostr-relay.amethyst.name,39.0438,-77.4874 -relay-rpi.edufeed.org,49.4521,11.0767 -nostr.defucc.me,51.5072,-0.127586 -relay-testnet.k8s.layer3.news,37.3387,-121.885 -relay.erybody.com,41.4513,-81.7021 -vault.iris.to,43.6532,-79.3832 -relay.snotr.nl:49999,52.0195,4.42946 -relay.fckstate.net,59.3293,18.0686 -nostr.easycryptosend.it,43.6532,-79.3832 -nrs-01.darkcloudarcade.com,39.1008,-94.5811 -test.thedude.cloud,50.1109,8.68213 -relay.openresist.com,43.6532,-79.3832 -wot.nostr.party,36.1659,-86.7844 -relay.astrolabe.finance,39.0438,-77.4874 -nostr.bitczat.pl,60.1699,24.9384 -relay.klabo.world,47.2343,-119.853 -armada.sharegap.net,43.6532,-79.3832 -relay.zone667.com,60.1699,24.9384 -nostr-rs-relay-qj1h.onrender.com,37.7775,-122.397 -shu04.shugur.net,25.2048,55.2708 -dm-test-strfry-generic.samt.st,43.6532,-79.3832 -nos.lol,50.4754,12.3683 -relay.camelus.app,45.5201,-122.99 -dev.relay.edufeed.org,49.4521,11.0767 -relay.minibolt.info,43.6532,-79.3832 -shu05.shugur.net,48.8575,2.35138 -relay.internationalright-wing.org,-22.5022,-48.7114 -nostr.mikoshi.de,50.1109,8.68213 -relay.dyne.org,49.0291,8.35705 -video.czas.plus,50.1109,8.68213 -relay.tapestry.ninja,40.8054,-74.0241 -srtrelay.c-stellar.net,43.6532,-79.3832 -nostr.data.haus,50.4754,12.3683 -nittom.nostr1.com,40.7057,-74.0136 -ribo.eu.nostria.app,43.6532,-79.3832 -bridge.tagomago.me,42.3601,-71.0589 -strfry.openhoofd.nl,51.9229,4.40833 -bitcoiner.social,47.6743,-117.112 -prl.plus,55.7628,37.5983 -relay.primal.net,43.6532,-79.3832 -relay.angor.io,48.1046,11.6002 -nostrcity-club.fly.dev,37.7648,-122.432 -relay.bebond.net,43.6532,-79.3832 -inbox.mycelium.social,38.627,-90.1994 -ribo.us.nostria.app,43.6532,-79.3832 -relay.agorist.space,52.3734,4.89406 -nostr.azzamo.net,52.2633,21.0283 -relay.inforsupports.com,43.6532,-79.3832 -additions-rev-rainbow-task.trycloudflare.com,43.6532,-79.3832 -strfry.ymir.cloud,43.6532,-79.3832 -relayone.soundhsa.com,39.1008,-94.5811 -relay.wisp.talk,49.4543,11.0746 -relay.ngengine.org,43.6532,-79.3832 -myvoiceourstory.org,37.3598,-121.981 -relay01.lnfi.network,35.6764,139.65 -relay.agora.social,50.7383,15.0648 -relay.nostr-check.me,43.6532,-79.3832 -nostr.dlcdevkit.com,40.0992,-83.1141 -dm-test-nostr-rs-42-disabled.samt.st,43.6532,-79.3832 -relay.illuminodes.com,47.6061,-122.333 -relay.shadowbip.com,50.1109,8.68213 -relay.fountain.fm,43.6532,-79.3832 +treuzkas.branruz.com,48.8575,2.35138 +nostr-dev.wellorder.net,45.5201,-122.99 nostr2.girino.org,43.6532,-79.3832 -relay.lanacoin-eternity.com,40.8302,-74.1299 -relay.nostx.io,43.6532,-79.3832 -relay.edufeed.org,49.4521,11.0767 -nostr.twinkle.lol,51.902,7.6657 -relay.sovbit.dev,60.1699,24.9384 -nostr.self-determined.de,53.495,10.2542 -nostr-relay.cbrx.io,43.6532,-79.3832 -relay.staging.hostr.network,41.2619,-95.8608 -strfry.bonsai.com,39.0438,-77.4874 -yabu.me,35.6092,139.73 -relay.samt.st,40.8302,-74.1299 -wot.rejecttheframe.xyz,43.6532,-79.3832 -nostr.carroarmato0.be,51.0368,3.21186 -nostr.openhoofd.nl,51.9229,4.40833 -nostrelay.circum.space,52.3676,4.90414 -nexus.libernet.app,43.6532,-79.3832 -relay.bao.network,43.6532,-79.3832 -nostr.snowbla.de,60.1699,24.9384 -nostr-rs-relay.dev.fedibtc.com,39.0438,-77.4874 -nostr-verified.wellorder.net,45.5201,-122.99 -relay.flashapp.me,43.6548,-79.3885 -eu.nostr.pikachat.org,49.4543,11.0746 -relay.sharegap.net,43.6532,-79.3832 -wot.nostr.place,43.6532,-79.3832 -testnet-relay.samt.st,40.8302,-74.1299 -librerelay.aaroniumii.com,43.6532,-79.3832 -relay.threenine.services,51.5222,-0.62916 -relay-fra.zombi.cloudrodion.com,48.8566,2.35222 -relay.nostrmap.net,60.1699,24.9384 -nostr.88mph.life,52.1941,-2.21905 -0x-nostr-relay.fly.dev,37.7648,-122.432 -purplerelay.com,43.6532,-79.3832 -nostrride.io,37.3986,-121.964 -relay.wavlake.com,41.2619,-95.8608 -shu03.shugur.net,25.2048,55.2708 -relay.bullishbounty.com,43.6532,-79.3832 -relay.beginningend.com,35.2227,-97.4786 -nostr.nodesmap.com,59.3327,18.0656 -relay.libernet.app,43.6532,-79.3832 -nostr.quali.chat,60.1699,24.9384 -nostr.chaima.info,50.1109,8.68213 -wot.dergigi.com,64.1476,-21.9392 -nostr.ps1829.com,33.8851,130.883 -relay.lanavault.space,60.1699,24.9384 -relay.openfarmtools.org,60.1699,24.9384 -nostr-01.yakihonne.com,1.32123,103.695 -relay.bnos.space,43.6532,-79.3832 -bcast.girino.org,43.6532,-79.3832 -nostr.oxtr.dev,50.4754,12.3683 -relay.paulstephenborile.com,49.4543,11.0746 -rilo.nostria.app,43.6532,-79.3832 -nostr.hifish.org,47.4244,8.57658 -relay.degmods.com,50.4754,12.3683 -relay.ohstr.com,43.6532,-79.3832 -nostr.girino.org,43.6532,-79.3832 -nostrelites.org,41.8781,-87.6298 -nostr-relay.nextblockvending.com,47.2343,-119.853 -nostr-relay.zeabur.app,25.0797,121.234 -relay.binaryrobot.com,43.6532,-79.3832 -relay.directsponsor.net,42.8864,-78.8784 -librepress.libretechsystems.xyz,55.4724,9.87335 -nostr.thebiglake.org,32.71,-96.6745 -temp.iris.to,43.6532,-79.3832 -relay.orangepill.ovh,49.1689,-0.358841 -relay.arx-ccn.com,50.4754,12.3683 -nostr-kyomu-haskell.onrender.com,37.7775,-122.397 -inbox.scuba323.com,40.8218,-74.45 -relay5.bitransfer.org,43.6532,-79.3832 -rele.speyhard.fi,50.1109,8.68213 -nostr.stakey.net,52.3676,4.90414 -satsage.xyz,37.3986,-121.964 -relay.qstr.app,50.1109,8.68213 -relay.nostr.place,43.6532,-79.3832 -cs-relay.nostrdev.com,50.4754,12.3683 -relay.staging.plebeian.market,51.5072,-0.127586 -relay-dev.gulugulu.moe,43.6532,-79.3832 -cache.trustr.ing,43.6548,-79.3885 -nostrcheck.me,43.6532,-79.3832 -relay2.ngengine.org,43.6532,-79.3832 -nostr.tadryanom.me,43.6532,-79.3832 -relay.layer.systems,49.0291,8.35695 -relay.gorrdy.cz,43.6532,-79.3832 -ynostr.yael.at,60.1699,24.9384 -relay.satlantis.io,40.8054,-74.0241 -us-east.nostr.pikachat.org,39.0438,-77.4874 -relay.islandbitcoin.com,12.8498,77.6545 -nos.xmark.cc,50.6924,3.20113 -syb.lol,43.6532,-79.3832 -relay.nostar.org,43.6532,-79.3832 -relay.lab.rytswd.com,49.4543,11.0746 -relay.plebeian.market,50.1109,8.68213 -relay.nearhood.co.uk,51.5072,-0.127586 -nostr.2b9t.xyz,34.0549,-118.243 -relay.nostr.net,43.6532,-79.3832 -nostr.n7ekb.net,36.1527,-95.9902 +relay.ditto.pub,43.6532,-79.3832 relay.getsafebox.app,43.6532,-79.3832 +intl-rocks-microphone-did.trycloudflare.com,43.6532,-79.3832 +strfry.bonsai.com,39.0438,-77.4874 +nostr.computingcache.com,34.0356,-118.442 +nostr-kyomu-haskell.onrender.com,37.7775,-122.397 +nostr-relay.zimage.com,34.0549,-118.243 +relay.openfarmtools.org,60.1699,24.9384 +nostr-relay.corb.net,38.8353,-104.822 +nostr.blankfors.se,60.1699,24.9384 +inbox.scuba323.com,40.8218,-74.45 +relayone.geektank.ai,39.1008,-94.5811 +relay2.angor.io,48.1046,11.6002 +relay.klabo.world,47.2343,-119.853 +nostr.islandarea.net,35.4669,-97.6473 +nostr-relay.cbrx.io,43.6532,-79.3832 +relay.gorrdy.cz,43.6532,-79.3832 +nostr.tadryanom.me,43.6532,-79.3832 +relay.mostro.network,40.8302,-74.1299 +relay.bullishbounty.com,43.6532,-79.3832 +wot.dergigi.com,64.1476,-21.9392 +relay01.lnfi.network,35.6764,139.65 +nostr.twinkle.lol,51.902,7.6657 +nostr.snowbla.de,60.1699,24.9384 +relay.bnos.space,43.6532,-79.3832 +bridge.tagomago.me,42.3601,-71.0589 +relay.mulatta.io,37.5665,126.978 +nostr-relay-1.trustlessenterprise.com,43.6532,-79.3832 +relay.nostrian-conquest.com,41.223,-111.974 +testnet-relay.samt.st,40.8302,-74.1299 +nostr.openhoofd.nl,51.5717,3.70417 +relay.jbnco.co,43.6532,-79.3832 +srtrelay.c-stellar.net,43.6532,-79.3832 +relay.libernet.app,43.6532,-79.3832 +relay.paulstephenborile.com,49.4543,11.0746 +strfry.ymir.cloud,43.6532,-79.3832 +spookstr2.nostr1.com,40.7057,-74.0136 +relay.mwaters.net,50.9871,2.12554 +relay.staging.hostr.network,41.2619,-95.8608 +relay.mrmave.work,43.6532,-79.3832 +relay.typedcypher.com,51.5072,-0.127586 +premium.primal.net,43.6532,-79.3832 +nostr.liberty.fans,36.9104,-89.5875 +relay.ru.ac.th,13.7607,100.627 +relay.edufeed.org,49.4521,11.0767 +nostr.vulpem.com,49.4543,11.0746 +relay.lacompagniemaximus.com,45.3147,-73.8785 +relay.trotters.cc,43.6532,-79.3832 +relay-fra.zombi.cloudrodion.com,48.8566,2.35222 +relay.internationalright-wing.org,-22.5022,-48.7114 +relay.inforsupports.com,43.6532,-79.3832 +public.crostr.com,43.6532,-79.3832 +nostrue.com,40.8054,-74.0241 +bitcoinostr.duckdns.org,41.1976,1.11167 +relay.plebeian.market,50.1109,8.68213 +nostr.thalheim.io,60.1699,24.9384 +relay-nl.zombi.cloudrodion.com,50.8943,6.06237 +ynostr.yael.at,60.1699,24.9384 +relay.cosmicbolt.net,37.3986,-121.964 +nostr.bond,50.1109,8.68213 +relay.staging.plebeian.market,51.5072,-0.127586 +nostr.mom,50.4754,12.3683 +wot.nostr.party,36.1659,-86.7844 +bbw-nostr.xyz,41.5284,-87.4237 +relay.jeffg.fyi,43.6532,-79.3832 +nostr.notribe.net,40.8302,-74.1299 +top.testrelay.top,43.6532,-79.3832 +relay.wavefunc.live,41.8781,-87.6298 +relay.minibolt.info,43.6532,-79.3832 +schnorr.me,43.6532,-79.3832 +adre.su,59.9311,30.3609 +relay.bitmacro.cloud,43.6532,-79.3832 +wot.codingarena.top,50.4754,12.3683 +relay.nostr.net,43.6532,-79.3832 +nostrride.io,37.3986,-121.964 +dm-test-strfry-generic.samt.st,43.6532,-79.3832 +relay.orangepill.ovh,49.1689,-0.358841 +nostr.myshosholoza.co.za,52.3913,4.66545 +eu.nostr.pikachat.org,49.4543,11.0746 +nostr-rs-relay.dev.fedibtc.com,39.0438,-77.4874 +relay.bao.network,43.6532,-79.3832 +nostr.mikoshi.de,50.1109,8.68213 +nostr2.thalheim.io,49.4543,11.0746 +relay.laantungir.net,-19.4692,-42.5315 +aeon.libretechsystems.xyz,55.486,9.86577 +relay.wisp.talk,49.4543,11.0746 +relay.mmwaves.de,48.8575,2.35138 +relay.snotr.nl:49999,52.0195,4.42946 blossom.gnostr.cloud,43.6532,-79.3832 -relay.mitchelltribe.com,39.0438,-77.4874 +dm-test-nostr-rs-42-disabled.samt.st,43.6532,-79.3832 +relay.ohstr.com,43.6532,-79.3832 +relay.agora.social,50.7383,15.0648 +cache.trustr.ing,43.6548,-79.3885 +nostr.bitcoiner.social,47.6743,-117.112 +nostr.nodesmap.com,59.3327,18.0656 +wot.shaving.kiwi,43.6532,-79.3832 +kotukonostr.onrender.com,37.7775,-122.397 +purpura.cloud,43.6532,-79.3832 +video.czas.plus,50.1109,8.68213 +relay.decentnewsroom.com,50.4754,12.3683 +relay.toastr.net,40.8054,-74.0241 +speakeasy.cellar.social,49.4543,11.0746 +ribo.nostria.app,43.6532,-79.3832 +relay.notoshi.win,14.0644,101.515 +nostr.chaima.info,50.1109,8.68213 +slick.mjex.me,39.0418,-77.4744 +relay.gulugulu.moe,43.6532,-79.3832 +relay.nostriches.club,43.6532,-79.3832 +nostr.88mph.life,52.1941,-2.21905 +nostrcity-club.fly.dev,37.7648,-122.432 +ribo.us.nostria.app,43.6532,-79.3832 +bitchat.nostr1.com,40.7057,-74.0136 +nostr.debate.report,50.1109,8.68213 +nostr-verified.wellorder.net,45.5201,-122.99 +relay.nostr-check.me,43.6532,-79.3832 +relay.nostrdice.com,-33.8688,151.209 +nostr.sathoarder.com,48.5734,7.75211 +relay.bikel.ink,60.1699,24.9384 +relay.lanavault.space,60.1699,24.9384 +relay.sharegap.net,43.6532,-79.3832 +strfry.atlantislabs.space,43.6532,-79.3832 +relay.fckstate.net,59.3293,18.0686 +relay.trustr.ing,43.6548,-79.3885 +strfry.shock.network,39.0438,-77.4874 +fanfares.nostr1.com,40.7057,-74.0136 +chat-relay.zap-work.com,43.6532,-79.3832 +relay.vrtmrz.net,43.6532,-79.3832 +nostr.chvaja.cz,33.4484,-112.074 +nostr.self-determined.de,53.495,10.2542 +nostr-01.yakihonne.com,1.32123,103.695 +relay.sovbit.dev,60.1699,24.9384 +nostr.pbfs.io,50.4754,12.3683 +relay.keykeeper.world,40.7824,-74.0711 +relay.primal.net,43.6532,-79.3832 +nostr-relay.amethyst.name,39.0438,-77.4874 +nostr.ps1829.com,33.8851,130.883 +yabu.me,35.6092,139.73 +temp.iris.to,43.6532,-79.3832 +nostr.n7ekb.net,36.1527,-95.9902 +purplerelay.com,43.6532,-79.3832 +nostr.robosats.org,64.1476,-21.9392 +nostr.dlcdevkit.com,40.0992,-83.1141 +satsage.xyz,37.3986,-121.964 +relay.0xchat.com,43.6532,-79.3832 +relay.erybody.com,41.4513,-81.7021 +freelay.sovbit.dev,60.1699,24.9384 +nostr.stakey.net,52.3676,4.90414 +nostrcheck.me,43.6532,-79.3832 +nostr-relay.psfoundation.info,39.0438,-77.4874 +nostr.quali.chat,60.1699,24.9384 +syb.lol,43.6532,-79.3832 +bcast.girino.org,43.6532,-79.3832 +relay.fountain.fm,43.6532,-79.3832 +nostr.easycryptosend.it,43.6532,-79.3832 +relay.tapestry.ninja,40.8054,-74.0241 +nostr.girino.org,43.6532,-79.3832 +nostr.wecsats.io,43.6532,-79.3832 +nostr.plantroon.com,50.1013,8.62643 +cs-relay.nostrdev.com,50.4754,12.3683 +nostr.luisschwab.net,43.6532,-79.3832 +relay.endfiat.money,59.3327,18.0656 +nostr.tagomago.me,42.3601,-71.0589 +relay.satlantis.io,40.8054,-74.0241 +nostr-relay.online,43.6532,-79.3832 +relay-arg.zombi.cloudrodion.com,1.35208,103.82 +relay.fundstr.me,42.3601,-71.0589 +relay.veganostr.com,60.1699,24.9384 +relay.threenine.services,51.5222,-0.62916 +relay.angor.io,48.1046,11.6002 +relay.aidatanorge.no,43.6532,-79.3832 +espelho.girino.org,43.6532,-79.3832 +relay.layer.systems,49.0291,8.35695 +relay.satmaxt.xyz,43.6532,-79.3832 +relay-testnet.k8s.layer3.news,37.3387,-121.885 +relay.arx-ccn.com,50.4754,12.3683 +relay.hostr.network,41.2619,-95.8608 +ribo.eu.nostria.app,43.6532,-79.3832 +nostr.spicyz.io,43.6532,-79.3832 +us-east.nostr.pikachat.org,39.0438,-77.4874 +dev.relay.edufeed.org,49.4521,11.0767 +nexus.libernet.app,43.6532,-79.3832 +relay.illuminodes.com,47.6061,-122.333 +nostr.data.haus,50.4754,12.3683 +nostr-relay.nextblockvending.com,47.2343,-119.853 +relay-dev.gulugulu.moe,43.6532,-79.3832 +nostr-rs-relay-ishosta.phamthanh.me,43.6532,-79.3832 +nos.lol,50.4754,12.3683 +nos4smartnkind.tech,40.2662,44.6393 +r.0kb.io,32.789,-96.7989 +offchain.pub,39.1585,-94.5728 +prl.plus,55.7628,37.5983 +relay5.bitransfer.org,43.6532,-79.3832 +nostr.nadajnik.org,50.1109,8.68213 +nostrja-kari.heguro.com,43.6532,-79.3832 +nostrbtc.com,43.6532,-79.3832 +dev.relay.stream,43.6532,-79.3832 +relayrs.notoshi.win,43.6532,-79.3832 +relayone.soundhsa.com,39.1008,-94.5811 +dm-test-strfry-discovery.samt.st,43.6532,-79.3832 +rilo.nostria.app,43.6532,-79.3832 +openrelay.ziomc.com,50.0755,14.4378 +reraw.pbla2fish.cc,43.6532,-79.3832 +relay-rpi.edufeed.org,49.4521,11.0767 +relay.wellorder.net,45.5201,-122.99 +relay.nostriot.com,41.5695,-83.9786 +nostr-rs-relay-qj1h.onrender.com,37.7775,-122.397 relay.seq1.net,43.6532,-79.3832 +portal-relay.pareto.space,49.0291,8.35696 +relay.wavlake.com,41.2619,-95.8608 +strfry.openhoofd.nl,51.5717,3.70417 +relay.nostrhub.fr,48.1045,11.6004 +nostr.spaceshell.xyz,43.6532,-79.3832 +nostr.rikmeijer.nl,51.6992,5.30417 +relay.zone667.com,60.1699,24.9384 +relay.earthly.city,34.1749,-118.54 +nostr.bitczat.pl,60.1699,24.9384 +relay.islandbitcoin.com,12.8498,77.6545 +relay.nostar.org,43.6532,-79.3832 +relay.staging.commonshub.brussels,49.4543,11.0746 +myvoiceourstory.org,37.3598,-121.981 +bendernostur.duckdns.org:8443,50.1109,8.68213 +relay.nearhood.co.uk,51.5072,-0.127586 +relay.nostrmap.net,60.1699,24.9384 +0x-nostr-relay.fly.dev,37.7648,-122.432 +nostr.hekster.org,37.3986,-121.964 +rele.speyhard.fi,50.1109,8.68213 +nostr.oxtr.dev,50.4754,12.3683 +nostr-relay.xbytez.io,50.6924,3.20113 +relay.flashapp.me,43.6548,-79.3885 +relay.mostr.pub,43.6532,-79.3832 +relay.artx.market,43.6548,-79.3885 +nostr.rtvslawenia.com,49.4543,11.0746 +relay.directsponsor.net,42.8864,-78.8784 +bitcoiner.social,47.6743,-117.112 +relay.damus.io,43.6532,-79.3832 +nostr.tac.lol,47.4748,-122.273 +relay.binaryrobot.com,43.6532,-79.3832 +relay2.veganostr.com,60.1699,24.9384 +offchain.bostr.online,43.6532,-79.3832 +relay.openresist.com,43.6532,-79.3832 +relay.lanacoin-eternity.com,40.8302,-74.1299 +nostr.4rs.nl,49.0291,8.35696 +nittom.nostr1.com,40.7057,-74.0136 +nostr.21crypto.ch,47.5356,8.73209 +wot.nostr.place,43.6532,-79.3832 +nostr.azzamo.net,52.2633,21.0283 +dev-relay.nostreon.com,60.1699,24.9384 +relay.camelus.app,45.5201,-122.99 +relay.beginningend.com,35.2227,-97.4786 +relay.cypherflow.ai,48.8575,2.35138 +test.thedude.cloud,50.1109,8.68213 +armada.sharegap.net,43.6532,-79.3832 +relay.agentry.com,42.8864,-78.8784 +relay1.privkey.io,25.7617,-80.1918 +bucket.coracle.social,37.7775,-122.397 +nostr.red5d.dev,43.6532,-79.3832 +relay.lab.rytswd.com,49.4543,11.0746 +relay.sigit.io,50.4754,12.3683 +ephemeral.snowflare.cc,43.6532,-79.3832 +nostrelay.circum.space,52.3676,4.90414 +vault.iris.to,43.6532,-79.3832 +articles.layer3.news,37.3387,-121.885 +relay.mitchelltribe.com,39.0438,-77.4874 +nostr.carroarmato0.be,51.0368,3.21186 +relay.ngengine.org,43.6532,-79.3832 +nostr.2b9t.xyz,34.0549,-118.243 +relay.bornheimer.app,51.5072,-0.127586 +relay.dyne.org,49.0291,8.35705 +nostr-pub.wellorder.net,45.5201,-122.99 +relay.bebond.net,43.6532,-79.3832 +relay.opmaat.org,60.1699,24.9384 +relay.degmods.com,50.4754,12.3683 +nrs-02.darkcloudarcade.com,39.9526,-75.1652 +relay.samt.st,40.8302,-74.1299 +relay.lightning.pub,39.0438,-77.4874 +relay.shadowbip.com,50.1109,8.68213 +kasztanowa.bieda.it,43.6532,-79.3832 +x.kojira.io,43.6532,-79.3832 +nostr.overmind.lol,43.6532,-79.3832 +relay.qstr.app,50.1109,8.68213 +relay02.lnfi.network,35.6764,139.65 +nrs-01.darkcloudarcade.com,39.1008,-94.5811 +relay.dreamith.to,43.6532,-79.3832 +dev-nostr.bityacht.io,43.6532,-79.3832 +relay.olas.app,60.1699,24.9384 From a6cb8872fb0453974a387aa57d32dd51631429d1 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 24 May 2026 07:05:51 +0000 Subject: [PATCH 009/216] Automated update of relay data - Sun May 24 07:05:51 UTC 2026 --- relays/online_relays_gps.csv | 568 ++++++++++++++++++----------------- 1 file changed, 292 insertions(+), 276 deletions(-) diff --git a/relays/online_relays_gps.csv b/relays/online_relays_gps.csv index 9cd6f99b..546dcc20 100644 --- a/relays/online_relays_gps.csv +++ b/relays/online_relays_gps.csv @@ -1,291 +1,307 @@ Relay URL,Latitude,Longitude -testr.nymble.world,40.8054,-74.0241 -relay.mccormick.cx,52.3563,4.95714 -treuzkas.branruz.com,48.8575,2.35138 -nostr-dev.wellorder.net,45.5201,-122.99 -nostr2.girino.org,43.6532,-79.3832 -relay.ditto.pub,43.6532,-79.3832 -relay.getsafebox.app,43.6532,-79.3832 -intl-rocks-microphone-did.trycloudflare.com,43.6532,-79.3832 -strfry.bonsai.com,39.0438,-77.4874 -nostr.computingcache.com,34.0356,-118.442 -nostr-kyomu-haskell.onrender.com,37.7775,-122.397 -nostr-relay.zimage.com,34.0549,-118.243 -relay.openfarmtools.org,60.1699,24.9384 -nostr-relay.corb.net,38.8353,-104.822 -nostr.blankfors.se,60.1699,24.9384 -inbox.scuba323.com,40.8218,-74.45 -relayone.geektank.ai,39.1008,-94.5811 -relay2.angor.io,48.1046,11.6002 -relay.klabo.world,47.2343,-119.853 -nostr.islandarea.net,35.4669,-97.6473 -nostr-relay.cbrx.io,43.6532,-79.3832 -relay.gorrdy.cz,43.6532,-79.3832 -nostr.tadryanom.me,43.6532,-79.3832 -relay.mostro.network,40.8302,-74.1299 -relay.bullishbounty.com,43.6532,-79.3832 -wot.dergigi.com,64.1476,-21.9392 -relay01.lnfi.network,35.6764,139.65 -nostr.twinkle.lol,51.902,7.6657 -nostr.snowbla.de,60.1699,24.9384 -relay.bnos.space,43.6532,-79.3832 -bridge.tagomago.me,42.3601,-71.0589 -relay.mulatta.io,37.5665,126.978 -nostr-relay-1.trustlessenterprise.com,43.6532,-79.3832 -relay.nostrian-conquest.com,41.223,-111.974 -testnet-relay.samt.st,40.8302,-74.1299 -nostr.openhoofd.nl,51.5717,3.70417 +schnorr.me,43.6532,-79.3832 relay.jbnco.co,43.6532,-79.3832 -srtrelay.c-stellar.net,43.6532,-79.3832 -relay.libernet.app,43.6532,-79.3832 -relay.paulstephenborile.com,49.4543,11.0746 -strfry.ymir.cloud,43.6532,-79.3832 -spookstr2.nostr1.com,40.7057,-74.0136 -relay.mwaters.net,50.9871,2.12554 -relay.staging.hostr.network,41.2619,-95.8608 -relay.mrmave.work,43.6532,-79.3832 -relay.typedcypher.com,51.5072,-0.127586 -premium.primal.net,43.6532,-79.3832 -nostr.liberty.fans,36.9104,-89.5875 -relay.ru.ac.th,13.7607,100.627 -relay.edufeed.org,49.4521,11.0767 -nostr.vulpem.com,49.4543,11.0746 -relay.lacompagniemaximus.com,45.3147,-73.8785 -relay.trotters.cc,43.6532,-79.3832 -relay-fra.zombi.cloudrodion.com,48.8566,2.35222 -relay.internationalright-wing.org,-22.5022,-48.7114 -relay.inforsupports.com,43.6532,-79.3832 -public.crostr.com,43.6532,-79.3832 -nostrue.com,40.8054,-74.0241 -bitcoinostr.duckdns.org,41.1976,1.11167 -relay.plebeian.market,50.1109,8.68213 +relay.layer.systems,49.0291,8.35695 +relay.satlantis.io,40.8054,-74.0241 +relay.plebeian.market:443,50.1109,8.68213 +nittom.nostr1.com:443,40.7057,-74.0136 +relay.lab.rytswd.com,49.4543,11.0746 +relay.bornheimer.app,51.5072,-0.127586 +nostrelites.org,41.8781,-87.6298 +dev.relay.edufeed.org,49.4521,11.0767 +relay.trustr.ing,43.6548,-79.3885 +nostr.aruku.ovh,1.27994,103.849 +relay.vrtmrz.net,43.6532,-79.3832 +relay.nostr.net,43.6532,-79.3832 +testnet-relay.samt.st,40.8302,-74.1299 +nostr.hybner.org,46.9895,28.8602 +test.thedude.cloud,50.1109,8.68213 +relay-rpi.edufeed.org,49.4521,11.0767 +relay.artx.market,43.6548,-79.3885 nostr.thalheim.io,60.1699,24.9384 -relay-nl.zombi.cloudrodion.com,50.8943,6.06237 -ynostr.yael.at,60.1699,24.9384 -relay.cosmicbolt.net,37.3986,-121.964 -nostr.bond,50.1109,8.68213 +dm-test-strfry-generic.samt.st,43.6532,-79.3832 +dev.relay.stream,43.6532,-79.3832 +relay.thecryptosquid.com,50.4754,12.3683 +nostr-rs-relay.dev.fedibtc.com,39.0438,-77.4874 +nostr-dev.wellorder.net,45.5201,-122.99 +relay.binaryrobot.com,43.6532,-79.3832 +relay.threenine.services,51.5222,-0.62916 +relay2.veganostr.com,60.1699,24.9384 +nostr-pub.wellorder.net,45.5201,-122.99 +mostro-p2p.tech,50.1109,8.68213 +relay.mwaters.net,50.9871,2.12554 +nexus.libernet.app,43.6532,-79.3832 +testnet.samt.st,43.6532,-79.3832 +nostr.girino.org,43.6532,-79.3832 +relay.orangepill.ovh,49.1689,-0.358841 +soloco.nl,43.6532,-79.3832 +relay.nostrhub.fr,48.1045,11.6004 +nostr.rtvslawenia.com:443,49.4543,11.0746 +nostr.dlcdevkit.com,40.0992,-83.1141 +relay.mostro.network,40.8302,-74.1299 +relay.mccormick.cx:443,52.3563,4.95714 +nrs-02.darkcloudarcade.com,39.9526,-75.1652 +nostr.sathoarder.com,48.5734,7.75211 +myvoiceourstory.org,37.3598,-121.981 +nostr-relay.cbrx.io,43.6532,-79.3832 +relay.bikel.ink,60.1699,24.9384 +nostr.tac.lol,47.4748,-122.273 +adre.su,59.9311,30.3609 +relay.ru.ac.th,13.7607,100.627 +0x-nostr-relay.fly.dev,37.7648,-122.432 +nostr.easycryptosend.it,43.6532,-79.3832 +relay.wavlake.com:443,41.2619,-95.8608 +nostr-relay.online,43.6532,-79.3832 +top.testrelay.top,43.6532,-79.3832 +video.czas.plus,50.1109,8.68213 +relay.gorrdy.cz,43.6532,-79.3832 +relay.shadowbip.com,50.1109,8.68213 +ribo.us.nostria.app,43.6532,-79.3832 +bucket.coracle.social,37.7775,-122.397 relay.staging.plebeian.market,51.5072,-0.127586 -nostr.mom,50.4754,12.3683 wot.nostr.party,36.1659,-86.7844 +relay.beginningend.com,35.2227,-97.4786 +blossom.gnostr.cloud,43.6532,-79.3832 +relay01.lnfi.network,35.6764,139.65 +satsage.xyz,37.3986,-121.964 +x.kojira.io,43.6532,-79.3832 +nostr.data.haus,50.4754,12.3683 +relay.homeinhk.xyz,35.694,139.754 +relay.olas.app,60.1699,24.9384 +relay.lacompagniemaximus.com,45.3147,-73.8785 +relay.satmaxt.xyz,43.6532,-79.3832 +nostr.chaima.info,50.1109,8.68213 +nostr.tadryanom.me,43.6532,-79.3832 +relay.notoshi.win,13.966,101.513 +relay.damus.io,43.6532,-79.3832 +relay5.bitransfer.org,43.6532,-79.3832 +relay.btcforplebs.com,43.6532,-79.3832 +prl.plus,55.7628,37.5983 +nostr-rs-relay-qj1h.onrender.com,37.7775,-122.397 +ribo.nostria.app,43.6532,-79.3832 +dk.6yv.cn,39.9042,116.407 +relay.nearhood.co.uk,51.5072,-0.127586 +wot.dergigi.com,64.1476,-21.9392 +relay.fundstr.me,42.3601,-71.0589 +nostr.nodesmap.com,59.3327,18.0656 +nostr.bgbitcoin.club,50.4754,12.3683 +relay.libernet.app,43.6532,-79.3832 +nostr.spaceshell.xyz,43.6532,-79.3832 +relay.erybody.com,41.4513,-81.7021 +nostr-01.yakihonne.com,1.32123,103.695 +nostr.bond,50.1109,8.68213 +offchain.pub,39.1585,-94.5728 +relay.klabo.world,47.2343,-119.853 +nostrelay.circum.space,52.3676,4.90414 +kotukonostr.onrender.com,37.7775,-122.397 +relay.comcomponent.com,43.6532,-79.3832 +nostr.infero.net,35.6764,139.65 +purplerelay.com,43.6532,-79.3832 +relay.nostr.blockhenge.com,39.0438,-77.4874 +nos.lol,50.4754,12.3683 +bridge.tagomago.me,42.3601,-71.0589 +nostr.spicyz.io,43.6532,-79.3832 +relay.samt.st,40.8302,-74.1299 +nostr.ps1829.com,33.8851,130.883 +nostr.tagomago.me,42.3601,-71.0589 +nostr.88mph.life,52.1941,-2.21905 +no.str.cr,9.27447,-83.5797 +relay-dev.satlantis.io,40.8302,-74.1299 +nostr.self-determined.de,53.495,10.2542 +yabu.me,35.6092,139.73 +nostr-verified.wellorder.net,45.5201,-122.99 +nostr-rs-relay-ishosta.phamthanh.me,43.6532,-79.3832 +quantum-relay.3nostr.com,42.8864,-78.8784 +nostr-relay.amethyst.name,39.0438,-77.4874 +relay.mccormick.cx,52.3563,4.95714 +nostr.nadajnik.org,50.1109,8.68213 +nostr.azzamo.net,52.2633,21.0283 +relay.nostu.be,40.4167,-3.70329 +relay.decentnewsroom.com,50.4754,12.3683 +relay.bebond.net,43.6532,-79.3832 +relay.nostr-check.me,43.6532,-79.3832 +nostr.hifish.org,47.4244,8.57658 +eu.nostr.pikachat.org,49.4543,11.0746 +strfry.ymir.cloud,43.6532,-79.3832 +bitcoiner.social,47.6743,-117.112 +nostr.computingcache.com,34.0356,-118.442 +nostr.twinkle.lol,51.902,7.6657 +relay.aidatanorge.no,43.6532,-79.3832 +relay.mulatta.io,37.5665,126.978 +ynostr.yael.at,60.1699,24.9384 +relay.mrmave.work,43.6532,-79.3832 +damus.bostr.online,43.6532,-79.3832 +nostr.rtvslawenia.com,49.4543,11.0746 +herbstmeister.com,34.0549,-118.243 +antiprimal.net,43.6532,-79.3832 +relay.endfiat.money,59.3327,18.0656 +relay.sigit.io,50.4754,12.3683 +kasztanowa.bieda.it,43.6532,-79.3832 +nostr.purpura.cloud,43.6532,-79.3832 +relay.dreamith.to,43.6532,-79.3832 +fanfares.nostr1.com,40.7057,-74.0136 +portal-relay.pareto.space,49.0291,8.35696 +relay.agorist.space,52.3734,4.89406 +nostr.debate.report,50.1109,8.68213 +relay.lightning.pub,39.0438,-77.4874 +relay.lanacoin-eternity.com,40.8302,-74.1299 +wot.makenomistakes.ca,43.7064,-79.3986 +nostr.carroarmato0.be,51.0368,3.21186 +relay.trotters.cc,43.6532,-79.3832 +dm-test-nostr-rs-42-disabled.samt.st,43.6532,-79.3832 +us-east.nostr.pikachat.org,39.0438,-77.4874 +rilo.nostria.app,43.6532,-79.3832 +relay.degmods.com,50.4754,12.3683 +nostr.snowbla.de,60.1699,24.9384 +relay.illuminodes.com,47.6061,-122.333 +intl-rocks-microphone-did.trycloudflare.com,43.6532,-79.3832 +testr.nymble.world,40.8054,-74.0241 +nostr.blankfors.se,60.1699,24.9384 +nostr.mom,50.4754,12.3683 +r.0kb.io,32.789,-96.7989 +relay.nostr.place,43.6532,-79.3832 +relay.angor.io,48.1046,11.6002 +relay.wisp.talk,49.4543,11.0746 +nrs-01.darkcloudarcade.com,39.1008,-94.5811 +nostriches.club,43.6532,-79.3832 +relay.npubhaus.com,43.6532,-79.3832 +relay02.lnfi.network,35.6764,139.65 +armada.sharegap.net,43.6532,-79.3832 +dev-relay.nostreon.com,60.1699,24.9384 +relay1.privkey.io,25.7617,-80.1918 +nostr.wecsats.io,43.6532,-79.3832 +relay.mitchelltribe.com,39.0438,-77.4874 +conduitl2.fly.dev,37.7648,-122.432 +relay.nostx.io,43.6532,-79.3832 +rele.speyhard.fi,50.1109,8.68213 +relay.getsafebox.app,43.6532,-79.3832 +relay.cosmicbolt.net,37.3986,-121.964 +relayone.soundhsa.com,39.1008,-94.5811 +relay.openresist.com,43.6532,-79.3832 +relay.bullishbounty.com,43.6532,-79.3832 +relay-testnet.k8s.layer3.news,37.3387,-121.885 +chat-relay.zap-work.com,43.6532,-79.3832 +nostrbtc.com,43.6532,-79.3832 +insta-relay.apps3.slidestr.net,40.4167,-3.70329 +relay-arg.zombi.cloudrodion.com,1.35208,103.82 +ribo.eu.nostria.app,43.6532,-79.3832 +bcast.girino.org,43.6532,-79.3832 +relay.ditto.pub,43.6532,-79.3832 +relay.chorus.community,48.5333,10.7 +vault.iris.to,43.6532,-79.3832 +nostr.vulpem.com,49.4543,11.0746 +nostrcheck.me,43.6532,-79.3832 +relay-dev.gulugulu.moe,43.6532,-79.3832 +wot.codingarena.top,50.4754,12.3683 +relay.snotr.nl:49999,52.0195,4.42946 +nostr-relay-1.trustlessenterprise.com,43.6532,-79.3832 +relay.sharegap.net,43.6532,-79.3832 +nas01xanthosnet.synology.me:7778,47.1285,8.74735 +relay.flashapp.me,43.6548,-79.3885 +syb.lol,43.6532,-79.3832 +relay.lanavault.space,60.1699,24.9384 +nostr2.thalheim.io,49.4543,11.0746 +nostrcity-club.fly.dev,37.7648,-122.432 +nostr2.girino.org,43.6532,-79.3832 +relay.typedcypher.com,51.5072,-0.127586 +relay.underorion.se,50.1109,8.68213 +nostr.bitcoiner.social,47.6743,-117.112 +relay.dyne.org,49.0291,8.35705 +nostr-relay.corb.net,38.8353,-104.822 +relay.nostrmap.net,60.1699,24.9384 +relay.wavefunc.live,41.8781,-87.6298 +nostr.night7.space,50.4754,12.3683 +nostr-2.21crypto.ch,47.5356,8.73209 +wot.nostr.place,43.6532,-79.3832 +relay.sovbit.dev,60.1699,24.9384 +spookstr2.nostr1.com,40.7057,-74.0136 +relay.arx-ccn.com,50.4754,12.3683 +offchain.bostr.online,43.6532,-79.3832 +nittom.nostr1.com,40.7057,-74.0136 +relay.veganostr.com,60.1699,24.9384 +relay.tapestry.ninja,40.8054,-74.0241 +relay.nostar.org,43.6532,-79.3832 +relay.aarpia.com,37.3986,-121.964 +nostr.2b9t.xyz,34.0549,-118.243 +relayrs.notoshi.win,43.6532,-79.3832 +aeon.libretechsystems.xyz,55.486,9.86577 +nostr.21crypto.ch,47.5356,8.73209 +nostr.n7ekb.net,36.1527,-95.9902 +nostr-relay.zimage.com,34.0549,-118.243 +dm-test-strfry-discovery.samt.st,43.6532,-79.3832 +relay.camelus.app,45.5201,-122.99 +relay.openfarmtools.org,60.1699,24.9384 +relay.agentry.com,42.8864,-78.8784 +nostr.4rs.nl,49.0291,8.35696 +relay.0xchat.com,43.6532,-79.3832 +treuzkas.branruz.com,48.8575,2.35138 +nostr.stakey.net,52.3676,4.90414 +relay.mmwaves.de,48.8575,2.35138 +relay.gulugulu.moe,43.6532,-79.3832 +relay.nostrdice.com,-33.8688,151.209 +relay.plebeian.market,50.1109,8.68213 +relay2.angor.io,48.1046,11.6002 +relay.bullishbounty.com:443,43.6532,-79.3832 +relay.nostrcheck.me,43.6532,-79.3832 bbw-nostr.xyz,41.5284,-87.4237 relay.jeffg.fyi,43.6532,-79.3832 -nostr.notribe.net,40.8302,-74.1299 -top.testrelay.top,43.6532,-79.3832 -relay.wavefunc.live,41.8781,-87.6298 -relay.minibolt.info,43.6532,-79.3832 -schnorr.me,43.6532,-79.3832 -adre.su,59.9311,30.3609 -relay.bitmacro.cloud,43.6532,-79.3832 -wot.codingarena.top,50.4754,12.3683 -relay.nostr.net,43.6532,-79.3832 -nostrride.io,37.3986,-121.964 -dm-test-strfry-generic.samt.st,43.6532,-79.3832 -relay.orangepill.ovh,49.1689,-0.358841 -nostr.myshosholoza.co.za,52.3913,4.66545 -eu.nostr.pikachat.org,49.4543,11.0746 -nostr-rs-relay.dev.fedibtc.com,39.0438,-77.4874 -relay.bao.network,43.6532,-79.3832 -nostr.mikoshi.de,50.1109,8.68213 -nostr2.thalheim.io,49.4543,11.0746 -relay.laantungir.net,-19.4692,-42.5315 -aeon.libretechsystems.xyz,55.486,9.86577 -relay.wisp.talk,49.4543,11.0746 -relay.mmwaves.de,48.8575,2.35138 -relay.snotr.nl:49999,52.0195,4.42946 -blossom.gnostr.cloud,43.6532,-79.3832 -dm-test-nostr-rs-42-disabled.samt.st,43.6532,-79.3832 -relay.ohstr.com,43.6532,-79.3832 -relay.agora.social,50.7383,15.0648 -cache.trustr.ing,43.6548,-79.3885 -nostr.bitcoiner.social,47.6743,-117.112 -nostr.nodesmap.com,59.3327,18.0656 -wot.shaving.kiwi,43.6532,-79.3832 -kotukonostr.onrender.com,37.7775,-122.397 -purpura.cloud,43.6532,-79.3832 -video.czas.plus,50.1109,8.68213 -relay.decentnewsroom.com,50.4754,12.3683 relay.toastr.net,40.8054,-74.0241 -speakeasy.cellar.social,49.4543,11.0746 -ribo.nostria.app,43.6532,-79.3832 -relay.notoshi.win,14.0644,101.515 -nostr.chaima.info,50.1109,8.68213 -slick.mjex.me,39.0418,-77.4744 -relay.gulugulu.moe,43.6532,-79.3832 -relay.nostriches.club,43.6532,-79.3832 -nostr.88mph.life,52.1941,-2.21905 -nostrcity-club.fly.dev,37.7648,-122.432 -ribo.us.nostria.app,43.6532,-79.3832 -bitchat.nostr1.com,40.7057,-74.0136 -nostr.debate.report,50.1109,8.68213 -nostr-verified.wellorder.net,45.5201,-122.99 -relay.nostr-check.me,43.6532,-79.3832 -relay.nostrdice.com,-33.8688,151.209 -nostr.sathoarder.com,48.5734,7.75211 -relay.bikel.ink,60.1699,24.9384 -relay.lanavault.space,60.1699,24.9384 -relay.sharegap.net,43.6532,-79.3832 -strfry.atlantislabs.space,43.6532,-79.3832 -relay.fckstate.net,59.3293,18.0686 -relay.trustr.ing,43.6548,-79.3885 -strfry.shock.network,39.0438,-77.4874 -fanfares.nostr1.com,40.7057,-74.0136 -chat-relay.zap-work.com,43.6532,-79.3832 -relay.vrtmrz.net,43.6532,-79.3832 -nostr.chvaja.cz,33.4484,-112.074 -nostr.self-determined.de,53.495,10.2542 -nostr-01.yakihonne.com,1.32123,103.695 -relay.sovbit.dev,60.1699,24.9384 -nostr.pbfs.io,50.4754,12.3683 -relay.keykeeper.world,40.7824,-74.0711 -relay.primal.net,43.6532,-79.3832 -nostr-relay.amethyst.name,39.0438,-77.4874 -nostr.ps1829.com,33.8851,130.883 -yabu.me,35.6092,139.73 +premium.primal.net,43.6532,-79.3832 temp.iris.to,43.6532,-79.3832 -nostr.n7ekb.net,36.1527,-95.9902 -purplerelay.com,43.6532,-79.3832 -nostr.robosats.org,64.1476,-21.9392 -nostr.dlcdevkit.com,40.0992,-83.1141 -satsage.xyz,37.3986,-121.964 -relay.0xchat.com,43.6532,-79.3832 -relay.erybody.com,41.4513,-81.7021 -freelay.sovbit.dev,60.1699,24.9384 -nostr.stakey.net,52.3676,4.90414 -nostrcheck.me,43.6532,-79.3832 -nostr-relay.psfoundation.info,39.0438,-77.4874 -nostr.quali.chat,60.1699,24.9384 -syb.lol,43.6532,-79.3832 -bcast.girino.org,43.6532,-79.3832 -relay.fountain.fm,43.6532,-79.3832 -nostr.easycryptosend.it,43.6532,-79.3832 -relay.tapestry.ninja,40.8054,-74.0241 -nostr.girino.org,43.6532,-79.3832 -nostr.wecsats.io,43.6532,-79.3832 -nostr.plantroon.com,50.1013,8.62643 -cs-relay.nostrdev.com,50.4754,12.3683 -nostr.luisschwab.net,43.6532,-79.3832 -relay.endfiat.money,59.3327,18.0656 -nostr.tagomago.me,42.3601,-71.0589 -relay.satlantis.io,40.8054,-74.0241 -nostr-relay.online,43.6532,-79.3832 -relay-arg.zombi.cloudrodion.com,1.35208,103.82 -relay.fundstr.me,42.3601,-71.0589 -relay.veganostr.com,60.1699,24.9384 -relay.threenine.services,51.5222,-0.62916 -relay.angor.io,48.1046,11.6002 -relay.aidatanorge.no,43.6532,-79.3832 -espelho.girino.org,43.6532,-79.3832 -relay.layer.systems,49.0291,8.35695 -relay.satmaxt.xyz,43.6532,-79.3832 -relay-testnet.k8s.layer3.news,37.3387,-121.885 -relay.arx-ccn.com,50.4754,12.3683 -relay.hostr.network,41.2619,-95.8608 -ribo.eu.nostria.app,43.6532,-79.3832 -nostr.spicyz.io,43.6532,-79.3832 -us-east.nostr.pikachat.org,39.0438,-77.4874 -dev.relay.edufeed.org,49.4521,11.0767 -nexus.libernet.app,43.6532,-79.3832 -relay.illuminodes.com,47.6061,-122.333 -nostr.data.haus,50.4754,12.3683 -nostr-relay.nextblockvending.com,47.2343,-119.853 -relay-dev.gulugulu.moe,43.6532,-79.3832 -nostr-rs-relay-ishosta.phamthanh.me,43.6532,-79.3832 -nos.lol,50.4754,12.3683 -nos4smartnkind.tech,40.2662,44.6393 -r.0kb.io,32.789,-96.7989 -offchain.pub,39.1585,-94.5728 -prl.plus,55.7628,37.5983 -relay5.bitransfer.org,43.6532,-79.3832 -nostr.nadajnik.org,50.1109,8.68213 +relay.internationalright-wing.org,-22.5022,-48.7114 +relay.inforsupports.com,43.6532,-79.3832 +bitchat.nostr1.com,40.7057,-74.0136 +relay.getsafebox.app:443,43.6532,-79.3832 nostrja-kari.heguro.com,43.6532,-79.3832 -nostrbtc.com,43.6532,-79.3832 -dev.relay.stream,43.6532,-79.3832 -relayrs.notoshi.win,43.6532,-79.3832 -relayone.soundhsa.com,39.1008,-94.5811 -dm-test-strfry-discovery.samt.st,43.6532,-79.3832 -rilo.nostria.app,43.6532,-79.3832 -openrelay.ziomc.com,50.0755,14.4378 -reraw.pbla2fish.cc,43.6532,-79.3832 -relay-rpi.edufeed.org,49.4521,11.0767 +relay.guggero.org,46.5971,9.59652 +freelay.sovbit.dev,60.1699,24.9384 +speakeasy.cellar.social,49.4543,11.0746 +relay.paulstephenborile.com,49.4543,11.0746 relay.wellorder.net,45.5201,-122.99 -relay.nostriot.com,41.5695,-83.9786 -nostr-rs-relay-qj1h.onrender.com,37.7775,-122.397 -relay.seq1.net,43.6532,-79.3832 -portal-relay.pareto.space,49.0291,8.35696 -relay.wavlake.com,41.2619,-95.8608 -strfry.openhoofd.nl,51.5717,3.70417 -relay.nostrhub.fr,48.1045,11.6004 -nostr.spaceshell.xyz,43.6532,-79.3832 -nostr.rikmeijer.nl,51.6992,5.30417 -relay.zone667.com,60.1699,24.9384 -relay.earthly.city,34.1749,-118.54 +slick.mjex.me,39.0418,-77.4744 +strfry.shock.network,39.0438,-77.4874 +nostr-relay.psfoundation.info,39.0438,-77.4874 +nostr.islandarea.net,35.4669,-97.6473 +nostr-relay.nextblockvending.com,47.2343,-119.853 nostr.bitczat.pl,60.1699,24.9384 -relay.islandbitcoin.com,12.8498,77.6545 -relay.nostar.org,43.6532,-79.3832 -relay.staging.commonshub.brussels,49.4543,11.0746 -myvoiceourstory.org,37.3598,-121.981 -bendernostur.duckdns.org:8443,50.1109,8.68213 -relay.nearhood.co.uk,51.5072,-0.127586 -relay.nostrmap.net,60.1699,24.9384 -0x-nostr-relay.fly.dev,37.7648,-122.432 -nostr.hekster.org,37.3986,-121.964 -rele.speyhard.fi,50.1109,8.68213 -nostr.oxtr.dev,50.4754,12.3683 +wot.utxo.one,43.6532,-79.3832 +cs-relay.nostrdev.com,50.4754,12.3683 +nostr.notribe.net,40.8302,-74.1299 +nostr.quali.chat,60.1699,24.9384 +nostr.ac,38.958,-77.3592 +relay.fountain.fm,43.6532,-79.3832 nostr-relay.xbytez.io,50.6924,3.20113 -relay.flashapp.me,43.6548,-79.3885 -relay.mostr.pub,43.6532,-79.3832 -relay.artx.market,43.6548,-79.3885 -nostr.rtvslawenia.com,49.4543,11.0746 -relay.directsponsor.net,42.8864,-78.8784 -bitcoiner.social,47.6743,-117.112 -relay.damus.io,43.6532,-79.3832 -nostr.tac.lol,47.4748,-122.273 -relay.binaryrobot.com,43.6532,-79.3832 -relay2.veganostr.com,60.1699,24.9384 -offchain.bostr.online,43.6532,-79.3832 -relay.openresist.com,43.6532,-79.3832 -relay.lanacoin-eternity.com,40.8302,-74.1299 -nostr.4rs.nl,49.0291,8.35696 -nittom.nostr1.com,40.7057,-74.0136 -nostr.21crypto.ch,47.5356,8.73209 -wot.nostr.place,43.6532,-79.3832 -nostr.azzamo.net,52.2633,21.0283 -dev-relay.nostreon.com,60.1699,24.9384 -relay.camelus.app,45.5201,-122.99 -relay.beginningend.com,35.2227,-97.4786 -relay.cypherflow.ai,48.8575,2.35138 -test.thedude.cloud,50.1109,8.68213 -armada.sharegap.net,43.6532,-79.3832 -relay.agentry.com,42.8864,-78.8784 -relay1.privkey.io,25.7617,-80.1918 -bucket.coracle.social,37.7775,-122.397 -nostr.red5d.dev,43.6532,-79.3832 -relay.lab.rytswd.com,49.4543,11.0746 -relay.sigit.io,50.4754,12.3683 +relay.minibolt.info,43.6532,-79.3832 ephemeral.snowflare.cc,43.6532,-79.3832 -nostrelay.circum.space,52.3676,4.90414 -vault.iris.to,43.6532,-79.3832 -articles.layer3.news,37.3387,-121.885 -relay.mitchelltribe.com,39.0438,-77.4874 -nostr.carroarmato0.be,51.0368,3.21186 -relay.ngengine.org,43.6532,-79.3832 -nostr.2b9t.xyz,34.0549,-118.243 -relay.bornheimer.app,51.5072,-0.127586 -relay.dyne.org,49.0291,8.35705 -nostr-pub.wellorder.net,45.5201,-122.99 -relay.bebond.net,43.6532,-79.3832 -relay.opmaat.org,60.1699,24.9384 -relay.degmods.com,50.4754,12.3683 -nrs-02.darkcloudarcade.com,39.9526,-75.1652 -relay.samt.st,40.8302,-74.1299 -relay.lightning.pub,39.0438,-77.4874 -relay.shadowbip.com,50.1109,8.68213 -kasztanowa.bieda.it,43.6532,-79.3832 -x.kojira.io,43.6532,-79.3832 -nostr.overmind.lol,43.6532,-79.3832 -relay.qstr.app,50.1109,8.68213 -relay02.lnfi.network,35.6764,139.65 -nrs-01.darkcloudarcade.com,39.1008,-94.5811 -relay.dreamith.to,43.6532,-79.3832 +relay.ohstr.com,43.6532,-79.3832 +nostr.pbfs.io,50.4754,12.3683 +schnorr.me:443,43.6532,-79.3832 +relay.nostriot.com,41.5695,-83.9786 +relay.mostr.pub,43.6532,-79.3832 +relaisnostr.trivaco.fr,48.5734,7.75211 +relay.cypherflow.ai,48.8575,2.35138 +nostr.hekster.org,37.3986,-121.964 +cache.trustr.ing,43.6548,-79.3885 +nostr-kyomu-haskell.onrender.com,37.7775,-122.397 +strfry.bonsai.com,39.0438,-77.4874 +relay.edufeed.org,49.4521,11.0767 +strfry.apps3.slidestr.net,40.4167,-3.70329 +relay.wavlake.com,41.2619,-95.8608 +relay.nostrmap.net:443,60.1699,24.9384 +nostr.robosats.org,64.1476,-21.9392 +relay.primal.net,43.6532,-79.3832 +wot.rejecttheframe.xyz,43.6532,-79.3832 dev-nostr.bityacht.io,43.6532,-79.3832 -relay.olas.app,60.1699,24.9384 +wot.shaving.kiwi,43.6532,-79.3832 +relay.bitmacro.cloud,43.6532,-79.3832 +relay.bnos.space,43.6532,-79.3832 +srtrelay.c-stellar.net,43.6532,-79.3832 +nostrride.io,37.3986,-121.964 +relay.islandbitcoin.com,12.8498,77.6545 +relay.fckstate.net,59.3293,18.0686 +relay-nl.zombi.cloudrodion.com,50.8943,6.06237 +nostr.thebiglake.org,32.71,-96.6745 +relay.staging.commonshub.brussels,49.4543,11.0746 +articles.layer3.news,37.3387,-121.885 +relay.directsponsor.net,42.8864,-78.8784 +relay.zone667.com,60.1699,24.9384 From 764f016d17976c10c469a30737e9049cce0fd80b Mon Sep 17 00:00:00 2001 From: jack <212554440+jackjackbits@users.noreply.github.com> Date: Sat, 30 May 2026 14:13:26 +0200 Subject: [PATCH 010/216] [codex] Refactor app runtime and ownership architecture (#1104) * Refactor app runtime and view model architecture * Move app ownership into stores and coordinators * Fix smoke test environment injection * Stabilize fragmentation package tests * Fix coordinator build warnings * Clean up chat view model warnings * Fix Nostr relay startup coalescing --------- Co-authored-by: jack --- bitchat/App/AppArchitecture.swift | 363 ++ bitchat/App/AppChromeModel.swift | 100 + bitchat/App/AppRuntime.swift | 387 +++ bitchat/App/ConversationUIModel.swift | 183 + bitchat/App/LocationChannelsModel.swift | 176 + bitchat/App/LocationPresenceStore.swift | 51 + bitchat/App/PeerIdentityStore.swift | 125 + bitchat/App/PeerListModel.swift | 260 ++ bitchat/App/PrivateConversationModels.swift | 298 ++ bitchat/App/PublicChatModel.swift | 41 + bitchat/App/VerificationModel.swift | 152 + bitchat/BitchatApp.swift | 242 +- bitchat/Nostr/NostrRelayManager.swift | 228 +- bitchat/Services/CommandProcessor.swift | 5 +- .../ViewModels/ChatComposerCoordinator.swift | 92 + .../ViewModels/ChatDeliveryCoordinator.swift | 89 + .../ViewModels/ChatLifecycleCoordinator.swift | 260 ++ .../ChatMediaTransferCoordinator.swift | 323 ++ bitchat/ViewModels/ChatMessageFormatter.swift | 503 +++ bitchat/ViewModels/ChatNostrCoordinator.swift | 858 +++++ .../ViewModels/ChatOutgoingCoordinator.swift | 151 + .../ChatPeerIdentityCoordinator.swift | 379 ++ .../ViewModels/ChatPeerListCoordinator.swift | 186 + .../ChatPrivateConversationCoordinator.swift | 714 ++++ .../ChatPublicConversationCoordinator.swift | 464 +++ .../ChatTransportEventCoordinator.swift | 280 ++ .../ChatVerificationCoordinator.swift | 251 ++ bitchat/ViewModels/ChatViewModel.swift | 3054 ++--------------- .../ChatViewModelBootstrapper.swift | 279 ++ .../Extensions/ChatViewModel+Nostr.swift | 841 +---- .../ChatViewModel+PrivateChat.swift | 1038 +----- .../Components/CommandSuggestionsView.swift | 16 +- .../Views/Components/TextMessageView.swift | 28 +- bitchat/Views/ContentComposerView.swift | 248 ++ bitchat/Views/ContentHeaderView.swift | 315 ++ bitchat/Views/ContentSheetViews.swift | 517 +++ bitchat/Views/ContentView.swift | 1183 +------ bitchat/Views/FingerprintView.swift | 58 +- bitchat/Views/GeohashPeopleList.swift | 79 +- bitchat/Views/LocationChannelsSheet.swift | 103 +- bitchat/Views/LocationNotesView.swift | 12 +- bitchat/Views/Media/MediaMessageView.swift | 15 +- bitchat/Views/MeshPeerList.swift | 48 +- bitchat/Views/MessageListView.swift | 122 +- bitchat/Views/VerificationViews.swift | 63 +- bitchatTests/AppArchitectureTests.swift | 699 ++++ .../ChatViewModelDeliveryStatusTests.swift | 25 + bitchatTests/ChatViewModelTests.swift | 484 ++- bitchatTests/CommandProcessorTests.swift | 53 +- .../Fragmentation/FragmentationTests.swift | 74 +- .../Services/NostrRelayManagerTests.swift | 128 +- bitchatTests/ViewSmokeTests.swift | 232 +- docs/ARCHITECTURE_V2.md | 40 + 53 files changed, 10720 insertions(+), 6195 deletions(-) create mode 100644 bitchat/App/AppArchitecture.swift create mode 100644 bitchat/App/AppChromeModel.swift create mode 100644 bitchat/App/AppRuntime.swift create mode 100644 bitchat/App/ConversationUIModel.swift create mode 100644 bitchat/App/LocationChannelsModel.swift create mode 100644 bitchat/App/LocationPresenceStore.swift create mode 100644 bitchat/App/PeerIdentityStore.swift create mode 100644 bitchat/App/PeerListModel.swift create mode 100644 bitchat/App/PrivateConversationModels.swift create mode 100644 bitchat/App/PublicChatModel.swift create mode 100644 bitchat/App/VerificationModel.swift create mode 100644 bitchat/ViewModels/ChatComposerCoordinator.swift create mode 100644 bitchat/ViewModels/ChatDeliveryCoordinator.swift create mode 100644 bitchat/ViewModels/ChatLifecycleCoordinator.swift create mode 100644 bitchat/ViewModels/ChatMediaTransferCoordinator.swift create mode 100644 bitchat/ViewModels/ChatMessageFormatter.swift create mode 100644 bitchat/ViewModels/ChatNostrCoordinator.swift create mode 100644 bitchat/ViewModels/ChatOutgoingCoordinator.swift create mode 100644 bitchat/ViewModels/ChatPeerIdentityCoordinator.swift create mode 100644 bitchat/ViewModels/ChatPeerListCoordinator.swift create mode 100644 bitchat/ViewModels/ChatPrivateConversationCoordinator.swift create mode 100644 bitchat/ViewModels/ChatPublicConversationCoordinator.swift create mode 100644 bitchat/ViewModels/ChatTransportEventCoordinator.swift create mode 100644 bitchat/ViewModels/ChatVerificationCoordinator.swift create mode 100644 bitchat/ViewModels/ChatViewModelBootstrapper.swift create mode 100644 bitchat/Views/ContentComposerView.swift create mode 100644 bitchat/Views/ContentHeaderView.swift create mode 100644 bitchat/Views/ContentSheetViews.swift create mode 100644 bitchatTests/AppArchitectureTests.swift create mode 100644 docs/ARCHITECTURE_V2.md diff --git a/bitchat/App/AppArchitecture.swift b/bitchat/App/AppArchitecture.swift new file mode 100644 index 00000000..f0e0e44b --- /dev/null +++ b/bitchat/App/AppArchitecture.swift @@ -0,0 +1,363 @@ +import BitFoundation +import Combine +import Foundation + +enum SharedContentKind: String, Sendable, Equatable { + case text + case url +} + +enum RuntimeScenePhase: String, Sendable, Equatable { + case active + case inactive + case background +} + +enum TorLifecycleEvent: String, Sendable, Equatable { + case willStart + case willRestart + case didBecomeReady + case preferenceChanged +} + +enum AppEvent: Sendable, Equatable { + case launched + case startupCompleted + case scenePhaseChanged(RuntimeScenePhase) + case openedURL(String) + case sharedContentAccepted(SharedContentKind) + case notificationOpened(peerID: PeerID?) + case deepLinkOpened(String) + case torLifecycleChanged(TorLifecycleEvent) + case nostrRelayConnectionChanged(Bool) + case terminationRequested +} + +actor AppEventStream { + private var continuations: [UUID: AsyncStream.Continuation] = [:] + + func stream() -> AsyncStream { + let id = UUID() + return AsyncStream { continuation in + continuations[id] = continuation + continuation.onTermination = { [id] _ in + Task { + await self.removeContinuation(id) + } + } + } + } + + func emit(_ event: AppEvent) { + for continuation in continuations.values { + continuation.yield(event) + } + } + + func finish() { + for continuation in continuations.values { + continuation.finish() + } + continuations.removeAll() + } + + private func removeContinuation(_ id: UUID) { + continuations.removeValue(forKey: id) + } +} + +struct PeerHandle: Sendable, Identifiable { + let id: String + let routingPeerID: PeerID + let displayName: String? + let noisePublicKeyHex: String? + let nostrPublicKey: String? +} + +extension PeerHandle: Equatable { + static func == (lhs: PeerHandle, rhs: PeerHandle) -> Bool { + lhs.id == rhs.id + } +} + +extension PeerHandle: Hashable { + func hash(into hasher: inout Hasher) { + hasher.combine(id) + } +} + +enum ConversationID: Hashable, Sendable { + case mesh + case geohash(String) + case direct(PeerHandle) + + init(channelID: ChannelID) { + switch channelID { + case .mesh: + self = .mesh + case .location(let channel): + self = .geohash(channel.geohash.lowercased()) + } + } +} + +@MainActor +final class IdentityResolver { + private var handlesByRoutingPeerID: [PeerID: PeerHandle] = [:] + private var handlesByNoiseKey: [String: PeerHandle] = [:] + private var handlesByNostrKey: [String: PeerHandle] = [:] + + func register(peers: [BitchatPeer]) { + for peer in peers { + _ = register(peer: peer) + } + } + + @discardableResult + func register(peer: BitchatPeer) -> PeerHandle { + let handle = buildHandle( + routingPeerID: peer.peerID, + displayName: peer.displayName, + noisePublicKeyHex: peer.noisePublicKey.isEmpty ? nil : peer.noisePublicKey.hexEncodedString().lowercased(), + nostrPublicKey: normalizedNostrKey(peer.nostrPublicKey) + ) + cache(handle) + return handle + } + + func canonicalHandle(for peerID: PeerID, displayName: String? = nil) -> PeerHandle { + if let handle = handlesByRoutingPeerID[peerID] { + return handle + } + + if peerID.isNoiseKeyHex, let handle = handlesByNoiseKey[peerID.bare] { + return handle + } + + if (peerID.isGeoDM || peerID.isGeoChat), let handle = handlesByNostrKey[peerID.bare] { + return handle + } + + let handle = buildHandle( + routingPeerID: peerID, + displayName: displayName, + noisePublicKeyHex: peerID.isNoiseKeyHex ? peerID.bare : nil, + nostrPublicKey: (peerID.isGeoDM || peerID.isGeoChat) ? peerID.bare : nil + ) + cache(handle) + return handle + } + + private func buildHandle( + routingPeerID: PeerID, + displayName: String?, + noisePublicKeyHex: String?, + nostrPublicKey: String? + ) -> PeerHandle { + let canonicalID: String + if let noisePublicKeyHex { + canonicalID = "noise:\(noisePublicKeyHex)" + } else if let nostrPublicKey { + canonicalID = "nostr:\(nostrPublicKey)" + } else { + canonicalID = "mesh:\(routingPeerID.id)" + } + + let normalizedDisplayName: String? + if let displayName, !displayName.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { + normalizedDisplayName = displayName + } else { + normalizedDisplayName = nil + } + + return PeerHandle( + id: canonicalID, + routingPeerID: routingPeerID, + displayName: normalizedDisplayName, + noisePublicKeyHex: noisePublicKeyHex, + nostrPublicKey: nostrPublicKey + ) + } + + private func normalizedNostrKey(_ nostrPublicKey: String?) -> String? { + guard let nostrPublicKey else { return nil } + let trimmed = nostrPublicKey.trimmingCharacters(in: .whitespacesAndNewlines).lowercased() + return trimmed.isEmpty ? nil : trimmed + } + + private func cache(_ handle: PeerHandle) { + handlesByRoutingPeerID[handle.routingPeerID] = handle + if let noisePublicKeyHex = handle.noisePublicKeyHex { + handlesByNoiseKey[noisePublicKeyHex] = handle + } + if let nostrPublicKey = handle.nostrPublicKey { + handlesByNostrKey[nostrPublicKey] = handle + } + } +} + +@MainActor +final class ConversationStore: ObservableObject { + @Published private(set) var activeChannel: ChannelID = .mesh + @Published private(set) var selectedPrivatePeerID: PeerID? + @Published private(set) var selectedConversationID: ConversationID = .mesh + @Published private(set) var unreadConversations: Set = [] + @Published private(set) var messagesByConversation: [ConversationID: [BitchatMessage]] = [:] + + private var directHandlesByConversation: [ConversationID: PeerHandle] = [:] + + func setActiveChannel(_ channelID: ChannelID) { + activeChannel = channelID + if selectedPrivatePeerID == nil { + selectedConversationID = ConversationID(channelID: channelID) + } + } + + func setSelectedPeerID( + _ peerID: PeerID?, + activeChannel: ChannelID, + identityResolver: IdentityResolver + ) { + self.activeChannel = activeChannel + selectedPrivatePeerID = peerID + + if let peerID { + selectedConversationID = directConversationID( + for: peerID, + identityResolver: identityResolver + ) + } else { + selectedConversationID = ConversationID(channelID: activeChannel) + } + } + + func replaceMessages(_ messages: [BitchatMessage], for conversationID: ConversationID) { + messagesByConversation[conversationID] = normalized(messages) + } + + func replaceMessages(_ messages: [BitchatMessage], for channelID: ChannelID) { + replaceMessages(messages, for: ConversationID(channelID: channelID)) + } + + func synchronizePublicConversation(_ messages: [BitchatMessage], activeChannel: ChannelID) { + setActiveChannel(activeChannel) + replaceMessages(messages, for: activeChannel) + } + + func messages(for conversationID: ConversationID) -> [BitchatMessage] { + messagesByConversation[conversationID] ?? [] + } + + func directMessages( + for peerID: PeerID, + identityResolver: IdentityResolver + ) -> [BitchatMessage] { + messages(for: directConversationID(for: peerID, identityResolver: identityResolver)) + } + + func directMessagesByPeerID() -> [PeerID: [BitchatMessage]] { + var messagesByPeerID: [PeerID: [BitchatMessage]] = [:] + + for (conversationID, handle) in directHandlesByConversation { + messagesByPeerID[handle.routingPeerID] = messages(for: conversationID) + } + + return messagesByPeerID + } + + func unreadDirectPeerIDs() -> Set { + unreadConversations.reduce(into: Set()) { result, conversationID in + guard case .direct(let handle) = conversationID else { return } + result.insert(directHandlesByConversation[conversationID]?.routingPeerID ?? handle.routingPeerID) + } + } + + func synchronizeSelection( + activeChannel: ChannelID, + selectedPeerID: PeerID?, + identityResolver: IdentityResolver + ) { + setSelectedPeerID( + selectedPeerID, + activeChannel: activeChannel, + identityResolver: identityResolver + ) + } + + func synchronizePrivateChats( + _ privateChats: [PeerID: [BitchatMessage]], + unreadPeerIDs: Set, + identityResolver: IdentityResolver + ) { + var liveConversations = Set() + + for (peerID, messages) in privateChats { + let handle = identityResolver.canonicalHandle(for: peerID, displayName: messages.last?.sender) + let conversationID = ConversationID.direct(handle) + liveConversations.insert(conversationID) + directHandlesByConversation[conversationID] = handle + messagesByConversation[conversationID] = normalized(messages) + } + + let staleDirectConversations = messagesByConversation.keys.filter { conversationID in + guard case .direct = conversationID else { return false } + return !liveConversations.contains(conversationID) + } + + for conversationID in staleDirectConversations { + messagesByConversation.removeValue(forKey: conversationID) + unreadConversations.remove(conversationID) + directHandlesByConversation.removeValue(forKey: conversationID) + } + + let publicUnread = unreadConversations.filter { conversationID in + switch conversationID { + case .mesh, .geohash: + return true + case .direct: + return false + } + } + + unreadConversations = unreadPeerIDs.reduce(into: publicUnread) { result, peerID in + let handle = identityResolver.canonicalHandle(for: peerID) + result.insert(.direct(handle)) + } + } + + func markRead(_ conversationID: ConversationID) { + unreadConversations.remove(conversationID) + } + + func markRead( + peerID: PeerID, + identityResolver: IdentityResolver + ) { + markRead(directConversationID(for: peerID, identityResolver: identityResolver)) + } + + private func normalized(_ messages: [BitchatMessage]) -> [BitchatMessage] { + var uniqueMessages: [String: BitchatMessage] = [:] + + for message in messages { + uniqueMessages[message.id] = message + } + + return uniqueMessages.values.sorted { lhs, rhs in + if lhs.timestamp != rhs.timestamp { + return lhs.timestamp < rhs.timestamp + } + return lhs.id < rhs.id + } + } + + private func directConversationID( + for peerID: PeerID, + identityResolver: IdentityResolver + ) -> ConversationID { + let handle = identityResolver.canonicalHandle(for: peerID) + let conversationID = ConversationID.direct(handle) + directHandlesByConversation[conversationID] = handle + return conversationID + } +} diff --git a/bitchat/App/AppChromeModel.swift b/bitchat/App/AppChromeModel.swift new file mode 100644 index 00000000..3f9cacd7 --- /dev/null +++ b/bitchat/App/AppChromeModel.swift @@ -0,0 +1,100 @@ +import BitFoundation +import Combine +import CoreBluetooth +import Foundation + +@MainActor +final class AppChromeModel: ObservableObject { + @Published private(set) var hasUnreadPrivateMessages = false + @Published var nickname: String + @Published var showingFingerprintFor: PeerID? + @Published var isAppInfoPresented = false + @Published var isLocationChannelsSheetPresented = false + @Published var showBluetoothAlert = false + @Published var bluetoothAlertMessage = "" + @Published var bluetoothState: CBManagerState = .unknown + @Published var showScreenshotPrivacyWarning = false + + private let chatViewModel: ChatViewModel + private var cancellables = Set() + + init(chatViewModel: ChatViewModel, privateInboxModel: PrivateInboxModel) { + self.chatViewModel = chatViewModel + self.nickname = chatViewModel.nickname + + bind(privateInboxModel: privateInboxModel) + } + + var shouldSuppressScreenshotNotification: Bool { + isLocationChannelsSheetPresented || isAppInfoPresented + } + + func setNickname(_ nickname: String) { + self.nickname = nickname + if chatViewModel.nickname != nickname { + chatViewModel.nickname = nickname + } + } + + func validateAndSaveNickname() { + chatViewModel.validateAndSaveNickname() + if nickname != chatViewModel.nickname { + nickname = chatViewModel.nickname + } + } + + func openMostRelevantPrivateChat() { + chatViewModel.openMostRelevantPrivateChat() + } + + func showFingerprint(for peerID: PeerID) { + showingFingerprintFor = peerID + } + + func clearFingerprint() { + showingFingerprintFor = nil + } + + func presentAppInfo() { + isAppInfoPresented = true + } + + func triggerScreenshotPrivacyWarning() { + showScreenshotPrivacyWarning = true + } + + func panicClearAllData() { + chatViewModel.panicClearAllData() + } + + private func bind(privateInboxModel: PrivateInboxModel) { + privateInboxModel.$unreadPeerIDs + .receive(on: DispatchQueue.main) + .sink { [weak self] unreadPeerIDs in + self?.hasUnreadPrivateMessages = !unreadPeerIDs.isEmpty + } + .store(in: &cancellables) + + chatViewModel.$nickname + .receive(on: DispatchQueue.main) + .sink { [weak self] nickname in + guard let self, self.nickname != nickname else { return } + self.nickname = nickname + } + .store(in: &cancellables) + + chatViewModel.$showBluetoothAlert + .receive(on: DispatchQueue.main) + .assign(to: &$showBluetoothAlert) + + chatViewModel.$bluetoothAlertMessage + .receive(on: DispatchQueue.main) + .assign(to: &$bluetoothAlertMessage) + + chatViewModel.$bluetoothState + .receive(on: DispatchQueue.main) + .assign(to: &$bluetoothState) + + hasUnreadPrivateMessages = !privateInboxModel.unreadPeerIDs.isEmpty + } +} diff --git a/bitchat/App/AppRuntime.swift b/bitchat/App/AppRuntime.swift new file mode 100644 index 00000000..f4aba8c8 --- /dev/null +++ b/bitchat/App/AppRuntime.swift @@ -0,0 +1,387 @@ +import BitFoundation +import Combine +import Foundation +import SwiftUI +import Tor +import UserNotifications +#if os(iOS) +import UIKit +#elseif os(macOS) +import AppKit +#endif + +@MainActor +final class AppRuntime: ObservableObject { + let chatViewModel: ChatViewModel + let events = AppEventStream() + let conversationStore: ConversationStore + let peerIdentityStore: PeerIdentityStore + let locationPresenceStore: LocationPresenceStore + let publicChatModel: PublicChatModel + let privateInboxModel: PrivateInboxModel + let privateConversationModel: PrivateConversationModel + let verificationModel: VerificationModel + let conversationUIModel: ConversationUIModel + let locationChannelsModel: LocationChannelsModel + let peerListModel: PeerListModel + let appChromeModel: AppChromeModel + + private let idBridge: NostrIdentityBridge + private var cancellables = Set() + private var started = false + private var lastNostrRelayConnectedState = false + private var didHandleInitialNostrConnection = false + + #if os(iOS) + private var didHandleInitialActive = false + private var didEnterBackground = false + #endif + + init( + keychain: KeychainManagerProtocol = KeychainManager(), + idBridge: NostrIdentityBridge = NostrIdentityBridge() + ) { + self.idBridge = idBridge + let identityResolver = IdentityResolver() + let conversationStore = ConversationStore() + let peerIdentityStore = PeerIdentityStore() + let locationPresenceStore = LocationPresenceStore() + let locationManager = LocationChannelManager.shared + self.conversationStore = conversationStore + self.peerIdentityStore = peerIdentityStore + self.locationPresenceStore = locationPresenceStore + self.chatViewModel = ChatViewModel( + keychain: keychain, + idBridge: idBridge, + identityManager: SecureIdentityStateManager(keychain), + conversationStore: conversationStore, + identityResolver: identityResolver, + peerIdentityStore: peerIdentityStore, + locationPresenceStore: locationPresenceStore, + locationManager: locationManager + ) + self.publicChatModel = PublicChatModel(conversationStore: conversationStore) + self.privateInboxModel = PrivateInboxModel(conversationStore: conversationStore) + self.locationChannelsModel = LocationChannelsModel(manager: locationManager) + self.privateConversationModel = PrivateConversationModel( + chatViewModel: self.chatViewModel, + conversationStore: conversationStore, + locationChannelsModel: self.locationChannelsModel, + peerIdentityStore: peerIdentityStore + ) + self.verificationModel = VerificationModel( + chatViewModel: self.chatViewModel, + privateConversationModel: self.privateConversationModel, + peerIdentityStore: peerIdentityStore + ) + self.conversationUIModel = ConversationUIModel( + chatViewModel: self.chatViewModel, + privateConversationModel: self.privateConversationModel, + conversationStore: conversationStore + ) + self.peerListModel = PeerListModel( + chatViewModel: self.chatViewModel, + conversationStore: conversationStore, + locationChannelsModel: self.locationChannelsModel, + peerIdentityStore: peerIdentityStore, + locationPresenceStore: locationPresenceStore + ) + self.appChromeModel = AppChromeModel( + chatViewModel: self.chatViewModel, + privateInboxModel: self.privateInboxModel + ) + + GeoRelayDirectory.shared.prefetchIfNeeded() + bindRuntimeObservers() + NotificationDelegate.shared.runtime = self + } + + func start() { + guard !started else { + checkForSharedContent() + return + } + + started = true + NotificationDelegate.shared.runtime = self + VerificationService.shared.configure(with: chatViewModel.meshService.getNoiseService()) + announceInitialTorStatusIfNeeded() + + Task(priority: .utility) { [weak self] in + guard let self else { return } + let nickname = await MainActor.run { self.chatViewModel.nickname } + let npub = await MainActor.run { + try? self.idBridge.getCurrentNostrIdentity()?.npub + } + await MainActor.run { + _ = VerificationService.shared.buildMyQRString(nickname: nickname, npub: npub) + } + } + + NetworkActivationService.shared.start() + GeohashPresenceService.shared.start() + checkForSharedContent() + + record(.launched) + record(.startupCompleted) + } + + func handleOpenURL(_ url: URL) { + record(.openedURL(url.absoluteString)) + + if url.scheme == "bitchat", url.host == "share" { + checkForSharedContent() + } + } + + func handleDidBecomeActiveNotification() { + chatViewModel.handleDidBecomeActive() + checkForSharedContent() + } + + #if os(macOS) + func handleMacDidBecomeActiveNotification() { + record(.scenePhaseChanged(.active)) + chatViewModel.handleDidBecomeActive() + checkForSharedContent() + } + #endif + + #if os(iOS) + func handleScenePhaseChange(_ newPhase: ScenePhase) { + switch newPhase { + case .background: + record(.scenePhaseChanged(.background)) + TorManager.shared.setAppForeground(false) + TorManager.shared.goDormantOnBackground() + chatViewModel.endGeohashSampling() + NostrRelayManager.shared.disconnect() + didEnterBackground = true + + case .active: + record(.scenePhaseChanged(.active)) + chatViewModel.meshService.startServices() + TorManager.shared.setAppForeground(true) + let shouldRefreshNostrConnections = didHandleInitialActive && didEnterBackground + + if didHandleInitialActive && didEnterBackground { + if TorManager.shared.isAutoStartAllowed() && !TorManager.shared.isReady { + TorManager.shared.ensureRunningOnForeground() + } + } else { + didHandleInitialActive = true + } + + didEnterBackground = false + + if shouldRefreshNostrConnections && TorManager.shared.isAutoStartAllowed() { + Task.detached { + let _ = await TorManager.shared.awaitReady(timeout: 60) + await MainActor.run { + TorURLSession.shared.rebuild() + NostrRelayManager.shared.resetAllConnections() + } + } + } + + chatViewModel.handleDidBecomeActive() + checkForSharedContent() + + case .inactive: + record(.scenePhaseChanged(.inactive)) + + @unknown default: + break + } + } + #endif + + func applicationWillTerminate() { + record(.terminationRequested) + chatViewModel.applicationWillTerminate() + } + + func handleNotificationResponse(identifier: String, userInfo: [AnyHashable: Any]) { + if identifier.hasPrefix("private-"), let peerID = PeerID(str: userInfo["peerID"] as? String) { + record(.notificationOpened(peerID: peerID)) + chatViewModel.startPrivateChat(with: peerID) + } + + if let deepLink = userInfo["deeplink"] as? String, let url = URL(string: deepLink) { + record(.deepLinkOpened(deepLink)) + openExternalURL(url) + } + } + + func presentationOptions( + forNotificationIdentifier identifier: String, + userInfo: [AnyHashable: Any] + ) async -> UNNotificationPresentationOptions { + if identifier.hasPrefix("private-"), let peerID = PeerID(str: userInfo["peerID"] as? String) { + if conversationStore.selectedPrivatePeerID == peerID { + return [] + } + return [.banner, .sound] + } + + if identifier.hasPrefix("geo-activity-"), + let deepLink = userInfo["deeplink"] as? String, + let geohash = deepLink.components(separatedBy: "/").last, + case .location(let channel) = locationChannelsModel.selectedChannel, + channel.geohash == geohash { + return [] + } + + return [.banner, .sound] + } +} + +private extension AppRuntime { + func bindRuntimeObservers() { + NostrRelayManager.shared.$isConnected + .receive(on: DispatchQueue.main) + .sink { [weak self] isConnected in + self?.handleNostrRelayConnectionChanged(isConnected) + } + .store(in: &cancellables) + + NotificationCenter.default.publisher(for: .TorWillRestart) + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in + self?.record(.torLifecycleChanged(.willRestart)) + self?.chatViewModel.handleTorWillRestart() + } + .store(in: &cancellables) + + NotificationCenter.default.publisher(for: .TorDidBecomeReady) + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in + self?.record(.torLifecycleChanged(.didBecomeReady)) + self?.chatViewModel.handleTorDidBecomeReady() + } + .store(in: &cancellables) + + NotificationCenter.default.publisher(for: .TorWillStart) + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in + self?.record(.torLifecycleChanged(.willStart)) + self?.chatViewModel.handleTorWillStart() + } + .store(in: &cancellables) + + NotificationCenter.default.publisher(for: .TorUserPreferenceChanged) + .receive(on: DispatchQueue.main) + .sink { [weak self] notification in + self?.record(.torLifecycleChanged(.preferenceChanged)) + self?.chatViewModel.handleTorPreferenceChanged(notification) + } + .store(in: &cancellables) + + #if os(iOS) + NotificationCenter.default.publisher(for: UIApplication.userDidTakeScreenshotNotification) + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in + self?.handleScreenshotCaptured() + } + .store(in: &cancellables) + #endif + } + + func checkForSharedContent() { + guard let userDefaults = UserDefaults(suiteName: BitchatApp.groupID), + let sharedContent = userDefaults.string(forKey: "sharedContent"), + let sharedDate = userDefaults.object(forKey: "sharedContentDate") as? Date else { + return + } + + guard Date().timeIntervalSince(sharedDate) < TransportConfig.uiShareAcceptWindowSeconds else { + return + } + + let contentKind = SharedContentKind(rawValue: userDefaults.string(forKey: "sharedContentType") ?? "") ?? .text + + userDefaults.removeObject(forKey: "sharedContent") + userDefaults.removeObject(forKey: "sharedContentType") + userDefaults.removeObject(forKey: "sharedContentDate") + + switch contentKind { + case .url: + if let data = sharedContent.data(using: .utf8), + let urlData = try? JSONSerialization.jsonObject(with: data) as? [String: String], + let url = urlData["url"] { + chatViewModel.sendMessage(url) + } else { + chatViewModel.sendMessage(sharedContent) + } + case .text: + chatViewModel.sendMessage(sharedContent) + } + + record(.sharedContentAccepted(contentKind)) + } + + func handleNostrRelayConnectionChanged(_ isConnected: Bool) { + record(.nostrRelayConnectionChanged(isConnected)) + + let becameConnected = isConnected && !lastNostrRelayConnectedState + lastNostrRelayConnectedState = isConnected + + guard started, becameConnected else { return } + + let isInitialConnection = !didHandleInitialNostrConnection + didHandleInitialNostrConnection = true + + if !chatViewModel.nostrHandlersSetup { + chatViewModel.setupNostrMessageHandling() + chatViewModel.nostrHandlersSetup = true + } + + guard !isInitialConnection else { return } + + chatViewModel.resubscribeCurrentGeohash() + chatViewModel.geoChannelCoordinator?.refreshSampling() + } + + func announceInitialTorStatusIfNeeded() { + if TorManager.shared.torEnforced && + !chatViewModel.torStatusAnnounced && + TorManager.shared.isAutoStartAllowed() { + chatViewModel.torStatusAnnounced = true + chatViewModel.addGeohashOnlySystemMessage( + String(localized: "system.tor.starting", comment: "System message when Tor is starting") + ) + } else if !TorManager.shared.torEnforced && !chatViewModel.torStatusAnnounced { + chatViewModel.torStatusAnnounced = true + chatViewModel.addGeohashOnlySystemMessage( + String(localized: "system.tor.dev_bypass", comment: "System message when Tor bypass is enabled in development") + ) + } + } + + func handleScreenshotCaptured() { + if appChromeModel.isLocationChannelsSheetPresented { + appChromeModel.triggerScreenshotPrivacyWarning() + return + } + + if appChromeModel.isAppInfoPresented { + return + } + + chatViewModel.handleScreenshotCaptured() + } + + func openExternalURL(_ url: URL) { + #if os(iOS) + UIApplication.shared.open(url) + #else + NSWorkspace.shared.open(url) + #endif + } + + func record(_ event: AppEvent) { + Task { + await events.emit(event) + } + } +} diff --git a/bitchat/App/ConversationUIModel.swift b/bitchat/App/ConversationUIModel.swift new file mode 100644 index 00000000..01888d35 --- /dev/null +++ b/bitchat/App/ConversationUIModel.swift @@ -0,0 +1,183 @@ +import BitFoundation +import Combine +import SwiftUI +#if os(iOS) +import UIKit +#endif + +@MainActor +final class ConversationUIModel: ObservableObject { + @Published private(set) var showAutocomplete = false + @Published private(set) var autocompleteSuggestions: [String] = [] + @Published private(set) var currentNickname: String + @Published private(set) var isBatchingPublic = false + @Published private(set) var canSendMediaInCurrentContext = true + + private let chatViewModel: ChatViewModel + private let privateConversationModel: PrivateConversationModel + private let conversationStore: ConversationStore + private var activeChannel: ChannelID + private var cancellables = Set() + + init( + chatViewModel: ChatViewModel, + privateConversationModel: PrivateConversationModel, + conversationStore: ConversationStore + ) { + self.chatViewModel = chatViewModel + self.privateConversationModel = privateConversationModel + self.conversationStore = conversationStore + self.activeChannel = conversationStore.activeChannel + self.currentNickname = chatViewModel.nickname + self.isBatchingPublic = chatViewModel.isBatchingPublic + self.showAutocomplete = chatViewModel.showAutocomplete + self.autocompleteSuggestions = chatViewModel.autocompleteSuggestions + self.canSendMediaInCurrentContext = chatViewModel.canSendMediaInCurrentContext + + bind() + } + + func setCurrentColorScheme(_ colorScheme: ColorScheme) { + chatViewModel.currentColorScheme = colorScheme + } + + func sendMessage(_ message: String) { + chatViewModel.sendMessage(message) + } + + func clearCurrentConversation() { + chatViewModel.sendMessage("/clear") + } + + func sendHug(to sender: String) { + chatViewModel.sendMessage("/hug @\(sender)") + } + + func sendSlap(to sender: String) { + chatViewModel.sendMessage("/slap @\(sender)") + } + + func block(peerID: PeerID?, displayName: String?) { + guard let displayName else { return } + + if let peerID, peerID.isGeoChat, + let full = chatViewModel.fullNostrHex(forSenderPeerID: peerID) { + chatViewModel.blockGeohashUser(pubkeyHexLowercased: full, displayName: displayName) + } else { + chatViewModel.sendMessage("/block \(displayName)") + } + } + + func updateAutocomplete(for text: String, cursorPosition: Int) { + chatViewModel.updateAutocomplete(for: text, cursorPosition: cursorPosition) + } + + func completeNickname(_ nickname: String, in text: inout String) -> Int { + chatViewModel.completeNickname(nickname, in: &text) + } + + func formatMessage(_ message: BitchatMessage, colorScheme: ColorScheme) -> AttributedString { + chatViewModel.formatMessageAsText(message, colorScheme: colorScheme) + } + + func formatMessageHeader(_ message: BitchatMessage, colorScheme: ColorScheme) -> AttributedString { + chatViewModel.formatMessageHeader(message, colorScheme: colorScheme) + } + + func mediaAttachment(for message: BitchatMessage) -> BitchatMessage.Media? { + message.mediaAttachment(for: currentNickname) + } + + func isSelfSender(peerID: PeerID?, displayName: String?) -> Bool { + chatViewModel.isSelfSender(peerID: peerID, displayName: displayName) + } + + func isSentByCurrentUser(_ message: BitchatMessage) -> Bool { + message.sender == currentNickname || message.sender.hasPrefix(currentNickname + "#") + } + + func isMediaMessageFromCurrentUser(_ message: BitchatMessage) -> Bool { + message.sender == currentNickname || message.senderPeerID == chatViewModel.meshService.myPeerID + } + + func senderDisplayName(for peerID: PeerID, fallbackMessages: [BitchatMessage]) -> String? { + if peerID.isGeoDM || peerID.isGeoChat { + return chatViewModel.geohashDisplayName(for: peerID) + } + if let nickname = chatViewModel.meshService.peerNickname(peerID: peerID) { + return nickname + } + return fallbackMessages.last(where: { $0.senderPeerID == peerID && $0.sender != "system" })?.sender + } + + #if os(iOS) + func processSelectedImage(_ image: UIImage?) { + chatViewModel.processThenSendImage(image) + } + #endif + + func processSelectedImage(from url: URL?) { + #if os(macOS) + chatViewModel.processThenSendImage(from: url) + #endif + } + + func sendVoiceNote(at url: URL) { + chatViewModel.sendVoiceNote(at: url) + } + + func cancelMediaSend(messageID: String) { + chatViewModel.cancelMediaSend(messageID: messageID) + } + + func deleteMediaMessage(messageID: String) { + chatViewModel.deleteMediaMessage(messageID: messageID) + } + + private func bind() { + chatViewModel.$nickname + .receive(on: DispatchQueue.main) + .assign(to: &$currentNickname) + + chatViewModel.$showAutocomplete + .receive(on: DispatchQueue.main) + .assign(to: &$showAutocomplete) + + chatViewModel.$autocompleteSuggestions + .receive(on: DispatchQueue.main) + .assign(to: &$autocompleteSuggestions) + + chatViewModel.$isBatchingPublic + .receive(on: DispatchQueue.main) + .assign(to: &$isBatchingPublic) + + conversationStore.$activeChannel + .receive(on: DispatchQueue.main) + .sink { [weak self] channel in + self?.activeChannel = channel + self?.refreshComputedState() + } + .store(in: &cancellables) + + privateConversationModel.$selectedPeerID + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in + self?.refreshComputedState() + } + .store(in: &cancellables) + } + + private func refreshComputedState() { + if let selectedPeerID = privateConversationModel.selectedPeerID { + canSendMediaInCurrentContext = !(selectedPeerID.isGeoDM || selectedPeerID.isGeoChat) + return + } + + switch activeChannel { + case .mesh: + canSendMediaInCurrentContext = true + case .location: + canSendMediaInCurrentContext = false + } + } +} diff --git a/bitchat/App/LocationChannelsModel.swift b/bitchat/App/LocationChannelsModel.swift new file mode 100644 index 00000000..c820455a --- /dev/null +++ b/bitchat/App/LocationChannelsModel.swift @@ -0,0 +1,176 @@ +import BitFoundation +import Combine +import Foundation + +@MainActor +final class LocationChannelsModel: ObservableObject { + @Published private(set) var permissionState: LocationChannelManager.PermissionState + @Published private(set) var availableChannels: [GeohashChannel] + @Published private(set) var selectedChannel: ChannelID + @Published private(set) var teleported: Bool + @Published private(set) var bookmarks: [String] + @Published private(set) var bookmarkNames: [String: String] + @Published private(set) var locationNames: [GeohashChannelLevel: String] + @Published private(set) var userTorEnabled: Bool + + private let manager: LocationChannelManager + private let network: NetworkActivationService + private var cancellables = Set() + + init( + manager: LocationChannelManager? = nil, + network: NetworkActivationService? = nil + ) { + let manager = manager ?? .shared + let network = network ?? .shared + + self.manager = manager + self.network = network + self.permissionState = manager.permissionState + self.availableChannels = manager.availableChannels + self.selectedChannel = manager.selectedChannel + self.teleported = manager.teleported + self.bookmarks = manager.bookmarks + self.bookmarkNames = manager.bookmarkNames + self.locationNames = manager.locationNames + self.userTorEnabled = network.userTorEnabled + + bind() + } + + var currentBuildingGeohash: String? { + availableChannels.first(where: { $0.level == .building })?.geohash + } + + func isSelected(_ channel: GeohashChannel) -> Bool { + guard case .location(let selected) = selectedChannel else { return false } + return selected == channel + } + + func isBookmarked(_ geohash: String) -> Bool { + manager.isBookmarked(geohash) + } + + func enableLocationChannels() { + manager.enableLocationChannels() + } + + func refreshChannels() { + manager.refreshChannels() + } + + func enableAndRefresh() { + manager.enableLocationChannels() + manager.refreshChannels() + } + + func beginLiveRefresh() { + manager.beginLiveRefresh() + } + + func endLiveRefresh() { + manager.endLiveRefresh() + } + + func select(_ channel: ChannelID) { + manager.select(channel) + } + + func markTeleported(for geohash: String, _ flag: Bool) { + manager.markTeleported(for: geohash, flag) + } + + func toggleBookmark(_ geohash: String) { + manager.toggleBookmark(geohash) + } + + func resolveBookmarkNameIfNeeded(for geohash: String) { + manager.resolveBookmarkNameIfNeeded(for: geohash) + } + + func locationName(for level: GeohashChannelLevel) -> String? { + locationNames[level] + } + + func setUserTorEnabled(_ enabled: Bool) { + network.setUserTorEnabled(enabled) + } + + func refreshMeshChannelsIfNeeded() { + guard case .mesh = selectedChannel, + permissionState == .authorized, + availableChannels.isEmpty else { + return + } + refreshChannels() + } + + func openLocationChannel(for geohash: String) { + let normalized = geohash.trimmingCharacters(in: .whitespacesAndNewlines).lowercased() + let allowed = Set("0123456789bcdefghjkmnpqrstuvwxyz") + guard (2...12).contains(normalized.count), + normalized.allSatisfy({ allowed.contains($0) }) else { + return + } + + let channel = GeohashChannel(level: level(forLength: normalized.count), geohash: normalized) + let isRegional = availableChannels.contains { $0.geohash == normalized } + if !isRegional && !availableChannels.isEmpty { + markTeleported(for: normalized, true) + } + select(.location(channel)) + } + + func teleport(to geohash: String) { + let normalized = geohash.trimmingCharacters(in: .whitespacesAndNewlines).lowercased() + let channel = GeohashChannel(level: level(forLength: normalized.count), geohash: normalized) + markTeleported(for: normalized, true) + select(.location(channel)) + } + + private func bind() { + manager.$permissionState + .receive(on: DispatchQueue.main) + .assign(to: &$permissionState) + + manager.$availableChannels + .receive(on: DispatchQueue.main) + .assign(to: &$availableChannels) + + manager.$selectedChannel + .receive(on: DispatchQueue.main) + .assign(to: &$selectedChannel) + + manager.$teleported + .receive(on: DispatchQueue.main) + .assign(to: &$teleported) + + manager.$bookmarks + .receive(on: DispatchQueue.main) + .assign(to: &$bookmarks) + + manager.$bookmarkNames + .receive(on: DispatchQueue.main) + .assign(to: &$bookmarkNames) + + manager.$locationNames + .receive(on: DispatchQueue.main) + .assign(to: &$locationNames) + + network.$userTorEnabled + .receive(on: DispatchQueue.main) + .assign(to: &$userTorEnabled) + } + + private func level(forLength length: Int) -> GeohashChannelLevel { + switch length { + case 0...2: return .region + case 3...4: return .province + case 5: return .city + case 6: return .neighborhood + case 7: return .block + case 8...12: return .building + default: return .block + } + } +} diff --git a/bitchat/App/LocationPresenceStore.swift b/bitchat/App/LocationPresenceStore.swift new file mode 100644 index 00000000..499eeb86 --- /dev/null +++ b/bitchat/App/LocationPresenceStore.swift @@ -0,0 +1,51 @@ +import Combine +import Foundation + +@MainActor +final class LocationPresenceStore: ObservableObject { + @Published private(set) var currentGeohash: String? + @Published private(set) var geoNicknames: [String: String] = [:] + @Published private(set) var teleportedGeo: Set = [] + + func setCurrentGeohash(_ geohash: String?) { + currentGeohash = geohash?.lowercased() + } + + func setNickname(_ nickname: String, for pubkeyHex: String) { + geoNicknames[pubkeyHex.lowercased()] = nickname + } + + func replaceGeoNicknames(_ nicknames: [String: String]) { + geoNicknames = Dictionary( + uniqueKeysWithValues: nicknames.map { key, value in + (key.lowercased(), value) + } + ) + } + + func clearGeoNicknames() { + geoNicknames.removeAll() + } + + func markTeleported(_ pubkeyHex: String) { + teleportedGeo.insert(pubkeyHex.lowercased()) + } + + func clearTeleported(_ pubkeyHex: String) { + teleportedGeo.remove(pubkeyHex.lowercased()) + } + + func replaceTeleportedGeo(_ pubkeys: Set) { + teleportedGeo = Set(pubkeys.map { $0.lowercased() }) + } + + func clearTeleportedGeo() { + teleportedGeo.removeAll() + } + + func reset() { + currentGeohash = nil + geoNicknames.removeAll() + teleportedGeo.removeAll() + } +} diff --git a/bitchat/App/PeerIdentityStore.swift b/bitchat/App/PeerIdentityStore.swift new file mode 100644 index 00000000..119d765f --- /dev/null +++ b/bitchat/App/PeerIdentityStore.swift @@ -0,0 +1,125 @@ +import BitFoundation +import Combine +import Foundation + +@MainActor +final class PeerIdentityStore: ObservableObject { + @Published private(set) var encryptionStatuses: [PeerID: EncryptionStatus] = [:] + @Published private(set) var verifiedFingerprints: Set = [] + + private(set) var peerFingerprintsByPeerID: [PeerID: String] = [:] + private(set) var selectedPrivateChatFingerprint: String? + + private var stablePeerIDsByShortID: [PeerID: PeerID] = [:] + private var encryptionStatusCache: [PeerID: EncryptionStatus] = [:] + + func stablePeerID(forShortID peerID: PeerID) -> PeerID? { + stablePeerIDsByShortID[peerID] + } + + func shortPeerID(forStablePeerID stablePeerID: PeerID) -> PeerID? { + stablePeerIDsByShortID.first(where: { $0.value == stablePeerID })?.key + } + + func setStablePeerID(_ stablePeerID: PeerID, forShortID peerID: PeerID) { + stablePeerIDsByShortID[peerID] = stablePeerID + } + + func replaceStablePeerIDs(_ mappings: [PeerID: PeerID]) { + stablePeerIDsByShortID = mappings + } + + func fingerprint(for peerID: PeerID) -> String? { + peerFingerprintsByPeerID[peerID] + } + + func setFingerprint(_ fingerprint: String?, for peerID: PeerID) { + if let fingerprint { + peerFingerprintsByPeerID[peerID] = fingerprint + } else { + peerFingerprintsByPeerID.removeValue(forKey: peerID) + } + } + + func replaceFingerprintMappings(_ mappings: [PeerID: String]) { + peerFingerprintsByPeerID = mappings + } + + @discardableResult + func migrateFingerprintMapping( + from oldPeerID: PeerID, + to newPeerID: PeerID, + fallback: String? = nil + ) -> String? { + let fingerprint = peerFingerprintsByPeerID.removeValue(forKey: oldPeerID) ?? fallback + if let fingerprint { + peerFingerprintsByPeerID[newPeerID] = fingerprint + if selectedPrivateChatFingerprint == nil { + selectedPrivateChatFingerprint = fingerprint + } + } + return fingerprint + } + + func setSelectedPrivateChatFingerprint(_ fingerprint: String?) { + selectedPrivateChatFingerprint = fingerprint + } + + func cachedEncryptionStatus(for peerID: PeerID) -> EncryptionStatus? { + encryptionStatusCache[peerID] + } + + func setCachedEncryptionStatus(_ status: EncryptionStatus, for peerID: PeerID) { + encryptionStatusCache[peerID] = status + } + + func invalidateEncryptionCache(for peerID: PeerID? = nil) { + if let peerID { + encryptionStatusCache.removeValue(forKey: peerID) + } else { + encryptionStatusCache.removeAll() + } + } + + func encryptionStatus(for peerID: PeerID) -> EncryptionStatus? { + encryptionStatuses[peerID] + } + + func setEncryptionStatus(_ status: EncryptionStatus?, for peerID: PeerID) { + if let status { + encryptionStatuses[peerID] = status + } else { + encryptionStatuses.removeValue(forKey: peerID) + } + invalidateEncryptionCache(for: peerID) + } + + func replaceEncryptionStatuses(_ statuses: [PeerID: EncryptionStatus]) { + encryptionStatuses = statuses + } + + func setVerifiedFingerprints(_ fingerprints: Set) { + verifiedFingerprints = fingerprints + } + + func setVerified(_ fingerprint: String, verified: Bool) { + if verified { + verifiedFingerprints.insert(fingerprint) + } else { + verifiedFingerprints.remove(fingerprint) + } + } + + func isVerified(_ fingerprint: String) -> Bool { + verifiedFingerprints.contains(fingerprint) + } + + func clearAll() { + encryptionStatuses.removeAll() + verifiedFingerprints.removeAll() + peerFingerprintsByPeerID.removeAll() + selectedPrivateChatFingerprint = nil + stablePeerIDsByShortID.removeAll() + encryptionStatusCache.removeAll() + } +} diff --git a/bitchat/App/PeerListModel.swift b/bitchat/App/PeerListModel.swift new file mode 100644 index 00000000..91993d47 --- /dev/null +++ b/bitchat/App/PeerListModel.swift @@ -0,0 +1,260 @@ +import BitFoundation +import Combine +import SwiftUI + +struct MeshPeerRow: Identifiable, Equatable { + let peerID: PeerID + let displayName: String + let isMe: Bool + let hasUnread: Bool + let isBlocked: Bool + let isFavorite: Bool + let isConnected: Bool + let isReachable: Bool + let isMutualFavorite: Bool + let encryptionStatus: EncryptionStatus + let showsVerifiedBadgeWhenOffline: Bool + + var id: String { peerID.id } +} + +struct GeohashPersonRow: Identifiable, Equatable { + let id: String + let displayName: String + let isMe: Bool + let isTeleported: Bool + let isBlocked: Bool +} + +@MainActor +final class PeerListModel: ObservableObject { + @Published private(set) var allPeers: [BitchatPeer] = [] + @Published private(set) var meshRows: [MeshPeerRow] = [] + @Published private(set) var geohashPeople: [GeohashPersonRow] = [] + @Published private(set) var reachableMeshPeerCount = 0 + @Published private(set) var connectedMeshPeerCount = 0 + @Published private(set) var visibleGeohashPeerCount = 0 + @Published private(set) var renderID = "" + + private let chatViewModel: ChatViewModel + private let conversationStore: ConversationStore + private let locationChannelsModel: LocationChannelsModel + private let peerIdentityStore: PeerIdentityStore + private let locationPresenceStore: LocationPresenceStore + private var cancellables = Set() + + init( + chatViewModel: ChatViewModel, + conversationStore: ConversationStore, + locationChannelsModel: LocationChannelsModel? = nil, + peerIdentityStore: PeerIdentityStore? = nil, + locationPresenceStore: LocationPresenceStore? = nil + ) { + self.chatViewModel = chatViewModel + self.conversationStore = conversationStore + self.locationChannelsModel = locationChannelsModel ?? LocationChannelsModel() + self.peerIdentityStore = peerIdentityStore ?? chatViewModel.peerIdentityStore + self.locationPresenceStore = locationPresenceStore ?? chatViewModel.locationPresenceStore + self.allPeers = chatViewModel.allPeers + + bind() + refresh() + } + + func colorForMeshPeer(id peerID: PeerID, isDark: Bool) -> Color { + chatViewModel.colorForMeshPeer(id: peerID, isDark: isDark) + } + + func colorForGeohashPerson(id: String, isDark: Bool) -> Color { + chatViewModel.colorForNostrPubkey(id, isDark: isDark) + } + + func participantCount(for geohash: String) -> Int { + chatViewModel.geohashParticipantCount(for: geohash) + } + + func startConversation(with peerID: PeerID) { + chatViewModel.startPrivateChat(with: peerID) + } + + func toggleFavorite(peerID: PeerID) { + chatViewModel.toggleFavorite(peerID: peerID) + } + + func openGeohashDirectMessage(with pubkeyHex: String) { + chatViewModel.startGeohashDM(withPubkeyHex: pubkeyHex) + } + + func blockGeohashUser(pubkeyHexLowercased: String, displayName: String) { + chatViewModel.blockGeohashUser( + pubkeyHexLowercased: pubkeyHexLowercased, + displayName: displayName + ) + } + + func unblockGeohashUser(pubkeyHexLowercased: String, displayName: String) { + chatViewModel.unblockGeohashUser( + pubkeyHexLowercased: pubkeyHexLowercased, + displayName: displayName + ) + } + + private func bind() { + chatViewModel.$allPeers + .receive(on: DispatchQueue.main) + .sink { [weak self] peers in + self?.allPeers = peers + self?.refresh() + } + .store(in: &cancellables) + + chatViewModel.$nickname + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in + self?.refresh() + } + .store(in: &cancellables) + + locationPresenceStore.$teleportedGeo + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in + self?.refresh() + } + .store(in: &cancellables) + + conversationStore.$unreadConversations + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in + self?.refresh() + } + .store(in: &cancellables) + + peerIdentityStore.$encryptionStatuses + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in + self?.refresh() + } + .store(in: &cancellables) + + peerIdentityStore.$verifiedFingerprints + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in + self?.refresh() + } + .store(in: &cancellables) + + NotificationCenter.default.publisher(for: Notification.Name("peerStatusUpdated")) + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in + self?.refresh() + } + .store(in: &cancellables) + + chatViewModel.participantTracker.$visiblePeople + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in + self?.refresh() + } + .store(in: &cancellables) + + locationChannelsModel.$selectedChannel + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in + self?.refresh() + } + .store(in: &cancellables) + + locationChannelsModel.$teleported + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in + self?.refresh() + } + .store(in: &cancellables) + + locationChannelsModel.$availableChannels + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in + self?.refresh() + } + .store(in: &cancellables) + } + + private func refresh() { + let myPeerID = chatViewModel.meshService.myPeerID + let meshRows = allPeers.map { peer in + let isMe = peer.peerID == myPeerID + let verifiedBadge: Bool + if !isMe && !peer.isConnected, + let fingerprint = chatViewModel.getFingerprint(for: peer.peerID) { + verifiedBadge = peerIdentityStore.isVerified(fingerprint) + } else { + verifiedBadge = false + } + + return MeshPeerRow( + peerID: peer.peerID, + displayName: isMe ? chatViewModel.nickname : peer.nickname, + isMe: isMe, + hasUnread: chatViewModel.hasUnreadMessages(for: peer.peerID), + isBlocked: !isMe && chatViewModel.isPeerBlocked(peer.peerID), + isFavorite: peer.favoriteStatus?.isFavorite ?? false, + isConnected: peer.isConnected, + isReachable: peer.isReachable, + isMutualFavorite: peer.isMutualFavorite, + encryptionStatus: chatViewModel.getEncryptionStatus(for: peer.peerID), + showsVerifiedBadgeWhenOffline: verifiedBadge + ) + } + + let meshCounts = meshRows.reduce(into: (reachable: 0, connected: 0)) { counts, row in + guard !row.isMe else { return } + if row.isConnected { + counts.connected += 1 + counts.reachable += 1 + } else if row.isReachable { + counts.reachable += 1 + } + } + + let geohashPeople = buildGeohashPeople() + + self.meshRows = meshRows + reachableMeshPeerCount = meshCounts.reachable + connectedMeshPeerCount = meshCounts.connected + self.geohashPeople = geohashPeople + visibleGeohashPeerCount = geohashPeople.count + renderID = ( + meshRows.map { + "\($0.id)-\($0.isConnected)-\($0.isReachable)-\($0.hasUnread)-\($0.isFavorite)-\($0.isBlocked)" + } + + geohashPeople.map { + "geo:\($0.id)-\($0.isTeleported)-\($0.isBlocked)-\($0.displayName)" + } + ).joined(separator: "|") + } + + private func buildGeohashPeople() -> [GeohashPersonRow] { + let myHex = currentGeohashIdentityHex() + let teleportedSet = Set(locationPresenceStore.teleportedGeo.map { $0.lowercased() }) + + return chatViewModel.visibleGeohashPeople().map { person in + let isMe = person.id == myHex + return GeohashPersonRow( + id: person.id, + displayName: person.displayName, + isMe: isMe, + isTeleported: teleportedSet.contains(person.id.lowercased()) || (isMe && locationChannelsModel.teleported), + isBlocked: !isMe && chatViewModel.isGeohashUserBlocked(pubkeyHexLowercased: person.id) + ) + } + } + + private func currentGeohashIdentityHex() -> String? { + guard case .location(let channel) = locationChannelsModel.selectedChannel, + let identity = try? chatViewModel.idBridge.deriveIdentity(forGeohash: channel.geohash) else { + return nil + } + + return identity.publicKeyHex.lowercased() + } +} diff --git a/bitchat/App/PrivateConversationModels.swift b/bitchat/App/PrivateConversationModels.swift new file mode 100644 index 00000000..6403e105 --- /dev/null +++ b/bitchat/App/PrivateConversationModels.swift @@ -0,0 +1,298 @@ +import BitFoundation +import Combine +import Foundation + +@MainActor +final class PrivateInboxModel: ObservableObject { + @Published private(set) var selectedPeerID: PeerID? + @Published private(set) var unreadPeerIDs: Set = [] + @Published private(set) var messagesByPeerID: [PeerID: [BitchatMessage]] = [:] + + private let conversationStore: ConversationStore + private var cancellables = Set() + + init(conversationStore: ConversationStore) { + self.conversationStore = conversationStore + + bind() + refreshMessages() + } + + func messages(for peerID: PeerID?) -> [BitchatMessage] { + guard let peerID else { return [] } + return messagesByPeerID[peerID] ?? [] + } + + private func bind() { + conversationStore.$selectedPrivatePeerID + .receive(on: DispatchQueue.main) + .sink { [weak self] peerID in + self?.selectedPeerID = peerID + self?.refreshMessages() + } + .store(in: &cancellables) + + conversationStore.$unreadConversations + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in + self?.unreadPeerIDs = self?.conversationStore.unreadDirectPeerIDs() ?? [] + self?.refreshMessages() + } + .store(in: &cancellables) + + conversationStore.$messagesByConversation + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in + self?.refreshMessages() + } + .store(in: &cancellables) + + selectedPeerID = conversationStore.selectedPrivatePeerID + unreadPeerIDs = conversationStore.unreadDirectPeerIDs() + } + + private func refreshMessages() { + var nextMessagesByPeerID = conversationStore.directMessagesByPeerID() + var peerIDs = Set(nextMessagesByPeerID.keys) + peerIDs.formUnion(conversationStore.unreadDirectPeerIDs()) + if let selectedPeerID = conversationStore.selectedPrivatePeerID { + peerIDs.insert(selectedPeerID) + } + + for peerID in peerIDs where nextMessagesByPeerID[peerID] == nil { + nextMessagesByPeerID[peerID] = [] + } + + messagesByPeerID = nextMessagesByPeerID + } +} + +enum PrivateConversationAvailability: Equatable { + case bluetoothConnected + case meshReachable + case nostrAvailable + case offline +} + +struct PrivateConversationHeaderState: Equatable { + let conversationPeerID: PeerID + let headerPeerID: PeerID + let displayName: String + let availability: PrivateConversationAvailability + let isFavorite: Bool + let encryptionStatus: EncryptionStatus? + + var supportsFavoriteToggle: Bool { + !conversationPeerID.isGeoDM + } +} + +@MainActor +final class PrivateConversationModel: ObservableObject { + @Published private(set) var selectedPeerID: PeerID? + @Published private(set) var selectedHeaderState: PrivateConversationHeaderState? + + private let chatViewModel: ChatViewModel + private let conversationStore: ConversationStore + private let locationChannelsModel: LocationChannelsModel + private let peerIdentityStore: PeerIdentityStore + private var cancellables = Set() + + init( + chatViewModel: ChatViewModel, + conversationStore: ConversationStore, + locationChannelsModel: LocationChannelsModel? = nil, + peerIdentityStore: PeerIdentityStore? = nil + ) { + self.chatViewModel = chatViewModel + self.conversationStore = conversationStore + self.locationChannelsModel = locationChannelsModel ?? LocationChannelsModel() + self.peerIdentityStore = peerIdentityStore ?? chatViewModel.peerIdentityStore + let initialPeerID = conversationStore.selectedPrivatePeerID + self.selectedPeerID = initialPeerID + self.selectedHeaderState = initialPeerID.flatMap { peerID in + makeHeaderState(for: peerID) + } + + bind() + } + + func startConversation(with peerID: PeerID) { + chatViewModel.startPrivateChat(with: peerID) + refreshSelectedConversation() + } + + func openConversation(for peerID: PeerID) { + if peerID.isGeoChat { + guard let full = chatViewModel.fullNostrHex(forSenderPeerID: peerID) else { return } + chatViewModel.startGeohashDM(withPubkeyHex: full) + } else { + chatViewModel.startPrivateChat(with: peerID) + } + + refreshSelectedConversation() + } + + func endConversation() { + chatViewModel.endPrivateChat() + refreshSelectedConversation() + } + + func toggleFavorite(peerID: PeerID) { + chatViewModel.toggleFavorite(peerID: peerID) + refreshSelectedConversation() + } + + func toggleFavoriteForSelectedConversation() { + guard let headerPeerID = selectedHeaderState?.headerPeerID else { return } + toggleFavorite(peerID: headerPeerID) + } + + func markMessagesAsRead(from peerID: PeerID) { + chatViewModel.markPrivateMessagesAsRead(from: peerID) + } + + private func bind() { + conversationStore.$selectedPrivatePeerID + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in + self?.refreshSelectedConversation() + } + .store(in: &cancellables) + + chatViewModel.$allPeers + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in + self?.refreshSelectedConversation() + } + .store(in: &cancellables) + + peerIdentityStore.$encryptionStatuses + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in + self?.refreshSelectedConversation() + } + .store(in: &cancellables) + + NotificationCenter.default.publisher(for: .favoriteStatusChanged) + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in + self?.refreshSelectedConversation() + } + .store(in: &cancellables) + + NotificationCenter.default.publisher(for: Notification.Name("peerStatusUpdated")) + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in + self?.refreshSelectedConversation() + } + .store(in: &cancellables) + + locationChannelsModel.$selectedChannel + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in + self?.refreshSelectedConversation() + } + .store(in: &cancellables) + } + + private func refreshSelectedConversation() { + selectedPeerID = conversationStore.selectedPrivatePeerID + selectedHeaderState = selectedPeerID.flatMap { peerID in + makeHeaderState(for: peerID) + } + } + + private func makeHeaderState(for conversationPeerID: PeerID) -> PrivateConversationHeaderState { + let headerPeerID = chatViewModel.getShortIDForNoiseKey(conversationPeerID) + let peer = chatViewModel.getPeer(byID: headerPeerID) + let displayName = resolveDisplayName(for: conversationPeerID, headerPeerID: headerPeerID, peer: peer) + let availability = resolveAvailability(for: headerPeerID, peer: peer) + let encryptionStatus: EncryptionStatus? = conversationPeerID.isGeoDM + ? nil + : chatViewModel.getEncryptionStatus(for: headerPeerID) + + return PrivateConversationHeaderState( + conversationPeerID: conversationPeerID, + headerPeerID: headerPeerID, + displayName: displayName, + availability: availability, + isFavorite: chatViewModel.isFavorite(peerID: headerPeerID), + encryptionStatus: encryptionStatus + ) + } + + private func resolveDisplayName( + for conversationPeerID: PeerID, + headerPeerID: PeerID, + peer: BitchatPeer? + ) -> String { + if conversationPeerID.isGeoDM, case .location(let channel) = locationChannelsModel.selectedChannel { + return "#\(channel.geohash)/@\(chatViewModel.geohashDisplayName(for: conversationPeerID))" + } + if let displayName = peer?.displayName { + return displayName + } + if let nickname = chatViewModel.meshService.peerNickname(peerID: headerPeerID) { + return nickname + } + if let favorite = FavoritesPersistenceService.shared.getFavoriteStatus( + for: Data(hexString: headerPeerID.id) ?? Data() + ), !favorite.peerNickname.isEmpty { + return favorite.peerNickname + } + if headerPeerID.id.count == 16 { + let candidates = chatViewModel.identityManager.getCryptoIdentitiesByPeerIDPrefix(headerPeerID) + if let identity = candidates.first, + let social = chatViewModel.identityManager.getSocialIdentity(for: identity.fingerprint) { + if let pet = social.localPetname, !pet.isEmpty { + return pet + } + if !social.claimedNickname.isEmpty { + return social.claimedNickname + } + } + } else if let noiseKey = headerPeerID.noiseKey { + let fingerprint = noiseKey.sha256Fingerprint() + if let social = chatViewModel.identityManager.getSocialIdentity(for: fingerprint) { + if let pet = social.localPetname, !pet.isEmpty { + return pet + } + if !social.claimedNickname.isEmpty { + return social.claimedNickname + } + } + } + + return String(localized: "common.unknown", comment: "Fallback label for unknown peer") + } + + private func resolveAvailability(for headerPeerID: PeerID, peer: BitchatPeer?) -> PrivateConversationAvailability { + if let connectionState = peer?.connectionState { + switch connectionState { + case .bluetoothConnected: + return .bluetoothConnected + case .meshReachable: + return .meshReachable + case .nostrAvailable: + return .nostrAvailable + case .offline: + return .offline + } + } + + if chatViewModel.meshService.isPeerReachable(headerPeerID) { + return .meshReachable + } + if let noiseKey = Data(hexString: headerPeerID.id), + let favoriteStatus = FavoritesPersistenceService.shared.getFavoriteStatus(for: noiseKey), + favoriteStatus.isMutual { + return .nostrAvailable + } + if chatViewModel.meshService.isPeerConnected(headerPeerID) || chatViewModel.connectedPeers.contains(headerPeerID) { + return .bluetoothConnected + } + + return .offline + } +} diff --git a/bitchat/App/PublicChatModel.swift b/bitchat/App/PublicChatModel.swift new file mode 100644 index 00000000..3a5bcfe4 --- /dev/null +++ b/bitchat/App/PublicChatModel.swift @@ -0,0 +1,41 @@ +import BitFoundation +import Combine +import SwiftUI + +@MainActor +final class PublicChatModel: ObservableObject { + @Published private(set) var activeChannel: ChannelID + @Published private(set) var messages: [BitchatMessage] = [] + + private let conversationStore: ConversationStore + private var cancellables = Set() + + init(conversationStore: ConversationStore) { + self.activeChannel = conversationStore.activeChannel + self.conversationStore = conversationStore + + bind() + refreshMessages() + } + + private func bind() { + conversationStore.$activeChannel + .receive(on: DispatchQueue.main) + .sink { [weak self] channel in + self?.activeChannel = channel + self?.refreshMessages() + } + .store(in: &cancellables) + + conversationStore.$messagesByConversation + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in + self?.refreshMessages() + } + .store(in: &cancellables) + } + + private func refreshMessages() { + messages = conversationStore.messages(for: ConversationID(channelID: activeChannel)) + } +} diff --git a/bitchat/App/VerificationModel.swift b/bitchat/App/VerificationModel.swift new file mode 100644 index 00000000..bf31f05f --- /dev/null +++ b/bitchat/App/VerificationModel.swift @@ -0,0 +1,152 @@ +import BitFoundation +import Combine +import Foundation + +struct FingerprintPresentationState: Equatable { + let statusPeerID: PeerID + let peerNickname: String + let encryptionStatus: EncryptionStatus + let theirFingerprint: String? + let myFingerprint: String + let isVerified: Bool + + var canToggleVerification: Bool { + encryptionStatus == .noiseSecured || encryptionStatus == .noiseVerified + } +} + +enum VerificationScanOutcome: Equatable { + case requested(String) + case notFound + case invalid +} + +@MainActor +final class VerificationModel: ObservableObject { + @Published private(set) var currentNickname: String + @Published private(set) var selectedPeerID: PeerID? + + private let chatViewModel: ChatViewModel + private let peerIdentityStore: PeerIdentityStore + private var cancellables = Set() + + init( + chatViewModel: ChatViewModel, + privateConversationModel: PrivateConversationModel, + peerIdentityStore: PeerIdentityStore? = nil + ) { + self.chatViewModel = chatViewModel + self.peerIdentityStore = peerIdentityStore ?? chatViewModel.peerIdentityStore + self.currentNickname = chatViewModel.nickname + self.selectedPeerID = privateConversationModel.selectedPeerID + + bind(privateConversationModel: privateConversationModel) + } + + func myQRString() -> String { + let npub = try? chatViewModel.idBridge.getCurrentNostrIdentity()?.npub + return VerificationService.shared.buildMyQRString(nickname: currentNickname, npub: npub) ?? "" + } + + func beginQRVerification(with qr: VerificationService.VerificationQR) -> Bool { + chatViewModel.beginQRVerification(with: qr) + } + + func verifyScannedPayload(_ payload: String) -> VerificationScanOutcome { + guard let qr = VerificationService.shared.verifyScannedQR(payload) else { + return .invalid + } + + guard chatViewModel.beginQRVerification(with: qr) else { + return .notFound + } + + return .requested(qr.nickname) + } + + func verifyFingerprint(for peerID: PeerID) { + chatViewModel.verifyFingerprint(for: peerID) + } + + func unverifyFingerprint(for peerID: PeerID) { + chatViewModel.unverifyFingerprint(for: peerID) + } + + func isVerified(peerID: PeerID) -> Bool { + guard let fingerprint = chatViewModel.getFingerprint(for: peerID) else { return false } + return peerIdentityStore.isVerified(fingerprint) + } + + func fingerprintPresentation(for peerID: PeerID) -> FingerprintPresentationState { + let statusPeerID = chatViewModel.getShortIDForNoiseKey(peerID) + let encryptionStatus = chatViewModel.getEncryptionStatus(for: statusPeerID) + let theirFingerprint = chatViewModel.getFingerprint(for: statusPeerID) + let peerNickname = resolveDisplayName(for: peerID, statusPeerID: statusPeerID) + + return FingerprintPresentationState( + statusPeerID: statusPeerID, + peerNickname: peerNickname, + encryptionStatus: encryptionStatus, + theirFingerprint: theirFingerprint, + myFingerprint: chatViewModel.getMyFingerprint(), + isVerified: theirFingerprint.map { peerIdentityStore.isVerified($0) } ?? false + ) + } + + private func bind(privateConversationModel: PrivateConversationModel) { + chatViewModel.$nickname + .receive(on: DispatchQueue.main) + .assign(to: &$currentNickname) + + privateConversationModel.$selectedPeerID + .receive(on: DispatchQueue.main) + .assign(to: &$selectedPeerID) + + peerIdentityStore.$encryptionStatuses + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in + self?.objectWillChange.send() + } + .store(in: &cancellables) + + peerIdentityStore.$verifiedFingerprints + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in + self?.objectWillChange.send() + } + .store(in: &cancellables) + + chatViewModel.$allPeers + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in + self?.objectWillChange.send() + } + .store(in: &cancellables) + } + + private func resolveDisplayName(for peerID: PeerID, statusPeerID: PeerID) -> String { + if let peer = chatViewModel.getPeer(byID: statusPeerID) { + return peer.displayName + } + if let name = chatViewModel.meshService.peerNickname(peerID: statusPeerID) { + return name + } + if let data = peerID.noiseKey { + if let favorite = FavoritesPersistenceService.shared.getFavoriteStatus(for: data), + !favorite.peerNickname.isEmpty { + return favorite.peerNickname + } + let fingerprint = data.sha256Fingerprint() + if let social = chatViewModel.identityManager.getSocialIdentity(for: fingerprint) { + if let pet = social.localPetname, !pet.isEmpty { + return pet + } + if !social.claimedNickname.isEmpty { + return social.claimedNickname + } + } + } + + return String(localized: "common.unknown", comment: "Label for an unknown peer") + } +} diff --git a/bitchat/BitchatApp.swift b/bitchat/BitchatApp.swift index 128ea1b7..928178cc 100644 --- a/bitchat/BitchatApp.swift +++ b/bitchat/BitchatApp.swift @@ -6,128 +6,55 @@ // For more information, see // -import Tor import SwiftUI -import BitFoundation import UserNotifications @main struct BitchatApp: App { static let bundleID = Bundle.main.bundleIdentifier ?? "chat.bitchat" static let groupID = "group.\(bundleID)" - - @StateObject private var chatViewModel: ChatViewModel + + @StateObject private var runtime: AppRuntime #if os(iOS) @Environment(\.scenePhase) var scenePhase @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate - // Skip the very first .active-triggered Tor restart on cold launch - @State private var didHandleInitialActive: Bool = false - @State private var didEnterBackground: Bool = false #elseif os(macOS) @NSApplicationDelegateAdaptor(MacAppDelegate.self) var appDelegate #endif - - private let idBridge = NostrIdentityBridge() - + init() { - let keychain = KeychainManager() - let idBridge = self.idBridge - _chatViewModel = StateObject( - wrappedValue: ChatViewModel( - keychain: keychain, - idBridge: idBridge, - identityManager: SecureIdentityStateManager(keychain) - ) - ) - + _runtime = StateObject(wrappedValue: AppRuntime()) UNUserNotificationCenter.current().delegate = NotificationDelegate.shared - // Warm up georelay directory and refresh if stale (once/day) - GeoRelayDirectory.shared.prefetchIfNeeded() } - + var body: some Scene { WindowGroup { ContentView() - .environmentObject(chatViewModel) + .environmentObject(runtime.publicChatModel) + .environmentObject(runtime.privateInboxModel) + .environmentObject(runtime.privateConversationModel) + .environmentObject(runtime.verificationModel) + .environmentObject(runtime.conversationUIModel) + .environmentObject(runtime.locationChannelsModel) + .environmentObject(runtime.peerListModel) + .environmentObject(runtime.appChromeModel) .onAppear { - NotificationDelegate.shared.chatViewModel = chatViewModel - // Inject live Noise service into VerificationService to avoid creating new BLE instances - VerificationService.shared.configure(with: chatViewModel.meshService.getNoiseService()) - // Prewarm Nostr identity and QR to make first VERIFY sheet fast - let nickname = chatViewModel.nickname - DispatchQueue.global(qos: .utility).async { - let npub = try? idBridge.getCurrentNostrIdentity()?.npub - _ = VerificationService.shared.buildMyQRString(nickname: nickname, npub: npub) - } - - appDelegate.chatViewModel = chatViewModel - - // Initialize network activation policy; will start Tor/Nostr only when allowed - NetworkActivationService.shared.start() - - // Start presence service (will wait for Tor readiness) - GeohashPresenceService.shared.start() - - // Check for shared content - checkForSharedContent() + appDelegate.runtime = runtime + runtime.start() } .onOpenURL { url in - handleURL(url) + runtime.handleOpenURL(url) } #if os(iOS) .onChange(of: scenePhase) { newPhase in - switch newPhase { - case .background: - // Keep BLE mesh running in background; BLEService adapts scanning automatically - // Always send Tor to dormant on background for a clean restart later. - TorManager.shared.setAppForeground(false) - TorManager.shared.goDormantOnBackground() - // Stop geohash sampling while backgrounded - Task { @MainActor in - chatViewModel.endGeohashSampling() - } - // Proactively disconnect Nostr to avoid spurious socket errors while Tor is down - NostrRelayManager.shared.disconnect() - didEnterBackground = true - case .active: - // Restart services when becoming active - chatViewModel.meshService.startServices() - TorManager.shared.setAppForeground(true) - // On initial cold launch, Tor was just started in onAppear. - // Skip the deterministic restart the first time we become active. - if didHandleInitialActive && didEnterBackground { - if TorManager.shared.isAutoStartAllowed() && !TorManager.shared.isReady { - TorManager.shared.ensureRunningOnForeground() - } - } else { - didHandleInitialActive = true - } - didEnterBackground = false - if TorManager.shared.isAutoStartAllowed() { - Task.detached { - let _ = await TorManager.shared.awaitReady(timeout: 60) - await MainActor.run { - // Rebuild proxied sessions to bind to the live Tor after readiness - TorURLSession.shared.rebuild() - // Reconnect Nostr via fresh sessions; will gate until Tor 100% - NostrRelayManager.shared.resetAllConnections() - } - } - } - checkForSharedContent() - case .inactive: - break - @unknown default: - break - } + runtime.handleScenePhaseChange(newPhase) } .onReceive(NotificationCenter.default.publisher(for: UIApplication.didBecomeActiveNotification)) { _ in - // Check for shared content when app becomes active - checkForSharedContent() + runtime.handleDidBecomeActiveNotification() } #elseif os(macOS) .onReceive(NotificationCenter.default.publisher(for: NSApplication.didBecomeActiveNotification)) { _ in - // App became active + runtime.handleMacDidBecomeActiveNotification() } #endif } @@ -136,66 +63,18 @@ struct BitchatApp: App { .windowResizability(.contentSize) #endif } - - private func handleURL(_ url: URL) { - if url.scheme == "bitchat" && url.host == "share" { - // Handle shared content - checkForSharedContent() - } - } - - private func checkForSharedContent() { - // Check app group for shared content from extension - guard let userDefaults = UserDefaults(suiteName: BitchatApp.groupID) else { - return - } - - guard let sharedContent = userDefaults.string(forKey: "sharedContent"), - let sharedDate = userDefaults.object(forKey: "sharedContentDate") as? Date else { - return - } - - // Only process if shared within configured window - if Date().timeIntervalSince(sharedDate) < TransportConfig.uiShareAcceptWindowSeconds { - let contentType = userDefaults.string(forKey: "sharedContentType") ?? "text" - - // Clear the shared content - userDefaults.removeObject(forKey: "sharedContent") - userDefaults.removeObject(forKey: "sharedContentType") - userDefaults.removeObject(forKey: "sharedContentDate") - // No need to force synchronize here - - // Send the shared content immediately on the main queue - DispatchQueue.main.async { - if contentType == "url" { - // Try to parse as JSON first - if let data = sharedContent.data(using: .utf8), - let urlData = try? JSONSerialization.jsonObject(with: data) as? [String: String], - let url = urlData["url"] { - // Send plain URL - self.chatViewModel.sendMessage(url) - } else { - // Fallback to simple URL - self.chatViewModel.sendMessage(sharedContent) - } - } else { - self.chatViewModel.sendMessage(sharedContent) - } - } - } - } } #if os(iOS) final class AppDelegate: NSObject, UIApplicationDelegate { - weak var chatViewModel: ChatViewModel? - + weak var runtime: AppRuntime? + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { - return true + true } - + func applicationWillTerminate(_ application: UIApplication) { - chatViewModel?.applicationWillTerminate() + runtime?.applicationWillTerminate() } } #endif @@ -204,79 +83,42 @@ final class AppDelegate: NSObject, UIApplicationDelegate { import AppKit final class MacAppDelegate: NSObject, NSApplicationDelegate { - weak var chatViewModel: ChatViewModel? - + weak var runtime: AppRuntime? + func applicationWillTerminate(_ notification: Notification) { - chatViewModel?.applicationWillTerminate() + runtime?.applicationWillTerminate() } - + func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { - return true + true } } #endif final class NotificationDelegate: NSObject, UNUserNotificationCenterDelegate { static let shared = NotificationDelegate() - weak var chatViewModel: ChatViewModel? - + weak var runtime: AppRuntime? + func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { let identifier = response.notification.request.identifier let userInfo = response.notification.request.content.userInfo - - // Check if this is a private message notification - if identifier.hasPrefix("private-") { - // Get peer ID from userInfo - if let peerID = userInfo["peerID"] as? String { - DispatchQueue.main.async { - self.chatViewModel?.startPrivateChat(with: PeerID(str: peerID)) - } - } + + Task { @MainActor in + self.runtime?.handleNotificationResponse(identifier: identifier, userInfo: userInfo) } - // Handle deeplink (e.g., geohash activity) - if let deep = userInfo["deeplink"] as? String, let url = URL(string: deep) { - #if os(iOS) - DispatchQueue.main.async { UIApplication.shared.open(url) } - #else - DispatchQueue.main.async { NSWorkspace.shared.open(url) } - #endif - } - completionHandler() } - + func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { let identifier = notification.request.identifier let userInfo = notification.request.content.userInfo - - // Check if this is a private message notification - if identifier.hasPrefix("private-") { - // Get peer ID from userInfo - if let peerID = userInfo["peerID"] as? String { - // Don't show notification if the private chat is already open - // Access main-actor-isolated property via Task - Task { @MainActor in - if self.chatViewModel?.selectedPrivateChatPeer == PeerID(str: peerID) { - completionHandler([]) - } else { - completionHandler([.banner, .sound]) - } - } - return - } + + Task { + let options = await self.runtime?.presentationOptions( + forNotificationIdentifier: identifier, + userInfo: userInfo + ) ?? [.banner, .sound] + completionHandler(options) } - // Suppress geohash activity notification if we're already in that geohash channel - if identifier.hasPrefix("geo-activity-"), - let deep = userInfo["deeplink"] as? String, - let gh = deep.components(separatedBy: "/").last { - if case .location(let ch) = LocationChannelManager.shared.selectedChannel, ch.geohash == gh { - completionHandler([]) - return - } - } - - // Show notification in all other cases - completionHandler([.banner, .sound]) } } - diff --git a/bitchat/Nostr/NostrRelayManager.swift b/bitchat/Nostr/NostrRelayManager.swift index ebfeadaa..f12d0e9e 100644 --- a/bitchat/Nostr/NostrRelayManager.swift +++ b/bitchat/Nostr/NostrRelayManager.swift @@ -121,13 +121,12 @@ final class NostrRelayManager: ObservableObject { var nextReconnectTime: Date? } - // Default relay list (can be customized) + // Default relays carry NIP-17 gift wraps, so avoid relays known to reject kind 1059. private static let defaultRelays = [ "wss://relay.damus.io", "wss://nos.lol", "wss://relay.primal.net", - "wss://offchain.pub", - "wss://nostr21.com" + "wss://offchain.pub" // For local testing, you can add: "ws://localhost:8080" ] private static let defaultRelaySet = Set(defaultRelays) @@ -143,10 +142,19 @@ final class NostrRelayManager: ObservableObject { private var subscriptions: [String: Set] = [:] // relay URL -> active subscription IDs private var pendingSubscriptions: [String: [String: String]] = [:] // relay URL -> (subscription id -> encoded REQ JSON) private var messageHandlers: [String: (NostrEvent) -> Void] = [:] - // Coalesce duplicate subscribe requests for the same id within a short window + // Coalesce duplicate subscribe requests for the same id within a short window. + private let subscribeCoalesceInterval: TimeInterval = 1.0 private var subscribeCoalesce: [String: Date] = [:] + private var pendingTorConnectionURLs = Set() + private var awaitingTorForConnections = false private var cancellables = Set() + private struct SubscriptionRequestState: Equatable { + let messageString: String + let relayURLs: Set + } + private var subscriptionRequestState: [String: SubscriptionRequestState] = [:] + // Track EOSE per subscription to signal when initial stored events are done private struct EOSETracker { var pendingRelays: Set @@ -154,6 +162,7 @@ final class NostrRelayManager: ObservableObject { var timer: Timer? } private var eoseTrackers: [String: EOSETracker] = [:] + private var pendingEOSECallbacks: [String: () -> Void] = [:] // Message queue for reliability // Pending sends held only for relays that are not yet connected. @@ -233,25 +242,7 @@ final class NostrRelayManager: ObservableObject { func connect() { // Global network policy gate guard dependencies.activationAllowed() else { return } - if shouldUseTor { - // Ensure Tor is started early and wait for readiness off-main; then hop back to connect. - dependencies.awaitTorReady { [weak self] ready in - guard let self = self else { return } - if !ready { - SecureLogger.error("❌ Tor not ready; aborting relay connections (fail-closed)", category: .session) - return - } - SecureLogger.debug("🌐 Connecting to \(self.relays.count) Nostr relays (via Tor)", category: .session) - for relay in self.relays { - self.connectToRelay(relay.url) - } - } - } else { - SecureLogger.debug("🌐 Connecting to \(self.relays.count) Nostr relays (direct)", category: .session) - for relay in self.relays { - connectToRelay(relay.url) - } - } + connectToRelays(relays.map(\.url), shouldLog: true) } /// Disconnect from all relays @@ -264,6 +255,14 @@ final class NostrRelayManager: ObservableObject { // Clear known subscriptions and any queued subs since connections are gone subscriptions.removeAll() pendingSubscriptions.removeAll() + subscriptionRequestState.removeAll() + pendingEOSECallbacks.removeAll() + for (_, tracker) in eoseTrackers { + tracker.timer?.invalidate() + } + eoseTrackers.removeAll() + pendingTorConnectionURLs.removeAll() + awaitingTorForConnections = false updateConnectionStatus() } @@ -273,22 +272,12 @@ final class NostrRelayManager: ObservableObject { guard dependencies.activationAllowed() else { return } let targets = allowedRelayList(from: relayUrls) guard !targets.isEmpty else { return } - if shouldUseTor && dependencies.torEnforced() && !dependencies.torIsReady() { - // Defer until Tor is fully ready; avoid queuing connection attempts early - dependencies.awaitTorReady { [weak self] ready in - guard let self = self else { return } - if ready { self.ensureConnections(to: relayUrls) } - } - return - } var existing = Set(relays.map { $0.url }) for url in targets where !existing.contains(url) { relays.append(Relay(url: url)) existing.insert(url) } - for url in targets where connections[url] == nil { - connectToRelay(url) - } + connectToRelays(targets) } /// Send an event to specified relays (or all if none specified) @@ -311,7 +300,7 @@ final class NostrRelayManager: ObservableObject { // Attempt immediate send to relays with active connections; queue the rest var stillPending = Set() for relayUrl in targetRelays { - if let connection = connections[relayUrl] { + if let connection = connectedConnection(for: relayUrl) { sendToRelay(event: event, connection: connection, relayUrl: relayUrl) } else { stillPending.insert(relayUrl) @@ -333,7 +322,7 @@ final class NostrRelayManager: ObservableObject { // Flush only for a specific relay for i in (0.. NostrRelayConnectionProtocol? { + guard let connection = connections[relayUrl], + relays.first(where: { $0.url == relayUrl })?.isConnected == true else { + return nil + } + return connection + } /// Subscribe to events matching a filter. If `relayUrls` provided, targets only those relays. func subscribe( @@ -372,24 +369,12 @@ final class NostrRelayManager: ObservableObject { ) { // Global network policy gate guard dependencies.activationAllowed() else { return } - // Coalesce rapid duplicate subscribe requests only if a handler already exists + // Coalesce rapid duplicate subscribe requests even while Tor readiness is pending. let now = dependencies.now() - if messageHandlers[id] != nil { - if let last = subscribeCoalesce[id], now.timeIntervalSince(last) < 1.0 { - return - } - } - subscribeCoalesce[id] = now - if shouldUseTor && dependencies.torEnforced() && !dependencies.torIsReady() { - // Defer subscription setup until Tor is ready; avoid queuing subs early - dependencies.awaitTorReady { [weak self] ready in - guard let self = self else { return } - if ready { - self.subscribe(filter: filter, id: id, relayUrls: relayUrls, handler: handler, onEOSE: onEOSE) - } - } + if let last = subscribeCoalesce[id], now.timeIntervalSince(last) < subscribeCoalesceInterval { return } + subscribeCoalesce[id] = now messageHandlers[id] = handler let req = NostrRequest.subscribe(id: id, filters: [filter]) @@ -407,10 +392,17 @@ final class NostrRelayManager: ObservableObject { let baseUrls = relayUrls ?? Self.defaultRelays let candidateUrls = baseUrls.filter { !isPermanentlyFailed($0) } let urls = allowedRelayList(from: candidateUrls) + let requestState = SubscriptionRequestState(messageString: messageString, relayURLs: Set(urls)) + if subscriptionRequestState[id] == requestState, subscriptionStateExists(id: id, requestState: requestState) { + return + } + subscriptionRequestState[id] = requestState + // Always queue subscriptions; sending happens when a relay reports connected - let existingSet = Set(relays.map { $0.url }) + var existingSet = Set(relays.map { $0.url }) for url in urls where !existingSet.contains(url) { relays.append(Relay(url: url)) + existingSet.insert(url) } for url in urls { var map = self.pendingSubscriptions[url] ?? [:] @@ -421,20 +413,10 @@ final class NostrRelayManager: ObservableObject { if let onEOSE = onEOSE { if urls.isEmpty { onEOSE() + } else if shouldWaitForTorBeforeConnecting { + pendingEOSECallbacks[id] = onEOSE } else { - var tracker = EOSETracker(pendingRelays: Set(urls), callback: onEOSE, timer: nil) - // Fallback timeout to avoid hanging if a relay never sends EOSE - tracker.timer = Timer.scheduledTimer(withTimeInterval: 2.0, repeats: false) { [weak self] _ in - Task { @MainActor in - guard let self = self else { return } - if let t = self.eoseTrackers[id] { - t.timer?.invalidate() - self.eoseTrackers.removeValue(forKey: id) - onEOSE() - } - } - } - eoseTrackers[id] = tracker + startEOSETracking(id: id, relayURLs: Set(urls), callback: onEOSE) } } SecureLogger.debug("📋 Queued subscription id=\(id) for \(urls.count) relay(s)", category: .session) @@ -506,6 +488,13 @@ final class NostrRelayManager: ObservableObject { messageHandlers.removeValue(forKey: id) // Allow immediate re-subscription by clearing coalescer timestamp subscribeCoalesce.removeValue(forKey: id) + subscriptionRequestState.removeValue(forKey: id) + pendingEOSECallbacks.removeValue(forKey: id) + eoseTrackers[id]?.timer?.invalidate() + eoseTrackers.removeValue(forKey: id) + for url in Array(pendingSubscriptions.keys) { + pendingSubscriptions[url]?.removeValue(forKey: id) + } let req = NostrRequest.close(id: id) let message = try? encoder.encode(req) @@ -525,6 +514,100 @@ final class NostrRelayManager: ObservableObject { } // MARK: - Private Methods + + private var shouldWaitForTorBeforeConnecting: Bool { + shouldUseTor && !dependencies.torIsReady() + } + + private func connectToRelays(_ relayUrls: [String], shouldLog: Bool = false) { + guard dependencies.activationAllowed() else { return } + let targets = allowedRelayList(from: relayUrls).filter { + connections[$0] == nil && !isPermanentlyFailed($0) + } + guard !targets.isEmpty else { return } + + if shouldWaitForTorBeforeConnecting { + queueConnectionsUntilTorReady(targets) + return + } + + if shouldLog { + let route = shouldUseTor ? "via Tor" : "direct" + SecureLogger.debug("🌐 Connecting to \(targets.count) Nostr relay(s) (\(route))", category: .session) + } + + for url in targets { + connectToRelay(url) + } + } + + private func queueConnectionsUntilTorReady(_ relayUrls: [String]) { + let targets = allowedRelayList(from: relayUrls).filter { + connections[$0] == nil && !isPermanentlyFailed($0) + } + guard !targets.isEmpty else { return } + + pendingTorConnectionURLs.formUnion(targets) + guard !awaitingTorForConnections else { return } + + awaitingTorForConnections = true + let generation = connectionGeneration + dependencies.awaitTorReady { [weak self] ready in + guard let self else { return } + guard generation == self.connectionGeneration else { return } + + let pending = Array(self.pendingTorConnectionURLs) + self.pendingTorConnectionURLs.removeAll() + self.awaitingTorForConnections = false + + guard ready else { + SecureLogger.error("❌ Tor not ready; aborting relay connections (fail-closed)", category: .session) + return + } + + self.connectToRelays(pending, shouldLog: true) + } + } + + private func subscriptionStateExists(id: String, requestState: SubscriptionRequestState) -> Bool { + guard !requestState.relayURLs.isEmpty else { return true } + return requestState.relayURLs.allSatisfy { url in + pendingSubscriptions[url]?[id] == requestState.messageString || + subscriptions[url]?.contains(id) == true + } + } + + private func startEOSETracking(id: String, relayURLs: Set, callback: @escaping () -> Void) { + eoseTrackers[id]?.timer?.invalidate() + var tracker = EOSETracker(pendingRelays: relayURLs, callback: callback, timer: nil) + // Fallback timeout to avoid hanging if a relay never sends EOSE. + tracker.timer = Timer.scheduledTimer(withTimeInterval: 2.0, repeats: false) { [weak self] _ in + Task { @MainActor in + guard let self else { return } + if let tracker = self.eoseTrackers[id] { + tracker.timer?.invalidate() + self.eoseTrackers.removeValue(forKey: id) + callback() + } + } + } + eoseTrackers[id] = tracker + } + + private func startPendingEOSETrackingIfNeeded(id: String) { + guard eoseTrackers[id] == nil, + let callback = pendingEOSECallbacks.removeValue(forKey: id), + let requestState = subscriptionRequestState[id] + else { + return + } + + if requestState.relayURLs.isEmpty { + callback() + } else { + startEOSETracking(id: id, relayURLs: requestState.relayURLs, callback: callback) + } + } private func connectToRelay(_ urlString: String) { // Global network policy gate @@ -550,12 +633,8 @@ final class NostrRelayManager: ObservableObject { // Attempting to connect to Nostr relay via the proxied session // If Tor is enforced but not ready, delay connection until it is. - if shouldUseTor && dependencies.torEnforced() && !dependencies.torIsReady() { - dependencies.awaitTorReady { [weak self] ready in - guard let self = self else { return } - if ready { self.connectToRelay(urlString) } - else { SecureLogger.error("❌ Tor not ready; skipping connection to \(urlString)", category: .session) } - } + if shouldWaitForTorBeforeConnecting { + queueConnectionsUntilTorReady([urlString]) return } @@ -592,6 +671,7 @@ final class NostrRelayManager: ObservableObject { guard let connection = connections[relayUrl] else { return } for (id, messageString) in map { if self.subscriptions[relayUrl]?.contains(id) == true { continue } + startPendingEOSETrackingIfNeeded(id: id) connection.send(.string(messageString)) { error in if let error = error { SecureLogger.error("❌ Failed to send pending subscription to \(relayUrl): \(error)", category: .session) @@ -671,9 +751,9 @@ final class NostrRelayManager: ObservableObject { } else { let isGiftWrap = Self.pendingGiftWrapIDs.remove(eventId) != nil if isGiftWrap { - SecureLogger.warning("📮 Rejected id=\(eventId.prefix(16))… reason=\(reason)", category: .session) + SecureLogger.warning("📮 Rejected id=\(eventId.prefix(16))… relay=\(relayUrl) reason=\(reason)", category: .session) } else { - SecureLogger.error("📮 Rejected id=\(eventId.prefix(16))… reason=\(reason)", category: .session) + SecureLogger.error("📮 Rejected id=\(eventId.prefix(16))… relay=\(relayUrl) reason=\(reason)", category: .session) } } case .notice: diff --git a/bitchat/Services/CommandProcessor.swift b/bitchat/Services/CommandProcessor.swift index bba73aac..99b47288 100644 --- a/bitchat/Services/CommandProcessor.swift +++ b/bitchat/Services/CommandProcessor.swift @@ -28,6 +28,7 @@ struct CommandGeoParticipant { protocol CommandContextProvider: AnyObject { // MARK: - State Properties var nickname: String { get } + var activeChannel: ChannelID { get } var selectedPrivateChatPeer: PeerID? { get } var blockedUsers: Set { get } var privateChats: [PeerID: [BitchatMessage]] { get set } @@ -75,7 +76,7 @@ final class CommandProcessor { // Geohash context: disable favoriting in public geohash or GeoDM let inGeoPublic: Bool = { - switch LocationChannelManager.shared.selectedChannel { + switch contextProvider?.activeChannel ?? .mesh { case .mesh: return false case .location: return true } @@ -135,7 +136,7 @@ final class CommandProcessor { private func handleWho() -> CommandResult { // Show geohash participants when in a geohash channel; otherwise mesh peers - switch LocationChannelManager.shared.selectedChannel { + switch contextProvider?.activeChannel ?? .mesh { case .location(let ch): // Geohash context: show visible geohash participants (exclude self) guard let vm = contextProvider else { return .success(message: "nobody around") } diff --git a/bitchat/ViewModels/ChatComposerCoordinator.swift b/bitchat/ViewModels/ChatComposerCoordinator.swift new file mode 100644 index 00000000..133e3f1c --- /dev/null +++ b/bitchat/ViewModels/ChatComposerCoordinator.swift @@ -0,0 +1,92 @@ +import BitFoundation +import Foundation + +@MainActor +final class ChatComposerCoordinator { + private unowned let viewModel: ChatViewModel + + init(viewModel: ChatViewModel) { + self.viewModel = viewModel + } + + func updateAutocomplete(for text: String, cursorPosition: Int) { + let peerCandidates = autocompleteCandidates() + let (suggestions, range) = viewModel.autocompleteService.getSuggestions( + for: text, + peers: peerCandidates, + cursorPosition: cursorPosition + ) + + if !suggestions.isEmpty { + viewModel.autocompleteSuggestions = suggestions + viewModel.autocompleteRange = range + viewModel.showAutocomplete = true + viewModel.selectedAutocompleteIndex = 0 + } else { + viewModel.autocompleteSuggestions = [] + viewModel.autocompleteRange = nil + viewModel.showAutocomplete = false + viewModel.selectedAutocompleteIndex = 0 + } + } + + func completeNickname(_ nickname: String, in text: inout String) -> Int { + guard let range = viewModel.autocompleteRange else { return text.count } + + text = viewModel.autocompleteService.applySuggestion(nickname, to: text, range: range) + + viewModel.showAutocomplete = false + viewModel.autocompleteSuggestions = [] + viewModel.autocompleteRange = nil + viewModel.selectedAutocompleteIndex = 0 + + return range.location + nickname.count + (nickname.hasPrefix("@") ? 1 : 2) + } + + func parseMentions(from content: String) -> [String] { + let regex = ChatViewModel.Patterns.mention + let nsContent = content as NSString + let matches = regex.matches( + in: content, + options: [], + range: NSRange(location: 0, length: nsContent.length) + ) + + let peerNicknames = viewModel.meshService.getPeerNicknames() + var validTokens = Set(peerNicknames.values) + validTokens.insert(viewModel.nickname) + validTokens.insert(viewModel.nickname + "#" + String(viewModel.meshService.myPeerID.id.prefix(4))) + + var mentions: [String] = [] + for match in matches { + guard let range = Range(match.range(at: 1), in: content) else { continue } + let mentionedName = String(content[range]) + if validTokens.contains(mentionedName) { + mentions.append(mentionedName) + } + } + + return Array(Set(mentions)) + } +} + +private extension ChatComposerCoordinator { + func autocompleteCandidates() -> [String] { + switch viewModel.activeChannel { + case .mesh: + let values = viewModel.meshService.getPeerNicknames().values + return Array(values.filter { $0 != viewModel.meshService.myNickname }) + + case .location(let channel): + var tokens = Set() + for (pubkey, nick) in viewModel.geoNicknames { + tokens.insert("\(nick)#\(pubkey.suffix(4))") + } + if let identity = try? viewModel.idBridge.deriveIdentity(forGeohash: channel.geohash) { + let myToken = viewModel.nickname + "#" + String(identity.publicKeyHex.suffix(4)) + tokens.remove(myToken) + } + return Array(tokens) + } + } +} diff --git a/bitchat/ViewModels/ChatDeliveryCoordinator.swift b/bitchat/ViewModels/ChatDeliveryCoordinator.swift new file mode 100644 index 00000000..59f3ba74 --- /dev/null +++ b/bitchat/ViewModels/ChatDeliveryCoordinator.swift @@ -0,0 +1,89 @@ +import BitFoundation +import BitLogger +import Foundation + +final class ChatDeliveryCoordinator { + private unowned let viewModel: ChatViewModel + + init(viewModel: ChatViewModel) { + self.viewModel = viewModel + } + + @MainActor + func cleanupOldReadReceipts() { + guard !viewModel.isStartupPhase, !viewModel.privateChats.isEmpty else { + return + } + + let validMessageIDs = Set( + viewModel.privateChats.values.flatMap { messages in + messages.map(\.id) + } + ) + + let oldCount = viewModel.sentReadReceipts.count + viewModel.sentReadReceipts = viewModel.sentReadReceipts.intersection(validMessageIDs) + + let removedCount = oldCount - viewModel.sentReadReceipts.count + if removedCount > 0 { + SecureLogger.debug("🧹 Cleaned up \(removedCount) old read receipts", category: .session) + } + } + + @MainActor + func didReceiveReadReceipt(_ receipt: ReadReceipt) { + updateMessageDeliveryStatus( + receipt.originalMessageID, + status: .read(by: receipt.readerNickname, at: receipt.timestamp) + ) + } + + @MainActor + func didUpdateMessageDeliveryStatus(_ messageID: String, status: DeliveryStatus) { + updateMessageDeliveryStatus(messageID, status: status) + } + + @MainActor + func updateMessageDeliveryStatus(_ messageID: String, status: DeliveryStatus) { + var didUpdateStatus = false + + if let index = viewModel.messages.firstIndex(where: { $0.id == messageID }) { + let currentStatus = viewModel.messages[index].deliveryStatus + if !shouldSkipUpdate(currentStatus: currentStatus, newStatus: status) { + viewModel.messages[index].deliveryStatus = status + didUpdateStatus = true + } + } + + var privateChats = viewModel.privateChats + for (peerID, chatMessages) in privateChats { + guard let index = chatMessages.firstIndex(where: { $0.id == messageID }) else { continue } + + let currentStatus = chatMessages[index].deliveryStatus + guard !shouldSkipUpdate(currentStatus: currentStatus, newStatus: status) else { continue } + + let updatedMessages = chatMessages + updatedMessages[index].deliveryStatus = status + privateChats[peerID] = updatedMessages + didUpdateStatus = true + } + + if didUpdateStatus { + viewModel.privateChats = privateChats + viewModel.objectWillChange.send() + } + } +} + +private extension ChatDeliveryCoordinator { + func shouldSkipUpdate(currentStatus: DeliveryStatus?, newStatus: DeliveryStatus) -> Bool { + guard let currentStatus else { return false } + + switch (currentStatus, newStatus) { + case (.read, .delivered), (.read, .sent): + return true + default: + return false + } + } +} diff --git a/bitchat/ViewModels/ChatLifecycleCoordinator.swift b/bitchat/ViewModels/ChatLifecycleCoordinator.swift new file mode 100644 index 00000000..a74b6882 --- /dev/null +++ b/bitchat/ViewModels/ChatLifecycleCoordinator.swift @@ -0,0 +1,260 @@ +import BitFoundation +import BitLogger +import Foundation + +@MainActor +final class ChatLifecycleCoordinator { + private unowned let viewModel: ChatViewModel + + init(viewModel: ChatViewModel) { + self.viewModel = viewModel + } + + func handleDidBecomeActive() { + if let bleService = viewModel.meshService as? BLEService { + let currentState = bleService.getCurrentBluetoothState() + viewModel.updateBluetoothState(currentState) + } + + guard let peerID = viewModel.selectedPrivateChatPeer else { return } + + markPrivateMessagesAsRead(from: peerID) + + let viewModel = self.viewModel + DispatchQueue.main.asyncAfter(deadline: .now() + TransportConfig.uiAnimationMediumSeconds) { [weak viewModel] in + Task { @MainActor in + viewModel?.markPrivateMessagesAsRead(from: peerID) + } + } + } + + func handleScreenshotCaptured() { + let screenshotMessage = "* \(viewModel.nickname) took a screenshot *" + + if let peerID = viewModel.selectedPrivateChatPeer { + sendPrivateScreenshotNotificationIfPossible( + screenshotMessage, + to: peerID + ) + appendPrivateScreenshotNotice(for: peerID) + return + } + + switch viewModel.activeChannel { + case .mesh: + viewModel.meshService.sendMessage( + screenshotMessage, + mentions: [], + messageID: UUID().uuidString, + timestamp: Date() + ) + + case .location(let channel): + sendPublicGeohashScreenshotMessage( + screenshotMessage, + channel: channel + ) + } + + viewModel.addSystemMessage("you took a screenshot") + } + + func saveIdentityState() { + viewModel.identityManager.forceSave() + _ = viewModel.keychain.verifyIdentityKeyExists() + } + + func applicationWillTerminate() { + viewModel.meshService.stopServices() + saveIdentityState() + } + + func markPrivateMessagesAsRead(from peerID: PeerID) { + viewModel.privateChatManager.markAsRead(from: peerID) + viewModel.synchronizePrivateConversationStore() + + if peerID.isGeoDM, + let recipientHex = viewModel.nostrKeyMapping[peerID], + case .location(let channel) = viewModel.activeChannel, + let identity = try? viewModel.idBridge.deriveIdentity(forGeohash: channel.geohash) { + let messages = viewModel.privateChats[peerID] ?? [] + for message in messages where message.senderPeerID == peerID && !message.isRelay { + guard !viewModel.sentReadReceipts.contains(message.id) else { continue } + + SecureLogger.debug( + "GeoDM: sending READ for mid=\(message.id.prefix(8))… to=\(recipientHex.prefix(8))…", + category: .session + ) + let nostrTransport = NostrTransport(keychain: viewModel.keychain, idBridge: viewModel.idBridge) + nostrTransport.senderPeerID = viewModel.meshService.myPeerID + nostrTransport.sendReadReceiptGeohash( + message.id, + toRecipientHex: recipientHex, + from: identity + ) + viewModel.sentReadReceipts.insert(message.id) + } + return + } + + var noiseKeyHex: PeerID? + var peerNostrPubkey: String? + + if let noiseKey = Data(hexString: peerID.id), + let favoriteStatus = FavoritesPersistenceService.shared.getFavoriteStatus(for: noiseKey) { + noiseKeyHex = peerID + peerNostrPubkey = favoriteStatus.peerNostrPublicKey + } else if let peer = viewModel.unifiedPeerService.getPeer(by: peerID) { + noiseKeyHex = PeerID(hexData: peer.noisePublicKey) + let favoriteStatus = FavoritesPersistenceService.shared.getFavoriteStatus(for: peer.noisePublicKey) + peerNostrPubkey = favoriteStatus?.peerNostrPublicKey + + if let noiseKeyHex, viewModel.unreadPrivateMessages.contains(noiseKeyHex) { + viewModel.unreadPrivateMessages.remove(noiseKeyHex) + } + } + + guard peerNostrPubkey != nil else { return } + + for message in getPrivateChatMessages(for: peerID) { + guard (message.senderPeerID == peerID || message.senderPeerID == noiseKeyHex) && !message.isRelay else { + continue + } + + guard !viewModel.sentReadReceipts.contains(message.id) else { continue } + + let receipt = ReadReceipt( + originalMessageID: message.id, + readerID: viewModel.meshService.myPeerID, + readerNickname: viewModel.nickname + ) + let recipientPeerID = peerID.isHex + ? peerID + : (viewModel.unifiedPeerService.getPeer(by: peerID)?.peerID ?? peerID) + + viewModel.messageRouter.sendReadReceipt(receipt, to: recipientPeerID) + viewModel.sentReadReceipts.insert(message.id) + } + } + + func getMessages(for peerID: PeerID?) -> [BitchatMessage] { + guard let peerID else { return viewModel.messages } + return getPrivateChatMessages(for: peerID) + } + + func getPrivateChatMessages(for peerID: PeerID) -> [BitchatMessage] { + var combined: [BitchatMessage] = [] + + if let ephemeralMessages = viewModel.privateChats[peerID] { + combined.append(contentsOf: ephemeralMessages) + } + + if let peer = viewModel.unifiedPeerService.getPeer(by: peerID) { + let noiseKeyHex = PeerID(hexData: peer.noisePublicKey) + if noiseKeyHex != peerID, let stableMessages = viewModel.privateChats[noiseKeyHex] { + combined.append(contentsOf: stableMessages) + } + } + + var bestByID: [String: BitchatMessage] = [:] + for message in combined { + if let existing = bestByID[message.id] { + let existingRank = deliveryStatusRank(existing.deliveryStatus) + let candidateRank = deliveryStatusRank(message.deliveryStatus) + if candidateRank > existingRank || (candidateRank == existingRank && message.timestamp > existing.timestamp) { + bestByID[message.id] = message + } + } else { + bestByID[message.id] = message + } + } + + return bestByID.values.sorted { $0.timestamp < $1.timestamp } + } +} + +private extension ChatLifecycleCoordinator { + func sendPrivateScreenshotNotificationIfPossible(_ message: String, to peerID: PeerID) { + guard let peerNickname = viewModel.meshService.peerNickname(peerID: peerID) else { return } + + let sessionState = viewModel.meshService.getNoiseSessionState(for: peerID) + switch sessionState { + case .established: + viewModel.messageRouter.sendPrivate( + message, + to: peerID, + recipientNickname: peerNickname, + messageID: UUID().uuidString + ) + + case .none, .failed, .handshakeQueued, .handshaking: + SecureLogger.debug( + "Skipping screenshot notification to \(peerID) - no established session", + category: .security + ) + } + } + + func appendPrivateScreenshotNotice(for peerID: PeerID) { + let notice = BitchatMessage( + sender: "system", + content: "you took a screenshot", + timestamp: Date(), + isRelay: false, + originalSender: nil, + isPrivate: true, + recipientNickname: viewModel.meshService.peerNickname(peerID: peerID), + senderPeerID: viewModel.meshService.myPeerID + ) + + var chats = viewModel.privateChats + if chats[peerID] == nil { + chats[peerID] = [] + } + chats[peerID]?.append(notice) + viewModel.privateChats = chats + } + + func sendPublicGeohashScreenshotMessage(_ message: String, channel: GeohashChannel) { + Task { @MainActor [weak viewModel] in + guard let viewModel else { return } + + do { + let identity = try viewModel.idBridge.deriveIdentity(forGeohash: channel.geohash) + let event = try NostrProtocol.createEphemeralGeohashEvent( + content: message, + geohash: channel.geohash, + senderIdentity: identity, + nickname: viewModel.nickname, + teleported: viewModel.locationManager.teleported + ) + + let targetRelays = GeoRelayDirectory.shared.closestRelays(toGeohash: channel.geohash, count: 5) + if targetRelays.isEmpty { + SecureLogger.warning("Geo: no geohash relays available for \(channel.geohash); not sending", category: .session) + } else { + NostrRelayManager.shared.sendEvent(event, to: targetRelays) + } + + viewModel.participantTracker.recordParticipant(pubkeyHex: identity.publicKeyHex) + } catch { + SecureLogger.error("❌ Failed to send geohash screenshot message: \(error)", category: .session) + viewModel.addSystemMessage( + String(localized: "system.location.send_failed", comment: "System message when a location channel send fails") + ) + } + } + } + + func deliveryStatusRank(_ status: DeliveryStatus?) -> Int { + guard let status else { return 0 } + switch status { + case .failed: return 1 + case .sending: return 2 + case .sent: return 3 + case .partiallyDelivered: return 4 + case .delivered: return 5 + case .read: return 6 + } + } +} diff --git a/bitchat/ViewModels/ChatMediaTransferCoordinator.swift b/bitchat/ViewModels/ChatMediaTransferCoordinator.swift new file mode 100644 index 00000000..9a608052 --- /dev/null +++ b/bitchat/ViewModels/ChatMediaTransferCoordinator.swift @@ -0,0 +1,323 @@ +import BitFoundation +import BitLogger +import Foundation + +#if os(iOS) +import UIKit +#endif + +@MainActor +final class ChatMediaTransferCoordinator { + private enum MediaSendError: Error { + case encodingFailed + } + + private unowned let viewModel: ChatViewModel + + private(set) var transferIdToMessageIDs: [String: [String]] = [:] + private(set) var messageIDToTransferId: [String: String] = [:] + + init(viewModel: ChatViewModel) { + self.viewModel = viewModel + } + + func sendVoiceNote(at url: URL) { + guard viewModel.canSendMediaInCurrentContext else { + SecureLogger.info("Voice note blocked outside mesh/private context", category: .session) + try? FileManager.default.removeItem(at: url) + viewModel.addSystemMessage("Voice notes are only available in mesh chats.") + return + } + + let targetPeer = viewModel.selectedPrivateChatPeer + let message = enqueueMediaMessage( + content: "\(MimeType.Category.audio.messagePrefix)\(url.lastPathComponent)", + targetPeer: targetPeer + ) + let messageID = message.id + let transferId = makeTransferID(messageID: messageID) + + Task.detached(priority: .userInitiated) { [weak self] in + guard let self else { return } + do { + let attributes = try FileManager.default.attributesOfItem(atPath: url.path) + guard let fileSize = attributes[.size] as? Int, + fileSize <= FileTransferLimits.maxVoiceNoteBytes else { + let size = (attributes[.size] as? Int) ?? 0 + SecureLogger.warning("Voice note exceeds size limit (\(size) bytes)", category: .session) + try? FileManager.default.removeItem(at: url) + await MainActor.run { + self.handleMediaSendFailure(messageID: messageID, reason: "Voice note too large") + } + return + } + + let data = try Data(contentsOf: url) + let packet = BitchatFilePacket( + fileName: url.lastPathComponent, + fileSize: UInt64(data.count), + mimeType: "audio/mp4", + content: data + ) + guard packet.encode() != nil else { throw MediaSendError.encodingFailed } + + await MainActor.run { + self.registerTransfer(transferId: transferId, messageID: messageID) + if let peerID = targetPeer { + self.viewModel.meshService.sendFilePrivate(packet, to: peerID, transferId: transferId) + } else { + self.viewModel.meshService.sendFileBroadcast(packet, transferId: transferId) + } + } + } catch { + SecureLogger.error("Voice note send failed: \(error)", category: .session) + await MainActor.run { + self.handleMediaSendFailure(messageID: messageID, reason: "Failed to send voice note") + } + } + } + } + + #if os(iOS) + func processThenSendImage(_ image: UIImage?) { + guard let image else { return } + Task.detached { [weak self] in + guard let self else { return } + do { + let processedURL = try ImageUtils.processImage(image) + await MainActor.run { + self.sendImage(from: processedURL) + } + } catch { + SecureLogger.error("Image processing failed: \(error)", category: .session) + } + } + } + #elseif os(macOS) + func processThenSendImage(from url: URL?) { + guard let url else { return } + Task.detached { [weak self] in + guard let self else { return } + do { + let processedURL = try ImageUtils.processImage(at: url) + await MainActor.run { + self.sendImage(from: processedURL) + } + } catch { + SecureLogger.error("Image processing failed: \(error)", category: .session) + } + } + } + #endif + + func sendImage(from sourceURL: URL, cleanup: (() -> Void)? = nil) { + guard viewModel.canSendMediaInCurrentContext else { + SecureLogger.info("Image send blocked outside mesh/private context", category: .session) + cleanup?() + viewModel.addSystemMessage("Images are only available in mesh chats.") + return + } + + let targetPeer = viewModel.selectedPrivateChatPeer + + Task.detached(priority: .userInitiated) { [weak self] in + guard let self else { return } + var processedURL: URL? + do { + let outputURL = try ImageUtils.processImage(at: sourceURL) + processedURL = outputURL + let data = try Data(contentsOf: outputURL) + guard data.count <= FileTransferLimits.maxImageBytes else { + SecureLogger.warning("Processed image exceeds size limit (\(data.count) bytes)", category: .session) + await MainActor.run { + self.viewModel.addSystemMessage("Image is too large to send.") + } + try? FileManager.default.removeItem(at: outputURL) + return + } + + let packet = BitchatFilePacket( + fileName: outputURL.lastPathComponent, + fileSize: UInt64(data.count), + mimeType: "image/jpeg", + content: data + ) + guard packet.encode() != nil else { throw MediaSendError.encodingFailed } + + await MainActor.run { + let message = self.enqueueMediaMessage( + content: "\(MimeType.Category.image.messagePrefix)\(outputURL.lastPathComponent)", + targetPeer: targetPeer + ) + let messageID = message.id + let transferId = self.makeTransferID(messageID: messageID) + self.registerTransfer(transferId: transferId, messageID: messageID) + if let peerID = targetPeer { + self.viewModel.meshService.sendFilePrivate(packet, to: peerID, transferId: transferId) + } else { + self.viewModel.meshService.sendFileBroadcast(packet, transferId: transferId) + } + } + } catch { + SecureLogger.error("Image send preparation failed: \(error)", category: .session) + await MainActor.run { + self.viewModel.addSystemMessage("Failed to prepare image for sending.") + } + if let processedURL { + try? FileManager.default.removeItem(at: processedURL) + } + } + } + } + + func enqueueMediaMessage(content: String, targetPeer: PeerID?) -> BitchatMessage { + let timestamp = Date() + let message: BitchatMessage + + if let peerID = targetPeer { + message = BitchatMessage( + sender: viewModel.nickname, + content: content, + timestamp: timestamp, + isRelay: false, + originalSender: nil, + isPrivate: true, + recipientNickname: viewModel.nicknameForPeer(peerID), + senderPeerID: viewModel.meshService.myPeerID, + deliveryStatus: .sending + ) + var chats = viewModel.privateChats + chats[peerID, default: []].append(message) + viewModel.privateChats = chats + viewModel.trimMessagesIfNeeded() + } else { + let (displayName, senderPeerID) = viewModel.currentPublicSender() + message = BitchatMessage( + sender: displayName, + content: content, + timestamp: timestamp, + isRelay: false, + originalSender: nil, + isPrivate: false, + recipientNickname: nil, + senderPeerID: senderPeerID, + deliveryStatus: .sending + ) + viewModel.timelineStore.append(message, to: viewModel.activeChannel) + viewModel.refreshVisibleMessages(from: viewModel.activeChannel) + viewModel.trimMessagesIfNeeded() + } + + let key = viewModel.deduplicationService.normalizedContentKey(message.content) + viewModel.deduplicationService.recordContentKey(key, timestamp: timestamp) + viewModel.objectWillChange.send() + return message + } + + func registerTransfer(transferId: String, messageID: String) { + transferIdToMessageIDs[transferId, default: []].append(messageID) + messageIDToTransferId[messageID] = transferId + } + + func makeTransferID(messageID: String) -> String { + "\(messageID)-\(UUID().uuidString)" + } + + func clearTransferMapping(for messageID: String) { + guard let transferId = messageIDToTransferId.removeValue(forKey: messageID) else { return } + guard var queue = transferIdToMessageIDs[transferId] else { return } + + if !queue.isEmpty { + if queue.first == messageID { + queue.removeFirst() + } else if let index = queue.firstIndex(of: messageID) { + queue.remove(at: index) + } + } + + transferIdToMessageIDs[transferId] = queue.isEmpty ? nil : queue + } + + func handleMediaSendFailure(messageID: String, reason: String) { + viewModel.updateMessageDeliveryStatus(messageID, status: .failed(reason: reason)) + clearTransferMapping(for: messageID) + } + + func handleTransferEvent(_ event: TransferProgressManager.Event) { + switch event { + case .started(let id, let total): + guard let messageID = transferIdToMessageIDs[id]?.first else { return } + viewModel.updateMessageDeliveryStatus(messageID, status: .partiallyDelivered(reached: 0, total: total)) + case .updated(let id, let sent, let total): + guard let messageID = transferIdToMessageIDs[id]?.first else { return } + viewModel.updateMessageDeliveryStatus(messageID, status: .partiallyDelivered(reached: sent, total: total)) + case .completed(let id, _): + guard let messageID = transferIdToMessageIDs[id]?.first else { return } + viewModel.updateMessageDeliveryStatus(messageID, status: .sent) + clearTransferMapping(for: messageID) + case .cancelled(let id, _, _): + guard let messageID = transferIdToMessageIDs[id]?.first else { return } + clearTransferMapping(for: messageID) + viewModel.removeMessage(withID: messageID, cleanupFile: true) + } + } + + func cleanupLocalFile(forMessage message: BitchatMessage) { + let categories: [MimeType.Category] = [.audio, .image, .file] + guard let category = categories.first(where: { message.content.hasPrefix($0.messagePrefix) }), + let rawFilename = String(message.content.dropFirst(category.messagePrefix.count)).trimmedOrNilIfEmpty, + let base = try? applicationFilesDirectory(), + let safeFilename = (rawFilename as NSString).lastPathComponent.nilIfEmpty, + safeFilename != ".", + safeFilename != ".." else { + return + } + + let subdirs = categories.flatMap { ["\($0.mediaDir)/outgoing", "\($0.mediaDir)/incoming"] } + for subdir in subdirs { + let target = base.appendingPathComponent(subdir, isDirectory: true).appendingPathComponent(safeFilename) + guard target.path.hasPrefix(base.path) else { continue } + + do { + try FileManager.default.removeItem(at: target) + } catch CocoaError.fileNoSuchFile { + continue + } catch { + SecureLogger.error("Failed to cleanup \(safeFilename): \(error)", category: .session) + } + } + } + + func cancelMediaSend(messageID: String) { + if let transferId = messageIDToTransferId[messageID], + let active = transferIdToMessageIDs[transferId]?.first, + active == messageID { + viewModel.meshService.cancelTransfer(transferId) + } + clearTransferMapping(for: messageID) + viewModel.removeMessage(withID: messageID, cleanupFile: true) + } + + func deleteMediaMessage(messageID: String) { + clearTransferMapping(for: messageID) + viewModel.removeMessage(withID: messageID, cleanupFile: true) + } +} + +private extension ChatMediaTransferCoordinator { + func applicationFilesDirectory() throws -> URL { + let base = try FileManager.default.url( + for: .applicationSupportDirectory, + in: .userDomainMask, + appropriateFor: nil, + create: true + ) + let filesDirectory = base.appendingPathComponent("files", isDirectory: true) + try FileManager.default.createDirectory( + at: filesDirectory, + withIntermediateDirectories: true, + attributes: nil + ) + return filesDirectory + } +} diff --git a/bitchat/ViewModels/ChatMessageFormatter.swift b/bitchat/ViewModels/ChatMessageFormatter.swift new file mode 100644 index 00000000..21a63028 --- /dev/null +++ b/bitchat/ViewModels/ChatMessageFormatter.swift @@ -0,0 +1,503 @@ +import BitFoundation +import Foundation +import SwiftUI + +@MainActor +final class ChatMessageFormatter { + typealias Patterns = MessageFormattingEngine.Patterns + + private unowned let viewModel: ChatViewModel + private let meshPalette = MinimalDistancePalette(config: .mesh) + private let nostrPalette = MinimalDistancePalette(config: .nostr) + + init(viewModel: ChatViewModel) { + self.viewModel = viewModel + } + + func formatMessageAsText(_ message: BitchatMessage, colorScheme: ColorScheme) -> AttributedString { + let isSelf: Bool = { + if let spid = message.senderPeerID { + if case .location(let channel) = viewModel.activeChannel, spid.isGeoChat { + let myGeo: NostrIdentity? = { + if let cached = viewModel.cachedGeohashIdentity, cached.geohash == channel.geohash { + return cached.identity + } + if let identity = try? viewModel.idBridge.deriveIdentity(forGeohash: channel.geohash) { + viewModel.cachedGeohashIdentity = (channel.geohash, identity) + return identity + } + return nil + }() + if let myGeo { + return spid == PeerID(nostr: myGeo.publicKeyHex) + } + } + return spid == viewModel.meshService.myPeerID + } + if message.sender == viewModel.nickname { return true } + if message.sender.hasPrefix(viewModel.nickname + "#") { return true } + return false + }() + + let isDark = colorScheme == .dark + if let cachedText = message.getCachedFormattedText(isDark: isDark, isSelf: isSelf) { + return cachedText + } + + var result = AttributedString() + let baseColor: Color = isSelf ? .orange : peerColor(for: message, isDark: isDark) + + if message.sender != "system" { + let (baseName, suffix) = message.sender.splitSuffix() + var senderStyle = AttributeContainer() + senderStyle.foregroundColor = baseColor + let fontWeight: Font.Weight = isSelf ? .bold : .medium + senderStyle.font = .bitchatSystem(size: 14, weight: fontWeight, design: .monospaced) + if let spid = message.senderPeerID, + let url = URL(string: "bitchat://user/\(spid.toPercentEncoded())") { + senderStyle.link = url + } + + result.append(AttributedString("<@").mergingAttributes(senderStyle)) + result.append(AttributedString(baseName).mergingAttributes(senderStyle)) + if !suffix.isEmpty { + var suffixStyle = senderStyle + suffixStyle.foregroundColor = baseColor.opacity(0.6) + result.append(AttributedString(suffix).mergingAttributes(suffixStyle)) + } + result.append(AttributedString("> ").mergingAttributes(senderStyle)) + + let content = message.content + let nsContent = content as NSString + let nsLen = nsContent.length + let containsCashuEarly: Bool = { + let regex = Patterns.quickCashuPresence + return regex.numberOfMatches(in: content, options: [], range: NSRange(location: 0, length: nsLen)) > 0 + }() + + if (content.count > 4000 || content.hasVeryLongToken(threshold: 1024)) && !containsCashuEarly { + var plainStyle = AttributeContainer() + plainStyle.foregroundColor = baseColor + plainStyle.font = isSelf + ? .bitchatSystem(size: 14, weight: .bold, design: .monospaced) + : .bitchatSystem(size: 14, design: .monospaced) + result.append(AttributedString(content).mergingAttributes(plainStyle)) + } else { + let hashtagRegex = Patterns.hashtag + let mentionRegex = Patterns.mention + let cashuRegex = Patterns.cashu + let bolt11Regex = Patterns.bolt11 + let lnurlRegex = Patterns.lnurl + let lightningSchemeRegex = Patterns.lightningScheme + let detector = Patterns.linkDetector + let hasMentionsHint = content.contains("@") + let hasHashtagsHint = content.contains("#") + let hasURLHint = content.contains("://") || content.contains("www.") || content.contains("http") + let hasLightningHint = content.lowercased().contains("ln") || content.lowercased().contains("lightning:") + let hasCashuHint = content.lowercased().contains("cashu") + + let hashtagMatches = hasHashtagsHint + ? hashtagRegex.matches(in: content, options: [], range: NSRange(location: 0, length: nsLen)) + : [] + let mentionMatches = hasMentionsHint + ? mentionRegex.matches(in: content, options: [], range: NSRange(location: 0, length: nsLen)) + : [] + let urlMatches = hasURLHint + ? (detector?.matches(in: content, options: [], range: NSRange(location: 0, length: nsLen)) ?? []) + : [] + let cashuMatches = hasCashuHint + ? cashuRegex.matches(in: content, options: [], range: NSRange(location: 0, length: nsLen)) + : [] + let lightningMatches = hasLightningHint + ? lightningSchemeRegex.matches(in: content, options: [], range: NSRange(location: 0, length: nsLen)) + : [] + let bolt11Matches = hasLightningHint + ? bolt11Regex.matches(in: content, options: [], range: NSRange(location: 0, length: nsLen)) + : [] + let lnurlMatches = hasLightningHint + ? lnurlRegex.matches(in: content, options: [], range: NSRange(location: 0, length: nsLen)) + : [] + + let mentionRanges = mentionMatches.map { $0.range(at: 0) } + func overlapsMention(_ range: NSRange) -> Bool { + for mentionRange in mentionRanges where NSIntersectionRange(range, mentionRange).length > 0 { + return true + } + return false + } + + func attachedToMention(_ range: NSRange) -> Bool { + if let swiftRange = Range(range, in: content), swiftRange.lowerBound > content.startIndex { + var index = content.index(before: swiftRange.lowerBound) + while true { + let character = content[index] + if character.isWhitespace || character.isNewline { break } + if character == "@" { return true } + if index == content.startIndex { break } + index = content.index(before: index) + } + } + return false + } + + func isStandaloneHashtag(_ range: NSRange) -> Bool { + guard let swiftRange = Range(range, in: content) else { return false } + if swiftRange.lowerBound == content.startIndex { return true } + let previous = content.index(before: swiftRange.lowerBound) + return content[previous].isWhitespace || content[previous].isNewline + } + + var allMatches: [(range: NSRange, type: String)] = [] + for match in hashtagMatches + where !overlapsMention(match.range(at: 0)) + && !attachedToMention(match.range(at: 0)) + && isStandaloneHashtag(match.range(at: 0)) { + allMatches.append((match.range(at: 0), "hashtag")) + } + for match in mentionMatches { + allMatches.append((match.range(at: 0), "mention")) + } + for match in urlMatches where !overlapsMention(match.range) { + allMatches.append((match.range, "url")) + } + for match in cashuMatches where !overlapsMention(match.range(at: 0)) { + allMatches.append((match.range(at: 0), "cashu")) + } + for match in lightningMatches where !overlapsMention(match.range(at: 0)) { + allMatches.append((match.range(at: 0), "lightning")) + } + + let occupied = urlMatches.map(\.range) + lightningMatches.map { $0.range(at: 0) } + func overlapsOccupied(_ range: NSRange) -> Bool { + for occupiedRange in occupied where NSIntersectionRange(range, occupiedRange).length > 0 { + return true + } + return false + } + + for match in bolt11Matches + where !overlapsMention(match.range(at: 0)) && !overlapsOccupied(match.range(at: 0)) { + allMatches.append((match.range(at: 0), "bolt11")) + } + for match in lnurlMatches + where !overlapsMention(match.range(at: 0)) && !overlapsOccupied(match.range(at: 0)) { + allMatches.append((match.range(at: 0), "lnurl")) + } + allMatches.sort { $0.range.location < $1.range.location } + + var lastEnd = content.startIndex + let isMentioned = message.mentions?.contains(viewModel.nickname) ?? false + + for (range, type) in allMatches { + guard let swiftRange = Range(range, in: content) else { continue } + + if lastEnd < swiftRange.lowerBound { + let beforeText = String(content[lastEnd.. content.startIndex { + var index = content.index(before: swiftRange.lowerBound) + while true { + let character = content[index] + if character.isWhitespace || character.isNewline { break } + if character == "@" { return true } + if index == content.startIndex { break } + index = content.index(before: index) + } + } + return false + }() + let standalone: Bool = { + if swiftRange.lowerBound == content.startIndex { return true } + let previous = content.index(before: swiftRange.lowerBound) + return content[previous].isWhitespace || content[previous].isNewline + }() + + var tagStyle = AttributeContainer() + tagStyle.font = isSelf + ? .bitchatSystem(size: 14, weight: .bold, design: .monospaced) + : .bitchatSystem(size: 14, design: .monospaced) + tagStyle.foregroundColor = baseColor + if isGeohash && !attachedToMentionToken && standalone, + let url = URL(string: "bitchat://geohash/\(token)") { + tagStyle.link = url + tagStyle.underlineStyle = .single + } + result.append(AttributedString(matchText).mergingAttributes(tagStyle)) + } else if type == "cashu" || type == "lightning" || type == "bolt11" || type == "lnurl" { + var spacer = AttributeContainer() + spacer.foregroundColor = baseColor + spacer.font = isSelf + ? .bitchatSystem(size: 14, weight: .bold, design: .monospaced) + : .bitchatSystem(size: 14, design: .monospaced) + result.append(AttributedString(" ").mergingAttributes(spacer)) + } else { + var matchStyle = AttributeContainer() + matchStyle.font = .bitchatSystem( + size: 14, + weight: isSelf ? .bold : .semibold, + design: .monospaced + ) + if type == "url" { + matchStyle.foregroundColor = isSelf ? .orange : .blue + matchStyle.underlineStyle = .single + if let url = URL(string: matchText) { + matchStyle.link = url + } + } + result.append(AttributedString(matchText).mergingAttributes(matchStyle)) + } + + if lastEnd < swiftRange.upperBound { + lastEnd = swiftRange.upperBound + } + } + + if lastEnd < content.endIndex { + let remainingText = String(content[lastEnd...]) + var remainingStyle = AttributeContainer() + remainingStyle.foregroundColor = baseColor + remainingStyle.font = isSelf + ? .bitchatSystem(size: 14, weight: .bold, design: .monospaced) + : .bitchatSystem(size: 14, design: .monospaced) + if isMentioned { + remainingStyle.font = remainingStyle.font?.bold() + } + result.append(AttributedString(remainingText).mergingAttributes(remainingStyle)) + } + } + + let timestamp = AttributedString(" [\(message.formattedTimestamp)]") + var timestampStyle = AttributeContainer() + timestampStyle.foregroundColor = Color.gray.opacity(0.7) + timestampStyle.font = .bitchatSystem(size: 10, design: .monospaced) + result.append(timestamp.mergingAttributes(timestampStyle)) + } else { + var contentStyle = AttributeContainer() + contentStyle.foregroundColor = Color.gray + let content = AttributedString("* \(message.content) *") + contentStyle.font = .bitchatSystem(size: 12, design: .monospaced).italic() + result.append(content.mergingAttributes(contentStyle)) + + let timestamp = AttributedString(" [\(message.formattedTimestamp)]") + var timestampStyle = AttributeContainer() + timestampStyle.foregroundColor = Color.gray.opacity(0.5) + timestampStyle.font = .bitchatSystem(size: 10, design: .monospaced) + result.append(timestamp.mergingAttributes(timestampStyle)) + } + + message.setCachedFormattedText(result, isDark: isDark, isSelf: isSelf) + return result + } + + func formatMessageHeader(_ message: BitchatMessage, colorScheme: ColorScheme) -> AttributedString { + let isSelf: Bool = { + if let spid = message.senderPeerID { + if case .location(let channel) = viewModel.activeChannel, spid.id.hasPrefix("nostr:"), + let myGeo = try? viewModel.idBridge.deriveIdentity(forGeohash: channel.geohash) { + return spid == PeerID(nostr: myGeo.publicKeyHex) + } + return spid == viewModel.meshService.myPeerID + } + if message.sender == viewModel.nickname { return true } + if message.sender.hasPrefix(viewModel.nickname + "#") { return true } + return false + }() + + let isDark = colorScheme == .dark + let baseColor: Color = isSelf ? .orange : peerColor(for: message, isDark: isDark) + + if message.sender == "system" { + var style = AttributeContainer() + style.foregroundColor = baseColor + style.font = .bitchatSystem(size: 14, weight: .medium, design: .monospaced) + return AttributedString(message.sender).mergingAttributes(style) + } + + var result = AttributedString() + let (baseName, suffix) = message.sender.splitSuffix() + var senderStyle = AttributeContainer() + senderStyle.foregroundColor = baseColor + senderStyle.font = .bitchatSystem(size: 14, weight: isSelf ? .bold : .medium, design: .monospaced) + if let spid = message.senderPeerID, + let url = URL(string: "bitchat://user/\(spid.id.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? spid.id)") { + senderStyle.link = url + } + + result.append(AttributedString("<@").mergingAttributes(senderStyle)) + result.append(AttributedString(baseName).mergingAttributes(senderStyle)) + if !suffix.isEmpty { + var suffixStyle = senderStyle + suffixStyle.foregroundColor = baseColor.opacity(0.6) + result.append(AttributedString(suffix).mergingAttributes(suffixStyle)) + } + result.append(AttributedString("> ").mergingAttributes(senderStyle)) + return result + } + + func isSelfMessage(_ message: BitchatMessage) -> Bool { + if let spid = message.senderPeerID { + if case .location(let channel) = viewModel.activeChannel, spid.isGeoChat { + let myGeo: NostrIdentity? = { + if let cached = viewModel.cachedGeohashIdentity, cached.geohash == channel.geohash { + return cached.identity + } + if let identity = try? viewModel.idBridge.deriveIdentity(forGeohash: channel.geohash) { + viewModel.cachedGeohashIdentity = (channel.geohash, identity) + return identity + } + return nil + }() + if let myGeo { + return spid == PeerID(nostr: myGeo.publicKeyHex) + } + } + return spid == viewModel.meshService.myPeerID + } + if message.sender == viewModel.nickname { return true } + if message.sender.hasPrefix(viewModel.nickname + "#") { return true } + return false + } + + func senderColor(for message: BitchatMessage, isDark: Bool) -> Color { + peerColor(for: message, isDark: isDark) + } + + func peerURL(for peerID: PeerID) -> URL? { + URL(string: "bitchat://user/\(peerID.toPercentEncoded())") + } + + func colorForNostrPubkey(_ pubkeyHexLowercased: String, isDark: Bool) -> Color { + getNostrPaletteColor(for: pubkeyHexLowercased.lowercased(), isDark: isDark) + } + + func colorForMeshPeer(id peerID: PeerID, isDark: Bool) -> Color { + getPeerPaletteColor(for: peerID, isDark: isDark) + } +} + +private extension ChatMessageFormatter { + func peerColor(for message: BitchatMessage, isDark: Bool) -> Color { + if let spid = message.senderPeerID { + if spid.isGeoChat || spid.isGeoDM { + let full = viewModel.nostrKeyMapping[spid]?.lowercased() ?? spid.bare.lowercased() + return getNostrPaletteColor(for: full, isDark: isDark) + } else if spid.id.count == 16 { + return getPeerPaletteColor(for: spid, isDark: isDark) + } else { + return getPeerPaletteColor(for: PeerID(str: spid.id.lowercased()), isDark: isDark) + } + } + return Color(peerSeed: message.sender.lowercased(), isDark: isDark) + } + + func meshSeed(for peerID: PeerID) -> String { + if let full = viewModel.cachedStablePeerID(for: peerID)?.id.lowercased() { + return "noise:" + full + } + return peerID.id.lowercased() + } + + func getPeerPaletteColor(for peerID: PeerID, isDark: Bool) -> Color { + if peerID == viewModel.meshService.myPeerID { + return .orange + } + + meshPalette.ensurePalette(for: currentMeshPaletteSeeds()) + if let color = meshPalette.color(for: peerID.id, isDark: isDark) { + return color + } + return Color(peerSeed: meshSeed(for: peerID), isDark: isDark) + } + + func currentMeshPaletteSeeds() -> [String: String] { + let myID = viewModel.meshService.myPeerID + var seeds: [String: String] = [:] + for peer in viewModel.allPeers where peer.peerID != myID { + seeds[peer.peerID.id] = meshSeed(for: peer.peerID) + } + return seeds + } + + func getNostrPaletteColor(for pubkeyHexLowercased: String, isDark: Bool) -> Color { + let myHex = currentGeohashIdentityHex() + if let myHex, pubkeyHexLowercased == myHex { + return .orange + } + + nostrPalette.ensurePalette(for: currentNostrPaletteSeeds(excluding: myHex)) + if let color = nostrPalette.color(for: pubkeyHexLowercased, isDark: isDark) { + return color + } + return Color(peerSeed: "nostr:" + pubkeyHexLowercased, isDark: isDark) + } + + func currentNostrPaletteSeeds(excluding myHex: String?) -> [String: String] { + var seeds: [String: String] = [:] + let excluded = myHex ?? "" + for person in viewModel.visibleGeohashPeople() where person.id != excluded { + seeds[person.id] = "nostr:" + person.id + } + return seeds + } + + func currentGeohashIdentityHex() -> String? { + if case .location(let channel) = viewModel.activeChannel, + let identity = try? viewModel.idBridge.deriveIdentity(forGeohash: channel.geohash) { + return identity.publicKeyHex.lowercased() + } + return nil + } +} diff --git a/bitchat/ViewModels/ChatNostrCoordinator.swift b/bitchat/ViewModels/ChatNostrCoordinator.swift new file mode 100644 index 00000000..091f7c87 --- /dev/null +++ b/bitchat/ViewModels/ChatNostrCoordinator.swift @@ -0,0 +1,858 @@ +import BitFoundation +import BitLogger +import Foundation +import SwiftUI +import Tor + +final class ChatNostrCoordinator { + private unowned let viewModel: ChatViewModel + + init(viewModel: ChatViewModel) { + self.viewModel = viewModel + } + + @MainActor + func resubscribeCurrentGeohash() { + guard case .location(let channel) = viewModel.activeChannel else { return } + guard let subID = viewModel.geoSubscriptionID else { + switchLocationChannel(to: viewModel.activeChannel) + return + } + + viewModel.participantTracker.startRefreshTimer() + NostrRelayManager.shared.unsubscribe(id: subID) + let filter = NostrFilter.geohashEphemeral( + channel.geohash, + since: Date().addingTimeInterval(-TransportConfig.nostrGeohashInitialLookbackSeconds), + limit: TransportConfig.nostrGeohashInitialLimit + ) + let subRelays = GeoRelayDirectory.shared.closestRelays( + toGeohash: channel.geohash, + count: TransportConfig.nostrGeoRelayCount + ) + NostrRelayManager.shared.subscribe(filter: filter, id: subID, relayUrls: subRelays) { [weak self] event in + Task { @MainActor [weak self] in + self?.subscribeNostrEvent(event) + } + } + + if let dmSub = viewModel.geoDmSubscriptionID { + NostrRelayManager.shared.unsubscribe(id: dmSub) + viewModel.geoDmSubscriptionID = nil + } + + if let identity = try? viewModel.idBridge.deriveIdentity(forGeohash: channel.geohash) { + let dmSub = "geo-dm-\(channel.geohash)" + viewModel.geoDmSubscriptionID = dmSub + let dmFilter = NostrFilter.giftWrapsFor( + pubkey: identity.publicKeyHex, + since: Date().addingTimeInterval(-TransportConfig.nostrDMSubscribeLookbackSeconds) + ) + NostrRelayManager.shared.subscribe(filter: dmFilter, id: dmSub) { [weak self] giftWrap in + Task { @MainActor [weak self] in + self?.subscribeGiftWrap(giftWrap, id: identity) + } + } + } + } + + @MainActor + func subscribeNostrEvent(_ event: NostrEvent) { + guard event.isValidSignature() else { return } + guard (event.kind == NostrProtocol.EventKind.ephemeralEvent.rawValue + || event.kind == NostrProtocol.EventKind.geohashPresence.rawValue), + !viewModel.deduplicationService.hasProcessedNostrEvent(event.id) + else { + return + } + + viewModel.deduplicationService.recordNostrEvent(event.id) + + if let gh = viewModel.currentGeohash, + let myGeoIdentity = try? viewModel.idBridge.deriveIdentity(forGeohash: gh), + myGeoIdentity.publicKeyHex.lowercased() == event.pubkey.lowercased() { + let eventTime = Date(timeIntervalSince1970: TimeInterval(event.created_at)) + if Date().timeIntervalSince(eventTime) < 15 { + return + } + } + + if let nickTag = event.tags.first(where: { $0.first == "n" }), nickTag.count >= 2 { + let nick = nickTag[1].trimmed + viewModel.locationPresenceStore.setNickname(nick, for: event.pubkey) + } + + viewModel.nostrKeyMapping[PeerID(nostr_: event.pubkey)] = event.pubkey + viewModel.nostrKeyMapping[PeerID(nostr: event.pubkey)] = event.pubkey + viewModel.participantTracker.recordParticipant(pubkeyHex: event.pubkey) + + if event.kind == NostrProtocol.EventKind.geohashPresence.rawValue { + return + } + + let hasTeleportTag = event.tags.contains { tag in + tag.count >= 2 && tag[0].lowercased() == "t" && tag[1].lowercased() == "teleport" + } + + if hasTeleportTag { + let key = event.pubkey.lowercased() + let isSelf: Bool = { + if let gh = viewModel.currentGeohash, + let myIdentity = try? viewModel.idBridge.deriveIdentity(forGeohash: gh) { + return myIdentity.publicKeyHex.lowercased() == key + } + return false + }() + if !isSelf { + Task { @MainActor [weak viewModel] in + viewModel?.locationPresenceStore.markTeleported(key) + } + } + } + + let senderName = viewModel.displayNameForNostrPubkey(event.pubkey) + let content = event.content.trimmed + let rawTs = Date(timeIntervalSince1970: TimeInterval(event.created_at)) + let timestamp = min(rawTs, Date()) + let mentions = viewModel.parseMentions(from: content) + let message = BitchatMessage( + id: event.id, + sender: senderName, + content: content, + timestamp: timestamp, + isRelay: false, + senderPeerID: PeerID(nostr: event.pubkey), + mentions: mentions.isEmpty ? nil : mentions + ) + + Task { @MainActor [weak viewModel] in + guard let viewModel else { return } + let isBlocked = viewModel.identityManager.isNostrBlocked(pubkeyHexLowercased: event.pubkey.lowercased()) + viewModel.handlePublicMessage(message) + if !isBlocked { + viewModel.checkForMentions(message) + viewModel.sendHapticFeedback(for: message) + } + } + } + + @MainActor + func subscribeGiftWrap(_ giftWrap: NostrEvent, id: NostrIdentity) { + guard giftWrap.isValidSignature() else { return } + guard !viewModel.deduplicationService.hasProcessedNostrEvent(giftWrap.id) else { return } + viewModel.deduplicationService.recordNostrEvent(giftWrap.id) + + guard let (content, senderPubkey, rumorTs) = try? NostrProtocol.decryptPrivateMessage( + giftWrap: giftWrap, + recipientIdentity: id + ), + let packet = Self.decodeEmbeddedBitChatPacket(from: content), + packet.type == MessageType.noiseEncrypted.rawValue, + let noisePayload = NoisePayload.decode(packet.payload) + else { + return + } + + let messageTimestamp = Date(timeIntervalSince1970: TimeInterval(rumorTs)) + let convKey = PeerID(nostr_: senderPubkey) + viewModel.nostrKeyMapping[convKey] = senderPubkey + + switch noisePayload.type { + case .privateMessage: + viewModel.handlePrivateMessage( + noisePayload, + senderPubkey: senderPubkey, + convKey: convKey, + id: id, + messageTimestamp: messageTimestamp + ) + case .delivered: + viewModel.handleDelivered(noisePayload, senderPubkey: senderPubkey, convKey: convKey) + case .readReceipt: + viewModel.handleReadReceipt(noisePayload, senderPubkey: senderPubkey, convKey: convKey) + case .verifyChallenge, .verifyResponse: + break + } + } + + @MainActor + func switchLocationChannel(to channel: ChannelID) { + viewModel.publicMessagePipeline.reset() + viewModel.activeChannel = channel + viewModel.publicMessagePipeline.updateActiveChannel(channel) + + viewModel.deduplicationService.clearNostrCaches() + switch channel { + case .mesh: + viewModel.refreshVisibleMessages(from: .mesh) + let emptyMesh = viewModel.messages.filter { $0.content.trimmed.isEmpty }.count + if emptyMesh > 0 { + SecureLogger.debug("RenderGuard: mesh timeline contains \(emptyMesh) empty messages", category: .session) + } + viewModel.participantTracker.stopRefreshTimer() + viewModel.participantTracker.setActiveGeohash(nil) + viewModel.locationPresenceStore.clearTeleportedGeo() + + case .location: + viewModel.refreshVisibleMessages(from: channel) + } + + if case .location = channel { + for content in viewModel.timelineStore.drainPendingGeohashSystemMessages() { + viewModel.addPublicSystemMessage(content) + } + } + + if let sub = viewModel.geoSubscriptionID { + NostrRelayManager.shared.unsubscribe(id: sub) + viewModel.geoSubscriptionID = nil + } + if let dmSub = viewModel.geoDmSubscriptionID { + NostrRelayManager.shared.unsubscribe(id: dmSub) + viewModel.geoDmSubscriptionID = nil + } + viewModel.currentGeohash = nil + viewModel.participantTracker.setActiveGeohash(nil) + viewModel.locationPresenceStore.clearGeoNicknames() + + guard case .location(let channel) = channel else { return } + viewModel.currentGeohash = channel.geohash + viewModel.participantTracker.setActiveGeohash(channel.geohash) + + if let identity = try? viewModel.idBridge.deriveIdentity(forGeohash: channel.geohash) { + viewModel.participantTracker.recordParticipant(pubkeyHex: identity.publicKeyHex) + let hasRegional = !viewModel.locationManager.availableChannels.isEmpty + let inRegional = viewModel.locationManager.availableChannels.contains { $0.geohash == channel.geohash } + let key = identity.publicKeyHex.lowercased() + if viewModel.locationManager.teleported && hasRegional && !inRegional { + viewModel.locationPresenceStore.markTeleported(key) + SecureLogger.info( + "GeoTeleport: channel switch mark self teleported key=\(key.prefix(8))… total=\(viewModel.locationPresenceStore.teleportedGeo.count)", + category: .session + ) + } else { + viewModel.locationPresenceStore.clearTeleported(key) + } + } + + let subID = "geo-\(channel.geohash)" + viewModel.geoSubscriptionID = subID + viewModel.participantTracker.startRefreshTimer() + let ts = Date().addingTimeInterval(-TransportConfig.nostrGeohashInitialLookbackSeconds) + let filter = NostrFilter.geohashEphemeral(channel.geohash, since: ts, limit: TransportConfig.nostrGeohashInitialLimit) + let subRelays = GeoRelayDirectory.shared.closestRelays(toGeohash: channel.geohash, count: 5) + NostrRelayManager.shared.subscribe(filter: filter, id: subID, relayUrls: subRelays) { [weak self] event in + Task { @MainActor [weak self] in + self?.handleNostrEvent(event) + } + } + + subscribeToGeoChat(channel) + } + + @MainActor + func handleNostrEvent(_ event: NostrEvent) { + guard event.isValidSignature() else { return } + guard (event.kind == NostrProtocol.EventKind.ephemeralEvent.rawValue + || event.kind == NostrProtocol.EventKind.geohashPresence.rawValue) + else { + return + } + + if viewModel.deduplicationService.hasProcessedNostrEvent(event.id) { return } + viewModel.deduplicationService.recordNostrEvent(event.id) + + let tagSummary = event.tags.map { "[" + $0.joined(separator: ",") + "]" }.joined(separator: ",") + SecureLogger.debug("GeoTeleport: recv pub=\(event.pubkey.prefix(8))… tags=\(tagSummary)", category: .session) + + if viewModel.identityManager.isNostrBlocked(pubkeyHexLowercased: event.pubkey) { + return + } + + let hasTeleportTag = event.tags.contains { tag in + tag.count >= 2 && tag[0].lowercased() == "t" && tag[1].lowercased() == "teleport" + } + + let isSelf: Bool = { + if let gh = viewModel.currentGeohash, + let my = try? viewModel.idBridge.deriveIdentity(forGeohash: gh) { + return my.publicKeyHex.lowercased() == event.pubkey.lowercased() + } + return false + }() + + if hasTeleportTag, !isSelf { + let key = event.pubkey.lowercased() + Task { @MainActor [weak viewModel] in + guard let viewModel else { return } + viewModel.locationPresenceStore.markTeleported(key) + SecureLogger.info( + "GeoTeleport: mark peer teleported key=\(key.prefix(8))… total=\(viewModel.locationPresenceStore.teleportedGeo.count)", + category: .session + ) + } + } + + viewModel.participantTracker.recordParticipant(pubkeyHex: event.pubkey) + + if isSelf { + let eventTime = Date(timeIntervalSince1970: TimeInterval(event.created_at)) + if Date().timeIntervalSince(eventTime) < 15 { + return + } + } + + if let nickTag = event.tags.first(where: { $0.first == "n" }), nickTag.count >= 2 { + viewModel.locationPresenceStore.setNickname(nickTag[1].trimmed, for: event.pubkey) + } + + viewModel.nostrKeyMapping[PeerID(nostr_: event.pubkey)] = event.pubkey + viewModel.nostrKeyMapping[PeerID(nostr: event.pubkey)] = event.pubkey + + if event.kind == NostrProtocol.EventKind.geohashPresence.rawValue { + return + } + + let senderName = viewModel.displayNameForNostrPubkey(event.pubkey) + let content = event.content + + if let teleTag = event.tags.first(where: { $0.first == "t" }), + teleTag.count >= 2, + teleTag[1] == "teleport", + content.trimmed.isEmpty { + return + } + + let rawTs = Date(timeIntervalSince1970: TimeInterval(event.created_at)) + let mentions = viewModel.parseMentions(from: content) + let message = BitchatMessage( + id: event.id, + sender: senderName, + content: content, + timestamp: min(rawTs, Date()), + isRelay: false, + senderPeerID: PeerID(nostr: event.pubkey), + mentions: mentions.isEmpty ? nil : mentions + ) + + Task { @MainActor [weak viewModel] in + guard let viewModel else { return } + viewModel.handlePublicMessage(message) + viewModel.checkForMentions(message) + viewModel.sendHapticFeedback(for: message) + } + } + + @MainActor + func subscribeToGeoChat(_ channel: GeohashChannel) { + guard let identity = try? viewModel.idBridge.deriveIdentity(forGeohash: channel.geohash) else { return } + + let dmSub = "geo-dm-\(channel.geohash)" + viewModel.geoDmSubscriptionID = dmSub + if TorManager.shared.isReady { + SecureLogger.debug("GeoDM: subscribing DMs pub=\(identity.publicKeyHex.prefix(8))… sub=\(dmSub)", category: .session) + } + let dmFilter = NostrFilter.giftWrapsFor( + pubkey: identity.publicKeyHex, + since: Date().addingTimeInterval(-TransportConfig.nostrDMSubscribeLookbackSeconds) + ) + NostrRelayManager.shared.subscribe(filter: dmFilter, id: dmSub) { [weak self] giftWrap in + Task { @MainActor [weak self] in + self?.handleGiftWrap(giftWrap, id: identity) + } + } + } + + @MainActor + func handleGiftWrap(_ giftWrap: NostrEvent, id: NostrIdentity) { + guard giftWrap.isValidSignature() else { return } + if viewModel.deduplicationService.hasProcessedNostrEvent(giftWrap.id) { + return + } + viewModel.deduplicationService.recordNostrEvent(giftWrap.id) + + guard let (content, senderPubkey, rumorTs) = try? NostrProtocol.decryptPrivateMessage( + giftWrap: giftWrap, + recipientIdentity: id + ) else { + SecureLogger.warning("GeoDM: failed decrypt giftWrap id=\(giftWrap.id.prefix(8))…", category: .session) + return + } + + SecureLogger.debug( + "GeoDM: decrypted gift-wrap id=\(giftWrap.id.prefix(16))... from=\(senderPubkey.prefix(8))...", + category: .session + ) + + guard let packet = Self.decodeEmbeddedBitChatPacket(from: content), + packet.type == MessageType.noiseEncrypted.rawValue, + let payload = NoisePayload.decode(packet.payload) + else { + return + } + + let convKey = PeerID(nostr_: senderPubkey) + viewModel.nostrKeyMapping[convKey] = senderPubkey + + switch payload.type { + case .privateMessage: + let messageTimestamp = Date(timeIntervalSince1970: TimeInterval(rumorTs)) + viewModel.handlePrivateMessage( + payload, + senderPubkey: senderPubkey, + convKey: convKey, + id: id, + messageTimestamp: messageTimestamp + ) + case .delivered: + viewModel.handleDelivered(payload, senderPubkey: senderPubkey, convKey: convKey) + case .readReceipt: + viewModel.handleReadReceipt(payload, senderPubkey: senderPubkey, convKey: convKey) + case .verifyChallenge, .verifyResponse: + break + } + } + + @MainActor + func sendGeohash(context: ChatViewModel.GeoOutgoingContext) { + let channel = context.channel + let event = context.event + let identity = context.identity + + let targetRelays = GeoRelayDirectory.shared.closestRelays( + toGeohash: channel.geohash, + count: TransportConfig.nostrGeoRelayCount + ) + + if targetRelays.isEmpty { + SecureLogger.warning("Geo: no geohash relays available for \(channel.geohash); not sending", category: .session) + } else { + NostrRelayManager.shared.sendEvent(event, to: targetRelays) + } + + viewModel.participantTracker.recordParticipant(pubkeyHex: identity.publicKeyHex) + viewModel.nostrKeyMapping[PeerID(nostr: identity.publicKeyHex)] = identity.publicKeyHex + SecureLogger.debug( + "GeoTeleport: sent geo message pub=\(identity.publicKeyHex.prefix(8))… teleported=\(context.teleported)", + category: .session + ) + + let hasRegional = !viewModel.locationManager.availableChannels.isEmpty + let inRegional = viewModel.locationManager.availableChannels.contains { $0.geohash == channel.geohash } + if context.teleported && hasRegional && !inRegional { + let key = identity.publicKeyHex.lowercased() + viewModel.locationPresenceStore.markTeleported(key) + SecureLogger.info( + "GeoTeleport: mark self teleported key=\(key.prefix(8))… total=\(viewModel.locationPresenceStore.teleportedGeo.count)", + category: .session + ) + } + + viewModel.deduplicationService.recordNostrEvent(event.id) + } + + @MainActor + func beginGeohashSampling(for geohashes: [String]) { + if !TorManager.shared.isForeground() { + endGeohashSampling() + return + } + + let desired = Set(geohashes) + let current = Set(viewModel.geoSamplingSubs.values) + let toAdd = desired.subtracting(current) + let toRemove = current.subtracting(desired) + + for (subID, gh) in viewModel.geoSamplingSubs where toRemove.contains(gh) { + NostrRelayManager.shared.unsubscribe(id: subID) + viewModel.geoSamplingSubs.removeValue(forKey: subID) + } + + for gh in toAdd { + subscribe(gh) + } + } + + @MainActor + func subscribe(_ gh: String) { + let subID = "geo-sample-\(gh)" + viewModel.geoSamplingSubs[subID] = gh + let filter = NostrFilter.geohashEphemeral( + gh, + since: Date().addingTimeInterval(-TransportConfig.nostrGeohashSampleLookbackSeconds), + limit: TransportConfig.nostrGeohashSampleLimit + ) + let subRelays = GeoRelayDirectory.shared.closestRelays(toGeohash: gh, count: 5) + NostrRelayManager.shared.subscribe(filter: filter, id: subID, relayUrls: subRelays) { [weak self] event in + Task { @MainActor [weak self] in + self?.subscribeNostrEvent(event, gh: gh) + } + } + } + + @MainActor + func subscribeNostrEvent(_ event: NostrEvent, gh: String) { + guard event.isValidSignature() else { return } + guard (event.kind == NostrProtocol.EventKind.ephemeralEvent.rawValue + || event.kind == NostrProtocol.EventKind.geohashPresence.rawValue) + else { + return + } + + let existingCount = viewModel.participantTracker.participantCount(for: gh) + viewModel.participantTracker.recordParticipant(pubkeyHex: event.pubkey, geohash: gh) + + guard let content = event.content.trimmedOrNilIfEmpty else { return } + if viewModel.identityManager.isNostrBlocked(pubkeyHexLowercased: event.pubkey.lowercased()) { return } + if let my = try? viewModel.idBridge.deriveIdentity(forGeohash: gh), + my.publicKeyHex.lowercased() == event.pubkey.lowercased() { + return + } + guard existingCount == 0 else { return } + + let eventTime = Date(timeIntervalSince1970: TimeInterval(event.created_at)) + if Date().timeIntervalSince(eventTime) > 30 { return } + + #if os(iOS) + guard UIApplication.shared.applicationState == .active else { return } + if case .location(let channel) = viewModel.activeChannel, channel.geohash == gh { return } + #elseif os(macOS) + guard NSApplication.shared.isActive else { return } + if case .location(let channel) = viewModel.activeChannel, channel.geohash == gh { return } + #endif + + cooldownPerGeohash(gh, content: content, event: event) + } + + @MainActor + func cooldownPerGeohash(_ gh: String, content: String, event: NostrEvent) { + let now = Date() + let last = viewModel.lastGeoNotificationAt[gh] ?? .distantPast + if now.timeIntervalSince(last) < TransportConfig.uiGeoNotifyCooldownSeconds { return } + + let preview: String = { + let maxLen = TransportConfig.uiGeoNotifySnippetMaxLen + if content.count <= maxLen { return content } + let idx = content.index(content.startIndex, offsetBy: maxLen) + return String(content[.. Data? { + let favorites = FavoritesPersistenceService.shared.favorites.values + var npubToMatch = nostrPubkey + + if !nostrPubkey.hasPrefix("npub") { + if let pubkeyData = Data(hexString: nostrPubkey), + let encoded = try? Bech32.encode(hrp: "npub", data: pubkeyData) { + npubToMatch = encoded + } else { + SecureLogger.warning( + "⚠️ Invalid hex public key format or encoding failed: \(nostrPubkey.prefix(16))...", + category: .session + ) + } + } + + for relationship in favorites { + if let storedNostrKey = relationship.peerNostrPublicKey { + if storedNostrKey == npubToMatch { + return relationship.peerNoisePublicKey + } + if !storedNostrKey.hasPrefix("npub") && storedNostrKey == nostrPubkey { + SecureLogger.debug("✅ Found Noise key for Nostr sender (hex match)", category: .session) + return relationship.peerNoisePublicKey + } + } + } + + SecureLogger.debug( + "⚠️ No matching Noise key found for Nostr pubkey: \(nostrPubkey.prefix(16))... (tried npub: \(npubToMatch.prefix(16))...)", + category: .session + ) + return nil + } + + @MainActor + func sendDeliveryAckViaNostrEmbedded( + _ message: BitchatMessage, + wasReadBefore: Bool, + senderPubkey: String, + key: Data? + ) { + if let _ = key { + if let identity = try? viewModel.idBridge.getCurrentNostrIdentity() { + let transport = NostrTransport(keychain: viewModel.keychain, idBridge: viewModel.idBridge) + transport.senderPeerID = viewModel.meshService.myPeerID + transport.sendDeliveryAckGeohash(for: message.id, toRecipientHex: senderPubkey, from: identity) + } + } else if let identity = try? viewModel.idBridge.getCurrentNostrIdentity() { + let transport = NostrTransport(keychain: viewModel.keychain, idBridge: viewModel.idBridge) + transport.senderPeerID = viewModel.meshService.myPeerID + transport.sendDeliveryAckGeohash(for: message.id, toRecipientHex: senderPubkey, from: identity) + SecureLogger.debug( + "Sent DELIVERED ack directly to Nostr pub=\(senderPubkey.prefix(8))… for mid=\(message.id.prefix(8))…", + category: .session + ) + } + + if !wasReadBefore && viewModel.selectedPrivateChatPeer == message.senderPeerID { + if let _ = key { + if let identity = try? viewModel.idBridge.getCurrentNostrIdentity() { + let transport = NostrTransport(keychain: viewModel.keychain, idBridge: viewModel.idBridge) + transport.senderPeerID = viewModel.meshService.myPeerID + transport.sendReadReceiptGeohash(message.id, toRecipientHex: senderPubkey, from: identity) + } + } else if let identity = try? viewModel.idBridge.getCurrentNostrIdentity() { + let transport = NostrTransport(keychain: viewModel.keychain, idBridge: viewModel.idBridge) + transport.senderPeerID = viewModel.meshService.myPeerID + transport.sendReadReceiptGeohash(message.id, toRecipientHex: senderPubkey, from: identity) + SecureLogger.debug( + "Viewing chat; sent READ ack directly to Nostr pub=\(senderPubkey.prefix(8))… for mid=\(message.id.prefix(8))…", + category: .session + ) + } + } + } + + @MainActor + func handleFavoriteNotification(content: String, from nostrPubkey: String) { + guard let senderNoiseKey = findNoiseKey(for: nostrPubkey) else { return } + + let isFavorite = content.contains("FAVORITE:TRUE") + let senderNickname = content.components(separatedBy: "|").last ?? "Unknown" + + if isFavorite { + FavoritesPersistenceService.shared.addFavorite( + peerNoisePublicKey: senderNoiseKey, + peerNostrPublicKey: nostrPubkey, + peerNickname: senderNickname + ) + } + + var extractedNostrPubkey: String? + if let range = content.range(of: "NPUB:") { + let suffix = content[range.upperBound...] + let parts = suffix.components(separatedBy: "|") + if let key = parts.first { + extractedNostrPubkey = String(key) + } + } else if content.contains(":") { + let parts = content.components(separatedBy: ":") + if parts.count >= 3 { + extractedNostrPubkey = String(parts[2]) + } + } + + SecureLogger.info("📝 Received favorite notification from \(senderNickname): \(isFavorite)", category: .session) + + if isFavorite && extractedNostrPubkey != nil { + SecureLogger.info( + "💾 Storing Nostr key association for \(senderNickname): \(extractedNostrPubkey!.prefix(16))...", + category: .session + ) + FavoritesPersistenceService.shared.addFavorite( + peerNoisePublicKey: senderNoiseKey, + peerNostrPublicKey: extractedNostrPubkey, + peerNickname: senderNickname + ) + } + + NotificationService.shared.sendLocalNotification( + title: isFavorite ? "New Favorite" : "Favorite Removed", + body: "\(senderNickname) \(isFavorite ? "favorited" : "unfavorited") you", + identifier: "fav-\(UUID().uuidString)" + ) + } + + @MainActor + func sendFavoriteNotificationViaNostr(noisePublicKey: Data, isFavorite: Bool) { + guard let relationship = FavoritesPersistenceService.shared.getFavoriteStatus(for: noisePublicKey), + relationship.peerNostrPublicKey != nil else { + SecureLogger.warning("⚠️ Cannot send favorite notification - no Nostr key for peer", category: .session) + return + } + + let peerID = PeerID(hexData: noisePublicKey) + viewModel.messageRouter.sendFavoriteNotification(to: peerID, isFavorite: isFavorite) + } + + @MainActor + func nostrPubkeyForDisplayName(_ name: String) -> String? { + for person in viewModel.visibleGeohashPeople() where person.displayName == name { + return person.id + } + for (pub, nick) in viewModel.geoNicknames where nick == name { + return pub + } + return nil + } + + @MainActor + func startGeohashDM(withPubkeyHex hex: String) { + let convKey = PeerID(nostr_: hex) + viewModel.nostrKeyMapping[convKey] = hex + viewModel.startPrivateChat(with: convKey) + } + + @MainActor + func fullNostrHex(forSenderPeerID senderID: PeerID) -> String? { + viewModel.nostrKeyMapping[senderID] + } + + @MainActor + func geohashDisplayName(for convKey: PeerID) -> String { + guard let full = viewModel.nostrKeyMapping[convKey] else { + return convKey.bare + } + return viewModel.displayNameForNostrPubkey(full) + } +} + +private extension ChatNostrCoordinator { + @MainActor + static func decodeEmbeddedBitChatPacket(from content: String) -> BitchatPacket? { + guard content.hasPrefix("bitchat1:") else { return nil } + let encoded = String(content.dropFirst("bitchat1:".count)) + let maxBytes = FileTransferLimits.maxFramedFileBytes + let maxEncoded = ((maxBytes + 2) / 3) * 4 + guard encoded.count <= maxEncoded else { return nil } + guard let packetData = ChatViewModel.base64URLDecode(encoded), + packetData.count <= maxBytes + else { + return nil + } + return BitchatPacket.from(packetData) + } +} diff --git a/bitchat/ViewModels/ChatOutgoingCoordinator.swift b/bitchat/ViewModels/ChatOutgoingCoordinator.swift new file mode 100644 index 00000000..555f9fc5 --- /dev/null +++ b/bitchat/ViewModels/ChatOutgoingCoordinator.swift @@ -0,0 +1,151 @@ +import BitFoundation +import BitLogger +import Foundation + +@MainActor +final class ChatOutgoingCoordinator { + private unowned let viewModel: ChatViewModel + + init(viewModel: ChatViewModel) { + self.viewModel = viewModel + } + + func sendMessage(_ content: String) { + guard let trimmed = content.trimmedOrNilIfEmpty else { return } + + if content.hasPrefix("/") { + Task { @MainActor [weak viewModel] in + viewModel?.handleCommand(content) + } + return + } + + if viewModel.selectedPrivateChatPeer != nil { + viewModel.updatePrivateChatPeerIfNeeded() + + if let selectedPeer = viewModel.selectedPrivateChatPeer { + viewModel.sendPrivateMessage(content, to: selectedPeer) + } + return + } + + let mentions = viewModel.parseMentions(from: content) + let preparedMessage = preparePublicMessage(content: content, trimmed: trimmed, mentions: mentions) + guard let preparedMessage else { return } + + appendLocalEcho(preparedMessage.message) + routePublicMessage( + originalContent: content, + mentions: mentions, + geoContext: preparedMessage.geoContext, + messageID: preparedMessage.message.id, + timestamp: preparedMessage.message.timestamp + ) + } +} + +private extension ChatOutgoingCoordinator { + func preparePublicMessage( + content: String, + trimmed: String, + mentions: [String] + ) -> (message: BitchatMessage, geoContext: ChatViewModel.GeoOutgoingContext?)? { + var geoContext: ChatViewModel.GeoOutgoingContext? + var displaySender = viewModel.nickname + var localSenderPeerID = viewModel.meshService.myPeerID + var messageID: String? + var messageTimestamp = Date() + + switch viewModel.activeChannel { + case .mesh: + break + + case .location(let channel): + do { + let identity = try viewModel.idBridge.deriveIdentity(forGeohash: channel.geohash) + let suffix = String(identity.publicKeyHex.suffix(4)) + displaySender = viewModel.nickname + "#" + suffix + localSenderPeerID = PeerID(nostr: identity.publicKeyHex) + + let teleported = viewModel.locationManager.teleported + let event = try NostrProtocol.createEphemeralGeohashEvent( + content: trimmed, + geohash: channel.geohash, + senderIdentity: identity, + nickname: viewModel.nickname, + teleported: teleported + ) + + messageID = event.id + messageTimestamp = Date(timeIntervalSince1970: TimeInterval(event.created_at)) + geoContext = ( + channel: channel, + event: event, + identity: identity, + teleported: teleported + ) + } catch { + SecureLogger.error("❌ Failed to prepare geohash message: \(error)", category: .session) + viewModel.addSystemMessage( + String(localized: "system.location.send_failed", comment: "System message when a location channel send fails") + ) + return nil + } + } + + let message = BitchatMessage( + id: messageID, + sender: displaySender, + content: trimmed, + timestamp: messageTimestamp, + isRelay: false, + senderPeerID: localSenderPeerID, + mentions: mentions.isEmpty ? nil : mentions + ) + + return (message, geoContext) + } + + func appendLocalEcho(_ message: BitchatMessage) { + viewModel.timelineStore.append(message, to: viewModel.activeChannel) + viewModel.refreshVisibleMessages(from: viewModel.activeChannel) + + let contentKey = viewModel.deduplicationService.normalizedContentKey(message.content) + viewModel.deduplicationService.recordContentKey(contentKey, timestamp: message.timestamp) + viewModel.trimMessagesIfNeeded() + } + + func routePublicMessage( + originalContent: String, + mentions: [String], + geoContext: ChatViewModel.GeoOutgoingContext?, + messageID: String, + timestamp: Date + ) { + switch viewModel.activeChannel { + case .mesh: + viewModel.lastPublicActivityAt["mesh"] = Date() + viewModel.meshService.sendMessage( + originalContent, + mentions: mentions, + messageID: messageID, + timestamp: timestamp + ) + + case .location(let channel): + viewModel.lastPublicActivityAt["geo:\(channel.geohash)"] = Date() + + guard let geoContext, geoContext.channel.geohash == channel.geohash else { + SecureLogger.error("Geo: missing send context for \(channel.geohash)", category: .session) + viewModel.addSystemMessage( + String(localized: "system.location.send_failed", comment: "System message when a location channel send fails") + ) + return + } + + Task { @MainActor [weak viewModel] in + viewModel?.sendGeohash(context: geoContext) + } + } + } +} diff --git a/bitchat/ViewModels/ChatPeerIdentityCoordinator.swift b/bitchat/ViewModels/ChatPeerIdentityCoordinator.swift new file mode 100644 index 00000000..4bb4585d --- /dev/null +++ b/bitchat/ViewModels/ChatPeerIdentityCoordinator.swift @@ -0,0 +1,379 @@ +import BitFoundation +import BitLogger +import CoreBluetooth +import Foundation + +final class ChatPeerIdentityCoordinator { + private unowned let viewModel: ChatViewModel + + init(viewModel: ChatViewModel) { + self.viewModel = viewModel + } + + @MainActor + func openMostRelevantPrivateChat() { + let unreadSorted = viewModel.unreadPrivateMessages + .map { ($0, viewModel.privateChats[$0]?.last?.timestamp ?? Date.distantPast) } + .sorted { $0.1 > $1.1 } + if let target = unreadSorted.first?.0 { + startPrivateChat(with: target) + return + } + + let recent = viewModel.privateChats + .map { (id: $0.key, ts: $0.value.last?.timestamp ?? Date.distantPast) } + .sorted { $0.ts > $1.ts } + if let target = recent.first?.id { + startPrivateChat(with: target) + } + } + + @MainActor + func isPeerBlocked(_ peerID: PeerID) -> Bool { + viewModel.unifiedPeerService.isBlocked(peerID) + } + + @MainActor + func updatePrivateChatPeerIfNeeded() { + guard let chatFingerprint = viewModel.selectedPrivateChatFingerprint, + let currentPeerID = currentPeerID(forFingerprint: chatFingerprint) else { + return + } + + if let oldPeerID = viewModel.selectedPrivateChatPeer, oldPeerID != currentPeerID { + migrateChatState(from: oldPeerID, to: currentPeerID) + viewModel.selectedPrivateChatPeer = currentPeerID + } else if viewModel.selectedPrivateChatPeer == nil { + viewModel.selectedPrivateChatPeer = currentPeerID + } + + var unread = viewModel.unreadPrivateMessages + unread.remove(currentPeerID) + viewModel.unreadPrivateMessages = unread + } + + @MainActor + func startPrivateChat(with peerID: PeerID) { + guard peerID != viewModel.meshService.myPeerID else { return } + + let peerNickname = viewModel.meshService.peerNickname(peerID: peerID) ?? "unknown" + + if viewModel.unifiedPeerService.isBlocked(peerID) { + viewModel.addSystemMessage( + String( + format: String( + localized: "system.chat.blocked", + comment: "System message when starting chat fails because peer is blocked" + ), + locale: .current, + peerNickname + ) + ) + return + } + + if let peer = viewModel.unifiedPeerService.getPeer(by: peerID), + peer.isFavorite && !peer.theyFavoritedUs && !peer.isConnected { + viewModel.addSystemMessage( + String( + format: String( + localized: "system.chat.requires_favorite", + comment: "System message when mutual favorite requirement blocks chat" + ), + locale: .current, + peerNickname + ) + ) + return + } + + _ = viewModel.privateChatManager.consolidateMessages( + for: peerID, + peerNickname: peerNickname, + persistedReadReceipts: viewModel.sentReadReceipts + ) + + if !peerID.isGeoDM && !peerID.isGeoChat { + switch viewModel.meshService.getNoiseSessionState(for: peerID) { + case .none, .failed: + viewModel.meshService.triggerHandshake(with: peerID) + case .handshakeQueued, .handshaking, .established: + break + } + } else { + SecureLogger.debug("GeoDM: skipping mesh handshake for virtual peerID=\(peerID)", category: .session) + } + + viewModel.privateChatManager.syncReadReceiptsForSentMessages( + peerID: peerID, + nickname: viewModel.nickname, + externalReceipts: &viewModel.sentReadReceipts + ) + + if let fingerprint = getFingerprint(for: peerID) { + viewModel.peerIdentityStore.setFingerprint(fingerprint, for: peerID) + viewModel.peerIdentityStore.setSelectedPrivateChatFingerprint(fingerprint) + } else { + viewModel.peerIdentityStore.setSelectedPrivateChatFingerprint(nil) + } + viewModel.privateChatManager.startChat(with: peerID) + viewModel.synchronizePrivateConversationStore() + viewModel.synchronizeConversationSelectionStore() + viewModel.markPrivateMessagesAsRead(from: peerID) + } + + @MainActor + func endPrivateChat() { + viewModel.selectedPrivateChatPeer = nil + viewModel.peerIdentityStore.setSelectedPrivateChatFingerprint(nil) + } + + @MainActor + func handlePeerStatusUpdate() { + updatePrivateChatPeerIfNeeded() + } + + func handleFavoriteStatusChanged(_ notification: Notification) { + guard let peerPublicKey = notification.userInfo?["peerPublicKey"] as? Data else { return } + + Task { @MainActor [weak viewModel] in + guard let viewModel else { return } + + if let isKeyUpdate = notification.userInfo?["isKeyUpdate"] as? Bool, + isKeyUpdate, + let oldKey = notification.userInfo?["oldPeerPublicKey"] as? Data { + migrateNoiseKeyUpdate( + oldPeerID: PeerID(hexData: oldKey), + newPeerID: PeerID(hexData: peerPublicKey) + ) + } + + updatePrivateChatPeerIfNeeded() + + if let isFavorite = notification.userInfo?["isFavorite"] as? Bool { + let peerID = PeerID(hexData: peerPublicKey) + let action = isFavorite ? "favorited" : "unfavorited" + let peerNickname = favoriteNotificationNickname(for: peerID, peerPublicKey: peerPublicKey) + viewModel.addSystemMessage("\(peerNickname) \(action) you") + } + } + } + + @MainActor + func updateEncryptionStatusForPeers() { + for peerID in viewModel.connectedPeers { + updateEncryptionStatus(for: peerID) + } + } + + @MainActor + func updateEncryptionStatus(for peerID: PeerID) { + let noiseService = viewModel.meshService.getNoiseService() + + if noiseService.hasEstablishedSession(with: peerID) { + viewModel.peerIdentityStore.setEncryptionStatus(verifiedEncryptionStatus(for: peerID), for: peerID) + } else if noiseService.hasSession(with: peerID) { + viewModel.peerIdentityStore.setEncryptionStatus(.noiseHandshaking, for: peerID) + } else { + viewModel.peerIdentityStore.setEncryptionStatus(nil, for: peerID) + } + + invalidateEncryptionCache(for: peerID) + } + + @MainActor + func getEncryptionStatus(for peerID: PeerID) -> EncryptionStatus { + if let cachedStatus = viewModel.peerIdentityStore.cachedEncryptionStatus(for: peerID) { + return cachedStatus + } + + let hasEverEstablishedSession = getFingerprint(for: peerID) != nil + let sessionState = viewModel.meshService.getNoiseSessionState(for: peerID) + + let status: EncryptionStatus + switch sessionState { + case .established: + status = verifiedEncryptionStatus(for: peerID) + case .handshaking, .handshakeQueued: + status = hasEverEstablishedSession ? verifiedEncryptionStatus(for: peerID) : .noiseHandshaking + case .none: + status = hasEverEstablishedSession ? verifiedEncryptionStatus(for: peerID) : .noHandshake + case .failed: + status = hasEverEstablishedSession ? verifiedEncryptionStatus(for: peerID) : .none + } + + viewModel.peerIdentityStore.setCachedEncryptionStatus(status, for: peerID) + return status + } + + @MainActor + func invalidateEncryptionCache(for peerID: PeerID? = nil) { + viewModel.peerIdentityStore.invalidateEncryptionCache(for: peerID) + } + + @MainActor + func getFingerprint(for peerID: PeerID) -> String? { + viewModel.unifiedPeerService.getFingerprint(for: peerID) + } + + @MainActor + func resolveNickname(for peerID: PeerID) -> String { + guard !peerID.isEmpty else { return "unknown" } + + if !peerID.isHex { + return peerID.id + } + + if let nickname = viewModel.meshService.getPeerNicknames()[peerID] { + return nickname + } + + if let fingerprint = getFingerprint(for: peerID), + let identity = viewModel.identityManager.getSocialIdentity(for: fingerprint) { + if let petname = identity.localPetname { + return petname + } + return identity.claimedNickname + } + + let prefixLength = min(4, peerID.id.count) + let prefix = String(peerID.id.prefix(prefixLength)) + return prefix.starts(with: "anon") ? "peer\(prefix)" : "anon\(prefix)" + } + + @MainActor + func getMyFingerprint() -> String { + viewModel.meshService.getNoiseService().getIdentityFingerprint() + } + + @MainActor + func getPeerIDForNickname(_ nickname: String) -> PeerID? { + switch viewModel.activeChannel { + case .location: + if nickname.contains("#"), + let person = viewModel.publicConversationCoordinator + .visibleGeohashPeople() + .first(where: { $0.displayName == nickname }) { + let conversationKey = PeerID(nostr_: person.id) + viewModel.nostrKeyMapping[conversationKey] = person.id + return conversationKey + } + + let base = nickname + .split(separator: "#", maxSplits: 1, omittingEmptySubsequences: false) + .first + .map(String.init)? + .lowercased() ?? nickname.lowercased() + if let pubkey = viewModel.geoNicknames.first(where: { $0.value.lowercased() == base })?.key { + let conversationKey = PeerID(nostr_: pubkey) + viewModel.nostrKeyMapping[conversationKey] = pubkey + return conversationKey + } + + case .mesh: + break + } + + return viewModel.unifiedPeerService.getPeerID(for: nickname) + } + + @MainActor + func nicknameForPeer(_ peerID: PeerID) -> String { + if let name = viewModel.meshService.peerNickname(peerID: peerID) { + return name + } + if let favorite = FavoritesPersistenceService.shared.getFavoriteStatus(forPeerID: peerID), + !favorite.peerNickname.isEmpty { + return favorite.peerNickname + } + if let noiseKey = Data(hexString: peerID.id), + let favorite = FavoritesPersistenceService.shared.getFavoriteStatus(for: noiseKey), + !favorite.peerNickname.isEmpty { + return favorite.peerNickname + } + return "user" + } +} + +private extension ChatPeerIdentityCoordinator { + @MainActor + func currentPeerID(forFingerprint fingerprint: String) -> PeerID? { + for peerID in viewModel.connectedPeers where getFingerprint(for: peerID) == fingerprint { + return peerID + } + return nil + } + + @MainActor + func migrateChatState(from oldPeerID: PeerID, to newPeerID: PeerID) { + if let oldMessages = viewModel.privateChats[oldPeerID] { + var chats = viewModel.privateChats + chats[newPeerID, default: []].append(contentsOf: oldMessages) + chats[newPeerID]?.sort { $0.timestamp < $1.timestamp } + + var seenMessageIDs = Set() + chats[newPeerID] = chats[newPeerID]?.filter { message in + if seenMessageIDs.contains(message.id) { + return false + } + seenMessageIDs.insert(message.id) + return true + } + + chats.removeValue(forKey: oldPeerID) + viewModel.privateChats = chats + } + + var unread = viewModel.unreadPrivateMessages + if unread.contains(oldPeerID) { + unread.remove(oldPeerID) + unread.insert(newPeerID) + viewModel.unreadPrivateMessages = unread + } + } + + @MainActor + func migrateNoiseKeyUpdate(oldPeerID: PeerID, newPeerID: PeerID) { + if viewModel.selectedPrivateChatPeer == oldPeerID { + SecureLogger.info("📱 Updating private chat peer ID due to key change: \(oldPeerID) -> \(newPeerID)", category: .session) + } else if viewModel.privateChats[oldPeerID] != nil { + SecureLogger.debug("📱 Migrating private chat messages from \(oldPeerID) to \(newPeerID)", category: .session) + } + + migrateChatState(from: oldPeerID, to: newPeerID) + + if viewModel.selectedPrivateChatPeer == oldPeerID { + viewModel.selectedPrivateChatPeer = newPeerID + } + + if let fingerprint = viewModel.peerIdentityStore.migrateFingerprintMapping( + from: oldPeerID, + to: newPeerID, + fallback: getFingerprint(for: newPeerID) + ) { + if viewModel.selectedPrivateChatPeer == newPeerID { + viewModel.peerIdentityStore.setSelectedPrivateChatFingerprint(fingerprint) + } + } + } + + @MainActor + func favoriteNotificationNickname(for peerID: PeerID, peerPublicKey: Data) -> String { + if let nickname = viewModel.meshService.peerNickname(peerID: peerID) { + return nickname + } + if let favorite = FavoritesPersistenceService.shared.getFavoriteStatus(for: peerPublicKey) { + return favorite.peerNickname + } + return "Unknown" + } + + @MainActor + func verifiedEncryptionStatus(for peerID: PeerID) -> EncryptionStatus { + if let fingerprint = getFingerprint(for: peerID), + viewModel.peerIdentityStore.isVerified(fingerprint) { + return .noiseVerified + } + return .noiseSecured + } +} diff --git a/bitchat/ViewModels/ChatPeerListCoordinator.swift b/bitchat/ViewModels/ChatPeerListCoordinator.swift new file mode 100644 index 00000000..80a24f2b --- /dev/null +++ b/bitchat/ViewModels/ChatPeerListCoordinator.swift @@ -0,0 +1,186 @@ +import BitFoundation +import BitLogger +import Foundation + +final class ChatPeerListCoordinator: @unchecked Sendable { + private unowned let viewModel: ChatViewModel + private var recentlySeenPeers: Set = [] + private var lastNetworkNotificationTime = Date.distantPast + private var networkResetTimer: Timer? + private var networkEmptyTimer: Timer? + private let networkResetGraceSeconds = TransportConfig.networkResetGraceSeconds + + init(viewModel: ChatViewModel) { + self.viewModel = viewModel + } + + deinit { + networkResetTimer?.invalidate() + networkEmptyTimer?.invalidate() + } + + func didUpdatePeerList(_ peers: [PeerID]) { + Task { @MainActor [weak self] in + self?.handlePeerListUpdate(peers) + } + } +} + +private extension ChatPeerListCoordinator { + @MainActor + func handlePeerListUpdate(_ peers: [PeerID]) { + viewModel.isConnected = !peers.isEmpty + cleanupStaleUnreadPeerIDs() + + let meshPeers = peers.filter { peerID in + viewModel.meshService.isPeerConnected(peerID) || viewModel.meshService.isPeerReachable(peerID) + } + + handleNetworkAvailability(meshPeers) + + for peerID in peers { + viewModel.identityManager.registerEphemeralSession(peerID: peerID, handshakeState: .none) + } + + viewModel.updateEncryptionStatusForPeers() + + if viewModel.hasTrackedPrivateChatSelection { + viewModel.updatePrivateChatPeerIfNeeded() + } + } + + @MainActor + func handleNetworkAvailability(_ meshPeers: [PeerID]) { + let meshPeerSet = Set(meshPeers) + + if meshPeerSet.isEmpty { + scheduleNetworkEmptyTimer() + return + } + + invalidateNetworkEmptyTimer() + + let newPeers = meshPeerSet.subtracting(recentlySeenPeers) + guard !newPeers.isEmpty else { return } + + let cooldown = TransportConfig.networkNotificationCooldownSeconds + if Date().timeIntervalSince(lastNetworkNotificationTime) >= cooldown { + recentlySeenPeers.formUnion(newPeers) + lastNetworkNotificationTime = Date() + NotificationService.shared.sendNetworkAvailableNotification(peerCount: meshPeers.count) + SecureLogger.info( + "👥 Sent bitchatters nearby notification for \(meshPeers.count) mesh peers (new: \(newPeers.count))", + category: .session + ) + } + + scheduleNetworkResetTimer() + } + + @MainActor + func cleanupStaleUnreadPeerIDs() { + let currentPeerIDs = Set(viewModel.unifiedPeerService.peers.map(\.peerID)) + let staleIDs = viewModel.unreadPrivateMessages.subtracting(currentPeerIDs) + + guard !staleIDs.isEmpty else { + viewModel.cleanupOldReadReceipts() + return + } + + var idsToRemove: [PeerID] = [] + + for staleID in staleIDs { + if staleID.isGeoDM, let messages = viewModel.privateChats[staleID], !messages.isEmpty { + continue + } + + if staleID.isNoiseKeyHex, let messages = viewModel.privateChats[staleID], !messages.isEmpty { + continue + } + + idsToRemove.append(staleID) + viewModel.unreadPrivateMessages.remove(staleID) + } + + if !idsToRemove.isEmpty { + SecureLogger.debug("🧹 Cleaned up \(idsToRemove.count) stale unread peer IDs", category: .session) + } + + viewModel.cleanupOldReadReceipts() + } + + @MainActor + func scheduleNetworkResetTimer() { + networkResetTimer?.invalidate() + networkResetTimer = Timer.scheduledTimer(withTimeInterval: networkResetGraceSeconds, repeats: false) { [weak self] _ in + MainActor.assumeIsolated { [weak self] in + self?.handleNetworkResetTimerFired() + } + } + } + + @MainActor + func handleNetworkResetTimerFired() { + let activeMeshPeers = viewModel.meshService + .currentPeerSnapshots() + .filter { snapshot in + snapshot.isConnected || viewModel.meshService.isPeerReachable(snapshot.peerID) + } + + if activeMeshPeers.isEmpty { + recentlySeenPeers.removeAll() + SecureLogger.debug("⏱️ Network notification window reset after quiet period", category: .session) + } else { + SecureLogger.debug( + "⏱️ Skipped network notification reset; still seeing \(activeMeshPeers.count) mesh peers", + category: .session + ) + } + + networkResetTimer = nil + } + + @MainActor + func scheduleNetworkEmptyTimer() { + guard networkEmptyTimer == nil else { return } + + networkEmptyTimer = Timer.scheduledTimer( + withTimeInterval: TransportConfig.uiMeshEmptyConfirmationSeconds, + repeats: false + ) { [weak self] _ in + MainActor.assumeIsolated { [weak self] in + self?.handleNetworkEmptyTimerFired() + } + } + + SecureLogger.debug("⏳ Mesh empty — waiting before resetting notification state", category: .session) + } + + @MainActor + func invalidateNetworkEmptyTimer() { + guard networkEmptyTimer != nil else { return } + networkEmptyTimer?.invalidate() + networkEmptyTimer = nil + } + + @MainActor + func handleNetworkEmptyTimerFired() { + let activeMeshPeers = viewModel.meshService + .currentPeerSnapshots() + .filter { snapshot in + snapshot.isConnected || viewModel.meshService.isPeerReachable(snapshot.peerID) + } + + if activeMeshPeers.isEmpty { + recentlySeenPeers.removeAll() + SecureLogger.debug("⏳ Mesh empty — notification state reset after confirmation", category: .session) + } else { + SecureLogger.debug( + "⏳ Mesh empty timer cancelled; \(activeMeshPeers.count) mesh peers detected again", + category: .session + ) + } + + networkEmptyTimer = nil + } +} diff --git a/bitchat/ViewModels/ChatPrivateConversationCoordinator.swift b/bitchat/ViewModels/ChatPrivateConversationCoordinator.swift new file mode 100644 index 00000000..bd7ea131 --- /dev/null +++ b/bitchat/ViewModels/ChatPrivateConversationCoordinator.swift @@ -0,0 +1,714 @@ +import BitFoundation +import BitLogger +import Foundation + +@MainActor +final class ChatPrivateConversationCoordinator { + private unowned let viewModel: ChatViewModel + + init(viewModel: ChatViewModel) { + self.viewModel = viewModel + } + + func sendPrivateMessage(_ content: String, to peerID: PeerID) { + guard !content.isEmpty else { return } + + if viewModel.unifiedPeerService.isBlocked(peerID) { + let nickname = viewModel.meshService.peerNickname(peerID: peerID) ?? "user" + viewModel.addSystemMessage( + String( + format: String(localized: "system.dm.blocked_recipient", comment: "System message when attempting to message a blocked user"), + locale: .current, + nickname + ) + ) + return + } + + if peerID.isGeoDM { + sendGeohashDM(content, to: peerID) + return + } + + guard let noiseKey = Data(hexString: peerID.id) else { return } + let isConnected = viewModel.meshService.isPeerConnected(peerID) + let isReachable = viewModel.meshService.isPeerReachable(peerID) + let favoriteStatus = FavoritesPersistenceService.shared.getFavoriteStatus(for: noiseKey) + let isMutualFavorite = favoriteStatus?.isMutual ?? false + let hasNostrKey = favoriteStatus?.peerNostrPublicKey != nil + + var recipientNickname = viewModel.meshService.peerNickname(peerID: peerID) + if recipientNickname == nil && favoriteStatus != nil { + recipientNickname = favoriteStatus?.peerNickname + } + recipientNickname = recipientNickname ?? "user" + + let messageID = UUID().uuidString + let message = BitchatMessage( + id: messageID, + sender: viewModel.nickname, + content: content, + timestamp: Date(), + isRelay: false, + originalSender: nil, + isPrivate: true, + recipientNickname: recipientNickname, + senderPeerID: viewModel.meshService.myPeerID, + mentions: nil, + deliveryStatus: .sending + ) + + if viewModel.privateChats[peerID] == nil { + viewModel.privateChats[peerID] = [] + } + viewModel.privateChats[peerID]?.append(message) + viewModel.objectWillChange.send() + + if isConnected || isReachable || (isMutualFavorite && hasNostrKey) { + viewModel.messageRouter.sendPrivate( + content, + to: peerID, + recipientNickname: recipientNickname ?? "user", + messageID: messageID + ) + if let idx = viewModel.privateChats[peerID]?.firstIndex(where: { $0.id == messageID }) { + viewModel.privateChats[peerID]?[idx].deliveryStatus = .sent + } + } else { + if let index = viewModel.privateChats[peerID]?.firstIndex(where: { $0.id == messageID }) { + viewModel.privateChats[peerID]?[index].deliveryStatus = .failed( + reason: String(localized: "content.delivery.reason.unreachable", comment: "Failure reason when a peer is unreachable") + ) + } + let name = recipientNickname ?? "user" + viewModel.addSystemMessage( + String( + format: String(localized: "system.dm.unreachable", comment: "System message when a recipient is unreachable"), + locale: .current, + name + ) + ) + } + } + + func sendGeohashDM(_ content: String, to peerID: PeerID) { + guard case .location(let channel) = viewModel.activeChannel else { + viewModel.addSystemMessage( + String(localized: "system.location.not_in_channel", comment: "System message when attempting to send without being in a location channel") + ) + return + } + + let messageID = UUID().uuidString + let message = BitchatMessage( + id: messageID, + sender: viewModel.nickname, + content: content, + timestamp: Date(), + isRelay: false, + isPrivate: true, + recipientNickname: viewModel.nickname, + senderPeerID: viewModel.meshService.myPeerID, + deliveryStatus: .sending + ) + + if viewModel.privateChats[peerID] == nil { + viewModel.privateChats[peerID] = [] + } + + viewModel.privateChats[peerID]?.append(message) + viewModel.objectWillChange.send() + + guard let recipientHex = viewModel.nostrKeyMapping[peerID] else { + if let msgIdx = viewModel.privateChats[peerID]?.firstIndex(where: { $0.id == messageID }) { + viewModel.privateChats[peerID]?[msgIdx].deliveryStatus = .failed( + reason: String(localized: "content.delivery.reason.unknown_recipient", comment: "Failure reason when the recipient is unknown") + ) + } + return + } + + if viewModel.identityManager.isNostrBlocked(pubkeyHexLowercased: recipientHex) { + if let msgIdx = viewModel.privateChats[peerID]?.firstIndex(where: { $0.id == messageID }) { + viewModel.privateChats[peerID]?[msgIdx].deliveryStatus = .failed( + reason: String(localized: "content.delivery.reason.blocked", comment: "Failure reason when the user is blocked") + ) + } + viewModel.addSystemMessage( + String(localized: "system.dm.blocked_generic", comment: "System message when sending fails because user is blocked") + ) + return + } + + do { + let identity = try viewModel.idBridge.deriveIdentity(forGeohash: channel.geohash) + if recipientHex.lowercased() == identity.publicKeyHex.lowercased() { + if let idx = viewModel.privateChats[peerID]?.firstIndex(where: { $0.id == messageID }) { + viewModel.privateChats[peerID]?[idx].deliveryStatus = .failed( + reason: String(localized: "content.delivery.reason.self", comment: "Failure reason when attempting to message yourself") + ) + } + return + } + + SecureLogger.debug( + "GeoDM: local send mid=\(messageID.prefix(8))… to=\(recipientHex.prefix(8))… conv=\(peerID)", + category: .session + ) + let transport = NostrTransport(keychain: viewModel.keychain, idBridge: viewModel.idBridge) + transport.senderPeerID = viewModel.meshService.myPeerID + transport.sendPrivateMessageGeohash( + content: content, + toRecipientHex: recipientHex, + from: identity, + messageID: messageID + ) + if let msgIdx = viewModel.privateChats[peerID]?.firstIndex(where: { $0.id == messageID }) { + viewModel.privateChats[peerID]?[msgIdx].deliveryStatus = .sent + } + } catch { + if let idx = viewModel.privateChats[peerID]?.firstIndex(where: { $0.id == messageID }) { + viewModel.privateChats[peerID]?[idx].deliveryStatus = .failed( + reason: String(localized: "content.delivery.reason.send_error", comment: "Failure reason for a generic send error") + ) + } + } + } + + func handlePrivateMessage( + _ payload: NoisePayload, + senderPubkey: String, + convKey: PeerID, + id: NostrIdentity, + messageTimestamp: Date + ) { + guard let pm = PrivateMessagePacket.decode(from: payload.data) else { return } + let messageId = pm.messageID + + SecureLogger.info("GeoDM: recv PM <- sender=\(senderPubkey.prefix(8))… mid=\(messageId.prefix(8))…", category: .session) + + sendDeliveryAckIfNeeded(to: messageId, senderPubKey: senderPubkey, from: id) + + if viewModel.identityManager.isNostrBlocked(pubkeyHexLowercased: senderPubkey) { + return + } + + if viewModel.privateChats[convKey]?.contains(where: { $0.id == messageId }) == true { return } + for (_, arr) in viewModel.privateChats where arr.contains(where: { $0.id == messageId }) { + return + } + + let senderName = viewModel.displayNameForNostrPubkey(senderPubkey) + let message = BitchatMessage( + id: messageId, + sender: senderName, + content: pm.content, + timestamp: messageTimestamp, + isRelay: false, + isPrivate: true, + recipientNickname: viewModel.nickname, + senderPeerID: convKey, + deliveryStatus: .delivered(to: viewModel.nickname, at: Date()) + ) + + if viewModel.privateChats[convKey] == nil { + viewModel.privateChats[convKey] = [] + } + viewModel.privateChats[convKey]?.append(message) + + let isViewing = viewModel.selectedPrivateChatPeer == convKey + let wasReadBefore = viewModel.sentReadReceipts.contains(messageId) + let isRecentMessage = Date().timeIntervalSince(messageTimestamp) < 30 + let shouldMarkUnread = !wasReadBefore && !isViewing && isRecentMessage + if shouldMarkUnread { + viewModel.unreadPrivateMessages.insert(convKey) + } + + if isViewing { + sendReadReceiptIfNeeded(to: messageId, senderPubKey: senderPubkey, from: id) + } + + if !isViewing && shouldMarkUnread { + NotificationService.shared.sendPrivateMessageNotification( + from: senderName, + message: pm.content, + peerID: convKey + ) + } + + viewModel.objectWillChange.send() + } + + func handleDelivered(_ payload: NoisePayload, senderPubkey: String, convKey: PeerID) { + guard let messageID = String(data: payload.data, encoding: .utf8) else { return } + + if let idx = viewModel.privateChats[convKey]?.firstIndex(where: { $0.id == messageID }) { + viewModel.privateChats[convKey]?[idx].deliveryStatus = .delivered( + to: viewModel.displayNameForNostrPubkey(senderPubkey), + at: Date() + ) + viewModel.objectWillChange.send() + SecureLogger.info( + "GeoDM: recv DELIVERED for mid=\(messageID.prefix(8))… from=\(senderPubkey.prefix(8))…", + category: .session + ) + } else { + SecureLogger.warning("GeoDM: delivered ack for unknown mid=\(messageID.prefix(8))… conv=\(convKey)", category: .session) + } + } + + func handleReadReceipt(_ payload: NoisePayload, senderPubkey: String, convKey: PeerID) { + guard let messageID = String(data: payload.data, encoding: .utf8) else { return } + + if let idx = viewModel.privateChats[convKey]?.firstIndex(where: { $0.id == messageID }) { + viewModel.privateChats[convKey]?[idx].deliveryStatus = .read( + by: viewModel.displayNameForNostrPubkey(senderPubkey), + at: Date() + ) + viewModel.objectWillChange.send() + SecureLogger.info("GeoDM: recv READ for mid=\(messageID.prefix(8))… from=\(senderPubkey.prefix(8))…", category: .session) + } else { + SecureLogger.warning("GeoDM: read ack for unknown mid=\(messageID.prefix(8))… conv=\(convKey)", category: .session) + } + } + + func sendDeliveryAckIfNeeded(to messageId: String, senderPubKey: String, from id: NostrIdentity) { + guard !viewModel.sentGeoDeliveryAcks.contains(messageId) else { return } + let transport = NostrTransport(keychain: viewModel.keychain, idBridge: viewModel.idBridge) + transport.senderPeerID = viewModel.meshService.myPeerID + transport.sendDeliveryAckGeohash(for: messageId, toRecipientHex: senderPubKey, from: id) + viewModel.sentGeoDeliveryAcks.insert(messageId) + } + + func sendReadReceiptIfNeeded(to messageId: String, senderPubKey: String, from id: NostrIdentity) { + guard !viewModel.sentReadReceipts.contains(messageId) else { return } + let transport = NostrTransport(keychain: viewModel.keychain, idBridge: viewModel.idBridge) + transport.senderPeerID = viewModel.meshService.myPeerID + transport.sendReadReceiptGeohash(messageId, toRecipientHex: senderPubKey, from: id) + viewModel.sentReadReceipts.insert(messageId) + } + + func handlePrivateMessage( + _ payload: NoisePayload, + actualSenderNoiseKey: Data?, + senderNickname: String, + targetPeerID: PeerID, + messageTimestamp: Date, + senderPubkey: String + ) { + guard let pm = PrivateMessagePacket.decode(from: payload.data) else { return } + let messageId = pm.messageID + let messageContent = pm.content + + if messageContent.hasPrefix("[FAVORITED]") || messageContent.hasPrefix("[UNFAVORITED]") { + if let key = actualSenderNoiseKey { + handleFavoriteNotificationFromMesh( + messageContent, + from: PeerID(hexData: key), + senderNickname: senderNickname + ) + } + return + } + + if isDuplicateMessage(messageId, targetPeerID: targetPeerID) { + return + } + + let wasReadBefore = viewModel.sentReadReceipts.contains(messageId) + + var isViewingThisChat = false + if viewModel.selectedPrivateChatPeer == targetPeerID { + isViewingThisChat = true + } else if let selectedPeer = viewModel.selectedPrivateChatPeer, + let selectedPeerData = viewModel.unifiedPeerService.getPeer(by: selectedPeer), + let key = actualSenderNoiseKey, + selectedPeerData.noisePublicKey == key { + isViewingThisChat = true + } + + let isRecentMessage = Date().timeIntervalSince(messageTimestamp) < 30 + let shouldMarkAsUnread = !wasReadBefore && !isViewingThisChat && isRecentMessage + + let message = BitchatMessage( + id: messageId, + sender: senderNickname, + content: messageContent, + timestamp: messageTimestamp, + isRelay: false, + isPrivate: true, + recipientNickname: viewModel.nickname, + senderPeerID: targetPeerID, + deliveryStatus: .delivered(to: viewModel.nickname, at: Date()) + ) + + addMessageToPrivateChatsIfNeeded(message, targetPeerID: targetPeerID) + mirrorToEphemeralIfNeeded(message, targetPeerID: targetPeerID, key: actualSenderNoiseKey) + + viewModel.sendDeliveryAckViaNostrEmbedded( + message, + wasReadBefore: wasReadBefore, + senderPubkey: senderPubkey, + key: actualSenderNoiseKey + ) + + if wasReadBefore { + // No-op. + } else if isViewingThisChat { + handleViewingThisChat( + message, + targetPeerID: targetPeerID, + key: actualSenderNoiseKey, + senderPubkey: senderPubkey + ) + } else { + markAsUnreadIfNeeded( + shouldMarkAsUnread: shouldMarkAsUnread, + targetPeerID: targetPeerID, + key: actualSenderNoiseKey, + isRecentMessage: isRecentMessage, + senderNickname: senderNickname, + messageContent: messageContent + ) + } + + viewModel.objectWillChange.send() + } + + func handlePrivateMessage(_ message: BitchatMessage) { + SecureLogger.debug("📥 handlePrivateMessage called for message from \(message.sender)", category: .session) + let senderPeerID = message.senderPeerID ?? viewModel.getPeerIDForNickname(message.sender) + + guard let peerID = senderPeerID else { + SecureLogger.warning("⚠️ Could not get peer ID for sender \(message.sender)", category: .session) + return + } + + if message.content.hasPrefix("[FAVORITED]") || message.content.hasPrefix("[UNFAVORITED]") { + handleFavoriteNotificationFromMesh(message.content, from: peerID, senderNickname: message.sender) + return + } + + migratePrivateChatsIfNeeded(for: peerID, senderNickname: message.sender) + + if peerID.id.count == 16, let peer = viewModel.unifiedPeerService.getPeer(by: peerID) { + let stableKeyHex = PeerID(hexData: peer.noisePublicKey) + if stableKeyHex != peerID, + let nostrMessages = viewModel.privateChats[stableKeyHex], + !nostrMessages.isEmpty { + if viewModel.privateChats[peerID] == nil { + viewModel.privateChats[peerID] = [] + } + + let existingMessageIds = Set(viewModel.privateChats[peerID]?.map { $0.id } ?? []) + for nostrMessage in nostrMessages where !existingMessageIds.contains(nostrMessage.id) { + viewModel.privateChats[peerID]?.append(nostrMessage) + } + + viewModel.privateChats[peerID]?.sort { $0.timestamp < $1.timestamp } + viewModel.privateChats.removeValue(forKey: stableKeyHex) + + SecureLogger.info( + "📥 Consolidated \(nostrMessages.count) Nostr messages from stable key to ephemeral peer \(peerID)", + category: .session + ) + } + } + + if isDuplicateMessage(message.id, targetPeerID: peerID) { + return + } + + addMessageToPrivateChatsIfNeeded(message, targetPeerID: peerID) + let noiseKey = peerID.noiseKey ?? viewModel.unifiedPeerService.getPeer(by: peerID)?.noisePublicKey + mirrorToEphemeralIfNeeded(message, targetPeerID: peerID, key: noiseKey) + + let isViewing = viewModel.selectedPrivateChatPeer == peerID + if isViewing { + let receipt = ReadReceipt( + originalMessageID: message.id, + readerID: viewModel.meshService.myPeerID, + readerNickname: viewModel.nickname + ) + viewModel.meshService.sendReadReceipt(receipt, to: peerID) + viewModel.sentReadReceipts.insert(message.id) + } else { + viewModel.unreadPrivateMessages.insert(peerID) + NotificationService.shared.sendPrivateMessageNotification( + from: message.sender, + message: message.content, + peerID: peerID + ) + } + + viewModel.objectWillChange.send() + } + + func isDuplicateMessage(_ messageId: String, targetPeerID: PeerID) -> Bool { + if viewModel.privateChats[targetPeerID]?.contains(where: { $0.id == messageId }) == true { + return true + } + for (_, messages) in viewModel.privateChats where messages.contains(where: { $0.id == messageId }) { + return true + } + return false + } + + func addMessageToPrivateChatsIfNeeded(_ message: BitchatMessage, targetPeerID: PeerID) { + if viewModel.privateChats[targetPeerID] == nil { + viewModel.privateChats[targetPeerID] = [] + } + if let idx = viewModel.privateChats[targetPeerID]?.firstIndex(where: { $0.id == message.id }) { + viewModel.privateChats[targetPeerID]?[idx] = message + } else { + viewModel.privateChats[targetPeerID]?.append(message) + } + viewModel.privateChatManager.sanitizeChat(for: targetPeerID) + } + + func mirrorToEphemeralIfNeeded(_ message: BitchatMessage, targetPeerID: PeerID, key: Data?) { + guard let key, + let ephemeralPeerID = viewModel.unifiedPeerService.peers.first(where: { $0.noisePublicKey == key })?.peerID, + ephemeralPeerID != targetPeerID + else { + return + } + + if viewModel.privateChats[ephemeralPeerID] == nil { + viewModel.privateChats[ephemeralPeerID] = [] + } + if let idx = viewModel.privateChats[ephemeralPeerID]?.firstIndex(where: { $0.id == message.id }) { + viewModel.privateChats[ephemeralPeerID]?[idx] = message + } else { + viewModel.privateChats[ephemeralPeerID]?.append(message) + } + viewModel.privateChatManager.sanitizeChat(for: ephemeralPeerID) + } + + func handleViewingThisChat( + _ message: BitchatMessage, + targetPeerID: PeerID, + key: Data?, + senderPubkey: String + ) { + viewModel.unreadPrivateMessages.remove(targetPeerID) + if let key, + let ephemeralPeerID = viewModel.unifiedPeerService.peers.first(where: { $0.noisePublicKey == key })?.peerID { + viewModel.unreadPrivateMessages.remove(ephemeralPeerID) + } + guard !viewModel.sentReadReceipts.contains(message.id) else { return } + + if let key { + let receipt = ReadReceipt( + originalMessageID: message.id, + readerID: viewModel.meshService.myPeerID, + readerNickname: viewModel.nickname + ) + SecureLogger.debug("Viewing chat; sending READ ack for \(message.id.prefix(8))… via router", category: .session) + viewModel.messageRouter.sendReadReceipt(receipt, to: PeerID(hexData: key)) + viewModel.sentReadReceipts.insert(message.id) + } else if let identity = try? viewModel.idBridge.getCurrentNostrIdentity() { + let transport = NostrTransport(keychain: viewModel.keychain, idBridge: viewModel.idBridge) + transport.senderPeerID = viewModel.meshService.myPeerID + transport.sendReadReceiptGeohash(message.id, toRecipientHex: senderPubkey, from: identity) + viewModel.sentReadReceipts.insert(message.id) + SecureLogger.debug( + "Viewing chat; sent READ ack directly to Nostr pub=\(senderPubkey.prefix(8))… for mid=\(message.id.prefix(8))…", + category: .session + ) + } + } + + func markAsUnreadIfNeeded( + shouldMarkAsUnread: Bool, + targetPeerID: PeerID, + key: Data?, + isRecentMessage: Bool, + senderNickname: String, + messageContent: String + ) { + guard shouldMarkAsUnread else { return } + + viewModel.unreadPrivateMessages.insert(targetPeerID) + if let key, + let ephemeralPeerID = viewModel.unifiedPeerService.peers.first(where: { $0.noisePublicKey == key })?.peerID, + ephemeralPeerID != targetPeerID { + viewModel.unreadPrivateMessages.insert(ephemeralPeerID) + } + if isRecentMessage { + NotificationService.shared.sendPrivateMessageNotification( + from: senderNickname, + message: messageContent, + peerID: targetPeerID + ) + } + } + + func handleFavoriteNotificationFromMesh(_ content: String, from peerID: PeerID, senderNickname: String) { + let isFavorite = content.hasPrefix("[FAVORITED]") + let parts = content.split(separator: ":") + + var nostrPubkey: String? + if parts.count > 1 { + nostrPubkey = String(parts[1]) + SecureLogger.info("📝 Received Nostr npub in favorite notification: \(nostrPubkey ?? "none")", category: .session) + } + + let noiseKey = peerID.noiseKey ?? viewModel.unifiedPeerService.getPeer(by: peerID)?.noisePublicKey + guard let finalNoiseKey = noiseKey else { + SecureLogger.warning("⚠️ Cannot get Noise key for peer \(peerID)", category: .session) + return + } + + let prior = FavoritesPersistenceService.shared.getFavoriteStatus(for: finalNoiseKey)?.theyFavoritedUs ?? false + FavoritesPersistenceService.shared.updatePeerFavoritedUs( + peerNoisePublicKey: finalNoiseKey, + favorited: isFavorite, + peerNickname: senderNickname, + peerNostrPublicKey: nostrPubkey + ) + + if isFavorite && nostrPubkey != nil { + SecureLogger.info( + "💾 Storing Nostr key association for \(senderNickname): \(nostrPubkey!.prefix(16))...", + category: .session + ) + } + + if prior != isFavorite { + let action = isFavorite ? "favorited" : "unfavorited" + viewModel.addMeshOnlySystemMessage("\(senderNickname) \(action) you") + } + } + + func processActionMessage(_ message: BitchatMessage) -> BitchatMessage { + let isActionMessage = message.content.hasPrefix("* ") + && message.content.hasSuffix(" *") + && (message.content.contains("🫂") + || message.content.contains("🐟") + || message.content.contains("took a screenshot")) + + guard isActionMessage else { return message } + + return BitchatMessage( + id: message.id, + sender: "system", + content: String(message.content.dropFirst(2).dropLast(2)), + timestamp: message.timestamp, + isRelay: message.isRelay, + originalSender: message.originalSender, + isPrivate: message.isPrivate, + recipientNickname: message.recipientNickname, + senderPeerID: message.senderPeerID, + mentions: message.mentions, + deliveryStatus: message.deliveryStatus + ) + } + + func migratePrivateChatsIfNeeded(for peerID: PeerID, senderNickname: String) { + let currentFingerprint = viewModel.getFingerprint(for: peerID) + + if viewModel.privateChats[peerID] == nil || viewModel.privateChats[peerID]?.isEmpty == true { + var migratedMessages: [BitchatMessage] = [] + var oldPeerIDsToRemove: [PeerID] = [] + let cutoffTime = Date().addingTimeInterval(-TransportConfig.uiMigrationCutoffSeconds) + + for (oldPeerID, messages) in viewModel.privateChats where oldPeerID != peerID { + let oldFingerprint = viewModel.peerIDToPublicKeyFingerprint[oldPeerID] + let recentMessages = messages.filter { $0.timestamp > cutoffTime } + guard !recentMessages.isEmpty else { continue } + + if let currentFp = currentFingerprint, + let oldFp = oldFingerprint, + currentFp == oldFp { + migratedMessages.append(contentsOf: recentMessages) + if recentMessages.count == messages.count { + oldPeerIDsToRemove.append(oldPeerID) + } else { + SecureLogger.info( + "📦 Partially migrating \(recentMessages.count) of \(messages.count) messages from \(oldPeerID)", + category: .session + ) + } + + SecureLogger.info( + "📦 Migrating \(recentMessages.count) recent messages from old peer ID \(oldPeerID) to \(peerID) (fingerprint match)", + category: .session + ) + } else if currentFingerprint == nil || oldFingerprint == nil { + let isRelevantChat = recentMessages.contains { msg in + (msg.sender == senderNickname && msg.sender != viewModel.nickname) + || (msg.sender == viewModel.nickname && msg.recipientNickname == senderNickname) + } + + if isRelevantChat { + migratedMessages.append(contentsOf: recentMessages) + if recentMessages.count == messages.count { + oldPeerIDsToRemove.append(oldPeerID) + } + + SecureLogger.warning( + "📦 Migrating \(recentMessages.count) recent messages from old peer ID \(oldPeerID) to \(peerID) (nickname match)", + category: .session + ) + } + } + } + + if !oldPeerIDsToRemove.isEmpty { + let needsSelectedUpdate = oldPeerIDsToRemove.contains { viewModel.selectedPrivateChatPeer == $0 } + + for oldID in oldPeerIDsToRemove { + viewModel.privateChats.removeValue(forKey: oldID) + viewModel.unreadPrivateMessages.remove(oldID) + viewModel.peerIdentityStore.setFingerprint(nil, for: oldID) + } + + if needsSelectedUpdate { + viewModel.selectedPrivateChatPeer = peerID + } + } + + if !migratedMessages.isEmpty { + if viewModel.privateChats[peerID] == nil { + viewModel.privateChats[peerID] = [] + } + viewModel.privateChats[peerID]?.append(contentsOf: migratedMessages) + viewModel.privateChats[peerID]?.sort { $0.timestamp < $1.timestamp } + viewModel.privateChatManager.sanitizeChat(for: peerID) + viewModel.objectWillChange.send() + } + } + } + + func sendFavoriteNotification(to peerID: PeerID, isFavorite: Bool) { + var noiseKey: Data? + + if let hexKey = Data(hexString: peerID.id) { + noiseKey = hexKey + } else if let peer = viewModel.unifiedPeerService.getPeer(by: peerID) { + noiseKey = peer.noisePublicKey + } + + if viewModel.meshService.isPeerConnected(peerID) { + viewModel.messageRouter.sendFavoriteNotification(to: peerID, isFavorite: isFavorite) + SecureLogger.debug("📤 Sent favorite notification via BLE to \(peerID)", category: .session) + } else if let key = noiseKey { + viewModel.messageRouter.sendFavoriteNotification(to: PeerID(hexData: key), isFavorite: isFavorite) + } else { + SecureLogger.warning("⚠️ Cannot send favorite notification - peer not connected and no Nostr pubkey", category: .session) + } + } + + func isMessageBlocked(_ message: BitchatMessage) -> Bool { + if let peerID = message.senderPeerID ?? viewModel.getPeerIDForNickname(message.sender) { + if viewModel.isPeerBlocked(peerID) { return true } + if peerID.isGeoChat || peerID.isGeoDM, + let full = viewModel.nostrKeyMapping[peerID]?.lowercased(), + viewModel.identityManager.isNostrBlocked(pubkeyHexLowercased: full) { + return true + } + } + return false + } +} diff --git a/bitchat/ViewModels/ChatPublicConversationCoordinator.swift b/bitchat/ViewModels/ChatPublicConversationCoordinator.swift new file mode 100644 index 00000000..fcd1d448 --- /dev/null +++ b/bitchat/ViewModels/ChatPublicConversationCoordinator.swift @@ -0,0 +1,464 @@ +import BitFoundation +import BitLogger +import CoreBluetooth +import Foundation +import SwiftUI +#if os(iOS) +import UIKit +#endif + +@MainActor +final class ChatPublicConversationCoordinator: PublicMessagePipelineDelegate { + private unowned let viewModel: ChatViewModel + + init(viewModel: ChatViewModel) { + self.viewModel = viewModel + } + + func visibleGeohashPeople() -> [GeoPerson] { + viewModel.participantTracker.getVisiblePeople() + } + + func getVisibleGeoParticipants() -> [CommandGeoParticipant] { + visibleGeohashPeople().map { CommandGeoParticipant(id: $0.id, displayName: $0.displayName) } + } + + func geohashParticipantCount(for geohash: String) -> Int { + viewModel.participantTracker.participantCount(for: geohash) + } + + func displayNameForPubkey(_ pubkeyHex: String) -> String { + displayNameForNostrPubkey(pubkeyHex) + } + + func isBlocked(_ pubkeyHexLowercased: String) -> Bool { + viewModel.identityManager.isNostrBlocked(pubkeyHexLowercased: pubkeyHexLowercased) + } + + func isGeohashUserBlocked(pubkeyHexLowercased: String) -> Bool { + viewModel.identityManager.isNostrBlocked(pubkeyHexLowercased: pubkeyHexLowercased) + } + + func blockGeohashUser(pubkeyHexLowercased: String, displayName: String) { + let hex = pubkeyHexLowercased.lowercased() + viewModel.identityManager.setNostrBlocked(hex, isBlocked: true) + viewModel.participantTracker.removeParticipant(pubkeyHex: hex) + + if let gh = viewModel.currentGeohash { + let predicate: (BitchatMessage) -> Bool = { [unowned viewModel] message in + guard let senderPeerID = message.senderPeerID, + senderPeerID.isGeoDM || senderPeerID.isGeoChat else { + return false + } + if let full = viewModel.nostrKeyMapping[senderPeerID]?.lowercased() { + return full == hex + } + return false + } + viewModel.timelineStore.removeMessages(in: gh, where: predicate) + synchronizePublicConversationStore(forGeohash: gh) + if case .location = viewModel.activeChannel { + viewModel.messages.removeAll(where: predicate) + } + } + + let conversationPeerID = PeerID(nostr_: hex) + if viewModel.privateChats[conversationPeerID] != nil { + var privateChats = viewModel.privateChats + privateChats.removeValue(forKey: conversationPeerID) + viewModel.privateChats = privateChats + + var unread = viewModel.unreadPrivateMessages + unread.remove(conversationPeerID) + viewModel.unreadPrivateMessages = unread + } + + for (key, value) in viewModel.nostrKeyMapping where value.lowercased() == hex { + viewModel.nostrKeyMapping.removeValue(forKey: key) + } + + addSystemMessage( + String( + format: String( + localized: "system.geohash.blocked", + comment: "System message shown when a user is blocked in geohash chats" + ), + locale: .current, + displayName + ) + ) + } + + func unblockGeohashUser(pubkeyHexLowercased: String, displayName: String) { + viewModel.identityManager.setNostrBlocked(pubkeyHexLowercased, isBlocked: false) + addSystemMessage( + String( + format: String( + localized: "system.geohash.unblocked", + comment: "System message shown when a user is unblocked in geohash chats" + ), + locale: .current, + displayName + ) + ) + } + + func displayNameForNostrPubkey(_ pubkeyHex: String) -> String { + let suffix = String(pubkeyHex.suffix(4)) + if let geohash = viewModel.currentGeohash, + let myGeoIdentity = try? viewModel.idBridge.deriveIdentity(forGeohash: geohash), + myGeoIdentity.publicKeyHex.lowercased() == pubkeyHex.lowercased() { + return viewModel.nickname + "#" + suffix + } + if let nick = viewModel.geoNicknames[pubkeyHex.lowercased()], !nick.isEmpty { + return nick + "#" + suffix + } + return "anon#\(suffix)" + } + + func currentPublicSender() -> (name: String, peerID: PeerID) { + var displaySender = viewModel.nickname + var senderPeerID = viewModel.meshService.myPeerID + if case .location(let channel) = viewModel.activeChannel, + let identity = try? viewModel.idBridge.deriveIdentity(forGeohash: channel.geohash) { + let suffix = String(identity.publicKeyHex.suffix(4)) + displaySender = viewModel.nickname + "#" + suffix + senderPeerID = PeerID(nostr: identity.publicKeyHex) + } + return (displaySender, senderPeerID) + } + + func removeMessage(withID messageID: String, cleanupFile: Bool = false) { + var removedMessage: BitchatMessage? + + if let index = viewModel.messages.firstIndex(where: { $0.id == messageID }) { + removedMessage = viewModel.messages.remove(at: index) + } + + if let storeRemoved = viewModel.timelineStore.removeMessage(withID: messageID) { + removedMessage = removedMessage ?? storeRemoved + synchronizeAllPublicConversationStores() + } + + var chats = viewModel.privateChats + for (peerID, items) in chats { + let filtered = items.filter { $0.id != messageID } + if filtered.count != items.count { + if filtered.isEmpty { + chats.removeValue(forKey: peerID) + } else { + chats[peerID] = filtered + } + if removedMessage == nil { + removedMessage = items.first(where: { $0.id == messageID }) + } + } + } + viewModel.privateChats = chats + + if cleanupFile, let removedMessage { + viewModel.cleanupLocalFile(forMessage: removedMessage) + } + + viewModel.objectWillChange.send() + } + + func initializeConversationStore() { + viewModel.conversationStore.setActiveChannel(viewModel.activeChannel) + synchronizePublicConversationStore(for: viewModel.activeChannel) + viewModel.synchronizePrivateConversationStore() + viewModel.synchronizeConversationSelectionStore() + } + + func synchronizePublicConversationStore(for channel: ChannelID) { + let publicMessages = viewModel.timelineStore.messages(for: channel) + viewModel.conversationStore.replaceMessages(publicMessages, for: channel) + if channel == viewModel.activeChannel { + viewModel.conversationStore.setActiveChannel(viewModel.activeChannel) + } + } + + func synchronizePublicConversationStore(forGeohash geohash: String) { + let channel = ChannelID.location(GeohashChannel(level: .city, geohash: geohash)) + let publicMessages = viewModel.timelineStore.messages(for: channel) + viewModel.conversationStore.replaceMessages(publicMessages, for: .geohash(geohash.lowercased())) + } + + func synchronizeAllPublicConversationStores() { + synchronizePublicConversationStore(for: .mesh) + for geohash in viewModel.timelineStore.geohashKeys() { + synchronizePublicConversationStore(forGeohash: geohash) + } + } + + func refreshVisibleMessages(from channel: ChannelID? = nil) { + let target = channel ?? viewModel.activeChannel + viewModel.messages = viewModel.timelineStore.messages(for: target) + viewModel.conversationStore.replaceMessages(viewModel.messages, for: target) + if target == viewModel.activeChannel { + viewModel.conversationStore.setActiveChannel(viewModel.activeChannel) + } + } + + func clearCurrentPublicTimeline() { + viewModel.messages.removeAll() + viewModel.timelineStore.clear(channel: viewModel.activeChannel) + + Task.detached(priority: .utility) { + do { + let base = try FileManager.default.url( + for: .applicationSupportDirectory, + in: .userDomainMask, + appropriateFor: nil, + create: true + ) + let filesDir = base.appendingPathComponent("files", isDirectory: true) + let outgoingDirs = [ + filesDir.appendingPathComponent("voicenotes/outgoing", isDirectory: true), + filesDir.appendingPathComponent("images/outgoing", isDirectory: true), + filesDir.appendingPathComponent("files/outgoing", isDirectory: true) + ] + + for dir in outgoingDirs { + if FileManager.default.fileExists(atPath: dir.path) { + try? FileManager.default.removeItem(at: dir) + try? FileManager.default.createDirectory( + at: dir, + withIntermediateDirectories: true, + attributes: nil + ) + } + } + } catch { + SecureLogger.error("Failed to clear media files: \(error)", category: .session) + } + } + } + + func addSystemMessage(_ content: String, timestamp: Date = Date()) { + let systemMessage = BitchatMessage( + sender: "system", + content: content, + timestamp: timestamp, + isRelay: false + ) + viewModel.messages.append(systemMessage) + } + + func addMeshOnlySystemMessage(_ content: String) { + let systemMessage = BitchatMessage( + sender: "system", + content: content, + timestamp: Date(), + isRelay: false + ) + viewModel.timelineStore.append(systemMessage, to: .mesh) + synchronizePublicConversationStore(for: .mesh) + refreshVisibleMessages() + viewModel.trimMessagesIfNeeded() + viewModel.objectWillChange.send() + } + + func addPublicSystemMessage(_ content: String) { + let systemMessage = BitchatMessage( + sender: "system", + content: content, + timestamp: Date(), + isRelay: false + ) + viewModel.timelineStore.append(systemMessage, to: viewModel.activeChannel) + refreshVisibleMessages(from: viewModel.activeChannel) + let contentKey = viewModel.deduplicationService.normalizedContentKey(systemMessage.content) + viewModel.deduplicationService.recordContentKey(contentKey, timestamp: systemMessage.timestamp) + viewModel.trimMessagesIfNeeded() + viewModel.objectWillChange.send() + } + + func addGeohashOnlySystemMessage(_ content: String) { + if case .location = viewModel.activeChannel { + addPublicSystemMessage(content) + } else { + viewModel.timelineStore.queueGeohashSystemMessage(content) + } + } + + func sendPublicRaw(_ content: String) { + if case .location(let channel) = viewModel.activeChannel { + Task { @MainActor [weak viewModel] in + guard let viewModel else { return } + do { + let identity = try viewModel.idBridge.deriveIdentity(forGeohash: channel.geohash) + let event = try NostrProtocol.createEphemeralGeohashEvent( + content: content, + geohash: channel.geohash, + senderIdentity: identity, + nickname: viewModel.nickname, + teleported: viewModel.locationManager.teleported + ) + let targetRelays = GeoRelayDirectory.shared.closestRelays(toGeohash: channel.geohash, count: 5) + if targetRelays.isEmpty { + NostrRelayManager.shared.sendEvent(event) + } else { + NostrRelayManager.shared.sendEvent(event, to: targetRelays) + } + } catch { + SecureLogger.error("❌ Failed to send geohash raw message: \(error)", category: .session) + } + } + return + } + + viewModel.meshService.sendMessage( + content, + mentions: [], + messageID: UUID().uuidString, + timestamp: Date() + ) + } + + func handlePublicMessage(_ message: BitchatMessage) { + let finalMessage = viewModel.processActionMessage(message) + if viewModel.isMessageBlocked(finalMessage) { return } + + let isGeo = finalMessage.senderPeerID?.isGeoChat == true + let shouldRateLimit = finalMessage.sender != "system" || finalMessage.senderPeerID != nil + if shouldRateLimit { + let senderKey = normalizedSenderKey(for: finalMessage) + let contentKey = viewModel.deduplicationService.normalizedContentKey(finalMessage.content) + if !viewModel.publicRateLimiter.allow(senderKey: senderKey, contentKey: contentKey) { + return + } + } + + if finalMessage.sender != "system" && finalMessage.content.count > 16000 { return } + + if !isGeo && finalMessage.sender != "system" { + viewModel.timelineStore.append(finalMessage, to: .mesh) + synchronizePublicConversationStore(for: .mesh) + } + + if isGeo && finalMessage.sender != "system", + let geohash = viewModel.currentGeohash, + viewModel.timelineStore.appendIfAbsent(finalMessage, toGeohash: geohash) { + synchronizePublicConversationStore(forGeohash: geohash) + } + + let isSystem = finalMessage.sender == "system" + let channelMatches: Bool = { + switch viewModel.activeChannel { + case .mesh: return !isGeo || isSystem + case .location: return isGeo || isSystem + } + }() + + guard channelMatches else { return } + + if !finalMessage.content.trimmed.isEmpty, + !viewModel.messages.contains(where: { $0.id == finalMessage.id }) { + viewModel.publicMessagePipeline.enqueue(finalMessage) + } + } + + func checkForMentions(_ message: BitchatMessage) { + var myTokens: Set = [viewModel.nickname] + let meshPeers = viewModel.meshService.getPeerNicknames() + let collisions = meshPeers.values.filter { $0.hasPrefix(viewModel.nickname + "#") } + if !collisions.isEmpty { + let suffix = "#" + String(viewModel.meshService.myPeerID.id.prefix(4)) + myTokens = [viewModel.nickname + suffix] + } + let isMentioned = message.mentions?.contains(where: myTokens.contains) ?? false + + if isMentioned && message.sender != viewModel.nickname { + SecureLogger.info("🔔 Mention from \(message.sender)", category: .session) + NotificationService.shared.sendMentionNotification(from: message.sender, message: message.content) + } + } + + func sendHapticFeedback(for message: BitchatMessage) { + #if os(iOS) + guard UIApplication.shared.applicationState == .active else { return } + + var tokens: [String] = [viewModel.nickname] + switch viewModel.activeChannel { + case .location(let channel): + if let identity = try? viewModel.idBridge.deriveIdentity(forGeohash: channel.geohash) { + tokens.append(viewModel.nickname + "#" + String(identity.publicKeyHex.suffix(4))) + } + case .mesh: + break + } + + let hugsMe = tokens.contains { message.content.contains("hugs \($0)") } || message.content.contains("hugs you") + let slapsMe = tokens.contains { message.content.contains("slaps \($0) around") } || message.content.contains("slaps you around") + let isHugForMe = message.content.contains("🫂") && hugsMe + let isSlapForMe = message.content.contains("🐟") && slapsMe + + if isHugForMe && message.sender != viewModel.nickname { + let impactFeedback = UIImpactFeedbackGenerator(style: .medium) + impactFeedback.prepare() + + for i in 0..<8 { + DispatchQueue.main.asyncAfter( + deadline: .now() + Double(i) * TransportConfig.uiBatchDispatchStaggerSeconds + ) { + impactFeedback.impactOccurred() + } + } + } else if isSlapForMe && message.sender != viewModel.nickname { + let impactFeedback = UIImpactFeedbackGenerator(style: .heavy) + impactFeedback.prepare() + impactFeedback.impactOccurred() + } + #endif + } + + func pipelineCurrentMessages(_ pipeline: PublicMessagePipeline) -> [BitchatMessage] { + viewModel.messages + } + + func pipeline(_ pipeline: PublicMessagePipeline, setMessages messages: [BitchatMessage]) { + viewModel.messages = messages + } + + func pipeline(_ pipeline: PublicMessagePipeline, normalizeContent content: String) -> String { + viewModel.deduplicationService.normalizedContentKey(content) + } + + func pipeline(_ pipeline: PublicMessagePipeline, contentTimestampForKey key: String) -> Date? { + viewModel.deduplicationService.contentTimestamp(forKey: key) + } + + func pipeline(_ pipeline: PublicMessagePipeline, recordContentKey key: String, timestamp: Date) { + viewModel.deduplicationService.recordContentKey(key, timestamp: timestamp) + } + + func pipelineTrimMessages(_ pipeline: PublicMessagePipeline) { + viewModel.trimMessagesIfNeeded() + } + + func pipelinePrewarmMessage(_ pipeline: PublicMessagePipeline, message: BitchatMessage) { + _ = viewModel.formatMessageAsText(message, colorScheme: viewModel.currentColorScheme) + } + + func pipelineSetBatchingState(_ pipeline: PublicMessagePipeline, isBatching: Bool) { + viewModel.isBatchingPublic = isBatching + } +} + +private extension ChatPublicConversationCoordinator { + func normalizedSenderKey(for message: BitchatMessage) -> String { + if let senderPeerID = message.senderPeerID { + if senderPeerID.isGeoChat || senderPeerID.isGeoDM { + let full = (viewModel.nostrKeyMapping[senderPeerID] ?? senderPeerID.bare).lowercased() + return "nostr:" + full + } else if senderPeerID.id.count == 16, + let full = viewModel.cachedStablePeerID(for: senderPeerID)?.id.lowercased() { + return "noise:" + full + } else { + return "mesh:" + senderPeerID.id.lowercased() + } + } + return "name:" + message.sender.lowercased() + } +} diff --git a/bitchat/ViewModels/ChatTransportEventCoordinator.swift b/bitchat/ViewModels/ChatTransportEventCoordinator.swift new file mode 100644 index 00000000..028942b2 --- /dev/null +++ b/bitchat/ViewModels/ChatTransportEventCoordinator.swift @@ -0,0 +1,280 @@ +import BitFoundation +import BitLogger +import Foundation + +final class ChatTransportEventCoordinator { + private unowned let viewModel: ChatViewModel + + init(viewModel: ChatViewModel) { + self.viewModel = viewModel + } + + func didReceiveMessage(_ message: BitchatMessage) { + runOnMain { viewModel in + guard !viewModel.isMessageBlocked(message) else { return } + guard !message.content.trimmed.isEmpty || message.isPrivate else { return } + + if message.isPrivate { + viewModel.handlePrivateMessage(message) + } else { + viewModel.handlePublicMessage(message) + } + + viewModel.checkForMentions(message) + viewModel.sendHapticFeedback(for: message) + } + } + + func didReceivePublicMessage( + from peerID: PeerID, + nickname: String, + content: String, + timestamp: Date, + messageID: String? + ) { + runOnMain { viewModel in + let normalized = content.trimmed + let mentions = viewModel.parseMentions(from: normalized) + let message = BitchatMessage( + id: messageID, + sender: nickname, + content: normalized, + timestamp: timestamp, + isRelay: false, + originalSender: nil, + isPrivate: false, + recipientNickname: nil, + senderPeerID: peerID, + mentions: mentions.isEmpty ? nil : mentions + ) + + viewModel.handlePublicMessage(message) + viewModel.checkForMentions(message) + viewModel.sendHapticFeedback(for: message) + } + } + + func didReceiveNoisePayload( + from peerID: PeerID, + type: NoisePayloadType, + payload: Data, + timestamp: Date + ) { + runOnMain { [self] viewModel in + handleNoisePayload( + from: peerID, + type: type, + payload: payload, + timestamp: timestamp, + in: viewModel + ) + } + } + + func didConnectToPeer(_ peerID: PeerID) { + SecureLogger.debug("🤝 Peer connected: \(peerID)", category: .session) + + runOnMain { viewModel in + viewModel.isConnected = true + viewModel.identityManager.registerEphemeralSession(peerID: peerID, handshakeState: .none) + viewModel.objectWillChange.send() + + if let peer = viewModel.unifiedPeerService.getPeer(by: peerID) { + let stablePeerID = PeerID(hexData: peer.noisePublicKey) + viewModel.cacheStablePeerID(stablePeerID, for: peerID) + } + + viewModel.messageRouter.flushOutbox(for: peerID) + } + } + + func didDisconnectFromPeer(_ peerID: PeerID) { + SecureLogger.debug("👋 Peer disconnected: \(peerID)", category: .session) + + runOnMain { viewModel in + viewModel.identityManager.removeEphemeralSession(peerID: peerID) + + var stablePeerID = viewModel.cachedStablePeerID(for: peerID) + if stablePeerID == nil, + let key = viewModel.meshService.getNoiseService().getPeerPublicKeyData(peerID) { + let derivedPeerID = PeerID(hexData: key) + viewModel.cacheStablePeerID(derivedPeerID, for: peerID) + stablePeerID = derivedPeerID + } + + if let currentPeerID = viewModel.selectedPrivateChatPeer, + currentPeerID == peerID, + let stablePeerID { + self.migrateSelectedConversationIfNeeded( + from: peerID, + to: stablePeerID, + in: viewModel + ) + } + + if let messages = viewModel.privateChats[peerID] { + for message in messages where message.senderPeerID == peerID { + viewModel.sentReadReceipts.remove(message.id) + } + } + + viewModel.objectWillChange.send() + } + } +} + +private extension ChatTransportEventCoordinator { + func runOnMain(_ action: @escaping @MainActor (ChatViewModel) -> Void) { + Task { @MainActor [weak viewModel = self.viewModel] in + guard let viewModel else { return } + action(viewModel) + } + } + + @MainActor + func migrateSelectedConversationIfNeeded( + from shortPeerID: PeerID, + to stablePeerID: PeerID, + in viewModel: ChatViewModel + ) { + if let messages = viewModel.privateChats[shortPeerID] { + if viewModel.privateChats[stablePeerID] == nil { + viewModel.privateChats[stablePeerID] = [] + } + + let existingIDs = Set(viewModel.privateChats[stablePeerID]?.map(\.id) ?? []) + for message in messages where !existingIDs.contains(message.id) { + let migrated = BitchatMessage( + id: message.id, + sender: message.sender, + content: message.content, + timestamp: message.timestamp, + isRelay: message.isRelay, + originalSender: message.originalSender, + isPrivate: message.isPrivate, + recipientNickname: message.recipientNickname, + senderPeerID: message.senderPeerID == viewModel.meshService.myPeerID + ? viewModel.meshService.myPeerID + : stablePeerID, + mentions: message.mentions, + deliveryStatus: message.deliveryStatus + ) + viewModel.privateChats[stablePeerID]?.append(migrated) + } + + viewModel.privateChats[stablePeerID]?.sort { $0.timestamp < $1.timestamp } + viewModel.privateChats.removeValue(forKey: shortPeerID) + } + + if viewModel.unreadPrivateMessages.contains(shortPeerID) { + viewModel.unreadPrivateMessages.remove(shortPeerID) + viewModel.unreadPrivateMessages.insert(stablePeerID) + } + + viewModel.selectedPrivateChatPeer = stablePeerID + } + + @MainActor + func handleNoisePayload( + from peerID: PeerID, + type: NoisePayloadType, + payload: Data, + timestamp: Date, + in viewModel: ChatViewModel + ) { + switch type { + case .privateMessage: + guard let packet = PrivateMessagePacket.decode(from: payload) else { return } + + guard !viewModel.isPeerBlocked(peerID) else { + SecureLogger.debug("🚫 Ignoring Noise payload from blocked peer: \(peerID)", category: .security) + return + } + + let senderName = viewModel.unifiedPeerService.getPeer(by: peerID)?.nickname ?? "Unknown" + let mentions = viewModel.parseMentions(from: packet.content) + let message = BitchatMessage( + id: packet.messageID, + sender: senderName, + content: packet.content, + timestamp: timestamp, + isRelay: false, + originalSender: nil, + isPrivate: true, + recipientNickname: viewModel.nickname, + senderPeerID: peerID, + mentions: mentions.isEmpty ? nil : mentions + ) + viewModel.handlePrivateMessage(message) + viewModel.meshService.sendDeliveryAck(for: packet.messageID, to: peerID) + + case .delivered: + guard let messageID = String(data: payload, encoding: .utf8), + let name = viewModel.unifiedPeerService.getPeer(by: peerID)?.nickname, + let (foundPeerID, index) = findMessageIndex( + for: messageID, + peerID: peerID, + in: viewModel + ) else { return } + + if case .read = viewModel.privateChats[foundPeerID]?[index].deliveryStatus { return } + + viewModel.privateChats[foundPeerID]?[index].deliveryStatus = .delivered(to: name, at: Date()) + viewModel.objectWillChange.send() + + case .readReceipt: + guard let messageID = String(data: payload, encoding: .utf8), + let name = viewModel.unifiedPeerService.getPeer(by: peerID)?.nickname, + let (foundPeerID, index) = findMessageIndex( + for: messageID, + peerID: peerID, + in: viewModel + ), + let messages = viewModel.privateChats[foundPeerID], + index < messages.count else { return } + + messages[index].deliveryStatus = .read(by: name, at: Date()) + viewModel.privateChats[foundPeerID] = messages + viewModel.privateChatManager.objectWillChange.send() + viewModel.objectWillChange.send() + + case .verifyChallenge: + viewModel.verificationCoordinator.handleVerifyChallengePayload(from: peerID, payload: payload) + + case .verifyResponse: + viewModel.verificationCoordinator.handleVerifyResponsePayload(from: peerID, payload: payload) + } + } + + @MainActor + func findMessageIndex( + for messageID: String, + peerID: PeerID, + in viewModel: ChatViewModel + ) -> (peerID: PeerID, index: Int)? { + if let messages = viewModel.privateChats[peerID], + let index = messages.firstIndex(where: { $0.id == messageID }) { + return (peerID, index) + } + + if peerID.bare.count == 16, + let peer = viewModel.unifiedPeerService.getPeer(by: peerID), + !peer.noisePublicKey.isEmpty { + let longID = PeerID(hexData: peer.noisePublicKey) + if let messages = viewModel.privateChats[longID], + let index = messages.firstIndex(where: { $0.id == messageID }) { + return (longID, index) + } + } + + if peerID.bare.count == 64 { + let shortID = peerID.toShort() + if let messages = viewModel.privateChats[shortID], + let index = messages.firstIndex(where: { $0.id == messageID }) { + return (shortID, index) + } + } + + return nil + } +} diff --git a/bitchat/ViewModels/ChatVerificationCoordinator.swift b/bitchat/ViewModels/ChatVerificationCoordinator.swift new file mode 100644 index 00000000..af95b7b2 --- /dev/null +++ b/bitchat/ViewModels/ChatVerificationCoordinator.swift @@ -0,0 +1,251 @@ +import BitFoundation +import BitLogger +import Foundation +import Security + +@MainActor +final class ChatVerificationCoordinator { + struct PendingVerification { + let noiseKeyHex: String + let signKeyHex: String + let nonceA: Data + let startedAt: Date + var sent: Bool + } + + private unowned let viewModel: ChatViewModel + private var pendingQRVerifications: [PeerID: PendingVerification] = [:] + private var lastVerifyNonceByPeer: [PeerID: Data] = [:] + private var lastInboundVerifyChallengeAt: [String: Date] = [:] + private var lastMutualToastAt: [String: Date] = [:] + + init(viewModel: ChatViewModel) { + self.viewModel = viewModel + } + + func verifyFingerprint(for peerID: PeerID) { + guard let fingerprint = viewModel.getFingerprint(for: peerID) else { return } + + viewModel.identityManager.setVerified(fingerprint: fingerprint, verified: true) + viewModel.saveIdentityState() + viewModel.peerIdentityStore.setVerified(fingerprint, verified: true) + viewModel.updateEncryptionStatus(for: peerID) + } + + func unverifyFingerprint(for peerID: PeerID) { + guard let fingerprint = viewModel.getFingerprint(for: peerID) else { return } + viewModel.identityManager.setVerified(fingerprint: fingerprint, verified: false) + viewModel.saveIdentityState() + viewModel.peerIdentityStore.setVerified(fingerprint, verified: false) + viewModel.updateEncryptionStatus(for: peerID) + } + + func loadVerifiedFingerprints() { + viewModel.peerIdentityStore.setVerifiedFingerprints(viewModel.identityManager.getVerifiedFingerprints()) + let sample = Array(viewModel.peerIdentityStore.verifiedFingerprints.prefix(TransportConfig.uiFingerprintSampleCount)) + .map { $0.prefix(8) } + .joined(separator: ", ") + SecureLogger.info("🔐 Verified loaded: \(viewModel.peerIdentityStore.verifiedFingerprints.count) [\(sample)]", category: .security) + + let offlineFavorites = viewModel.unifiedPeerService.favorites.filter { !$0.isConnected } + for favorite in offlineFavorites { + let fingerprint = viewModel.unifiedPeerService.getFingerprint(for: favorite.peerID) + let isVerified = fingerprint.flatMap { viewModel.peerIdentityStore.isVerified($0) } ?? false + let shortFingerprint = fingerprint?.prefix(8) ?? "nil" + SecureLogger.info( + "⭐️ Favorite offline: \(favorite.nickname) fp=\(shortFingerprint) verified=\(isVerified)", + category: .security + ) + } + + viewModel.invalidateEncryptionCache() + viewModel.objectWillChange.send() + } + + func setupNoiseCallbacks() { + let noiseService = viewModel.meshService.getNoiseService() + + noiseService.onPeerAuthenticated = { [weak self] peerID, fingerprint in + DispatchQueue.main.async { + guard let self else { return } + + SecureLogger.debug("🔐 Authenticated: \(peerID)", category: .security) + + if self.viewModel.peerIdentityStore.isVerified(fingerprint) { + self.viewModel.peerIdentityStore.setEncryptionStatus(.noiseVerified, for: peerID) + } else { + self.viewModel.peerIdentityStore.setEncryptionStatus(.noiseSecured, for: peerID) + } + + self.viewModel.invalidateEncryptionCache(for: peerID) + + if self.viewModel.cachedStablePeerID(for: peerID) == nil, + let keyData = self.viewModel.meshService.getNoiseService().getPeerPublicKeyData(peerID) { + let stablePeerID = PeerID(hexData: keyData) + self.viewModel.cacheStablePeerID(stablePeerID, for: peerID) + SecureLogger.debug( + "🗺️ Mapped short peerID to Noise key for header continuity: \(peerID) -> \(stablePeerID.id.prefix(8))…", + category: .session + ) + } + + if var pending = self.pendingQRVerifications[peerID], pending.sent == false { + self.viewModel.meshService.sendVerifyChallenge( + to: peerID, + noiseKeyHex: pending.noiseKeyHex, + nonceA: pending.nonceA + ) + pending.sent = true + self.pendingQRVerifications[peerID] = pending + SecureLogger.debug("📤 Sent deferred verify challenge to \(peerID) after handshake", category: .security) + } + } + } + + noiseService.onHandshakeRequired = { [weak self] peerID in + DispatchQueue.main.async { + guard let self else { return } + self.viewModel.peerIdentityStore.setEncryptionStatus(.noiseHandshaking, for: peerID) + self.viewModel.invalidateEncryptionCache(for: peerID) + } + } + } + + func beginQRVerification(with qr: VerificationService.VerificationQR) -> Bool { + let targetNoise = qr.noiseKeyHex.lowercased() + guard let peer = viewModel.unifiedPeerService.peers.first(where: { + $0.noisePublicKey.hexEncodedString().lowercased() == targetNoise + }) else { + return false + } + + let peerID = peer.peerID + if pendingQRVerifications[peerID] != nil { + return true + } + + var nonce = Data(count: 16) + _ = nonce.withUnsafeMutableBytes { SecRandomCopyBytes(kSecRandomDefault, 16, $0.baseAddress!) } + var pending = PendingVerification( + noiseKeyHex: qr.noiseKeyHex, + signKeyHex: qr.signKeyHex, + nonceA: nonce, + startedAt: Date(), + sent: false + ) + pendingQRVerifications[peerID] = pending + + let noise = viewModel.meshService.getNoiseService() + if noise.hasEstablishedSession(with: peerID) { + viewModel.meshService.sendVerifyChallenge(to: peerID, noiseKeyHex: qr.noiseKeyHex, nonceA: nonce) + pending.sent = true + pendingQRVerifications[peerID] = pending + } else { + viewModel.meshService.triggerHandshake(with: peerID) + } + + return true + } + + func handleVerifyChallengePayload(from peerID: PeerID, payload: Data) { + guard let challenge = VerificationService.shared.parseVerifyChallenge(payload) else { return } + + let myNoiseHex = viewModel.meshService + .getNoiseService() + .getStaticPublicKeyData() + .hexEncodedString() + .lowercased() + guard challenge.noiseKeyHex.lowercased() == myNoiseHex else { return } + guard lastVerifyNonceByPeer[peerID] != challenge.nonceA else { return } + + lastVerifyNonceByPeer[peerID] = challenge.nonceA + + if let fingerprint = viewModel.getFingerprint(for: peerID) { + lastInboundVerifyChallengeAt[fingerprint] = Date() + + if viewModel.peerIdentityStore.isVerified(fingerprint) { + maybeSendMutualVerificationNotification( + fingerprint: fingerprint, + peerID: peerID, + title: "Mutual verification", + bodyName: viewModel.unifiedPeerService.getPeer(by: peerID)?.nickname + ?? viewModel.resolveNickname(for: peerID), + notificationPrefix: "verify-mutual" + ) + } + } + + viewModel.meshService.sendVerifyResponse( + to: peerID, + noiseKeyHex: challenge.noiseKeyHex, + nonceA: challenge.nonceA + ) + } + + func handleVerifyResponsePayload(from peerID: PeerID, payload: Data) { + guard let response = VerificationService.shared.parseVerifyResponse(payload), + let pending = pendingQRVerifications[peerID], + response.noiseKeyHex.lowercased() == pending.noiseKeyHex.lowercased(), + response.nonceA == pending.nonceA else { return } + + let isValid = VerificationService.shared.verifyResponseSignature( + noiseKeyHex: response.noiseKeyHex, + nonceA: response.nonceA, + signature: response.signature, + signerPublicKeyHex: pending.signKeyHex + ) + guard isValid else { return } + + pendingQRVerifications.removeValue(forKey: peerID) + + guard let fingerprint = viewModel.getFingerprint(for: peerID) else { return } + + let shortFingerprint = fingerprint.prefix(8) + SecureLogger.info("🔐 Marking verified fingerprint: \(shortFingerprint)", category: .security) + viewModel.identityManager.setVerified(fingerprint: fingerprint, verified: true) + viewModel.saveIdentityState() + viewModel.peerIdentityStore.setVerified(fingerprint, verified: true) + + let peerName = viewModel.unifiedPeerService.getPeer(by: peerID)?.nickname + ?? viewModel.resolveNickname(for: peerID) + NotificationService.shared.sendLocalNotification( + title: "Verified", + body: "You verified \(peerName)", + identifier: "verify-success-\(peerID)-\(UUID().uuidString)" + ) + + if let challengeTime = lastInboundVerifyChallengeAt[fingerprint], + Date().timeIntervalSince(challengeTime) < 600 { + maybeSendMutualVerificationNotification( + fingerprint: fingerprint, + peerID: peerID, + title: "Mutual verification", + bodyName: peerName, + notificationPrefix: "verify-mutual" + ) + } + + viewModel.updateEncryptionStatus(for: peerID) + } +} + +private extension ChatVerificationCoordinator { + func maybeSendMutualVerificationNotification( + fingerprint: String, + peerID: PeerID, + title: String, + bodyName: String, + notificationPrefix: String + ) { + let now = Date() + let lastToast = lastMutualToastAt[fingerprint] ?? .distantPast + guard now.timeIntervalSince(lastToast) > 60 else { return } + + lastMutualToastAt[fingerprint] = now + NotificationService.shared.sendLocalNotification( + title: title, + body: "You and \(bodyName) verified each other", + identifier: "\(notificationPrefix)-\(peerID)-\(UUID().uuidString)" + ) + } +} diff --git a/bitchat/ViewModels/ChatViewModel.swift b/bitchat/ViewModels/ChatViewModel.swift index a6f5b23c..77e418f2 100644 --- a/bitchat/ViewModels/ChatViewModel.swift +++ b/bitchat/ViewModels/ChatViewModel.swift @@ -110,39 +110,19 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, CommandContextProv } } - private var publicRateLimiter = MessageRateLimiter( + var publicRateLimiter = MessageRateLimiter( senderCapacity: TransportConfig.uiSenderRateBucketCapacity, senderRefillPerSec: TransportConfig.uiSenderRateBucketRefillPerSec, contentCapacity: TransportConfig.uiContentRateBucketCapacity, contentRefillPerSec: TransportConfig.uiContentRateBucketRefillPerSec ) - @MainActor - private func normalizedSenderKey(for message: BitchatMessage) -> String { - if let spid = message.senderPeerID { - if spid.isGeoChat || spid.isGeoDM { - let full = (nostrKeyMapping[spid] ?? spid.bare).lowercased() - return "nostr:" + full - } else if spid.id.count == 16, let full = getNoiseKeyForShortID(spid)?.id.lowercased() { - return "noise:" + full - } else { - return "mesh:" + spid.id.lowercased() - } - } - return "name:" + message.sender.lowercased() - } - // MARK: - Published Properties @Published var messages: [BitchatMessage] = [] @Published var currentColorScheme: ColorScheme = .light private let maxMessages = TransportConfig.meshTimelineCap // Maximum messages before oldest are removed @Published var isConnected = false - private var recentlySeenPeers: Set = [] - private var lastNetworkNotificationTime = Date.distantPast - private var networkResetTimer: Timer? = nil - private var networkEmptyTimer: Timer? = nil - private let networkResetGraceSeconds: TimeInterval = TransportConfig.networkResetGraceSeconds // avoid refiring on short drops/reconnects @Published var nickname: String = "" { didSet { // Trim whitespace whenever nickname is set; whitespace-only becomes "" @@ -166,6 +146,19 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, CommandContextProv let unifiedPeerService: UnifiedPeerService let autocompleteService: AutocompleteService let deduplicationService: MessageDeduplicationService // internal for test access + private lazy var outgoingCoordinator = ChatOutgoingCoordinator(viewModel: self) + private lazy var lifecycleCoordinator = ChatLifecycleCoordinator(viewModel: self) + private lazy var transportEventCoordinator = ChatTransportEventCoordinator(viewModel: self) + private lazy var peerListCoordinator = ChatPeerListCoordinator(viewModel: self) + private lazy var messageFormatter = ChatMessageFormatter(viewModel: self) + lazy var peerIdentityCoordinator = ChatPeerIdentityCoordinator(viewModel: self) + lazy var deliveryCoordinator = ChatDeliveryCoordinator(viewModel: self) + lazy var composerCoordinator = ChatComposerCoordinator(viewModel: self) + lazy var publicConversationCoordinator = ChatPublicConversationCoordinator(viewModel: self) + lazy var privateConversationCoordinator = ChatPrivateConversationCoordinator(viewModel: self) + lazy var nostrCoordinator = ChatNostrCoordinator(viewModel: self) + lazy var mediaTransferCoordinator = ChatMediaTransferCoordinator(viewModel: self) + lazy var verificationCoordinator = ChatVerificationCoordinator(viewModel: self) // Computed properties for compatibility @MainActor @@ -173,7 +166,10 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, CommandContextProv @Published var allPeers: [BitchatPeer] = [] var privateChats: [PeerID: [BitchatMessage]] { get { privateChatManager.privateChats } - set { privateChatManager.privateChats = newValue } + set { + privateChatManager.privateChats = newValue + synchronizePrivateConversationStore() + } } var selectedPrivateChatPeer: PeerID? { get { privateChatManager.selectedPeer } @@ -183,11 +179,16 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, CommandContextProv } else { privateChatManager.endChat() } + synchronizePrivateConversationStore() + synchronizeConversationSelectionStore() } } var unreadPrivateMessages: Set { get { privateChatManager.unreadMessages } - set { privateChatManager.unreadMessages = newValue } + set { + privateChatManager.unreadMessages = newValue + synchronizePrivateConversationStore() + } } /// Check if there are any unread messages (including from temporary Nostr peer IDs) @@ -199,38 +200,28 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, CommandContextProv /// Prefers the most recently active unread conversation, otherwise the most recent PM. @MainActor func openMostRelevantPrivateChat() { - // Pick most recent unread by last message timestamp - let unreadSorted = unreadPrivateMessages - .map { ($0, privateChats[$0]?.last?.timestamp ?? Date.distantPast) } - .sorted { $0.1 > $1.1 } - if let target = unreadSorted.first?.0 { - startPrivateChat(with: target) - return - } - // Otherwise pick most recent private chat overall - let recent = privateChats - .map { (id: $0.key, ts: $0.value.last?.timestamp ?? Date.distantPast) } - .sorted { $0.ts > $1.ts } - if let target = recent.first?.id { - startPrivateChat(with: target) - } + peerIdentityCoordinator.openMostRelevantPrivateChat() } // - var peerIDToPublicKeyFingerprint: [PeerID: String] = [:] - private var selectedPrivateChatFingerprint: String? = nil - // Map stable short peer IDs (16-hex) to full Noise public key hex (64-hex) for session continuity - private var shortIDToNoiseKey: [PeerID: PeerID] = [:] + var peerIDToPublicKeyFingerprint: [PeerID: String] { + get { peerIdentityStore.peerFingerprintsByPeerID } + set { peerIdentityStore.replaceFingerprintMappings(newValue) } + } + var selectedPrivateChatFingerprint: String? { + get { peerIdentityStore.selectedPrivateChatFingerprint } + set { peerIdentityStore.setSelectedPrivateChatFingerprint(newValue) } + } // Resolve full Noise key for a peer's short ID (used by UI header rendering) @MainActor private func getNoiseKeyForShortID(_ shortPeerID: PeerID) -> PeerID? { - if let mapped = shortIDToNoiseKey[shortPeerID] { return mapped } + if let mapped = peerIdentityStore.stablePeerID(forShortID: shortPeerID) { return mapped } // Fallback: derive from active Noise session if available if shortPeerID.id.count == 16, let key = meshService.getNoiseService().getPeerPublicKeyData(shortPeerID) { let stable = PeerID(hexData: key) - shortIDToNoiseKey[shortPeerID] = stable + peerIdentityStore.setStablePeerID(stable, forShortID: shortPeerID) return stable } return nil @@ -245,12 +236,27 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, CommandContextProv return match.peerID } // Also search cache mapping - if let pair = shortIDToNoiseKey.first(where: { $0.value == fullNoiseKeyHex }) { - return pair.key + if let shortPeerID = peerIdentityStore.shortPeerID(forStablePeerID: fullNoiseKeyHex) { + return shortPeerID } return fullNoiseKeyHex } - private var peerIndex: [PeerID: BitchatPeer] = [:] + + @MainActor + func cacheStablePeerID(_ stablePeerID: PeerID, for shortPeerID: PeerID) { + peerIdentityStore.setStablePeerID(stablePeerID, forShortID: shortPeerID) + } + + @MainActor + func cachedStablePeerID(for shortPeerID: PeerID) -> PeerID? { + peerIdentityStore.stablePeerID(forShortID: shortPeerID) + } + + var hasTrackedPrivateChatSelection: Bool { + selectedPrivateChatFingerprint != nil + } + + var peerIndex: [PeerID: BitchatPeer] = [:] // MARK: - Autocomplete Properties @@ -259,26 +265,44 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, CommandContextProv @Published var autocompleteRange: NSRange? = nil @Published var selectedAutocompleteIndex: Int = 0 - // Temporary property to fix compilation - @Published var showPasswordPrompt = false - // MARK: - Services and Storage let meshService: Transport let idBridge: NostrIdentityBridge let identityManager: SecureIdentityStateManagerProtocol + let conversationStore: ConversationStore + let identityResolver: IdentityResolver + let peerIdentityStore: PeerIdentityStore + let locationPresenceStore: LocationPresenceStore + let locationManager: LocationChannelManager var nostrRelayManager: NostrRelayManager? private let userDefaults = UserDefaults.standard let keychain: KeychainManagerProtocol private let nicknameKey = "bitchat.nickname" // Location channel state (macOS supports manual geohash selection) - @Published var activeChannel: ChannelID = .mesh + var activeChannel: ChannelID { + get { conversationStore.activeChannel } + set { + guard conversationStore.activeChannel != newValue else { return } + publicMessagePipeline.updateActiveChannel(newValue) + conversationStore.setActiveChannel(newValue) + synchronizePublicConversationStore(for: newValue) + synchronizeConversationSelectionStore() + objectWillChange.send() + } + } var geoSubscriptionID: String? = nil var geoDmSubscriptionID: String? = nil - var currentGeohash: String? = nil + var currentGeohash: String? { + get { locationPresenceStore.currentGeohash } + set { locationPresenceStore.setCurrentGeohash(newValue) } + } var cachedGeohashIdentity: (geohash: String, identity: NostrIdentity)? = nil // Cache current geohash identity - var geoNicknames: [String: String] = [:] // pubkeyHex(lowercased) -> nickname + var geoNicknames: [String: String] { + get { locationPresenceStore.geoNicknames } + set { locationPresenceStore.replaceGeoNicknames(newValue) } + } // pubkeyHex(lowercased) -> nickname // Show Tor status once per app launch var torStatusAnnounced = false // Track whether a Tor restart is pending so we only announce @@ -290,9 +314,6 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, CommandContextProv // MARK: - Caches - // Caches for expensive computations - private var encryptionStatusCache: [PeerID: EncryptionStatus] = [:] - // MARK: - Social Features (Delegated to PeerStateManager) @MainActor @@ -303,30 +324,47 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, CommandContextProv // MARK: - Encryption and Security // Noise Protocol encryption status - @Published var peerEncryptionStatus: [PeerID: EncryptionStatus] = [:] - @Published var verifiedFingerprints: Set = [] // Set of verified fingerprints - @Published var showingFingerprintFor: PeerID? = nil // Currently showing fingerprint sheet for peer + var peerEncryptionStatus: [PeerID: EncryptionStatus] { + get { peerIdentityStore.encryptionStatuses } + set { peerIdentityStore.replaceEncryptionStatuses(newValue) } + } + var verifiedFingerprints: Set { + get { peerIdentityStore.verifiedFingerprints } + set { peerIdentityStore.setVerifiedFingerprints(newValue) } + } // Set of verified fingerprints // Bluetooth state management @Published var showBluetoothAlert = false @Published var bluetoothAlertMessage = "" @Published var bluetoothState: CBManagerState = .unknown - // Presentation state for privacy gating - @Published var isLocationChannelsSheetPresented: Bool = false - @Published var isAppInfoPresented: Bool = false - @Published var showScreenshotPrivacyWarning: Bool = false - var timelineStore = PublicTimelineStore( meshCap: TransportConfig.meshTimelineCap, geohashCap: TransportConfig.geoTimelineCap ) + + private func performDeliveryUpdate(_ update: @escaping @MainActor (ChatDeliveryCoordinator) -> Void) { + if Thread.isMainThread { + MainActor.assumeIsolated { + update(deliveryCoordinator) + } + return + } + + Task { @MainActor [weak self] in + guard let self else { return } + update(self.deliveryCoordinator) + } + } // Channel activity tracking for background nudges var lastPublicActivityAt: [String: Date] = [:] // channelKey -> last activity time // Geohash participant tracker let participantTracker = GeohashParticipantTracker(activityCutoff: -TransportConfig.uiRecentCutoffFiveMinutesSeconds) // Participants who indicated they teleported (by tag in their events) - @Published var teleportedGeo: Set = [] // lowercased pubkey hex + var teleportedGeo: Set { + get { locationPresenceStore.teleportedGeo } + set { locationPresenceStore.replaceTeleportedGeo(newValue) } + } // lowercased pubkey hex // Sampling subscriptions for multiple geohashes (when channel sheet is open) var geoSamplingSubs: [String: String] = [:] // subID -> geohash var lastGeoNotificationAt: [String: Date] = [:] // geohash -> last notify time @@ -334,30 +372,19 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, CommandContextProv // MARK: - Message Delivery Tracking - // Delivery tracking var cancellables = Set() - var transferIdToMessageIDs: [String: [String]] = [:] - var messageIDToTransferId: [String: String] = [:] - // MARK: - QR Verification (pending state) - private struct PendingVerification { - let noiseKeyHex: String - let signKeyHex: String - let nonceA: Data - let startedAt: Date - var sent: Bool + var transferIdToMessageIDs: [String: [String]] { + mediaTransferCoordinator.transferIdToMessageIDs + } + + var messageIDToTransferId: [String: String] { + mediaTransferCoordinator.messageIDToTransferId } - private var pendingQRVerifications: [PeerID: PendingVerification] = [:] - // Last handled challenge nonce per peer to avoid duplicate responses - private var lastVerifyNonceByPeer: [PeerID: Data] = [:] - // Track when we last received a verify challenge from a peer (fingerprint-keyed) - private var lastInboundVerifyChallengeAt: [String: Date] = [:] // key: fingerprint - // Throttle mutual verification toasts per fingerprint - private var lastMutualToastAt: [String: Date] = [:] // key: fingerprint // MARK: - Public message batching (UI perf) let publicMessagePipeline: PublicMessagePipeline - @Published private(set) var isBatchingPublic: Bool = false + @Published var isBatchingPublic: Bool = false // Track sent read receipts to avoid duplicates (persisted across launches) // Note: Persistence happens automatically in didSet, no lifecycle observers needed @@ -375,14 +402,11 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, CommandContextProv } } - // Throttle verification response toasts per peer to avoid spam - var lastVerifyToastAt: [String: Date] = [:] - // Track which GeoDM messages we've already sent a delivery ACK for (by messageID) var sentGeoDeliveryAcks: Set = [] // Track app startup phase to prevent marking old messages as unread - private var isStartupPhase = true + var isStartupPhase = true // Announce Tor initial readiness once per launch to avoid duplicates var torInitialReadyAnnounced: Bool = false @@ -395,13 +419,25 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, CommandContextProv convenience init( keychain: KeychainManagerProtocol, idBridge: NostrIdentityBridge, - identityManager: SecureIdentityStateManagerProtocol + identityManager: SecureIdentityStateManagerProtocol, + conversationStore: ConversationStore? = nil, + identityResolver: IdentityResolver? = nil, + peerIdentityStore: PeerIdentityStore? = nil, + locationPresenceStore: LocationPresenceStore? = nil, + locationManager: LocationChannelManager = .shared ) { + let conversationStore = conversationStore ?? ConversationStore() + let identityResolver = identityResolver ?? IdentityResolver() self.init( keychain: keychain, idBridge: idBridge, identityManager: identityManager, - transport: BLEService(keychain: keychain, idBridge: idBridge, identityManager: identityManager) + transport: BLEService(keychain: keychain, idBridge: idBridge, identityManager: identityManager), + conversationStore: conversationStore, + identityResolver: identityResolver, + peerIdentityStore: peerIdentityStore ?? PeerIdentityStore(), + locationPresenceStore: locationPresenceStore ?? LocationPresenceStore(), + locationManager: locationManager ) } @@ -412,325 +448,44 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, CommandContextProv keychain: KeychainManagerProtocol, idBridge: NostrIdentityBridge, identityManager: SecureIdentityStateManagerProtocol, - transport: Transport + transport: Transport, + conversationStore: ConversationStore? = nil, + identityResolver: IdentityResolver? = nil, + peerIdentityStore: PeerIdentityStore? = nil, + locationPresenceStore: LocationPresenceStore? = nil, + locationManager: LocationChannelManager = .shared ) { + let conversationStore = conversationStore ?? ConversationStore() + let identityResolver = identityResolver ?? IdentityResolver() + let peerIdentityStore = peerIdentityStore ?? PeerIdentityStore() + let locationPresenceStore = locationPresenceStore ?? LocationPresenceStore() + let services = ChatViewModelServiceBundle( + keychain: keychain, + idBridge: idBridge, + identityManager: identityManager, + meshService: transport + ) + self.keychain = keychain self.idBridge = idBridge self.identityManager = identityManager + self.conversationStore = conversationStore + self.identityResolver = identityResolver + self.peerIdentityStore = peerIdentityStore + self.locationPresenceStore = locationPresenceStore + self.locationManager = locationManager self.meshService = transport - self.publicMessagePipeline = PublicMessagePipeline() - - // Load persisted read receipts - if let data = UserDefaults.standard.data(forKey: "sentReadReceipts"), - let receipts = try? JSONDecoder().decode([String].self, from: data) { - self.sentReadReceipts = Set(receipts) - // Successfully loaded read receipts - } else { - // No persisted read receipts found - } - - // Initialize services - self.commandProcessor = CommandProcessor(identityManager: identityManager) - self.privateChatManager = PrivateChatManager(meshService: meshService) - self.unifiedPeerService = UnifiedPeerService(meshService: meshService, idBridge: idBridge, identityManager: identityManager) - let nostrTransport = NostrTransport(keychain: keychain, idBridge: idBridge) - nostrTransport.senderPeerID = meshService.myPeerID - self.messageRouter = MessageRouter(transports: [meshService, nostrTransport]) - // Route receipts from PrivateChatManager through MessageRouter - self.privateChatManager.messageRouter = self.messageRouter - // Allow PrivateChatManager to look up peer info for message consolidation - self.privateChatManager.unifiedPeerService = self.unifiedPeerService - // Allow UnifiedPeerService to route favorite notifications via mesh/Nostr - self.unifiedPeerService.messageRouter = self.messageRouter - self.autocompleteService = AutocompleteService() - self.deduplicationService = MessageDeduplicationService() + self.commandProcessor = services.commandProcessor + self.messageRouter = services.messageRouter + self.privateChatManager = services.privateChatManager + self.unifiedPeerService = services.unifiedPeerService + self.autocompleteService = services.autocompleteService + self.deduplicationService = services.deduplicationService + self.publicMessagePipeline = services.publicMessagePipeline + self.sentReadReceipts = ChatViewModelBootstrapper.loadPersistedReadReceipts() - // Wire up dependencies - self.commandProcessor.contextProvider = self - self.participantTracker.configure(context: self) - - // Subscribe to privateChatManager changes to trigger UI updates - privateChatManager.objectWillChange - .sink { [weak self] _ in - self?.objectWillChange.send() - } - .store(in: &cancellables) - - // Subscribe to participantTracker changes to trigger UI updates - participantTracker.objectWillChange - .sink { [weak self] _ in - self?.objectWillChange.send() - } - .store(in: &cancellables) - self.commandProcessor.meshService = meshService - - loadNickname() - loadVerifiedFingerprints() - meshService.delegate = self - - // Log startup info - - // Log fingerprint after a delay to ensure encryption service is ready - DispatchQueue.main.asyncAfter(deadline: .now() + TransportConfig.uiStartupInitialDelaySeconds) { [weak self] in - if let self = self { - _ = self.getMyFingerprint() - } - } - - // Set nickname before starting services - meshService.setNickname(nickname) - - // Start mesh service immediately - meshService.startServices() - - publicMessagePipeline.delegate = self - publicMessagePipeline.updateActiveChannel(activeChannel) - - // Check initial Bluetooth state after a brief delay to allow centralManager initialization - DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { [weak self] in - guard let self = self else { return } - if let bleService = self.meshService as? BLEService { - let state = bleService.getCurrentBluetoothState() - self.updateBluetoothState(state) - } - } - - // Announce Tor status (geohash-only; do not show in mesh chat). Only when auto-start is allowed. - if TorManager.shared.torEnforced && !torStatusAnnounced && TorManager.shared.isAutoStartAllowed() { - torStatusAnnounced = true - addGeohashOnlySystemMessage( - String(localized: "system.tor.starting", comment: "System message when Tor is starting") - ) - } else if !TorManager.shared.torEnforced && !torStatusAnnounced { - torStatusAnnounced = true - addGeohashOnlySystemMessage( - String(localized: "system.tor.dev_bypass", comment: "System message when Tor bypass is enabled in development") - ) - } - - // Initialize Nostr relay manager regardless of Tor readiness; connection is controlled elsewhere - nostrRelayManager = NostrRelayManager.shared - // Attempt to flush any queued outbox (mesh/Nostr routing will gate appropriately) - messageRouter.flushAllOutbox() - // End startup phase after a short delay - Task { @MainActor in - try? await Task.sleep(nanoseconds: UInt64(TransportConfig.uiStartupPhaseDurationSeconds * 1_000_000_000)) - self.isStartupPhase = false - } - // Bind unified peer service's peer list to our published property - let peersCancellable = unifiedPeerService.$peers - .receive(on: DispatchQueue.main) - .sink { [weak self] peers in - guard let self = self else { return } - // Update peers directly; @Published drives UI updates - self.allPeers = peers - // Update peer index for O(1) lookups - // Deduplicate peers by ID to prevent crash from duplicate keys - var uniquePeers: [PeerID: BitchatPeer] = [:] - for peer in peers { - // Keep the first occurrence of each peer ID - if uniquePeers[peer.peerID] == nil { - uniquePeers[peer.peerID] = peer - } else { - SecureLogger.warning("⚠️ Duplicate peer ID detected: \(peer.peerID) (\(peer.displayName))", category: .session) - } - } - self.peerIndex = uniquePeers - // Update private chat peer ID if needed when peers change - if self.selectedPrivateChatFingerprint != nil { - self.updatePrivateChatPeerIfNeeded() - } - } - self.cancellables.insert(peersCancellable) - - // Resubscribe geohash on relay reconnect - if let relayMgr = self.nostrRelayManager { - relayMgr.$isConnected - .receive(on: DispatchQueue.main) - .sink { [weak self] connected in - guard let self = self else { return } - if connected { - Task { @MainActor in - // Set up DM handler once on first connect - if !self.nostrHandlersSetup { - self.setupNostrMessageHandling() - self.nostrHandlersSetup = true - } - self.resubscribeCurrentGeohash() - // Re-init sampling for regional + bookmarked geohashes after reconnect - self.geoChannelCoordinator?.refreshSampling() - } - } - } - .store(in: &self.cancellables) - } - - // Set up Noise encryption callbacks - setupNoiseCallbacks() - - TransferProgressManager.shared.publisher - .receive(on: DispatchQueue.main) - .sink { [weak self] event in - self?.handleTransferEvent(event) - } - .store(in: &cancellables) - - geoChannelCoordinator = GeoChannelCoordinator( - onChannelSwitch: { [weak self] channel in - self?.switchLocationChannel(to: channel) - }, - beginSampling: { [weak self] geohashes in - self?.beginGeohashSampling(for: geohashes) - }, - endSampling: { [weak self] in - self?.endGeohashSampling() - } - ) - - // Track teleport flag changes to keep our own teleported marker in sync with regional status - LocationChannelManager.shared.$teleported - .receive(on: DispatchQueue.main) - .sink { [weak self] isTeleported in - guard let self = self else { return } - Task { @MainActor in - guard case .location(let ch) = self.activeChannel, - let id = try? idBridge.deriveIdentity(forGeohash: ch.geohash) else { return } - let key = id.publicKeyHex.lowercased() - let hasRegional = !LocationChannelManager.shared.availableChannels.isEmpty - let inRegional = LocationChannelManager.shared.availableChannels.contains { $0.geohash == ch.geohash } - if isTeleported && hasRegional && !inRegional { - self.teleportedGeo = self.teleportedGeo.union([key]) - } else { - self.teleportedGeo.remove(key) - } - } - } - .store(in: &cancellables) - - // Request notification permission (guards test environment internally) - NotificationService.shared.requestAuthorization() - - - // Listen for favorite status changes - NotificationCenter.default.addObserver( - self, - selector: #selector(handleFavoriteStatusChanged), - name: .favoriteStatusChanged, - object: nil - ) - - // Listen for peer status updates to refresh UI - NotificationCenter.default.addObserver( - self, - selector: #selector(handlePeerStatusUpdate), - name: Notification.Name("peerStatusUpdated"), - object: nil - ) - - // When app becomes active, send read receipts for visible messages - #if os(macOS) - NotificationCenter.default.addObserver( - self, - selector: #selector(appDidBecomeActive), - name: NSApplication.didBecomeActiveNotification, - object: nil - ) - - // Add app lifecycle observers to save data - NotificationCenter.default.addObserver( - self, - selector: #selector(appWillResignActive), - name: NSApplication.willResignActiveNotification, - object: nil - ) - NotificationCenter.default.addObserver( - self, - selector: #selector(applicationWillTerminate), - name: NSApplication.willTerminateNotification, - object: nil - ) - // Tor lifecycle notifications: inform user when Tor restarts and when ready (macOS) - NotificationCenter.default.addObserver( - self, - selector: #selector(handleTorWillRestart), - name: .TorWillRestart, - object: nil - ) - NotificationCenter.default.addObserver( - self, - selector: #selector(handleTorDidBecomeReady), - name: .TorDidBecomeReady, - object: nil - ) - NotificationCenter.default.addObserver( - self, - selector: #selector(handleTorWillStart), - name: .TorWillStart, - object: nil - ) - NotificationCenter.default.addObserver( - self, - selector: #selector(handleTorPreferenceChanged(_:)), - name: .TorUserPreferenceChanged, - object: nil - ) - #else - NotificationCenter.default.addObserver( - self, - selector: #selector(appDidBecomeActive), - name: UIApplication.didBecomeActiveNotification, - object: nil - ) - // Resubscribe geohash on app foreground - // Resubscribe handled via appDidBecomeActive selector - - // Add screenshot detection for iOS - NotificationCenter.default.addObserver( - self, - selector: #selector(userDidTakeScreenshot), - name: UIApplication.userDidTakeScreenshotNotification, - object: nil - ) - - // Add app lifecycle observers to save data - NotificationCenter.default.addObserver( - self, - selector: #selector(appWillResignActive), - name: UIApplication.willResignActiveNotification, - object: nil - ) - NotificationCenter.default.addObserver( - self, - selector: #selector(applicationWillTerminate), - name: UIApplication.willTerminateNotification, - object: nil - ) - // Tor lifecycle notifications: inform user when Tor restarts and when ready - NotificationCenter.default.addObserver( - self, - selector: #selector(handleTorWillRestart), - name: .TorWillRestart, - object: nil - ) - NotificationCenter.default.addObserver( - self, - selector: #selector(handleTorDidBecomeReady), - name: .TorDidBecomeReady, - object: nil - ) - NotificationCenter.default.addObserver( - self, - selector: #selector(handleTorWillStart), - name: .TorWillStart, - object: nil - ) - NotificationCenter.default.addObserver( - self, - selector: #selector(handleTorPreferenceChanged(_:)), - name: .TorUserPreferenceChanged, - object: nil - ) - #endif + ChatViewModelBootstrapper(viewModel: self).configure() + initializeConversationStore() } // MARK: - Deinitialization @@ -747,7 +502,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, CommandContextProv // MARK: - Nickname Management - private func loadNickname() { + func loadNickname() { if let savedNickname = userDefaults.string(forKey: nicknameKey) { nickname = savedNickname.trimmed } else { @@ -901,83 +656,13 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, CommandContextProv @MainActor func isPeerBlocked(_ peerID: PeerID) -> Bool { - return unifiedPeerService.isBlocked(peerID) - } - - // Helper method to find current peer ID for a fingerprint - @MainActor - private func getCurrentPeerIDForFingerprint(_ fingerprint: String) -> PeerID? { - // Search through all connected peers to find the one with matching fingerprint - for peerID in connectedPeers { - if let mappedFingerprint = peerIDToPublicKeyFingerprint[peerID], - mappedFingerprint == fingerprint { - return peerID - } - } - return nil + peerIdentityCoordinator.isPeerBlocked(peerID) } // Helper method to update selectedPrivateChatPeer if fingerprint matches @MainActor - private func updatePrivateChatPeerIfNeeded() { - guard let chatFingerprint = selectedPrivateChatFingerprint else { return } - - // Find current peer ID for the fingerprint - if let currentPeerID = getCurrentPeerIDForFingerprint(chatFingerprint) { - // Update the selected peer if it's different - if let oldPeerID = selectedPrivateChatPeer, oldPeerID != currentPeerID { - - // Migrate messages from old peer ID to new peer ID - if let oldMessages = privateChats[oldPeerID] { - var chats = privateChats - if chats[currentPeerID] == nil { - chats[currentPeerID] = [] - } - chats[currentPeerID]?.append(contentsOf: oldMessages) - // Sort by timestamp - chats[currentPeerID]?.sort { $0.timestamp < $1.timestamp } - - // Remove duplicates - var seen = Set() - chats[currentPeerID] = chats[currentPeerID]?.filter { msg in - if seen.contains(msg.id) { - return false - } - seen.insert(msg.id) - return true - } - - // Remove old peer ID - chats.removeValue(forKey: oldPeerID) - - // Update all at once - privateChats = chats // Trigger setter - } - - // Migrate unread status - if unreadPrivateMessages.contains(oldPeerID) { - unreadPrivateMessages.remove(oldPeerID) - unreadPrivateMessages.insert(currentPeerID) - } - - selectedPrivateChatPeer = currentPeerID - - // Schedule UI update for encryption status change - // UI will update automatically - - // Also refresh the peer list to update encryption status - Task { @MainActor in - // UnifiedPeerService updates automatically via subscriptions - } - } else if selectedPrivateChatPeer == nil { - // Just set the peer ID if we don't have one - selectedPrivateChatPeer = currentPeerID - // UI will update automatically - } - - // Clear unread messages for the current peer ID - unreadPrivateMessages.remove(currentPeerID) - } + func updatePrivateChatPeerIfNeeded() { + peerIdentityCoordinator.updatePrivateChatPeerIfNeeded() } // MARK: - Message Sending @@ -988,121 +673,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, CommandContextProv /// Routes to private chat if one is selected, otherwise broadcasts @MainActor func sendMessage(_ content: String) { - // Ignore messages that are empty or whitespace-only to prevent blank lines - guard let trimmed = content.trimmedOrNilIfEmpty else { return } - - // Check for commands - if content.hasPrefix("/") { - Task { @MainActor in - handleCommand(content) - } - return - } - - if selectedPrivateChatPeer != nil { - // Update peer ID in case it changed due to reconnection - updatePrivateChatPeerIfNeeded() - - if let selectedPeer = selectedPrivateChatPeer { - sendPrivateMessage(content, to: selectedPeer) - } - return - } - - // Parse mentions from the content (use original content for user intent) - let mentions = parseMentions(from: content) - - var geoContext: GeoOutgoingContext? = nil - - // Add message to local display - var displaySender = nickname - var localSenderPeerID = meshService.myPeerID - var messageID: String? = nil - var messageTimestamp = Date() - - switch activeChannel { - case .mesh: - break - case .location(let ch): - do { - let identity = try idBridge.deriveIdentity(forGeohash: ch.geohash) - let suffix = String(identity.publicKeyHex.suffix(4)) - displaySender = nickname + "#" + suffix - localSenderPeerID = PeerID(nostr: identity.publicKeyHex) - let teleported = LocationChannelManager.shared.teleported - let event = try NostrProtocol.createEphemeralGeohashEvent( - content: trimmed, - geohash: ch.geohash, - senderIdentity: identity, - nickname: nickname, - teleported: teleported - ) - messageID = event.id - messageTimestamp = Date(timeIntervalSince1970: TimeInterval(event.created_at)) - geoContext = (channel: ch, event: event, identity: identity, teleported: teleported) - } catch { - SecureLogger.error("❌ Failed to prepare geohash message: \(error)", category: .session) - addSystemMessage( - String(localized: "system.location.send_failed", comment: "System message when a location channel send fails") - ) - return - } - } - - let message = BitchatMessage( - id: messageID, - sender: displaySender, - content: trimmed, - timestamp: messageTimestamp, - isRelay: false, - senderPeerID: localSenderPeerID, - mentions: mentions.isEmpty ? nil : mentions - ) - - timelineStore.append(message, to: activeChannel) - refreshVisibleMessages(from: activeChannel) - - // Update content LRU for near-dup detection - let ckey = deduplicationService.normalizedContentKey(message.content) - deduplicationService.recordContentKey(ckey, timestamp: message.timestamp) - - trimMessagesIfNeeded() - - // UI updates automatically via @Published var messages - - updateChannelActivityTimeThenSend(content: content, - trimmed: trimmed, - mentions: mentions, - geoContext: geoContext, - messageID: message.id, - timestamp: message.timestamp) - } - - private func updateChannelActivityTimeThenSend(content: String, - trimmed: String, - mentions: [String], - geoContext: GeoOutgoingContext?, - messageID: String, - timestamp: Date) { - switch activeChannel { - case .mesh: - lastPublicActivityAt["mesh"] = Date() - // Send via mesh with mentions - meshService.sendMessage(content, mentions: mentions, messageID: messageID, timestamp: timestamp) - case .location(let ch): - lastPublicActivityAt["geo:\(ch.geohash)"] = Date() - guard let context = geoContext, context.channel.geohash == ch.geohash else { - SecureLogger.error("Geo: missing send context for \(ch.geohash)", category: .session) - addSystemMessage( - String(localized: "system.location.send_failed", comment: "System message when a location channel send fails") - ) - return - } - // Send to geohash channel via Nostr ephemeral - Task { @MainActor in - self.sendGeohash(context: context) - } - } + outgoingCoordinator.sendMessage(content) } @@ -1148,103 +719,53 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, CommandContextProv /// Return the current, pruned, sorted people list for the active geohash without mutating state. @MainActor func visibleGeohashPeople() -> [GeoPerson] { - participantTracker.getVisiblePeople() + publicConversationCoordinator.visibleGeohashPeople() } /// CommandContextProvider conformance - returns visible geo participants func getVisibleGeoParticipants() -> [CommandGeoParticipant] { - visibleGeohashPeople().map { CommandGeoParticipant(id: $0.id, displayName: $0.displayName) } + publicConversationCoordinator.getVisibleGeoParticipants() } /// Returns the current participant count for a specific geohash, using the 5-minute activity window. @MainActor func geohashParticipantCount(for geohash: String) -> Int { - participantTracker.participantCount(for: geohash) + publicConversationCoordinator.geohashParticipantCount(for: geohash) } // MARK: - GeohashParticipantContext Protocol func displayNameForPubkey(_ pubkeyHex: String) -> String { - displayNameForNostrPubkey(pubkeyHex) + publicConversationCoordinator.displayNameForPubkey(pubkeyHex) } func isBlocked(_ pubkeyHexLowercased: String) -> Bool { - identityManager.isNostrBlocked(pubkeyHexLowercased: pubkeyHexLowercased) + publicConversationCoordinator.isBlocked(pubkeyHexLowercased) } // Geohash block helpers @MainActor func isGeohashUserBlocked(pubkeyHexLowercased: String) -> Bool { - return identityManager.isNostrBlocked(pubkeyHexLowercased: pubkeyHexLowercased) + publicConversationCoordinator.isGeohashUserBlocked(pubkeyHexLowercased: pubkeyHexLowercased) } @MainActor func blockGeohashUser(pubkeyHexLowercased: String, displayName: String) { - let hex = pubkeyHexLowercased.lowercased() - identityManager.setNostrBlocked(hex, isBlocked: true) - - // Remove from participants for all geohashes - participantTracker.removeParticipant(pubkeyHex: hex) - - // Remove their public messages from current geohash timeline and visible list - if let gh = currentGeohash { - let predicate: (BitchatMessage) -> Bool = { [self] msg in - guard let spid = msg.senderPeerID, spid.isGeoDM || spid.isGeoChat else { return false } - if let full = self.nostrKeyMapping[spid]?.lowercased() { return full == hex } - return false - } - timelineStore.removeMessages(in: gh, where: predicate) - if case .location = activeChannel { - messages.removeAll(where: predicate) - } - } - - // Remove geohash DM conversation if exists - let convKey = PeerID(nostr_: hex) - if privateChats[convKey] != nil { - privateChats.removeValue(forKey: convKey) - unreadPrivateMessages.remove(convKey) - } - - // Remove mapping keys pointing to this pubkey to avoid accidental resolution - for (key, value) in self.nostrKeyMapping where value.lowercased() == hex { - self.nostrKeyMapping.removeValue(forKey: key) - } - - addSystemMessage( - String( - format: String(localized: "system.geohash.blocked", comment: "System message shown when a user is blocked in geohash chats"), - locale: .current, - displayName - ) + publicConversationCoordinator.blockGeohashUser( + pubkeyHexLowercased: pubkeyHexLowercased, + displayName: displayName ) } @MainActor func unblockGeohashUser(pubkeyHexLowercased: String, displayName: String) { - identityManager.setNostrBlocked(pubkeyHexLowercased, isBlocked: false) - addSystemMessage( - String( - format: String(localized: "system.geohash.unblocked", comment: "System message shown when a user is unblocked in geohash chats"), - locale: .current, - displayName - ) + publicConversationCoordinator.unblockGeohashUser( + pubkeyHexLowercased: pubkeyHexLowercased, + displayName: displayName ) } func displayNameForNostrPubkey(_ pubkeyHex: String) -> String { - let suffix = String(pubkeyHex.suffix(4)) - // If this is our per-geohash identity, use our nickname - if let gh = currentGeohash, let myGeoIdentity = try? idBridge.deriveIdentity(forGeohash: gh) { - if myGeoIdentity.publicKeyHex.lowercased() == pubkeyHex.lowercased() { - return nickname + "#" + suffix - } - } - // If we have a known nickname tag for this pubkey, use it - if let nick = geoNicknames[pubkeyHex.lowercased()], !nick.isEmpty { - return nick + "#" + suffix - } - // Otherwise, anonymous with collision-resistant suffix - return "anon#\(suffix)" + publicConversationCoordinator.displayNameForNostrPubkey(pubkeyHex) } @@ -1265,69 +786,19 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, CommandContextProv func currentPublicSender() -> (name: String, peerID: PeerID) { - var displaySender = nickname - var senderPeerID = meshService.myPeerID - if case .location(let ch) = activeChannel, - let identity = try? idBridge.deriveIdentity(forGeohash: ch.geohash) { - let suffix = String(identity.publicKeyHex.suffix(4)) - displaySender = nickname + "#" + suffix - senderPeerID = PeerID(nostr: identity.publicKeyHex) - } - return (displaySender, senderPeerID) + publicConversationCoordinator.currentPublicSender() } @MainActor func nicknameForPeer(_ peerID: PeerID) -> String { - if let name = meshService.peerNickname(peerID: peerID) { - return name - } - if let favorite = FavoritesPersistenceService.shared.getFavoriteStatus(forPeerID: peerID), - !favorite.peerNickname.isEmpty { - return favorite.peerNickname - } - if let noiseKey = Data(hexString: peerID.id), - let favorite = FavoritesPersistenceService.shared.getFavoriteStatus(for: noiseKey), - !favorite.peerNickname.isEmpty { - return favorite.peerNickname - } - return "user" + peerIdentityCoordinator.nicknameForPeer(peerID) } @MainActor func removeMessage(withID messageID: String, cleanupFile: Bool = false) { - var removedMessage: BitchatMessage? - - if let idx = messages.firstIndex(where: { $0.id == messageID }) { - removedMessage = messages.remove(at: idx) - } - - if let storeRemoved = timelineStore.removeMessage(withID: messageID) { - removedMessage = removedMessage ?? storeRemoved - } - - var chats = privateChats - for (peerID, items) in chats { - let filtered = items.filter { $0.id != messageID } - if filtered.count != items.count { - if filtered.isEmpty { - chats.removeValue(forKey: peerID) - } else { - chats[peerID] = filtered - } - if removedMessage == nil { - removedMessage = items.first(where: { $0.id == messageID }) - } - } - } - privateChats = chats - - if cleanupFile, let message = removedMessage { - cleanupLocalFile(forMessage: message) - } - - objectWillChange.send() + publicConversationCoordinator.removeMessage(withID: messageID, cleanupFile: cleanupFile) } @@ -1386,322 +857,42 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, CommandContextProv /// - Note: Switches the UI to private chat mode and loads message history @MainActor func startPrivateChat(with peerID: PeerID) { - // Safety check: Don't allow starting chat with ourselves - if peerID == meshService.myPeerID { - return - } - - let peerNickname = meshService.peerNickname(peerID: peerID) ?? "unknown" - - // Check if the peer is blocked - if unifiedPeerService.isBlocked(peerID) { - addSystemMessage( - String( - format: String(localized: "system.chat.blocked", comment: "System message when starting chat fails because peer is blocked"), - locale: .current, - peerNickname - ) - ) - return - } - - // Check mutual favorites for offline messaging - if let peer = unifiedPeerService.getPeer(by: peerID), - peer.isFavorite && !peer.theyFavoritedUs && !peer.isConnected { - addSystemMessage( - String( - format: String(localized: "system.chat.requires_favorite", comment: "System message when mutual favorite requirement blocks chat"), - locale: .current, - peerNickname - ) - ) - return - } - - // Consolidate messages from different peer ID representations (stable Noise key, temp Nostr IDs) - // Pass persisted sentReadReceipts to correctly identify already-read messages after app restart - _ = privateChatManager.consolidateMessages(for: peerID, peerNickname: peerNickname, persistedReadReceipts: sentReadReceipts) - - // Trigger handshake if needed (mesh peers only). Skip for Nostr geohash conv keys. - if !peerID.isGeoDM && !peerID.isGeoChat { - let sessionState = meshService.getNoiseSessionState(for: peerID) - switch sessionState { - case .none, .failed: - meshService.triggerHandshake(with: peerID) - case .handshakeQueued, .handshaking, .established: - break - } - } else { - SecureLogger.debug("GeoDM: skipping mesh handshake for virtual peerID=\(peerID)", category: .session) - } - - // Sync read receipt tracking to prevent duplicates - privateChatManager.syncReadReceiptsForSentMessages(peerID: peerID, nickname: nickname, externalReceipts: &sentReadReceipts) - - privateChatManager.startChat(with: peerID) - - // Also mark messages as read for Nostr ACKs - // This ensures read receipts are sent even for consolidated messages - markPrivateMessagesAsRead(from: peerID) - } - - func endPrivateChat() { - selectedPrivateChatPeer = nil - selectedPrivateChatFingerprint = nil + peerIdentityCoordinator.startPrivateChat(with: peerID) } @MainActor - @objc private func handlePeerStatusUpdate(_ notification: Notification) { - // Update private chat peer if needed when peer status changes - updatePrivateChatPeerIfNeeded() + func endPrivateChat() { + peerIdentityCoordinator.endPrivateChat() } - @objc private func handleFavoriteStatusChanged(_ notification: Notification) { - guard let peerPublicKey = notification.userInfo?["peerPublicKey"] as? Data else { return } - - Task { @MainActor in - // Handle noise key updates - if let isKeyUpdate = notification.userInfo?["isKeyUpdate"] as? Bool, - isKeyUpdate, - let oldKey = notification.userInfo?["oldPeerPublicKey"] as? Data { - let oldPeerID = PeerID(hexData: oldKey) - let newPeerID = PeerID(hexData: peerPublicKey) - - // If we have a private chat open with the old peer ID, update it to the new one - if selectedPrivateChatPeer == oldPeerID { - SecureLogger.info("📱 Updating private chat peer ID due to key change: \(oldPeerID) -> \(newPeerID)", category: .session) - - // Transfer private chat messages to new peer ID - if let messages = privateChats[oldPeerID] { - var chats = privateChats - chats[newPeerID] = messages - chats.removeValue(forKey: oldPeerID) - privateChats = chats // Trigger setter - } - - // Transfer unread status - if unreadPrivateMessages.contains(oldPeerID) { - unreadPrivateMessages.remove(oldPeerID) - unreadPrivateMessages.insert(newPeerID) - } - - // Update selected peer - selectedPrivateChatPeer = newPeerID - - // Update fingerprint tracking if needed - if let fingerprint = peerIDToPublicKeyFingerprint[oldPeerID] { - peerIDToPublicKeyFingerprint.removeValue(forKey: oldPeerID) - peerIDToPublicKeyFingerprint[newPeerID] = fingerprint - selectedPrivateChatFingerprint = fingerprint - } - - // Schedule UI refresh - // UI will update automatically - } else { - // Even if the chat isn't open, migrate any existing private chat data - if let messages = privateChats[oldPeerID] { - SecureLogger.debug("📱 Migrating private chat messages from \(oldPeerID) to \(newPeerID)", category: .session) - var chats = privateChats - chats[newPeerID] = messages - chats.removeValue(forKey: oldPeerID) - privateChats = chats // Trigger setter - } - - // Transfer unread status - if unreadPrivateMessages.contains(oldPeerID) { - unreadPrivateMessages.remove(oldPeerID) - unreadPrivateMessages.insert(newPeerID) - } - - // Update fingerprint mapping - if let fingerprint = peerIDToPublicKeyFingerprint[oldPeerID] { - peerIDToPublicKeyFingerprint.removeValue(forKey: oldPeerID) - peerIDToPublicKeyFingerprint[newPeerID] = fingerprint - } - } - } - - // First check if this is a peer ID update for our current chat - updatePrivateChatPeerIfNeeded() - - // Then handle favorite/unfavorite messages if applicable - if let isFavorite = notification.userInfo?["isFavorite"] as? Bool { - let peerID = PeerID(hexData: peerPublicKey) - let action = isFavorite ? "favorited" : "unfavorited" - - // Find peer nickname - let peerNickname: String - if let nickname = meshService.peerNickname(peerID: peerID) { - peerNickname = nickname - } else if let favorite = FavoritesPersistenceService.shared.getFavoriteStatus(for: peerPublicKey) { - peerNickname = favorite.peerNickname - } else { - peerNickname = "Unknown" - } - - // Create system message - let systemMessage = BitchatMessage( - id: UUID().uuidString, - sender: "System", - content: "\(peerNickname) \(action) you", - timestamp: Date(), - isRelay: false, - originalSender: nil, - isPrivate: false, - recipientNickname: nil, - senderPeerID: nil, - mentions: nil - ) - - // Add to message stream - addMessage(systemMessage) - - // Update peer manager to refresh UI - // UnifiedPeerService updates automatically via subscriptions - } - } + @MainActor + @objc func handlePeerStatusUpdate(_ notification: Notification) { + peerIdentityCoordinator.handlePeerStatusUpdate() + } + + @objc func handleFavoriteStatusChanged(_ notification: Notification) { + peerIdentityCoordinator.handleFavoriteStatusChanged(notification) } // MARK: - App Lifecycle @MainActor - @objc private func appDidBecomeActive() { - // Check Bluetooth state and show alert if needed - if let bleService = meshService as? BLEService { - let currentState = bleService.getCurrentBluetoothState() - updateBluetoothState(currentState) - } - - // When app becomes active, send read receipts for visible private chat - if let peerID = selectedPrivateChatPeer { - // Try immediately - self.markPrivateMessagesAsRead(from: peerID) - // And again with a delay - DispatchQueue.main.asyncAfter(deadline: .now() + TransportConfig.uiAnimationMediumSeconds) { - self.markPrivateMessagesAsRead(from: peerID) - } - } - // Subscriptions will be resent after connections come back up + func handleDidBecomeActive() { + lifecycleCoordinator.handleDidBecomeActive() } @MainActor - @objc private func userDidTakeScreenshot() { - // Respect privacy: do not broadcast screenshots taken from non-chat sheets - if isLocationChannelsSheetPresented { - // Show a warning about sharing location screenshots publicly - showScreenshotPrivacyWarning = true - return - } - if isAppInfoPresented { - // Silently ignore screenshots of app info - return - } - - // Send screenshot notification based on current context - let screenshotMessage = "* \(nickname) took a screenshot *" - - if let peerID = selectedPrivateChatPeer { - // In private chat - send to the other person - if let peerNickname = meshService.peerNickname(peerID: peerID) { - // Only send screenshot notification if we have an established session - // This prevents triggering handshake requests for screenshot notifications - let sessionState = meshService.getNoiseSessionState(for: peerID) - switch sessionState { - case .established: - // Send the message directly without going through sendPrivateMessage to avoid local echo - messageRouter.sendPrivate(screenshotMessage, to: peerID, recipientNickname: peerNickname, messageID: UUID().uuidString) - case .none, .failed, .handshakeQueued, .handshaking: - // Don't send screenshot notification if no session exists - SecureLogger.debug("Skipping screenshot notification to \(peerID) - no established session", category: .security) - } - } - - // Show local notification immediately as system message (only in chat) - let localNotification = BitchatMessage( - sender: "system", - content: "you took a screenshot", - timestamp: Date(), - isRelay: false, - originalSender: nil, - isPrivate: true, - recipientNickname: meshService.peerNickname(peerID: peerID), - senderPeerID: meshService.myPeerID - ) - var chats = privateChats - if chats[peerID] == nil { - chats[peerID] = [] - } - chats[peerID]?.append(localNotification) - privateChats = chats // Trigger setter - - } else { - // In public chat - send to active public channel - switch activeChannel { - case .mesh: - meshService.sendMessage(screenshotMessage, - mentions: [], - messageID: UUID().uuidString, - timestamp: Date()) - case .location(let ch): - Task { @MainActor in - do { - let identity = try idBridge.deriveIdentity(forGeohash: ch.geohash) - let event = try NostrProtocol.createEphemeralGeohashEvent( - content: screenshotMessage, - geohash: ch.geohash, - senderIdentity: identity, - nickname: self.nickname, - teleported: LocationChannelManager.shared.teleported - ) - let targetRelays = GeoRelayDirectory.shared.closestRelays(toGeohash: ch.geohash, count: 5) - if targetRelays.isEmpty { - SecureLogger.warning("Geo: no geohash relays available for \(ch.geohash); not sending", category: .session) - } else { - NostrRelayManager.shared.sendEvent(event, to: targetRelays) - } - // Track ourselves as active participant - self.participantTracker.recordParticipant(pubkeyHex: identity.publicKeyHex) - } catch { - SecureLogger.error("❌ Failed to send geohash screenshot message: \(error)", category: .session) - self.addSystemMessage( - String(localized: "system.location.send_failed", comment: "System message when a location channel send fails") - ) - } - } - } - - - // Show local notification immediately as system message (only in chat) - let localNotification = BitchatMessage( - sender: "system", - content: "you took a screenshot", - timestamp: Date(), - isRelay: false - ) - // Add system message - addMessage(localNotification) - } - } - - @objc private func appWillResignActive() { - // No-op; avoid forcing synchronize on resign + func handleScreenshotCaptured() { + lifecycleCoordinator.handleScreenshotCaptured() } /// Save identity state without stopping services (for backgrounding) func saveIdentityState() { - // Force save any pending identity changes (verifications, favorites, etc) - identityManager.forceSave() - - // Verify identity key is still there - _ = keychain.verifyIdentityKeyExists() + lifecycleCoordinator.saveIdentityState() } @objc func applicationWillTerminate() { - // Send leave message to all peers - meshService.stopServices() - - // Save identity state - saveIdentityState() + lifecycleCoordinator.applicationWillTerminate() } @MainActor @@ -1737,155 +928,21 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, CommandContextProv @MainActor func markPrivateMessagesAsRead(from peerID: PeerID) { - privateChatManager.markAsRead(from: peerID) - - // Handle GeoDM (nostr_*) read receipts directly via per-geohash identity - if peerID.isGeoDM, - let recipientHex = nostrKeyMapping[peerID], - case .location(let ch) = LocationChannelManager.shared.selectedChannel, - let id = try? idBridge.deriveIdentity(forGeohash: ch.geohash) { - let messages = privateChats[peerID] ?? [] - for message in messages where message.senderPeerID == peerID && !message.isRelay { - if !sentReadReceipts.contains(message.id) { - SecureLogger.debug("GeoDM: sending READ for mid=\(message.id.prefix(8))… to=\(recipientHex.prefix(8))…", category: .session) - let nostrTransport = NostrTransport(keychain: keychain, idBridge: idBridge) - nostrTransport.senderPeerID = meshService.myPeerID - nostrTransport.sendReadReceiptGeohash(message.id, toRecipientHex: recipientHex, from: id) - sentReadReceipts.insert(message.id) - } - } - return - } - - // Get the peer's Noise key to check for Nostr messages - var noiseKeyHex: PeerID? = nil - var peerNostrPubkey: String? = nil - - // First check if peerID is already a hex Noise key - if let noiseKey = Data(hexString: peerID.id), - let favoriteStatus = FavoritesPersistenceService.shared.getFavoriteStatus(for: noiseKey) { - noiseKeyHex = peerID - peerNostrPubkey = favoriteStatus.peerNostrPublicKey - } - // Otherwise get the Noise key from the peer info - else if let peer = unifiedPeerService.getPeer(by: peerID) { - noiseKeyHex = PeerID(hexData: peer.noisePublicKey) - let favoriteStatus = FavoritesPersistenceService.shared.getFavoriteStatus(for: peer.noisePublicKey) - peerNostrPubkey = favoriteStatus?.peerNostrPublicKey - - // Also remove unread status from the stable Noise key if it exists - if let keyHex = noiseKeyHex, unreadPrivateMessages.contains(keyHex) { - unreadPrivateMessages.remove(keyHex) - } - } - - // Send Nostr read ACKs if peer has Nostr capability - if peerNostrPubkey != nil { - // Check messages under both ephemeral peer ID and stable Noise key - let messagesToAck = getPrivateChatMessages(for: peerID) - - for message in messagesToAck { - // Only send read ACKs for messages from the peer (not our own) - // Check both the ephemeral peer ID and stable Noise key as sender - if (message.senderPeerID == peerID || message.senderPeerID == noiseKeyHex) && !message.isRelay { - // Skip if we already sent an ACK for this message - if !sentReadReceipts.contains(message.id) { - // Use stable Noise key hex if available; else fall back to peerID - let recipPeer = peerID.isHex ? peerID : (unifiedPeerService.getPeer(by: peerID)?.peerID ?? peerID) - let receipt = ReadReceipt(originalMessageID: message.id, readerID: meshService.myPeerID, readerNickname: nickname) - messageRouter.sendReadReceipt(receipt, to: recipPeer) - sentReadReceipts.insert(message.id) - } - } - } - } + lifecycleCoordinator.markPrivateMessagesAsRead(from: peerID) } func getMessages(for peerID: PeerID?) -> [BitchatMessage] { - if let peerID { - return getPrivateChatMessages(for: peerID) - } else { - return messages - } + lifecycleCoordinator.getMessages(for: peerID) } @MainActor func getPrivateChatMessages(for peerID: PeerID) -> [BitchatMessage] { - var combined: [BitchatMessage] = [] - - // Gather messages under the ephemeral peer ID - if let ephemeralMessages = privateChats[peerID] { - combined.append(contentsOf: ephemeralMessages) - } - - // Also include messages stored under the stable Noise key (Nostr path) - if let peer = unifiedPeerService.getPeer(by: peerID) { - let noiseKeyHex = PeerID(hexData: peer.noisePublicKey) - if noiseKeyHex != peerID, let nostrMessages = privateChats[noiseKeyHex] { - combined.append(contentsOf: nostrMessages) - } - } - - // De-duplicate by message ID: keep the item with the most advanced delivery status. - // This prevents duplicate IDs causing LazyVStack warnings and blank rows, and ensures - // we show the row whose status has already progressed to delivered/read. - func statusRank(_ s: DeliveryStatus?) -> Int { - guard let s = s else { return 0 } - switch s { - case .failed: return 1 - case .sending: return 2 - case .sent: return 3 - case .partiallyDelivered: return 4 - case .delivered: return 5 - case .read: return 6 - } - } - - var bestByID: [String: BitchatMessage] = [:] - for msg in combined { - if let existing = bestByID[msg.id] { - let lhs = statusRank(existing.deliveryStatus) - let rhs = statusRank(msg.deliveryStatus) - if rhs > lhs || (rhs == lhs && msg.timestamp > existing.timestamp) { - bestByID[msg.id] = msg - } - } else { - bestByID[msg.id] = msg - } - } - - // Return chronologically sorted, de-duplicated list - return bestByID.values.sorted { $0.timestamp < $1.timestamp } + lifecycleCoordinator.getPrivateChatMessages(for: peerID) } @MainActor func getPeerIDForNickname(_ nickname: String) -> PeerID? { - // When in a geohash channel, allow resolving by geohash participant nickname - switch LocationChannelManager.shared.selectedChannel { - case .location: - // If a disambiguation suffix is present (e.g., "name#abcd"), try exact displayName match first - if nickname.contains("#") { - if let person = visibleGeohashPeople().first(where: { $0.displayName == nickname }) { - let convKey = PeerID(nostr_: person.id) - nostrKeyMapping[convKey] = person.id - return convKey - } - } - let base: String = { - if let hashIndex = nickname.firstIndex(of: "#") { return String(nickname[.. nickname) - if let pub = geoNicknames.first(where: { (_, nick) in nick.lowercased() == base })?.key { - let convKey = PeerID(nostr_: pub) - nostrKeyMapping[convKey] = pub - return convKey - } - case .mesh: - break - } - // Fallback to mesh nickname resolution - return unifiedPeerService.getPeerID(for: nickname) + peerIdentityCoordinator.getPeerIDForNickname(nickname) } @@ -1898,6 +955,10 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, CommandContextProv // Clear all messages messages.removeAll() + timelineStore = PublicTimelineStore( + meshCap: TransportConfig.meshTimelineCap, + geohashCap: TransportConfig.geoTimelineCap + ) privateChatManager.privateChats.removeAll() privateChatManager.unreadMessages.removeAll() @@ -1908,10 +969,6 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, CommandContextProv userDefaults.removeObject(forKey: "bitchat.noiseIdentityKey") userDefaults.removeObject(forKey: "bitchat.messageRetentionKey") - // Clear verified fingerprints - verifiedFingerprints.removeAll() - // Verified fingerprints are cleared when identity data is cleared below - // Reset nickname to anonymous nickname = "anon\(Int.random(in: 1000...9999))" saveNickname() @@ -1919,7 +976,8 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, CommandContextProv // Clear favorites and peer mappings // Clear through SecureIdentityStateManager instead of directly identityManager.clearAllIdentityData() - peerIDToPublicKeyFingerprint.removeAll() + peerIdentityStore.clearAll() + locationPresenceStore.reset() // Clear persistent favorites from keychain FavoritesPersistenceService.shared.clearAllFavorites() @@ -1934,15 +992,11 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, CommandContextProv // Clear selected private chat selectedPrivateChatPeer = nil - selectedPrivateChatFingerprint = nil // Clear read receipt tracking sentReadReceipts.removeAll() deduplicationService.clearAll() - // Clear all caches - invalidateEncryptionCache() - // IMPORTANT: Clear Nostr-related state // Disconnect from Nostr relays and clear subscriptions nostrRelayManager?.disconnect() @@ -1957,7 +1011,9 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, CommandContextProv if let bleService = meshService as? BLEService { bleService.resetIdentityForPanic(currentNickname: nickname) } - + + initializeConversationStore() + // No need to force UserDefaults synchronization // Reinitialize Nostr with new identity @@ -2034,555 +1090,89 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, CommandContextProv // MARK: - Autocomplete func updateAutocomplete(for text: String, cursorPosition: Int) { - // Build candidate list based on active channel - let peerCandidates: [String] = { - switch activeChannel { - case .mesh: - let values = meshService.getPeerNicknames().values - return Array(values.filter { $0 != meshService.myNickname }) - case .location(let ch): - // From geochash participants we have seen via Nostr events - var tokens = Set() - for (pubkey, nick) in geoNicknames { - let suffix = String(pubkey.suffix(4)) - tokens.insert("\(nick)#\(suffix)") - } - // Optionally exclude self nick#abcd from suggestions - if let id = try? idBridge.deriveIdentity(forGeohash: ch.geohash) { - let myToken = nickname + "#" + String(id.publicKeyHex.suffix(4)) - tokens.remove(myToken) - } - return Array(tokens) - } - }() - - let (suggestions, range) = autocompleteService.getSuggestions( - for: text, - peers: peerCandidates, - cursorPosition: cursorPosition - ) - - if !suggestions.isEmpty { - autocompleteSuggestions = suggestions - autocompleteRange = range - showAutocomplete = true - selectedAutocompleteIndex = 0 - } else { - autocompleteSuggestions = [] - autocompleteRange = nil - showAutocomplete = false - selectedAutocompleteIndex = 0 - } + composerCoordinator.updateAutocomplete(for: text, cursorPosition: cursorPosition) } func completeNickname(_ nickname: String, in text: inout String) -> Int { - guard let range = autocompleteRange else { return text.count } - - text = autocompleteService.applySuggestion(nickname, to: text, range: range) - - // Hide autocomplete - showAutocomplete = false - autocompleteSuggestions = [] - autocompleteRange = nil - selectedAutocompleteIndex = 0 - - // Return new cursor position - return range.location + nickname.count + (nickname.hasPrefix("@") ? 1 : 2) + composerCoordinator.completeNickname(nickname, in: &text) } // MARK: - Message Formatting @MainActor func formatMessageAsText(_ message: BitchatMessage, colorScheme: ColorScheme) -> AttributedString { - // Determine if this message was sent by self (mesh, geo, or DM) - let isSelf: Bool = { - if let spid = message.senderPeerID { - // In geohash channels, compare against our per-geohash nostr short ID - if case .location(let ch) = activeChannel, spid.isGeoChat { - let myGeo: NostrIdentity? = { - if let cached = cachedGeohashIdentity, cached.geohash == ch.geohash { - return cached.identity - } - // Fallback: derive and cache (should rarely happen) - if let identity = try? idBridge.deriveIdentity(forGeohash: ch.geohash) { - cachedGeohashIdentity = (ch.geohash, identity) - return identity - } - return nil - }() - if let myGeo { - return spid == PeerID(nostr: myGeo.publicKeyHex) - } - } - return spid == meshService.myPeerID - } - // Fallback by nickname - if message.sender == nickname { return true } - if message.sender.hasPrefix(nickname + "#") { return true } - return false - }() - // Check cache first (key includes dark mode + self flag) - let isDark = colorScheme == .dark - if let cachedText = message.getCachedFormattedText(isDark: isDark, isSelf: isSelf) { - return cachedText - } - - // Not cached, format the message - var result = AttributedString() - - let baseColor: Color = isSelf ? .orange : peerColor(for: message, isDark: isDark) - - if message.sender != "system" { - // Sender (at the beginning) with light-gray suffix styling if present - let (baseName, suffix) = message.sender.splitSuffix() - var senderStyle = AttributeContainer() - // Use consistent color for all senders - senderStyle.foregroundColor = baseColor - // Bold the user's own nickname - let fontWeight: Font.Weight = isSelf ? .bold : .medium - senderStyle.font = .bitchatSystem(size: 14, weight: fontWeight, design: .monospaced) - // Make sender clickable: encode senderPeerID into a custom URL - if let spid = message.senderPeerID, let url = URL(string: "bitchat://user/\(spid.toPercentEncoded())") { - senderStyle.link = url - } - - // Prefix "<@" - result.append(AttributedString("<@").mergingAttributes(senderStyle)) - // Base name - result.append(AttributedString(baseName).mergingAttributes(senderStyle)) - // Optional suffix in lighter variant of the base color (green or orange for self) - if !suffix.isEmpty { - var suffixStyle = senderStyle - suffixStyle.foregroundColor = baseColor.opacity(0.6) - result.append(AttributedString(suffix).mergingAttributes(suffixStyle)) - } - // Suffix "> " - result.append(AttributedString("> ").mergingAttributes(senderStyle)) - - // Process content with hashtags and mentions - let content = message.content - - // For extremely long content, render as plain text to avoid heavy regex/layout work, - // unless the content includes Cashu tokens we want to chip-render below - // Compute NSString-backed length for regex/nsrange correctness with multi-byte characters - let nsContent = content as NSString - let nsLen = nsContent.length - let containsCashuEarly: Bool = { - let rx = Patterns.quickCashuPresence - return rx.numberOfMatches(in: content, options: [], range: NSRange(location: 0, length: nsLen)) > 0 - }() - if (content.count > 4000 || content.hasVeryLongToken(threshold: 1024)) && !containsCashuEarly { - var plainStyle = AttributeContainer() - plainStyle.foregroundColor = baseColor - plainStyle.font = isSelf - ? .bitchatSystem(size: 14, weight: .bold, design: .monospaced) - : .bitchatSystem(size: 14, design: .monospaced) - result.append(AttributedString(content).mergingAttributes(plainStyle)) - } else { - // Reuse compiled regexes and detector from MessageFormattingEngine - let hashtagRegex = Patterns.hashtag - let mentionRegex = Patterns.mention - let cashuRegex = Patterns.cashu - let bolt11Regex = Patterns.bolt11 - let lnurlRegex = Patterns.lnurl - let lightningSchemeRegex = Patterns.lightningScheme - let detector = Patterns.linkDetector - let hasMentionsHint = content.contains("@") - let hasHashtagsHint = content.contains("#") - let hasURLHint = content.contains("://") || content.contains("www.") || content.contains("http") - let hasLightningHint = content.lowercased().contains("ln") || content.lowercased().contains("lightning:") - let hasCashuHint = content.lowercased().contains("cashu") - - let hashtagMatches = hasHashtagsHint ? hashtagRegex.matches(in: content, options: [], range: NSRange(location: 0, length: nsLen)) : [] - let mentionMatches = hasMentionsHint ? mentionRegex.matches(in: content, options: [], range: NSRange(location: 0, length: nsLen)) : [] - let urlMatches = hasURLHint ? (detector?.matches(in: content, options: [], range: NSRange(location: 0, length: nsLen)) ?? []) : [] - let cashuMatches = hasCashuHint ? cashuRegex.matches(in: content, options: [], range: NSRange(location: 0, length: nsLen)) : [] - let lightningMatches = hasLightningHint ? lightningSchemeRegex.matches(in: content, options: [], range: NSRange(location: 0, length: nsLen)) : [] - let bolt11Matches = hasLightningHint ? bolt11Regex.matches(in: content, options: [], range: NSRange(location: 0, length: nsLen)) : [] - let lnurlMatches = hasLightningHint ? lnurlRegex.matches(in: content, options: [], range: NSRange(location: 0, length: nsLen)) : [] - - // Combine and sort matches, excluding hashtags/URLs overlapping mentions - let mentionRanges = mentionMatches.map { $0.range(at: 0) } - func overlapsMention(_ r: NSRange) -> Bool { - for mr in mentionRanges { if NSIntersectionRange(r, mr).length > 0 { return true } } - return false - } - // Helper: check if a hashtag is immediately attached to a preceding @mention (e.g., @name#abcd) - func attachedToMention(_ r: NSRange) -> Bool { - if let nsRange = Range(r, in: content), nsRange.lowerBound > content.startIndex { - var i = content.index(before: nsRange.lowerBound) - while true { - let ch = content[i] - if ch.isWhitespace || ch.isNewline { break } - if ch == "@" { return true } - if i == content.startIndex { break } - i = content.index(before: i) - } - } - return false - } - // Helper: ensure '#' starts a new token (start-of-line or whitespace before '#') - func isStandaloneHashtag(_ r: NSRange) -> Bool { - guard let nsRange = Range(r, in: content) else { return false } - if nsRange.lowerBound == content.startIndex { return true } - let prev = content.index(before: nsRange.lowerBound) - return content[prev].isWhitespace || content[prev].isNewline - } - var allMatches: [(range: NSRange, type: String)] = [] - for match in hashtagMatches where !overlapsMention(match.range(at: 0)) && !attachedToMention(match.range(at: 0)) && isStandaloneHashtag(match.range(at: 0)) { - allMatches.append((match.range(at: 0), "hashtag")) - } - for match in mentionMatches { - allMatches.append((match.range(at: 0), "mention")) - } - for match in urlMatches where !overlapsMention(match.range) { - allMatches.append((match.range, "url")) - } - for match in cashuMatches where !overlapsMention(match.range(at: 0)) { - allMatches.append((match.range(at: 0), "cashu")) - } - // Lightning scheme first to avoid overlapping submatches - for match in lightningMatches where !overlapsMention(match.range(at: 0)) { - allMatches.append((match.range(at: 0), "lightning")) - } - // Exclude overlaps with lightning/url for bolt11/lnurl - let occupied: [NSRange] = urlMatches.map { $0.range } + lightningMatches.map { $0.range(at: 0) } - func overlapsOccupied(_ r: NSRange) -> Bool { - for or in occupied { if NSIntersectionRange(r, or).length > 0 { return true } } - return false - } - for match in bolt11Matches where !overlapsMention(match.range(at: 0)) && !overlapsOccupied(match.range(at: 0)) { - allMatches.append((match.range(at: 0), "bolt11")) - } - for match in lnurlMatches where !overlapsMention(match.range(at: 0)) && !overlapsOccupied(match.range(at: 0)) { - allMatches.append((match.range(at: 0), "lnurl")) - } - allMatches.sort { $0.range.location < $1.range.location } - - // Build content with styling - var lastEnd = content.startIndex - let isMentioned = message.mentions?.contains(nickname) ?? false - - for (range, type) in allMatches { - // Add text before match - if let nsRange = Range(range, in: content) { - if lastEnd < nsRange.lowerBound { - let beforeText = String(content[lastEnd..) - let token = String(matchText.dropFirst()).lowercased() - let allowed = Set("0123456789bcdefghjkmnpqrstuvwxyz") - let isGeohash = (2...12).contains(token.count) && token.allSatisfy { allowed.contains($0) } - // Do not link if this hashtag is directly attached to an @mention (e.g., @name#geohash) - let attachedToMention: Bool = { - // nsRange is the Range for this match within content - // Walk left until whitespace/newline; if we encounter '@' first, treat as part of mention - if nsRange.lowerBound > content.startIndex { - var i = content.index(before: nsRange.lowerBound) - while true { - let ch = content[i] - if ch.isWhitespace || ch.isNewline { break } - if ch == "@" { return true } - if i == content.startIndex { break } - i = content.index(before: i) - } - } - return false - }() - // Also require the '#' to start a new token (whitespace or start-of-line before '#') - let standalone: Bool = { - if nsRange.lowerBound == content.startIndex { return true } - let prev = content.index(before: nsRange.lowerBound) - return content[prev].isWhitespace || content[prev].isNewline - }() - var tagStyle = AttributeContainer() - tagStyle.font = isSelf - ? .bitchatSystem(size: 14, weight: .bold, design: .monospaced) - : .bitchatSystem(size: 14, design: .monospaced) - tagStyle.foregroundColor = baseColor - if isGeohash && !attachedToMention && standalone, let url = URL(string: "bitchat://geohash/\(token)") { - tagStyle.link = url - tagStyle.underlineStyle = .single - } - result.append(AttributedString(matchText).mergingAttributes(tagStyle)) - } else if type == "cashu" { - // Skip inline token; a styled chip is rendered below the message - // We insert a single space to avoid words sticking together - var spacer = AttributeContainer() - spacer.foregroundColor = baseColor - spacer.font = isSelf - ? .bitchatSystem(size: 14, weight: .bold, design: .monospaced) - : .bitchatSystem(size: 14, design: .monospaced) - result.append(AttributedString(" ").mergingAttributes(spacer)) - } else if type == "lightning" || type == "bolt11" || type == "lnurl" { - // Skip inline invoice/link; a styled chip is rendered below the message - var spacer = AttributeContainer() - spacer.foregroundColor = baseColor - spacer.font = isSelf - ? .bitchatSystem(size: 14, weight: .bold, design: .monospaced) - : .bitchatSystem(size: 14, design: .monospaced) - result.append(AttributedString(" ").mergingAttributes(spacer)) - } else { - // Keep URL styling and make it tappable via .link attribute - var matchStyle = AttributeContainer() - matchStyle.font = .bitchatSystem(size: 14, weight: isSelf ? .bold : .semibold, design: .monospaced) - if type == "url" { - matchStyle.foregroundColor = isSelf ? .orange : .blue - matchStyle.underlineStyle = .single - if let url = URL(string: matchText) { - matchStyle.link = url - } - } - result.append(AttributedString(matchText).mergingAttributes(matchStyle)) - } - } - // Advance lastEnd safely in case of overlaps - if lastEnd < nsRange.upperBound { - lastEnd = nsRange.upperBound - } - } - } - - // Add remaining text - if lastEnd < content.endIndex { - let remainingText = String(content[lastEnd...]) - var remainingStyle = AttributeContainer() - remainingStyle.foregroundColor = baseColor - remainingStyle.font = isSelf - ? .bitchatSystem(size: 14, weight: .bold, design: .monospaced) - : .bitchatSystem(size: 14, design: .monospaced) - if isMentioned { - remainingStyle.font = remainingStyle.font?.bold() - } - result.append(AttributedString(remainingText).mergingAttributes(remainingStyle)) - } - } - - // Add timestamp at the end (smaller, light grey) - let timestamp = AttributedString(" [\(message.formattedTimestamp)]") - var timestampStyle = AttributeContainer() - timestampStyle.foregroundColor = Color.gray.opacity(0.7) - timestampStyle.font = .bitchatSystem(size: 10, design: .monospaced) - result.append(timestamp.mergingAttributes(timestampStyle)) - } else { - // System message - var contentStyle = AttributeContainer() - contentStyle.foregroundColor = Color.gray - let content = AttributedString("* \(message.content) *") - contentStyle.font = .bitchatSystem(size: 12, design: .monospaced).italic() - result.append(content.mergingAttributes(contentStyle)) - - // Add timestamp at the end for system messages too - let timestamp = AttributedString(" [\(message.formattedTimestamp)]") - var timestampStyle = AttributeContainer() - timestampStyle.foregroundColor = Color.gray.opacity(0.5) - timestampStyle.font = .bitchatSystem(size: 10, design: .monospaced) - result.append(timestamp.mergingAttributes(timestampStyle)) - } - - // Cache the formatted text - message.setCachedFormattedText(result, isDark: isDark, isSelf: isSelf) - - return result + messageFormatter.formatMessageAsText(message, colorScheme: colorScheme) } @MainActor func formatMessageHeader(_ message: BitchatMessage, colorScheme: ColorScheme) -> AttributedString { - let isSelf: Bool = { - if let spid = message.senderPeerID { - if case .location(let ch) = activeChannel, spid.id.hasPrefix("nostr:") { - if let myGeo = try? idBridge.deriveIdentity(forGeohash: ch.geohash) { - return spid == PeerID(nostr: myGeo.publicKeyHex) - } - } - return spid == meshService.myPeerID - } - if message.sender == nickname { return true } - if message.sender.hasPrefix(nickname + "#") { return true } - return false - }() - - let isDark = colorScheme == .dark - let baseColor: Color = isSelf ? .orange : peerColor(for: message, isDark: isDark) - - if message.sender == "system" { - var style = AttributeContainer() - style.foregroundColor = baseColor - style.font = .bitchatSystem(size: 14, weight: .medium, design: .monospaced) - return AttributedString(message.sender).mergingAttributes(style) - } - - var result = AttributedString() - let (baseName, suffix) = message.sender.splitSuffix() - var senderStyle = AttributeContainer() - senderStyle.foregroundColor = baseColor - senderStyle.font = .bitchatSystem(size: 14, weight: isSelf ? .bold : .medium, design: .monospaced) - if let spid = message.senderPeerID, - let url = URL(string: "bitchat://user/\(spid.id.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? spid.id)") { - senderStyle.link = url - } - - result.append(AttributedString("<@").mergingAttributes(senderStyle)) - result.append(AttributedString(baseName).mergingAttributes(senderStyle)) - if !suffix.isEmpty { - var suffixStyle = senderStyle - suffixStyle.foregroundColor = baseColor.opacity(0.6) - result.append(AttributedString(suffix).mergingAttributes(suffixStyle)) - } - result.append(AttributedString("> ").mergingAttributes(senderStyle)) - return result + messageFormatter.formatMessageHeader(message, colorScheme: colorScheme) } // MARK: - Noise Protocol Support @MainActor func updateEncryptionStatusForPeers() { - for peerID in connectedPeers { - updateEncryptionStatusForPeer(peerID) - } + peerIdentityCoordinator.updateEncryptionStatusForPeers() } @MainActor - private func updateEncryptionStatusForPeer(_ peerID: PeerID) { - let noiseService = meshService.getNoiseService() - - if noiseService.hasEstablishedSession(with: peerID) { - peerEncryptionStatus[peerID] = encryptionStatus(for: peerID) - } else if noiseService.hasSession(with: peerID) { - // Session exists but not established - handshaking - peerEncryptionStatus[peerID] = .noiseHandshaking - } else { - // No session at all - peerEncryptionStatus[peerID] = Optional.none - } - - // Invalidate cache when encryption status changes - invalidateEncryptionCache(for: peerID) - - // UI will update automatically via @Published properties + func updateEncryptionStatus(for peerID: PeerID) { + peerIdentityCoordinator.updateEncryptionStatus(for: peerID) } @MainActor func getEncryptionStatus(for peerID: PeerID) -> EncryptionStatus { - // Check cache first - if let cachedStatus = encryptionStatusCache[peerID] { - return cachedStatus - } - - // This must be a pure function - no state mutations allowed - // to avoid SwiftUI update loops - - // Check if we've ever established a session by looking for a fingerprint - let hasEverEstablishedSession = getFingerprint(for: peerID) != nil - - let sessionState = meshService.getNoiseSessionState(for: peerID) - - let status: EncryptionStatus - - // Determine status based on session state - switch sessionState { - case .established: - status = encryptionStatus(for: peerID) - case .handshaking, .handshakeQueued: - // If we've ever established a session, show secured instead of handshaking - if hasEverEstablishedSession { - // Check if it was verified before - status = encryptionStatus(for: peerID) - } else { - // First time establishing - show handshaking - status = .noiseHandshaking - } - case .none: - // If we've ever established a session, show secured instead of no handshake - if hasEverEstablishedSession { - // Check if it was verified before - status = encryptionStatus(for: peerID) - } else { - // Never established - show no handshake - status = .noHandshake - } - case .failed: - // If we've ever established a session, show secured instead of failed - if hasEverEstablishedSession { - // Check if it was verified before - status = encryptionStatus(for: peerID) - } else { - // Never established - show failed - status = .none - } - } - - // Cache the result - encryptionStatusCache[peerID] = status - - // Encryption status determined: \(status) - - return status + peerIdentityCoordinator.getEncryptionStatus(for: peerID) } // Clear caches when data changes - private func invalidateEncryptionCache(for peerID: PeerID? = nil) { - if let peerID { - encryptionStatusCache.removeValue(forKey: peerID) - } else { - encryptionStatusCache.removeAll() - } + @MainActor + func invalidateEncryptionCache(for peerID: PeerID? = nil) { + peerIdentityCoordinator.invalidateEncryptionCache(for: peerID) } // MARK: - Message Handling - + + @MainActor + func initializeConversationStore() { + publicConversationCoordinator.initializeConversationStore() + } + + @MainActor + func synchronizePublicConversationStore(for channel: ChannelID) { + publicConversationCoordinator.synchronizePublicConversationStore(for: channel) + } + + @MainActor + func synchronizePublicConversationStore(forGeohash geohash: String) { + publicConversationCoordinator.synchronizePublicConversationStore(forGeohash: geohash) + } + + @MainActor + func synchronizeAllPublicConversationStores() { + publicConversationCoordinator.synchronizeAllPublicConversationStores() + } + + @MainActor + func synchronizePrivateConversationStore() { + conversationStore.synchronizePrivateChats( + privateChatManager.privateChats, + unreadPeerIDs: privateChatManager.unreadMessages, + identityResolver: identityResolver + ) + } + + @MainActor + func synchronizeConversationSelectionStore() { + conversationStore.setSelectedPeerID( + privateChatManager.selectedPeer, + activeChannel: activeChannel, + identityResolver: identityResolver + ) + } + func trimMessagesIfNeeded() { if messages.count > maxMessages { messages = Array(messages.suffix(maxMessages)) @@ -2591,178 +1181,46 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, CommandContextProv @MainActor func refreshVisibleMessages(from channel: ChannelID? = nil) { - let target = channel ?? activeChannel - messages = timelineStore.messages(for: target) + publicConversationCoordinator.refreshVisibleMessages(from: channel) } @MainActor private func peerColor(for message: BitchatMessage, isDark: Bool) -> Color { - if let spid = message.senderPeerID { - if spid.isGeoChat || spid.isGeoDM { - let full = nostrKeyMapping[spid]?.lowercased() ?? spid.bare.lowercased() - return getNostrPaletteColor(for: full, isDark: isDark) - } else if spid.id.count == 16 { - // Mesh short ID - return getPeerPaletteColor(for: spid, isDark: isDark) - } else { - return getPeerPaletteColor(for: PeerID(str: spid.id.lowercased()), isDark: isDark) - } - } - // Fallback when we only have a display name - return Color(peerSeed: message.sender.lowercased(), isDark: isDark) + messageFormatter.senderColor(for: message, isDark: isDark) } // MARK: - MessageFormattingContext Protocol @MainActor func isSelfMessage(_ message: BitchatMessage) -> Bool { - if let spid = message.senderPeerID { - // In geohash channels, compare against our per-geohash nostr short ID - if case .location(let ch) = activeChannel, spid.isGeoChat { - let myGeo: NostrIdentity? = { - if let cached = cachedGeohashIdentity, cached.geohash == ch.geohash { - return cached.identity - } - // Derive and cache - if let identity = try? idBridge.deriveIdentity(forGeohash: ch.geohash) { - cachedGeohashIdentity = (ch.geohash, identity) - return identity - } - return nil - }() - if let myGeo { - return spid == PeerID(nostr: myGeo.publicKeyHex) - } - } - return spid == meshService.myPeerID - } - // Fallback by nickname - if message.sender == nickname { return true } - if message.sender.hasPrefix(nickname + "#") { return true } - return false + messageFormatter.isSelfMessage(message) } @MainActor func senderColor(for message: BitchatMessage, isDark: Bool) -> Color { - return peerColor(for: message, isDark: isDark) + peerColor(for: message, isDark: isDark) } @MainActor func peerURL(for peerID: PeerID) -> URL? { - return URL(string: "bitchat://user/\(peerID.toPercentEncoded())") + messageFormatter.peerURL(for: peerID) } // Public helpers for views to color peers consistently in lists @MainActor func colorForNostrPubkey(_ pubkeyHexLowercased: String, isDark: Bool) -> Color { - return getNostrPaletteColor(for: pubkeyHexLowercased.lowercased(), isDark: isDark) + messageFormatter.colorForNostrPubkey(pubkeyHexLowercased, isDark: isDark) } @MainActor func colorForMeshPeer(id peerID: PeerID, isDark: Bool) -> Color { - return getPeerPaletteColor(for: peerID, isDark: isDark) - } - - // MARK: - Peer Palette Coordination - private let meshPalette = MinimalDistancePalette(config: .mesh) - private let nostrPalette = MinimalDistancePalette(config: .nostr) - - @MainActor - private func meshSeed(for peerID: PeerID) -> String { - if let full = getNoiseKeyForShortID(peerID)?.id.lowercased() { - return "noise:" + full - } - return peerID.id.lowercased() - } - - @MainActor - private func getPeerPaletteColor(for peerID: PeerID, isDark: Bool) -> Color { - if peerID == meshService.myPeerID { - return .orange - } - - meshPalette.ensurePalette(for: currentMeshPaletteSeeds()) - if let color = meshPalette.color(for: peerID.id, isDark: isDark) { - return color - } - return Color(peerSeed: meshSeed(for: peerID), isDark: isDark) - } - - @MainActor - private func currentMeshPaletteSeeds() -> [String: String] { - let myID = meshService.myPeerID - var seeds: [String: String] = [:] - for peer in allPeers where peer.peerID != myID { - seeds[peer.peerID.id] = meshSeed(for: peer.peerID) - } - return seeds - } - - @MainActor - private func getNostrPaletteColor(for pubkeyHexLowercased: String, isDark: Bool) -> Color { - let myHex = currentGeohashIdentityHex() - if let myHex, pubkeyHexLowercased == myHex { - return .orange - } - - nostrPalette.ensurePalette(for: currentNostrPaletteSeeds(excluding: myHex)) - if let color = nostrPalette.color(for: pubkeyHexLowercased, isDark: isDark) { - return color - } - return Color(peerSeed: "nostr:" + pubkeyHexLowercased, isDark: isDark) - } - - @MainActor - private func currentNostrPaletteSeeds(excluding myHex: String?) -> [String: String] { - var seeds: [String: String] = [:] - let excluded = myHex ?? "" - for person in visibleGeohashPeople() where person.id != excluded { - seeds[person.id] = "nostr:" + person.id - } - return seeds - } - - @MainActor - private func currentGeohashIdentityHex() -> String? { - if case .location(let channel) = LocationChannelManager.shared.selectedChannel, - let identity = try? idBridge.deriveIdentity(forGeohash: channel.geohash) { - return identity.publicKeyHex.lowercased() - } - return nil + messageFormatter.colorForMeshPeer(id: peerID, isDark: isDark) } // Clear the current public channel's timeline (visible + persistent buffer) @MainActor func clearCurrentPublicTimeline() { - // Clear messages from current timeline - messages.removeAll() - timelineStore.clear(channel: activeChannel) - - // Delete associated media files (images, voice notes, files) in background - // Only delete from current chat to avoid removing private chat media - Task.detached(priority: .utility) { - do { - let base = try FileManager.default.url(for: .applicationSupportDirectory, in: .userDomainMask, appropriateFor: nil, create: true) - let filesDir = base.appendingPathComponent("files", isDirectory: true) - - // Only clear public media (mesh channel only - geohash media is separate) - // Note: This is conservative - only clears outgoing since we authored those - let outgoingDirs = [ - filesDir.appendingPathComponent("voicenotes/outgoing", isDirectory: true), - filesDir.appendingPathComponent("images/outgoing", isDirectory: true), - filesDir.appendingPathComponent("files/outgoing", isDirectory: true) - ] - - for dir in outgoingDirs { - if FileManager.default.fileExists(atPath: dir.path) { - try? FileManager.default.removeItem(at: dir) - try? FileManager.default.createDirectory(at: dir, withIntermediateDirectories: true, attributes: nil) - } - } - } catch { - SecureLogger.error("Failed to clear media files: \(error)", category: .session) - } - } + publicConversationCoordinator.clearCurrentPublicTimeline() } // MARK: - Message Management @@ -2774,31 +1232,6 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, CommandContextProv trimMessagesIfNeeded() } - // Update encryption status in appropriate places, not during view updates - @MainActor - private func updateEncryptionStatus(for peerID: PeerID) { - let noiseService = meshService.getNoiseService() - - if noiseService.hasEstablishedSession(with: peerID) { - peerEncryptionStatus[peerID] = encryptionStatus(for: peerID) - } else if noiseService.hasSession(with: peerID) { - peerEncryptionStatus[peerID] = .noiseHandshaking - } else { - peerEncryptionStatus[peerID] = Optional.none - } - - // Invalidate cache when encryption status changes - invalidateEncryptionCache(for: peerID) - - // UI will update automatically via @Published properties - } - - // MARK: - Fingerprint Management - - func showFingerprint(for peerID: PeerID) { - showingFingerprintFor = peerID - } - // MARK: - Peer Lookup Helpers func getPeer(byID peerID: PeerID) -> BitchatPeer? { @@ -2807,167 +1240,37 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, CommandContextProv @MainActor func getFingerprint(for peerID: PeerID) -> String? { - return unifiedPeerService.getFingerprint(for: peerID) - } - - /// Check if fingerprint is verified using our persisted data - @MainActor - private func encryptionStatus(for peerID: PeerID) -> EncryptionStatus { - if let fp = getFingerprint(for: peerID), verifiedFingerprints.contains(fp) { - return .noiseVerified - } else { - return .noiseSecured - } + peerIdentityCoordinator.getFingerprint(for: peerID) } /// Helper to resolve nickname for a peer ID through various sources @MainActor - private func resolveNickname(for peerID: PeerID) -> String { - // Guard against empty or very short peer IDs - guard !peerID.isEmpty else { - return "unknown" - } - - // Check if this might already be a nickname (not a hex peer ID) - // Peer IDs are hex strings, so they only contain 0-9 and a-f - if !peerID.isHex { - // If it's already a nickname, just return it - return peerID.id - } - - // First try direct peer nicknames from mesh service - let peerNicknames = meshService.getPeerNicknames() - if let nickname = peerNicknames[peerID] { - return nickname - } - - // Try to resolve through fingerprint and social identity - if let fingerprint = getFingerprint(for: peerID) { - if let identity = identityManager.getSocialIdentity(for: fingerprint) { - // Prefer local petname if set - if let petname = identity.localPetname { - return petname - } - // Otherwise use their claimed nickname - return identity.claimedNickname - } - } - - // Use anonymous with shortened peer ID - // Ensure we have at least 4 characters for the prefix - let prefixLength = min(4, peerID.id.count) - let prefix = String(peerID.id.prefix(prefixLength)) - - // Avoid "anonanon" by checking if ID already starts with "anon" - if prefix.starts(with: "anon") { - return "peer\(prefix)" - } - return "anon\(prefix)" + func resolveNickname(for peerID: PeerID) -> String { + peerIdentityCoordinator.resolveNickname(for: peerID) } + @MainActor func getMyFingerprint() -> String { - let fingerprint = meshService.getNoiseService().getIdentityFingerprint() - return fingerprint + peerIdentityCoordinator.getMyFingerprint() } @MainActor func verifyFingerprint(for peerID: PeerID) { - guard let fingerprint = getFingerprint(for: peerID) else { return } - - // Update secure storage with verified status - identityManager.setVerified(fingerprint: fingerprint, verified: true) - saveIdentityState() - - // Update local set for UI - verifiedFingerprints.insert(fingerprint) - - // Update encryption status after verification - updateEncryptionStatus(for: peerID) + verificationCoordinator.verifyFingerprint(for: peerID) } @MainActor func unverifyFingerprint(for peerID: PeerID) { - guard let fingerprint = getFingerprint(for: peerID) else { return } - identityManager.setVerified(fingerprint: fingerprint, verified: false) - saveIdentityState() - verifiedFingerprints.remove(fingerprint) - updateEncryptionStatus(for: peerID) + verificationCoordinator.unverifyFingerprint(for: peerID) } @MainActor func loadVerifiedFingerprints() { - // Load verified fingerprints directly from secure storage - verifiedFingerprints = identityManager.getVerifiedFingerprints() - // Log snapshot for debugging persistence - let sample = Array(verifiedFingerprints.prefix(TransportConfig.uiFingerprintSampleCount)).map { $0.prefix(8) }.joined(separator: ", ") - SecureLogger.info("🔐 Verified loaded: \(verifiedFingerprints.count) [\(sample)]", category: .security) - // Also log any offline favorites and whether we consider them verified - let offlineFavorites = unifiedPeerService.favorites.filter { !$0.isConnected } - for fav in offlineFavorites { - let fp = unifiedPeerService.getFingerprint(for: fav.peerID) - let isVer = fp.flatMap { verifiedFingerprints.contains($0) } ?? false - let fpShort = fp?.prefix(8) ?? "nil" - SecureLogger.info("⭐️ Favorite offline: \(fav.nickname) fp=\(fpShort) verified=\(isVer)", category: .security) - } - // Invalidate cached encryption statuses so offline favorites can show verified badges immediately - invalidateEncryptionCache() - // Trigger UI refresh of peer list - objectWillChange.send() + verificationCoordinator.loadVerifiedFingerprints() } - private func setupNoiseCallbacks() { - let noiseService = meshService.getNoiseService() - - // Set up authentication callback - noiseService.onPeerAuthenticated = { [weak self] peerID, fingerprint in - DispatchQueue.main.async { - guard let self = self else { return } - - SecureLogger.debug("🔐 Authenticated: \(peerID)", category: .security) - - // Update encryption status - if self.verifiedFingerprints.contains(fingerprint) { - self.peerEncryptionStatus[peerID] = .noiseVerified - // Encryption: noiseVerified - } else { - self.peerEncryptionStatus[peerID] = .noiseSecured - // Encryption: noiseSecured - } - - // Invalidate cache when encryption status changes - self.invalidateEncryptionCache(for: peerID) - - // Cache shortID -> full Noise key mapping as soon as session authenticates - if self.shortIDToNoiseKey[peerID] == nil, - let keyData = self.meshService.getNoiseService().getPeerPublicKeyData(peerID) { - let stable = PeerID(hexData: keyData) - self.shortIDToNoiseKey[peerID] = stable - SecureLogger.debug("🗺️ Mapped short peerID to Noise key for header continuity: \(peerID) -> \(stable.id.prefix(8))…", category: .session) - } - - // If a QR verification is pending but not sent yet, send it now that session is authenticated - if var pending = self.pendingQRVerifications[peerID], pending.sent == false { - self.meshService.sendVerifyChallenge(to: peerID, noiseKeyHex: pending.noiseKeyHex, nonceA: pending.nonceA) - pending.sent = true - self.pendingQRVerifications[peerID] = pending - SecureLogger.debug("📤 Sent deferred verify challenge to \(peerID) after handshake", category: .security) - } - - // Schedule UI update - // UI will update automatically - } - } - - // Set up handshake required callback - noiseService.onHandshakeRequired = { [weak self] peerID in - DispatchQueue.main.async { - guard let self = self else { return } - self.peerEncryptionStatus[peerID] = .noiseHandshaking - - // Invalidate cache when encryption status changes - self.invalidateEncryptionCache(for: peerID) - } - } + func setupNoiseCallbacks() { + verificationCoordinator.setupNoiseCallbacks() } // MARK: - BitchatDelegate Methods @@ -2978,7 +1281,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, CommandContextProv /// - Parameter command: The full command string including the leading slash /// - Note: Supports commands like /nick, /msg, /who, /slap, /clear, /help @MainActor - private func handleCommand(_ command: String) { + func handleCommand(_ command: String) { let result = commandProcessor.process(command) switch result { @@ -2997,230 +1300,33 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, CommandContextProv // MARK: - Message Reception func didReceiveMessage(_ message: BitchatMessage) { - Task { @MainActor in - // Early validation - guard !isMessageBlocked(message) else { return } - guard !message.content.trimmed.isEmpty || message.isPrivate else { return } - - // Route to appropriate handler - if message.isPrivate { - handlePrivateMessage(message) - } else { - handlePublicMessage(message) - } - - // Post-processing - checkForMentions(message) - sendHapticFeedback(for: message) - } - } - - /// Find message index trying both short (16-hex) and long (64-hex) peer ID formats. - /// Returns the peer ID where the message was found and its index, or nil if not found. - private func findMessageIndex(messageID: String, peerID: PeerID) -> (peerID: PeerID, index: Int)? { - // Try direct lookup first - if let messages = privateChats[peerID], - let idx = messages.firstIndex(where: { $0.id == messageID }) { - return (peerID, idx) - } - - // Try with full noise key if peerID is short (16 hex chars) - if peerID.bare.count == 16, - let peer = unifiedPeerService.getPeer(by: peerID), - !peer.noisePublicKey.isEmpty { - let longID = PeerID(hexData: peer.noisePublicKey) - if let messages = privateChats[longID], - let idx = messages.firstIndex(where: { $0.id == messageID }) { - return (longID, idx) - } - } - - // Try with short form if peerID is long (64 hex = noise key) - if peerID.bare.count == 64 { - let shortID = peerID.toShort() - if let messages = privateChats[shortID], - let idx = messages.firstIndex(where: { $0.id == messageID }) { - return (shortID, idx) - } - } - - return nil + transportEventCoordinator.didReceiveMessage(message) } // Low-level BLE events func didReceiveNoisePayload(from peerID: PeerID, type: NoisePayloadType, payload: Data, timestamp: Date) { - Task { @MainActor in - switch type { - case .privateMessage: - guard let pm = PrivateMessagePacket.decode(from: payload) else { return } - - // BCH-01-012: Check blocking before processing private message to prevent notification bypass - if isPeerBlocked(peerID) { - SecureLogger.debug("🚫 Ignoring Noise payload from blocked peer: \(peerID)", category: .security) - return - } - - let senderName = unifiedPeerService.getPeer(by: peerID)?.nickname ?? "Unknown" - let pmMentions = parseMentions(from: pm.content) - let msg = BitchatMessage( - id: pm.messageID, - sender: senderName, - content: pm.content, - timestamp: timestamp, - isRelay: false, - originalSender: nil, - isPrivate: true, - recipientNickname: nickname, - senderPeerID: peerID, - mentions: pmMentions.isEmpty ? nil : pmMentions - ) - handlePrivateMessage(msg) - // Send delivery ACK back over BLE - meshService.sendDeliveryAck(for: pm.messageID, to: peerID) - - case .delivered: - guard let messageID = String(data: payload, encoding: .utf8) else { return } - guard let name = unifiedPeerService.getPeer(by: peerID)?.nickname, - let (foundPeerID, idx) = findMessageIndex(messageID: messageID, peerID: peerID) else { return } - - // Don't downgrade from .read to .delivered - if case .read = privateChats[foundPeerID]?[idx].deliveryStatus { return } - - privateChats[foundPeerID]?[idx].deliveryStatus = .delivered(to: name, at: Date()) - objectWillChange.send() - - case .readReceipt: - guard let messageID = String(data: payload, encoding: .utf8) else { return } - guard let name = unifiedPeerService.getPeer(by: peerID)?.nickname, - let (foundPeerID, idx) = findMessageIndex(messageID: messageID, peerID: peerID) else { return } - - // Explicitly unwrap and re-assign to ensure the @Published setter is called - if let messages = privateChats[foundPeerID], idx < messages.count { - messages[idx].deliveryStatus = .read(by: name, at: Date()) - privateChats[foundPeerID] = messages - privateChatManager.objectWillChange.send() - objectWillChange.send() - } - case .verifyChallenge: - // Parse and respond - guard let tlv = VerificationService.shared.parseVerifyChallenge(payload) else { return } - // Ensure intended for our noise key - let myNoiseHex = meshService.getNoiseService().getStaticPublicKeyData().hexEncodedString().lowercased() - guard tlv.noiseKeyHex.lowercased() == myNoiseHex else { return } - // Deduplicate: ignore if we've already responded to this nonce for this peer - if let last = lastVerifyNonceByPeer[peerID], last == tlv.nonceA { return } - lastVerifyNonceByPeer[peerID] = tlv.nonceA - // Record inbound challenge time keyed by stable fingerprint if available - if let fp = getFingerprint(for: peerID) { - lastInboundVerifyChallengeAt[fp] = Date() - // If we've already verified this fingerprint locally, treat this as mutual and toast immediately (responder side) - if verifiedFingerprints.contains(fp) { - let now = Date() - let last = lastMutualToastAt[fp] ?? .distantPast - if now.timeIntervalSince(last) > 60 { // 1-minute throttle - lastMutualToastAt[fp] = now - let name = unifiedPeerService.getPeer(by: peerID)?.nickname ?? resolveNickname(for: peerID) - NotificationService.shared.sendLocalNotification( - title: "Mutual verification", - body: "You and \(name) verified each other", - identifier: "verify-mutual-\(peerID)-\(UUID().uuidString)" - ) - } - } - } - meshService.sendVerifyResponse(to: peerID, noiseKeyHex: tlv.noiseKeyHex, nonceA: tlv.nonceA) - // Silent response: no toast needed on responder - case .verifyResponse: - guard let resp = VerificationService.shared.parseVerifyResponse(payload) else { return } - // Check pending for this peer - guard let pending = pendingQRVerifications[peerID] else { return } - guard resp.noiseKeyHex.lowercased() == pending.noiseKeyHex.lowercased(), resp.nonceA == pending.nonceA else { return } - // Verify signature with expected sign key - let ok = VerificationService.shared.verifyResponseSignature(noiseKeyHex: resp.noiseKeyHex, nonceA: resp.nonceA, signature: resp.signature, signerPublicKeyHex: pending.signKeyHex) - if ok { - pendingQRVerifications.removeValue(forKey: peerID) - if let fp = getFingerprint(for: peerID) { - let short = fp.prefix(8) - SecureLogger.info("🔐 Marking verified fingerprint: \(short)", category: .security) - identityManager.setVerified(fingerprint: fp, verified: true) - saveIdentityState() - verifiedFingerprints.insert(fp) - let name = unifiedPeerService.getPeer(by: peerID)?.nickname ?? resolveNickname(for: peerID) - NotificationService.shared.sendLocalNotification( - title: "Verified", - body: "You verified \(name)", - identifier: "verify-success-\(peerID)-\(UUID().uuidString)" - ) - // If we also recently responded to their challenge, flag mutual and toast (initiator side) - if let t = lastInboundVerifyChallengeAt[fp], Date().timeIntervalSince(t) < 600 { - let now = Date() - let lastToast = lastMutualToastAt[fp] ?? .distantPast - if now.timeIntervalSince(lastToast) > 60 { - lastMutualToastAt[fp] = now - NotificationService.shared.sendLocalNotification( - title: "Mutual verification", - body: "You and \(name) verified each other", - identifier: "verify-mutual-\(peerID)-\(UUID().uuidString)" - ) - } - } - updateEncryptionStatus(for: peerID) - } - } - } - } + transportEventCoordinator.didReceiveNoisePayload( + from: peerID, + type: type, + payload: payload, + timestamp: timestamp + ) } func didReceivePublicMessage(from peerID: PeerID, nickname: String, content: String, timestamp: Date, messageID: String?) { - Task { @MainActor in - let normalized = content.trimmed - let publicMentions = parseMentions(from: normalized) - let msg = BitchatMessage( - id: messageID, - sender: nickname, - content: normalized, - timestamp: timestamp, - isRelay: false, - originalSender: nil, - isPrivate: false, - recipientNickname: nil, - senderPeerID: peerID, - mentions: publicMentions.isEmpty ? nil : publicMentions - ) - handlePublicMessage(msg) - checkForMentions(msg) - sendHapticFeedback(for: msg) - } + transportEventCoordinator.didReceivePublicMessage( + from: peerID, + nickname: nickname, + content: content, + timestamp: timestamp, + messageID: messageID + ) } // MARK: - QR Verification API @MainActor func beginQRVerification(with qr: VerificationService.VerificationQR) -> Bool { - // Find a matching peer by Noise key - let targetNoise = qr.noiseKeyHex.lowercased() - guard let peer = unifiedPeerService.peers.first(where: { $0.noisePublicKey.hexEncodedString().lowercased() == targetNoise }) else { - return false - } - let peerID = peer.peerID - // If we already have a pending verification with this peer, don't send another - if pendingQRVerifications[peerID] != nil { - return true - } - // Generate nonceA - var nonce = Data(count: 16) - _ = nonce.withUnsafeMutableBytes { SecRandomCopyBytes(kSecRandomDefault, 16, $0.baseAddress!) } - var pending = PendingVerification(noiseKeyHex: qr.noiseKeyHex, signKeyHex: qr.signKeyHex, nonceA: nonce, startedAt: Date(), sent: false) - pendingQRVerifications[peerID] = pending - // If Noise session is established, send immediately; otherwise trigger handshake and send on auth - let noise = meshService.getNoiseService() - if noise.hasEstablishedSession(with: peerID) { - meshService.sendVerifyChallenge(to: peerID, noiseKeyHex: qr.noiseKeyHex, nonceA: nonce) - pending.sent = true - pendingQRVerifications[peerID] = pending - } else { - meshService.triggerHandshake(with: peerID) - } - return true + verificationCoordinator.beginQRVerification(with: qr) } // Mention parsing moved from BLE – use the existing non-optional helper below @@ -3235,325 +1341,24 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, CommandContextProv // MARK: - Peer Connection Events func didConnectToPeer(_ peerID: PeerID) { - SecureLogger.debug("🤝 Peer connected: \(peerID)", category: .session) - - // Handle all main actor work async - Task { @MainActor in - isConnected = true - - // Register ephemeral session with identity manager - identityManager.registerEphemeralSession(peerID: peerID, handshakeState: .none) - - // Intentionally do not resend favorites on reconnect. - // We only send our npub when a favorite is toggled on, or if our npub changes. - - // Force UI refresh - objectWillChange.send() - - // Cache mapping to full Noise key for session continuity on disconnect - if let peer = unifiedPeerService.getPeer(by: peerID) { - let noiseKeyHex = PeerID(hexData: peer.noisePublicKey) - shortIDToNoiseKey[peerID] = noiseKeyHex - } - - // Flush any queued messages for this peer via router - messageRouter.flushOutbox(for: peerID) - } + transportEventCoordinator.didConnectToPeer(peerID) } func didDisconnectFromPeer(_ peerID: PeerID) { - SecureLogger.debug("👋 Peer disconnected: \(peerID)", category: .session) - - // Remove ephemeral session from identity manager - identityManager.removeEphemeralSession(peerID: peerID) - - // If the open PM is tied to this short peer ID, switch UI context to the full Noise key (offline favorite) - var derivedStableKeyHex = shortIDToNoiseKey[peerID] - if derivedStableKeyHex == nil, - let key = meshService.getNoiseService().getPeerPublicKeyData(peerID) { - derivedStableKeyHex = PeerID(hexData: key) - shortIDToNoiseKey[peerID] = derivedStableKeyHex - } - - if let current = selectedPrivateChatPeer, current == peerID, let stableKeyHex = derivedStableKeyHex { - // Migrate messages view context to stable key so header shows favorite + Nostr globe - if let messages = privateChats[peerID] { - if privateChats[stableKeyHex] == nil { privateChats[stableKeyHex] = [] } - let existing = Set(privateChats[stableKeyHex]!.map { $0.id }) - for msg in messages where !existing.contains(msg.id) { - let updated = BitchatMessage( - id: msg.id, - sender: msg.sender, - content: msg.content, - timestamp: msg.timestamp, - isRelay: msg.isRelay, - originalSender: msg.originalSender, - isPrivate: msg.isPrivate, - recipientNickname: msg.recipientNickname, - senderPeerID: msg.senderPeerID == meshService.myPeerID ? meshService.myPeerID : stableKeyHex, - mentions: msg.mentions, - deliveryStatus: msg.deliveryStatus - ) - privateChats[stableKeyHex]?.append(updated) - } - privateChats[stableKeyHex]?.sort { $0.timestamp < $1.timestamp } - privateChats.removeValue(forKey: peerID) - } - if unreadPrivateMessages.contains(peerID) { - unreadPrivateMessages.remove(peerID) - unreadPrivateMessages.insert(stableKeyHex) - } - selectedPrivateChatPeer = stableKeyHex - objectWillChange.send() - } - - // Update peer list immediately and force UI refresh - DispatchQueue.main.async { [weak self] in - // UnifiedPeerService updates automatically via subscriptions - self?.objectWillChange.send() - } - - // Clear sent read receipts for this peer since they'll need to be resent after reconnection - // Only clear receipts for messages from this specific peer - if let messages = privateChats[peerID] { - for message in messages { - // Remove read receipts for messages FROM this peer (not TO this peer) - if message.senderPeerID == peerID { - sentReadReceipts.remove(message.id) - } - } - } + transportEventCoordinator.didDisconnectFromPeer(peerID) } func didUpdatePeerList(_ peers: [PeerID]) { - // UI updates must run on the main thread. - // The delegate callback is not guaranteed to be on the main thread. - DispatchQueue.main.async { - // Update through peer manager - // UnifiedPeerService updates automatically via subscriptions - self.isConnected = !peers.isEmpty - - // Clean up stale unread peer IDs whenever peer list updates - self.cleanupStaleUnreadPeerIDs() - - // Smart notification logic for "bitchatters nearby" - let meshPeers = peers.filter { peerID in - self.meshService.isPeerConnected(peerID) || self.meshService.isPeerReachable(peerID) - } - let meshPeerSet = Set(meshPeers) - - if meshPeerSet.isEmpty { - self.scheduleNetworkEmptyTimer() - } else { - self.invalidateNetworkEmptyTimer() - // Don't trim recentlySeenPeers here - let timers handle cleanup. - // Trimming immediately causes peers to be treated as "new" when they - // briefly drop and reconnect, triggering notification floods. - let newPeers = meshPeerSet.subtracting(self.recentlySeenPeers) - - if !newPeers.isEmpty { - // Rate limit: max one notification per 5 minutes - let cooldown = TransportConfig.networkNotificationCooldownSeconds - if Date().timeIntervalSince(self.lastNetworkNotificationTime) >= cooldown { - // Only mark peers as seen when we actually notify about them - // This ensures peers arriving during cooldown will be included in the next notification - self.recentlySeenPeers.formUnion(newPeers) - self.lastNetworkNotificationTime = Date() - NotificationService.shared.sendNetworkAvailableNotification(peerCount: meshPeers.count) - SecureLogger.info( - "👥 Sent bitchatters nearby notification for \(meshPeers.count) mesh peers (new: \(newPeers.count))", - category: .session - ) - } - self.scheduleNetworkResetTimer() - } - } - - // Register ephemeral sessions for all connected peers - for peerID in peers { - self.identityManager.registerEphemeralSession(peerID: peerID, handshakeState: .none) - } - - // Schedule UI refresh to ensure offline favorites are shown - // UI will update automatically - - // Update encryption status for all peers - self.updateEncryptionStatusForPeers() - - // Schedule UI update for peer list change - // UI will update automatically - - // Check if we need to update private chat peer after reconnection - if self.selectedPrivateChatFingerprint != nil { - self.updatePrivateChatPeerIfNeeded() - } - - // Don't end private chat when peer temporarily disconnects - // The fingerprint tracking will allow us to reconnect when they come back - } + peerListCoordinator.didUpdatePeerList(peers) } - // MARK: - Helper Methods - - /// Clean up stale unread peer IDs that no longer exist in the peer list @MainActor - private func cleanupStaleUnreadPeerIDs() { - let currentPeerIDs = Set(unifiedPeerService.peers.map { $0.peerID }) - let staleIDs = unreadPrivateMessages.subtracting(currentPeerIDs) - - if !staleIDs.isEmpty { - var idsToRemove: [PeerID] = [] - for staleID in staleIDs { - // Don't remove temporary Nostr peer IDs that have messages - if staleID.isGeoDM { - // Check if we have messages from this temporary peer - if let messages = privateChats[staleID], !messages.isEmpty { - // Keep this ID - it has messages - continue - } - } - - // Don't remove stable Noise key hexes (64 char hex strings) that have messages - // These are used for Nostr messages when peer is offline - if staleID.isNoiseKeyHex { - if let messages = privateChats[staleID], !messages.isEmpty { - // Keep this ID - it's a stable key with messages - continue - } - } - - // Remove this stale ID - idsToRemove.append(staleID) - unreadPrivateMessages.remove(staleID) - } - - if !idsToRemove.isEmpty { - SecureLogger.debug("🧹 Cleaned up \(idsToRemove.count) stale unread peer IDs", category: .session) - } - } - - // Also clean up old sentReadReceipts to prevent unlimited growth - // Keep only receipts from messages we still have - cleanupOldReadReceipts() - } - - @MainActor - private func scheduleNetworkResetTimer() { - networkResetTimer?.invalidate() - networkResetTimer = Timer.scheduledTimer( - timeInterval: networkResetGraceSeconds, - target: self, - selector: #selector(onNetworkResetTimerFired(_:)), - userInfo: nil, - repeats: false - ) - } - - @MainActor - @objc private func onNetworkResetTimerFired(_ timer: Timer) { - let activeMeshPeers = meshService - .currentPeerSnapshots() - .filter { snapshot in - snapshot.isConnected || meshService.isPeerReachable(snapshot.peerID) - } - if activeMeshPeers.isEmpty { - recentlySeenPeers.removeAll() - SecureLogger.debug("⏱️ Network notification window reset after quiet period", category: .session) - } else { - SecureLogger.debug("⏱️ Skipped network notification reset; still seeing \(activeMeshPeers.count) mesh peers", category: .session) - } - networkResetTimer = nil - } - - @MainActor - private func scheduleNetworkEmptyTimer() { - guard networkEmptyTimer == nil else { return } - networkEmptyTimer = Timer.scheduledTimer( - timeInterval: TransportConfig.uiMeshEmptyConfirmationSeconds, - target: self, - selector: #selector(onNetworkEmptyTimerFired(_:)), - userInfo: nil, - repeats: false - ) - SecureLogger.debug("⏳ Mesh empty — waiting before resetting notification state", category: .session) - } - - @MainActor - private func invalidateNetworkEmptyTimer() { - if networkEmptyTimer != nil { - networkEmptyTimer?.invalidate() - networkEmptyTimer = nil - } - } - - @MainActor - @objc private func onNetworkEmptyTimerFired(_ timer: Timer) { - let activeMeshPeers = meshService - .currentPeerSnapshots() - .filter { snapshot in - snapshot.isConnected || meshService.isPeerReachable(snapshot.peerID) - } - if activeMeshPeers.isEmpty { - recentlySeenPeers.removeAll() - SecureLogger.debug("⏳ Mesh empty — notification state reset after confirmation", category: .session) - } else { - SecureLogger.debug("⏳ Mesh empty timer cancelled; \(activeMeshPeers.count) mesh peers detected again", category: .session) - } - networkEmptyTimer = nil - } - - private func cleanupOldReadReceipts() { - // Skip cleanup during startup phase or if privateChats is empty - // This prevents removing valid receipts before messages are loaded - if isStartupPhase || privateChats.isEmpty { - return - } - - // Build set of all message IDs we still have - var validMessageIDs = Set() - for (_, messages) in privateChats { - for message in messages { - validMessageIDs.insert(message.id) - } - } - - // Remove receipts for messages we no longer have - let oldCount = sentReadReceipts.count - sentReadReceipts = sentReadReceipts.intersection(validMessageIDs) - - let removedCount = oldCount - sentReadReceipts.count - if removedCount > 0 { - SecureLogger.debug("🧹 Cleaned up \(removedCount) old read receipts", category: .session) - } + func cleanupOldReadReceipts() { + deliveryCoordinator.cleanupOldReadReceipts() } func parseMentions(from content: String) -> [String] { - // Allow optional disambiguation suffix '#abcd' for duplicate nicknames - let regex = Patterns.mention - let nsContent = content as NSString - let nsLen = nsContent.length - let matches = regex.matches(in: content, options: [], range: NSRange(location: 0, length: nsLen)) - - var mentions: [String] = [] - let peerNicknames = meshService.getPeerNicknames() - // Compose the valid mention tokens based on current peers (already suffixed where needed) - var validTokens = Set(peerNicknames.values) - // Always allow mentioning self by base nickname and suffixed disambiguator - validTokens.insert(nickname) - let selfSuffixToken = nickname + "#" + String(meshService.myPeerID.id.prefix(4)) - validTokens.insert(selfSuffixToken) - - for match in matches { - if let range = Range(match.range(at: 1), in: content) { - let mentionedName = String(content[range]) - // Only include if it's a current valid token (base or suffixed) - if validTokens.contains(mentionedName) { - mentions.append(mentionedName) - } - } - } - - return Array(Set(mentions)) // Remove duplicates + composerCoordinator.parseMentions(from: content) } func isFavorite(fingerprint: String) -> Bool { @@ -3563,145 +1368,52 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, CommandContextProv // MARK: - Delivery Tracking func didReceiveReadReceipt(_ receipt: ReadReceipt) { - // Find the message and update its read status - updateMessageDeliveryStatus(receipt.originalMessageID, status: .read(by: receipt.readerNickname, at: receipt.timestamp)) + performDeliveryUpdate { coordinator in + coordinator.didReceiveReadReceipt(receipt) + } } func didUpdateMessageDeliveryStatus(_ messageID: String, status: DeliveryStatus) { - updateMessageDeliveryStatus(messageID, status: status) + performDeliveryUpdate { coordinator in + coordinator.didUpdateMessageDeliveryStatus(messageID, status: status) + } } func updateMessageDeliveryStatus(_ messageID: String, status: DeliveryStatus) { - - // Helper function to check if we should skip this update - func shouldSkipUpdate(currentStatus: DeliveryStatus?, newStatus: DeliveryStatus) -> Bool { - guard let current = currentStatus else { return false } - - // Don't downgrade from read to delivered - switch (current, newStatus) { - case (.read, .delivered): - return true - case (.read, .sent): - return true - default: - return false - } + performDeliveryUpdate { coordinator in + coordinator.updateMessageDeliveryStatus(messageID, status: status) } - - // Update in main messages - if let index = messages.firstIndex(where: { $0.id == messageID }) { - let currentStatus = messages[index].deliveryStatus - if !shouldSkipUpdate(currentStatus: currentStatus, newStatus: status) { - messages[index].deliveryStatus = status - } - } - - // Update in private chats - for (peerID, chatMessages) in privateChats { - guard let index = chatMessages.firstIndex(where: { $0.id == messageID }) else { continue } - - let currentStatus = chatMessages[index].deliveryStatus - guard !shouldSkipUpdate(currentStatus: currentStatus, newStatus: status) else { continue } - - // Update delivery status directly (BitchatMessage is a class/reference type) - privateChats[peerID]?[index].deliveryStatus = status - } - - // Trigger UI update for delivery status change - DispatchQueue.main.async { [weak self] in - self?.objectWillChange.send() - } - } // MARK: - Helper for System Messages func addSystemMessage(_ content: String, timestamp: Date = Date()) { - let systemMessage = BitchatMessage( - sender: "system", - content: content, - timestamp: timestamp, - isRelay: false - ) - messages.append(systemMessage) + publicConversationCoordinator.addSystemMessage(content, timestamp: timestamp) } /// Add a system message to the mesh timeline only (never geohash). /// If mesh is currently active, also append to the visible `messages`. @MainActor func addMeshOnlySystemMessage(_ content: String) { - let systemMessage = BitchatMessage( - sender: "system", - content: content, - timestamp: Date(), - isRelay: false - ) - timelineStore.append(systemMessage, to: .mesh) - refreshVisibleMessages() - trimMessagesIfNeeded() - objectWillChange.send() + publicConversationCoordinator.addMeshOnlySystemMessage(content) } /// Public helper to add a system message to the public chat timeline. /// Also persists the message into the active channel's backing store so it survives timeline rebinds. @MainActor func addPublicSystemMessage(_ content: String) { - let systemMessage = BitchatMessage( - sender: "system", - content: content, - timestamp: Date(), - isRelay: false - ) - timelineStore.append(systemMessage, to: activeChannel) - refreshVisibleMessages(from: activeChannel) - // Track the content key so relayed copies of the same system-style message are ignored - let contentKey = deduplicationService.normalizedContentKey(systemMessage.content) - deduplicationService.recordContentKey(contentKey, timestamp: systemMessage.timestamp) - trimMessagesIfNeeded() - objectWillChange.send() + publicConversationCoordinator.addPublicSystemMessage(content) } /// Add a system message only if viewing a geohash location channel (never post to mesh). @MainActor func addGeohashOnlySystemMessage(_ content: String) { - if case .location = activeChannel { - addPublicSystemMessage(content) - } else { - // Not on a location channel yet: queue to show when user switches - timelineStore.queueGeohashSystemMessage(content) - } + publicConversationCoordinator.addGeohashOnlySystemMessage(content) } // Send a public message without adding a local user echo. // Used for emotes where we want a local system-style confirmation instead. @MainActor func sendPublicRaw(_ content: String) { - if case .location(let ch) = activeChannel { - Task { @MainActor in - do { - let identity = try idBridge.deriveIdentity(forGeohash: ch.geohash) - let event = try NostrProtocol.createEphemeralGeohashEvent( - content: content, - geohash: ch.geohash, - senderIdentity: identity, - nickname: self.nickname, - teleported: LocationChannelManager.shared.teleported - ) - let targetRelays = GeoRelayDirectory.shared.closestRelays(toGeohash: ch.geohash, count: 5) - if targetRelays.isEmpty { - NostrRelayManager.shared.sendEvent(event) - } else { - NostrRelayManager.shared.sendEvent(event, to: targetRelays) - } - } catch { - SecureLogger.error("❌ Failed to send geohash raw message: \(error)", category: .session) - } - } - return - } - // Default: send over mesh - meshService.sendMessage(content, - mentions: [], - messageID: UUID().uuidString, - timestamp: Date()) + publicConversationCoordinator.sendPublicRaw(content) } @@ -3735,151 +1447,17 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, CommandContextProv /// Handle incoming public message @MainActor func handlePublicMessage(_ message: BitchatMessage) { - let finalMessage = processActionMessage(message) - - // Drop if sender is blocked (covers geohash via Nostr pubkey mapping) - if isMessageBlocked(finalMessage) { return } - - // Classify origin: geochat if senderPeerID starts with 'nostr:', else mesh (or system) - let isGeo = finalMessage.senderPeerID?.isGeoChat == true - - // Apply per-sender and per-content rate limits (drop if exceeded) - // Treat action-style system messages (which carry a senderPeerID) the same as regular user messages - let shouldRateLimit = finalMessage.sender != "system" || finalMessage.senderPeerID != nil - if shouldRateLimit { - let senderKey = normalizedSenderKey(for: finalMessage) - let contentKey = deduplicationService.normalizedContentKey(finalMessage.content) - if !publicRateLimiter.allow(senderKey: senderKey, contentKey: contentKey) { return } - } - - // Size cap: drop extremely large public messages early - if finalMessage.sender != "system" && finalMessage.content.count > 16000 { return } - - // Persist mesh messages to mesh timeline always - if !isGeo && finalMessage.sender != "system" { - timelineStore.append(finalMessage, to: .mesh) - } - - // Persist geochat messages to per-geohash timeline - if isGeo && finalMessage.sender != "system" { - if let gh = currentGeohash { - _ = timelineStore.appendIfAbsent(finalMessage, toGeohash: gh) - } - } - - // Only add message to current timeline if it matches active channel or is system - let isSystem = finalMessage.sender == "system" - let channelMatches: Bool = { - switch activeChannel { - case .mesh: return !isGeo || isSystem - case .location: return isGeo || isSystem - } - }() - - guard channelMatches else { return } - - // Removed background nudge notification for generic "new chats!" - - // Append via batching buffer (skip empty content) with simple dedup by ID - if !finalMessage.content.trimmed.isEmpty, !messages.contains(where: { $0.id == finalMessage.id }) { - publicMessagePipeline.enqueue(finalMessage) - } + publicConversationCoordinator.handlePublicMessage(message) } - /// Check for mentions and send notifications - - func checkForMentions(_ message: BitchatMessage) { // Determine our acceptable mention token. If any connected peer shares our nickname, - // require the disambiguated form '#' to trigger. - var myTokens: Set = [nickname] - let meshPeers = meshService.getPeerNicknames() - let collisions = meshPeers.values.filter { $0.hasPrefix(nickname + "#") } - if !collisions.isEmpty { - let suffix = "#" + String(meshService.myPeerID.id.prefix(4)) - myTokens = [nickname + suffix] + /// Check for mentions and send notifications + func checkForMentions(_ message: BitchatMessage) { + publicConversationCoordinator.checkForMentions(message) } - let isMentioned = (message.mentions?.contains { myTokens.contains($0) } ?? false) - - if isMentioned && message.sender != nickname { - SecureLogger.info("🔔 Mention from \(message.sender)", category: .session) - NotificationService.shared.sendMentionNotification(from: message.sender, message: message.content) - } -} /// Send haptic feedback for special messages (iOS only) - func sendHapticFeedback(for message: BitchatMessage) { #if os(iOS) - guard UIApplication.shared.applicationState == .active else { return } - - // Build acceptable target tokens: base nickname and, if in a location channel, nickname with '#abcd' - var tokens: [String] = [nickname] - #if os(iOS) - switch activeChannel { - case .location(let ch): - if let id = try? idBridge.deriveIdentity(forGeohash: ch.geohash) { - let d = String(id.publicKeyHex.suffix(4)) - tokens.append(nickname + "#" + d) - } - case .mesh: - break - } - #endif - - let hugsMe = tokens.contains { message.content.contains("hugs \($0)") } || message.content.contains("hugs you") - let slapsMe = tokens.contains { message.content.contains("slaps \($0) around") } || message.content.contains("slaps you around") - - let isHugForMe = message.content.contains("🫂") && hugsMe - let isSlapForMe = message.content.contains("🐟") && slapsMe - - if isHugForMe && message.sender != nickname { - // Long warm haptic for hugs - let impactFeedback = UIImpactFeedbackGenerator(style: .medium) - impactFeedback.prepare() - - for i in 0..<8 { - DispatchQueue.main.asyncAfter(deadline: .now() + Double(i) * TransportConfig.uiBatchDispatchStaggerSeconds) { - impactFeedback.impactOccurred() - } - } - } else if isSlapForMe && message.sender != nickname { - // Sharp haptic for slaps - let impactFeedback = UIImpactFeedbackGenerator(style: .heavy) - impactFeedback.prepare() - impactFeedback.impactOccurred() - } - #endif + func sendHapticFeedback(for message: BitchatMessage) { + publicConversationCoordinator.sendHapticFeedback(for: message) } } // End of ChatViewModel class - -extension ChatViewModel: PublicMessagePipelineDelegate { - func pipelineCurrentMessages(_ pipeline: PublicMessagePipeline) -> [BitchatMessage] { - messages - } - - func pipeline(_ pipeline: PublicMessagePipeline, setMessages messages: [BitchatMessage]) { - self.messages = messages - } - - func pipeline(_ pipeline: PublicMessagePipeline, normalizeContent content: String) -> String { - deduplicationService.normalizedContentKey(content) - } - - func pipeline(_ pipeline: PublicMessagePipeline, contentTimestampForKey key: String) -> Date? { - deduplicationService.contentTimestamp(forKey: key) - } - - func pipeline(_ pipeline: PublicMessagePipeline, recordContentKey key: String, timestamp: Date) { - deduplicationService.recordContentKey(key, timestamp: timestamp) - } - - func pipelineTrimMessages(_ pipeline: PublicMessagePipeline) { - trimMessagesIfNeeded() - } - - func pipelinePrewarmMessage(_ pipeline: PublicMessagePipeline, message: BitchatMessage) { - _ = formatMessageAsText(message, colorScheme: currentColorScheme) - } - - func pipelineSetBatchingState(_ pipeline: PublicMessagePipeline, isBatching: Bool) { - isBatchingPublic = isBatching - } -} diff --git a/bitchat/ViewModels/ChatViewModelBootstrapper.swift b/bitchat/ViewModels/ChatViewModelBootstrapper.swift new file mode 100644 index 00000000..b876ba08 --- /dev/null +++ b/bitchat/ViewModels/ChatViewModelBootstrapper.swift @@ -0,0 +1,279 @@ +import BitFoundation +import BitLogger +import Combine +import Foundation + +struct ChatViewModelServiceBundle { + let commandProcessor: CommandProcessor + let messageRouter: MessageRouter + let privateChatManager: PrivateChatManager + let unifiedPeerService: UnifiedPeerService + let autocompleteService: AutocompleteService + let deduplicationService: MessageDeduplicationService + let publicMessagePipeline: PublicMessagePipeline + + @MainActor + init( + keychain: KeychainManagerProtocol, + idBridge: NostrIdentityBridge, + identityManager: SecureIdentityStateManagerProtocol, + meshService: Transport + ) { + let commandProcessor = CommandProcessor(identityManager: identityManager) + let privateChatManager = PrivateChatManager(meshService: meshService) + let unifiedPeerService = UnifiedPeerService( + meshService: meshService, + idBridge: idBridge, + identityManager: identityManager + ) + let nostrTransport = NostrTransport(keychain: keychain, idBridge: idBridge) + nostrTransport.senderPeerID = meshService.myPeerID + let messageRouter = MessageRouter(transports: [meshService, nostrTransport]) + + self.commandProcessor = commandProcessor + self.messageRouter = messageRouter + self.privateChatManager = privateChatManager + self.unifiedPeerService = unifiedPeerService + self.autocompleteService = AutocompleteService() + self.deduplicationService = MessageDeduplicationService() + self.publicMessagePipeline = PublicMessagePipeline() + } +} + +@MainActor +final class ChatViewModelBootstrapper { + private unowned let viewModel: ChatViewModel + + init(viewModel: ChatViewModel) { + self.viewModel = viewModel + } + + static func loadPersistedReadReceipts(userDefaults: UserDefaults = .standard) -> Set { + guard let data = userDefaults.data(forKey: "sentReadReceipts"), + let receipts = try? JSONDecoder().decode([String].self, from: data) else { + return [] + } + return Set(receipts) + } + + func configure() { + wireServiceGraph() + bindFeatureObjectChanges() + loadPersistedViewState() + configureTransport() + startRuntimeServices() + bindPeerService() + configureNoiseCallbacks() + bindTransferProgress() + configureGeoChannels() + bindTeleportState() + requestNotifications() + registerObservers() + } +} + +private extension ChatViewModelBootstrapper { + func wireServiceGraph() { + viewModel.privateChatManager.messageRouter = viewModel.messageRouter + viewModel.privateChatManager.unifiedPeerService = viewModel.unifiedPeerService + viewModel.unifiedPeerService.messageRouter = viewModel.messageRouter + viewModel.commandProcessor.contextProvider = viewModel + viewModel.commandProcessor.meshService = viewModel.meshService + viewModel.participantTracker.configure(context: viewModel) + } + + func bindFeatureObjectChanges() { + viewModel.privateChatManager.objectWillChange + .sink { [weak viewModel] _ in + viewModel?.objectWillChange.send() + } + .store(in: &viewModel.cancellables) + + viewModel.privateChatManager.$privateChats + .receive(on: DispatchQueue.main) + .sink { [weak viewModel] _ in + Task { @MainActor [weak viewModel] in + viewModel?.synchronizePrivateConversationStore() + } + } + .store(in: &viewModel.cancellables) + + viewModel.privateChatManager.$unreadMessages + .receive(on: DispatchQueue.main) + .sink { [weak viewModel] _ in + Task { @MainActor [weak viewModel] in + viewModel?.synchronizePrivateConversationStore() + } + } + .store(in: &viewModel.cancellables) + + viewModel.privateChatManager.$selectedPeer + .receive(on: DispatchQueue.main) + .sink { [weak viewModel] _ in + Task { @MainActor [weak viewModel] in + viewModel?.synchronizeConversationSelectionStore() + } + } + .store(in: &viewModel.cancellables) + + viewModel.participantTracker.objectWillChange + .sink { [weak viewModel] _ in + viewModel?.objectWillChange.send() + } + .store(in: &viewModel.cancellables) + } + + func loadPersistedViewState() { + viewModel.loadNickname() + viewModel.loadVerifiedFingerprints() + } + + func configureTransport() { + viewModel.meshService.delegate = viewModel + + DispatchQueue.main.asyncAfter(deadline: .now() + TransportConfig.uiStartupInitialDelaySeconds) { [weak viewModel] in + guard let viewModel else { return } + _ = viewModel.getMyFingerprint() + } + + viewModel.meshService.setNickname(viewModel.nickname) + } + + func startRuntimeServices() { + viewModel.meshService.startServices() + + viewModel.publicMessagePipeline.delegate = viewModel.publicConversationCoordinator + viewModel.publicMessagePipeline.updateActiveChannel(viewModel.activeChannel) + + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { [weak viewModel] in + guard let viewModel, + let bleService = viewModel.meshService as? BLEService else { return } + let state = bleService.getCurrentBluetoothState() + viewModel.updateBluetoothState(state) + } + + viewModel.nostrRelayManager = NostrRelayManager.shared + viewModel.messageRouter.flushAllOutbox() + + Task { @MainActor [weak viewModel] in + guard let viewModel else { return } + try? await Task.sleep( + nanoseconds: UInt64(TransportConfig.uiStartupPhaseDurationSeconds * 1_000_000_000) + ) + viewModel.isStartupPhase = false + } + } + + func bindPeerService() { + viewModel.unifiedPeerService.$peers + .receive(on: DispatchQueue.main) + .sink { [weak viewModel] peers in + Task { @MainActor [weak viewModel] in + guard let viewModel else { return } + + viewModel.allPeers = peers + viewModel.identityResolver.register(peers: peers) + + var uniquePeers: [PeerID: BitchatPeer] = [:] + for peer in peers { + if uniquePeers[peer.peerID] == nil { + uniquePeers[peer.peerID] = peer + } else { + SecureLogger.warning( + "⚠️ Duplicate peer ID detected: \(peer.peerID) (\(peer.displayName))", + category: .session + ) + } + } + viewModel.peerIndex = uniquePeers + + if viewModel.hasTrackedPrivateChatSelection { + viewModel.updatePrivateChatPeerIfNeeded() + } + + viewModel.synchronizePrivateConversationStore() + viewModel.synchronizeConversationSelectionStore() + } + } + .store(in: &viewModel.cancellables) + } + + func configureNoiseCallbacks() { + viewModel.setupNoiseCallbacks() + } + + func bindTransferProgress() { + TransferProgressManager.shared.publisher + .receive(on: DispatchQueue.main) + .sink { [weak viewModel] event in + Task { @MainActor [weak viewModel] in + viewModel?.handleTransferEvent(event) + } + } + .store(in: &viewModel.cancellables) + } + + func configureGeoChannels() { + viewModel.geoChannelCoordinator = GeoChannelCoordinator( + locationManager: viewModel.locationManager, + onChannelSwitch: { [weak viewModel] channel in + viewModel?.switchLocationChannel(to: channel) + }, + beginSampling: { [weak viewModel] geohashes in + viewModel?.beginGeohashSampling(for: geohashes) + }, + endSampling: { [weak viewModel] in + viewModel?.endGeohashSampling() + } + ) + } + + func bindTeleportState() { + viewModel.locationManager.$teleported + .receive(on: DispatchQueue.main) + .sink { [weak viewModel] isTeleported in + guard let viewModel else { return } + Task { @MainActor [weak viewModel] in + guard let viewModel, + case .location(let channel) = viewModel.activeChannel, + let identity = try? viewModel.idBridge.deriveIdentity(forGeohash: channel.geohash) + else { + return + } + + let key = identity.publicKeyHex.lowercased() + let hasRegional = !viewModel.locationManager.availableChannels.isEmpty + let inRegional = viewModel.locationManager.availableChannels.contains { + $0.geohash == channel.geohash + } + + if isTeleported && hasRegional && !inRegional { + viewModel.locationPresenceStore.markTeleported(key) + } else { + viewModel.locationPresenceStore.clearTeleported(key) + } + } + } + .store(in: &viewModel.cancellables) + } + + func requestNotifications() { + NotificationService.shared.requestAuthorization() + } + + func registerObservers() { + NotificationCenter.default.addObserver( + viewModel, + selector: #selector(ChatViewModel.handleFavoriteStatusChanged(_:)), + name: .favoriteStatusChanged, + object: nil + ) + + NotificationCenter.default.addObserver( + viewModel, + selector: #selector(ChatViewModel.handlePeerStatusUpdate(_:)), + name: Notification.Name("peerStatusUpdated"), + object: nil + ) + } +} diff --git a/bitchat/ViewModels/Extensions/ChatViewModel+Nostr.swift b/bitchat/ViewModels/Extensions/ChatViewModel+Nostr.swift index b36aa49c..fff0897e 100644 --- a/bitchat/ViewModels/Extensions/ChatViewModel+Nostr.swift +++ b/bitchat/ViewModels/Extensions/ChatViewModel+Nostr.swift @@ -5,846 +5,137 @@ // Geohash and Nostr logic for ChatViewModel // -import Foundation -import Combine -import BitLogger import BitFoundation -import SwiftUI -import Tor +import Foundation extension ChatViewModel { - // MARK: - Geohash Subscription - - // Resubscribe to the active geohash channel without clearing timeline @MainActor func resubscribeCurrentGeohash() { - guard case .location(let ch) = activeChannel else { return } - guard let subID = geoSubscriptionID else { - // No existing subscription; set it up - switchLocationChannel(to: activeChannel) - return - } - // Ensure participant decay timer is running - participantTracker.startRefreshTimer() - // Unsubscribe + resubscribe - NostrRelayManager.shared.unsubscribe(id: subID) - let filter = NostrFilter.geohashEphemeral( - ch.geohash, - since: Date().addingTimeInterval(-TransportConfig.nostrGeohashInitialLookbackSeconds), - limit: TransportConfig.nostrGeohashInitialLimit - ) - let subRelays = GeoRelayDirectory.shared.closestRelays( - toGeohash: ch.geohash, - count: TransportConfig.nostrGeoRelayCount - ) - NostrRelayManager.shared.subscribe(filter: filter, id: subID, relayUrls: subRelays) { [weak self] event in - self?.subscribeNostrEvent(event) - } - // Resubscribe geohash DMs for this identity - if let dmSub = geoDmSubscriptionID { - NostrRelayManager.shared.unsubscribe(id: dmSub); geoDmSubscriptionID = nil - } - - if let id = try? idBridge.deriveIdentity(forGeohash: ch.geohash) { - let dmSub = "geo-dm-\(ch.geohash)" - geoDmSubscriptionID = dmSub - let dmFilter = NostrFilter.giftWrapsFor(pubkey: id.publicKeyHex, since: Date().addingTimeInterval(-TransportConfig.nostrDMSubscribeLookbackSeconds)) - NostrRelayManager.shared.subscribe(filter: dmFilter, id: dmSub) { [weak self] giftWrap in - self?.subscribeGiftWrap(giftWrap, id: id) - } - } + nostrCoordinator.resubscribeCurrentGeohash() } - + + @MainActor func subscribeNostrEvent(_ event: NostrEvent) { - guard event.isValidSignature() else { return } - guard (event.kind == NostrProtocol.EventKind.ephemeralEvent.rawValue || - event.kind == NostrProtocol.EventKind.geohashPresence.rawValue), - !deduplicationService.hasProcessedNostrEvent(event.id) - else { - return - } - - deduplicationService.recordNostrEvent(event.id) - - if let gh = currentGeohash, - let myGeoIdentity = try? idBridge.deriveIdentity(forGeohash: gh), - myGeoIdentity.publicKeyHex.lowercased() == event.pubkey.lowercased() { - // Skip very recent self-echo from relay, but allow older events (e.g., after app restart) - let eventTime = Date(timeIntervalSince1970: TimeInterval(event.created_at)) - if Date().timeIntervalSince(eventTime) < 15 { - return - } - } - - if let nickTag = event.tags.first(where: { $0.first == "n" }), nickTag.count >= 2 { - let nick = nickTag[1].trimmed - geoNicknames[event.pubkey.lowercased()] = nick - } - - // Store mapping for geohash sender IDs used in messages (ensures consistent colors) - nostrKeyMapping[PeerID(nostr_: event.pubkey)] = event.pubkey - nostrKeyMapping[PeerID(nostr: event.pubkey)] = event.pubkey - - // Update participants last-seen for this pubkey - participantTracker.recordParticipant(pubkeyHex: event.pubkey) - - // If presence heartbeat (Kind 20001), stop here - no content to display - if event.kind == NostrProtocol.EventKind.geohashPresence.rawValue { - return - } - - // Track teleported tag (only our format ["t","teleport"]) for icon state - let hasTeleportTag = event.tags.contains(where: { tag in - tag.count >= 2 && tag[0].lowercased() == "t" && tag[1].lowercased() == "teleport" - }) - - if hasTeleportTag { - let key = event.pubkey.lowercased() - // Do not mark our own key from historical events; rely on manager.teleported for self - let isSelf: Bool = { - if let gh = currentGeohash, let my = try? idBridge.deriveIdentity(forGeohash: gh) { - return my.publicKeyHex.lowercased() == key - } - return false - }() - if !isSelf { - Task { @MainActor in - teleportedGeo = teleportedGeo.union([key]) - } - } - } - - let senderName = displayNameForNostrPubkey(event.pubkey) - let content = event.content.trimmed - - // Clamp future timestamps to now to avoid future-dated messages skewing order - let rawTs = Date(timeIntervalSince1970: TimeInterval(event.created_at)) - let timestamp = min(rawTs, Date()) - let mentions = parseMentions(from: content) - let msg = BitchatMessage( - id: event.id, - sender: senderName, - content: content, - timestamp: timestamp, - isRelay: false, - senderPeerID: PeerID(nostr: event.pubkey), - mentions: mentions.isEmpty ? nil : mentions - ) - Task { @MainActor in - // BCH-01-012: Check blocking before any notifications - // handlePublicMessage has its own blocking check but returns silently, - // so we must also guard checkForMentions to prevent notification bypass - let isBlocked = identityManager.isNostrBlocked(pubkeyHexLowercased: event.pubkey.lowercased()) - - handlePublicMessage(msg) - - // Only check mentions and send haptic if sender is not blocked - if !isBlocked { - checkForMentions(msg) - sendHapticFeedback(for: msg) - } - } + nostrCoordinator.subscribeNostrEvent(event) } + @MainActor func subscribeGiftWrap(_ giftWrap: NostrEvent, id: NostrIdentity) { - guard giftWrap.isValidSignature() else { return } - guard !deduplicationService.hasProcessedNostrEvent(giftWrap.id) else { return } - deduplicationService.recordNostrEvent(giftWrap.id) - - guard let (content, senderPubkey, rumorTs) = try? NostrProtocol.decryptPrivateMessage(giftWrap: giftWrap, recipientIdentity: id), - let packet = Self.decodeEmbeddedBitChatPacket(from: content), - packet.type == MessageType.noiseEncrypted.rawValue, - let noisePayload = NoisePayload.decode(packet.payload) - else { - return - } - - let messageTimestamp = Date(timeIntervalSince1970: TimeInterval(rumorTs)) - let convKey = PeerID(nostr_: senderPubkey) - nostrKeyMapping[convKey] = senderPubkey - - switch noisePayload.type { - case .privateMessage: - handlePrivateMessage(noisePayload, senderPubkey: senderPubkey, convKey: convKey, id: id, messageTimestamp: messageTimestamp) - case .delivered: - handleDelivered(noisePayload, senderPubkey: senderPubkey, convKey: convKey) - case .readReceipt: - handleReadReceipt(noisePayload, senderPubkey: senderPubkey, convKey: convKey) - case .verifyChallenge, .verifyResponse: - // QR verification payloads over Nostr are not supported; ignore in geohash DMs - break - } + nostrCoordinator.subscribeGiftWrap(giftWrap, id: id) } - // MARK: - Geohash Channel Handling - @MainActor func switchLocationChannel(to channel: ChannelID) { - // Reset pending public batches to avoid cross-channel bleed - publicMessagePipeline.reset() - - activeChannel = channel - publicMessagePipeline.updateActiveChannel(channel) - - // Reset deduplication set and optionally hydrate timeline for mesh - deduplicationService.clearNostrCaches() - switch channel { - case .mesh: - refreshVisibleMessages(from: .mesh) - // Debug: log if any empty messages are present - let emptyMesh = messages.filter { $0.content.trimmed.isEmpty }.count - if emptyMesh > 0 { - SecureLogger.debug("RenderGuard: mesh timeline contains \(emptyMesh) empty messages", category: .session) - } - participantTracker.stopRefreshTimer() - participantTracker.setActiveGeohash(nil) - teleportedGeo.removeAll() - case .location: - refreshVisibleMessages(from: channel) - } - // If switching to a location channel, flush any pending geohash-only system messages - if case .location = channel { - for content in timelineStore.drainPendingGeohashSystemMessages() { - addPublicSystemMessage(content) - } - } - // Unsubscribe previous - if let sub = geoSubscriptionID { - NostrRelayManager.shared.unsubscribe(id: sub) - geoSubscriptionID = nil - } - if let dmSub = geoDmSubscriptionID { - NostrRelayManager.shared.unsubscribe(id: dmSub) - geoDmSubscriptionID = nil - } - currentGeohash = nil - participantTracker.setActiveGeohash(nil) - // Reset nickname cache for geochat participants - geoNicknames.removeAll() - - guard case .location(let ch) = channel else { return } - currentGeohash = ch.geohash - participantTracker.setActiveGeohash(ch.geohash) - - // Ensure self appears immediately in the people list; mark teleported state only when truly teleported - if let id = try? idBridge.deriveIdentity(forGeohash: ch.geohash) { - participantTracker.recordParticipant(pubkeyHex: id.publicKeyHex) - let hasRegional = !LocationChannelManager.shared.availableChannels.isEmpty - let inRegional = LocationChannelManager.shared.availableChannels.contains { $0.geohash == ch.geohash } - let key = id.publicKeyHex.lowercased() - if LocationChannelManager.shared.teleported && hasRegional && !inRegional { - teleportedGeo = teleportedGeo.union([key]) - SecureLogger.info("GeoTeleport: channel switch mark self teleported key=\(key.prefix(8))… total=\(teleportedGeo.count)", category: .session) - } else { - teleportedGeo.remove(key) - } - } - - let subID = "geo-\(ch.geohash)" - geoSubscriptionID = subID - participantTracker.startRefreshTimer() - let ts = Date().addingTimeInterval(-TransportConfig.nostrGeohashInitialLookbackSeconds) - let filter = NostrFilter.geohashEphemeral(ch.geohash, since: ts, limit: TransportConfig.nostrGeohashInitialLimit) - let subRelays = GeoRelayDirectory.shared.closestRelays(toGeohash: ch.geohash, count: 5) - NostrRelayManager.shared.subscribe(filter: filter, id: subID, relayUrls: subRelays) { [weak self] event in - self?.handleNostrEvent(event) - } - - subscribeToGeoChat(ch) + nostrCoordinator.switchLocationChannel(to: channel) } - + + @MainActor func handleNostrEvent(_ event: NostrEvent) { - guard event.isValidSignature() else { return } - // Only handle ephemeral kind 20000 or presence kind 20001 with matching tag - guard (event.kind == NostrProtocol.EventKind.ephemeralEvent.rawValue || - event.kind == NostrProtocol.EventKind.geohashPresence.rawValue) else { return } - - // Deduplicate - if deduplicationService.hasProcessedNostrEvent(event.id) { return } - deduplicationService.recordNostrEvent(event.id) - - // Log incoming tags for diagnostics - let tagSummary = event.tags.map { "[" + $0.joined(separator: ",") + "]" }.joined(separator: ",") - SecureLogger.debug("GeoTeleport: recv pub=\(event.pubkey.prefix(8))… tags=\(tagSummary)", category: .session) - - // If this pubkey is blocked, skip mapping, participants, and timeline - if identityManager.isNostrBlocked(pubkeyHexLowercased: event.pubkey) { - return - } - - // Track teleport tag for participants – only our format ["t", "teleport"] - let hasTeleportTag: Bool = event.tags.contains { tag in - tag.count >= 2 && tag[0].lowercased() == "t" && tag[1].lowercased() == "teleport" - } - - let isSelf: Bool = { - if let gh = currentGeohash, let my = try? idBridge.deriveIdentity(forGeohash: gh) { - return my.publicKeyHex.lowercased() == event.pubkey.lowercased() - } - return false - }() - - if hasTeleportTag { - // Avoid marking our own key from historical events; rely on manager.teleported for self - if !isSelf { - let key = event.pubkey.lowercased() - Task { @MainActor in - teleportedGeo = teleportedGeo.union([key]) - SecureLogger.info("GeoTeleport: mark peer teleported key=\(key.prefix(8))… total=\(teleportedGeo.count)", category: .session) - } - } - } - - // Update participants last-seen for this pubkey - participantTracker.recordParticipant(pubkeyHex: event.pubkey) - - // Skip only very recent self-echo from relay; include older self events for hydration - if isSelf { - let eventTime = Date(timeIntervalSince1970: TimeInterval(event.created_at)) - if Date().timeIntervalSince(eventTime) < 15 { - return - } - } - - // Cache nickname from tag if present - if let nickTag = event.tags.first(where: { $0.first == "n" }), nickTag.count >= 2 { - geoNicknames[event.pubkey.lowercased()] = nickTag[1].trimmed - } - - // Store mapping for geohash DM initiation - nostrKeyMapping[PeerID(nostr_: event.pubkey)] = event.pubkey - nostrKeyMapping[PeerID(nostr: event.pubkey)] = event.pubkey - - // If presence heartbeat (Kind 20001), stop here - no content to display - if event.kind == NostrProtocol.EventKind.geohashPresence.rawValue { - return - } - - let senderName = displayNameForNostrPubkey(event.pubkey) - let content = event.content - - // If this is a teleport presence event (no content), don't add to timeline - if let teleTag = event.tags.first(where: { $0.first == "t" }), - teleTag.count >= 2, - teleTag[1] == "teleport", - content.trimmed.isEmpty { - return - } - - // Clamp future timestamps - let rawTs = Date(timeIntervalSince1970: TimeInterval(event.created_at)) - let mentions = parseMentions(from: content) - let msg = BitchatMessage( - id: event.id, - sender: senderName, - content: content, - timestamp: min(rawTs, Date()), - isRelay: false, - senderPeerID: PeerID(nostr: event.pubkey), - mentions: mentions.isEmpty ? nil : mentions - ) - - Task { @MainActor in - handlePublicMessage(msg) - checkForMentions(msg) - sendHapticFeedback(for: msg) - } + nostrCoordinator.handleNostrEvent(event) } - + @MainActor func subscribeToGeoChat(_ ch: GeohashChannel) { - guard let id = try? idBridge.deriveIdentity(forGeohash: ch.geohash) else { return } - - let dmSub = "geo-dm-\(ch.geohash)" - geoDmSubscriptionID = dmSub - // pared back logging: subscribe debug only - // Log GeoDM subscribe only when Tor is ready to avoid early noise - if TorManager.shared.isReady { - SecureLogger.debug("GeoDM: subscribing DMs pub=\(id.publicKeyHex.prefix(8))… sub=\(dmSub)", category: .session) - } - let dmFilter = NostrFilter.giftWrapsFor(pubkey: id.publicKeyHex, since: Date().addingTimeInterval(-TransportConfig.nostrDMSubscribeLookbackSeconds)) - NostrRelayManager.shared.subscribe(filter: dmFilter, id: dmSub) { [weak self] giftWrap in - self?.handleGiftWrap(giftWrap, id: id) - } + nostrCoordinator.subscribeToGeoChat(ch) } - + + @MainActor func handleGiftWrap(_ giftWrap: NostrEvent, id: NostrIdentity) { - guard giftWrap.isValidSignature() else { return } - if deduplicationService.hasProcessedNostrEvent(giftWrap.id) { - return - } - deduplicationService.recordNostrEvent(giftWrap.id) - - // Decrypt with per-geohash identity - guard let (content, senderPubkey, rumorTs) = try? NostrProtocol.decryptPrivateMessage(giftWrap: giftWrap, recipientIdentity: id) else { - SecureLogger.warning("GeoDM: failed decrypt giftWrap id=\(giftWrap.id.prefix(8))…", category: .session) - return - } - - SecureLogger.debug("GeoDM: decrypted gift-wrap id=\(giftWrap.id.prefix(16))... from=\(senderPubkey.prefix(8))...", category: .session) - - guard let packet = Self.decodeEmbeddedBitChatPacket(from: content), - packet.type == MessageType.noiseEncrypted.rawValue, - let payload = NoisePayload.decode(packet.payload) - else { - return - } - - let convKey = PeerID(nostr_: senderPubkey) - nostrKeyMapping[convKey] = senderPubkey - - switch payload.type { - case .privateMessage: - let messageTimestamp = Date(timeIntervalSince1970: TimeInterval(rumorTs)) - handlePrivateMessage(payload, senderPubkey: senderPubkey, convKey: convKey, id: id, messageTimestamp: messageTimestamp) - case .delivered: - handleDelivered(payload, senderPubkey: senderPubkey, convKey: convKey) - case .readReceipt: - handleReadReceipt(payload, senderPubkey: senderPubkey, convKey: convKey) - - // Explicitly list other cases so we get compile-time check if a new case is added in the future - case .verifyChallenge, .verifyResponse: - break - } + nostrCoordinator.handleGiftWrap(giftWrap, id: id) } @MainActor func sendGeohash(context: GeoOutgoingContext) { - let ch = context.channel - let event = context.event - let identity = context.identity - - let targetRelays = GeoRelayDirectory.shared.closestRelays( - toGeohash: ch.geohash, - count: TransportConfig.nostrGeoRelayCount - ) - - if targetRelays.isEmpty { - SecureLogger.warning("Geo: no geohash relays available for \(ch.geohash); not sending", category: .session) - } else { - NostrRelayManager.shared.sendEvent(event, to: targetRelays) - } - - // Track ourselves as active participant - participantTracker.recordParticipant(pubkeyHex: identity.publicKeyHex) - nostrKeyMapping[PeerID(nostr: identity.publicKeyHex)] = identity.publicKeyHex - SecureLogger.debug("GeoTeleport: sent geo message pub=\(identity.publicKeyHex.prefix(8))… teleported=\(context.teleported)", category: .session) - - // If we tagged this as teleported, also mark our pubkey in teleportedGeo for UI - // Only when not in our regional set (and regional list is known) - let hasRegional = !LocationChannelManager.shared.availableChannels.isEmpty - let inRegional = LocationChannelManager.shared.availableChannels.contains { $0.geohash == ch.geohash } - - if context.teleported && hasRegional && !inRegional { - let key = identity.publicKeyHex.lowercased() - teleportedGeo = teleportedGeo.union([key]) - SecureLogger.info("GeoTeleport: mark self teleported key=\(key.prefix(8))… total=\(teleportedGeo.count)", category: .session) - } - - deduplicationService.recordNostrEvent(event.id) + nostrCoordinator.sendGeohash(context: context) } - // MARK: - Sampling - - /// Begin sampling multiple geohashes (used by channel sheet) without changing active channel. @MainActor func beginGeohashSampling(for geohashes: [String]) { - // Disable sampling when app is backgrounded (Tor is stopped there) - if !TorManager.shared.isForeground() { - endGeohashSampling() - return - } - // Determine which to add and which to remove - let desired = Set(geohashes) - let current = Set(geoSamplingSubs.values) - let toAdd = desired.subtracting(current) - let toRemove = current.subtracting(desired) - - for (subID, gh) in geoSamplingSubs where toRemove.contains(gh) { - NostrRelayManager.shared.unsubscribe(id: subID) - geoSamplingSubs.removeValue(forKey: subID) - } - - for gh in toAdd { - subscribe(gh) - } + nostrCoordinator.beginGeohashSampling(for: geohashes) } - + @MainActor func subscribe(_ gh: String) { - let subID = "geo-sample-\(gh)" - geoSamplingSubs[subID] = gh - let filter = NostrFilter.geohashEphemeral( - gh, - since: Date().addingTimeInterval(-TransportConfig.nostrGeohashSampleLookbackSeconds), - limit: TransportConfig.nostrGeohashSampleLimit - ) - let subRelays = GeoRelayDirectory.shared.closestRelays(toGeohash: gh, count: 5) - NostrRelayManager.shared.subscribe(filter: filter, id: subID, relayUrls: subRelays) { [weak self] event in - self?.subscribeNostrEvent(event, gh: gh) - } + nostrCoordinator.subscribe(gh) } - + + @MainActor func subscribeNostrEvent(_ event: NostrEvent, gh: String) { - guard event.isValidSignature() else { return } - guard (event.kind == NostrProtocol.EventKind.ephemeralEvent.rawValue || - event.kind == NostrProtocol.EventKind.geohashPresence.rawValue) else { return } - - // Compute current participant count (5-minute window) BEFORE updating with this event - let existingCount = participantTracker.participantCount(for: gh) - - // Update participants for this specific geohash - participantTracker.recordParticipant(pubkeyHex: event.pubkey, geohash: gh) - - // Notify only on rising-edge: previously zero people, now someone sends a chat - guard let content = event.content.trimmedOrNilIfEmpty else { return } - - // Respect geohash blocks - if identityManager.isNostrBlocked(pubkeyHexLowercased: event.pubkey.lowercased()) { return } - - // Skip self identity for this geohash - if let my = try? idBridge.deriveIdentity(forGeohash: gh), my.publicKeyHex.lowercased() == event.pubkey.lowercased() { return } - - // Only trigger when there were zero participants in this geohash recently - guard existingCount == 0 else { return } - - // Avoid notifications for old sampled events when launching or (re)subscribing - let eventTime = Date(timeIntervalSince1970: TimeInterval(event.created_at)) - if Date().timeIntervalSince(eventTime) > 30 { return } - - // Foreground-only notifications: app must be active, and not already viewing this geohash - #if os(iOS) - guard UIApplication.shared.applicationState == .active else { return } - if case .location(let ch) = activeChannel, ch.geohash == gh { return } - #elseif os(macOS) - guard NSApplication.shared.isActive else { return } - if case .location(let ch) = activeChannel, ch.geohash == gh { return } - #endif - - cooldownPerGeohash(gh, content: content, event: event) + nostrCoordinator.subscribeNostrEvent(event, gh: gh) } - + + @MainActor func cooldownPerGeohash(_ gh: String, content: String, event: NostrEvent) { - let now = Date() - let last = lastGeoNotificationAt[gh] ?? .distantPast - if now.timeIntervalSince(last) < TransportConfig.uiGeoNotifyCooldownSeconds { return } - - // Compose a short preview - let preview: String = { - let maxLen = TransportConfig.uiGeoNotifySnippetMaxLen - if content.count <= maxLen { return content } - let idx = content.index(content.startIndex, offsetBy: maxLen) - return String(content[.. Data? { - // Check favorites for this Nostr key - let favorites = FavoritesPersistenceService.shared.favorites.values - var npubToMatch = nostrPubkey - - // Convert hex to npub if needed for comparison - if !nostrPubkey.hasPrefix("npub") { - if let pubkeyData = Data(hexString: nostrPubkey), - let encoded = try? Bech32.encode(hrp: "npub", data: pubkeyData) { - npubToMatch = encoded - } else { - SecureLogger.warning("⚠️ Invalid hex public key format or encoding failed: \(nostrPubkey.prefix(16))...", category: .session) - } - } - - for relationship in favorites { - // Search through favorites for matching Nostr pubkey - if let storedNostrKey = relationship.peerNostrPublicKey { - // Compare against stored key (could be hex or npub) - if storedNostrKey == npubToMatch { - // SecureLogger.debug("✅ Found Noise key for Nostr sender (npub match)", category: .session) - return relationship.peerNoisePublicKey - } - - // Also try comparing raw hex if stored key is hex - if !storedNostrKey.hasPrefix("npub") && storedNostrKey == nostrPubkey { - SecureLogger.debug("✅ Found Noise key for Nostr sender (hex match)", category: .session) - return relationship.peerNoisePublicKey - } - } - } - - SecureLogger.debug("⚠️ No matching Noise key found for Nostr pubkey: \(nostrPubkey.prefix(16))... (tried npub: \(npubToMatch.prefix(16))...)", category: .session) - return nil + nostrCoordinator.findNoiseKey(for: nostrPubkey) } - func sendDeliveryAckViaNostrEmbedded(_ message: BitchatMessage, wasReadBefore: Bool, senderPubkey: String, key: Data?) { - // If we have a Noise key, try to route securely if possible, otherwise fallback to direct - if let _ = key { - // Ideally we would use MessageRouter here, but for simplicity in this direct callback: - // check if we have an identity - if let id = try? idBridge.getCurrentNostrIdentity() { - let nt = NostrTransport(keychain: keychain, idBridge: idBridge) - nt.senderPeerID = meshService.myPeerID - nt.sendDeliveryAckGeohash(for: message.id, toRecipientHex: senderPubkey, from: id) - } - } else if let id = try? idBridge.getCurrentNostrIdentity() { - // Fallback: no Noise mapping yet — send directly to sender's Nostr pubkey - let nt = NostrTransport(keychain: keychain, idBridge: idBridge) - nt.senderPeerID = meshService.myPeerID - nt.sendDeliveryAckGeohash(for: message.id, toRecipientHex: senderPubkey, from: id) - SecureLogger.debug("Sent DELIVERED ack directly to Nostr pub=\(senderPubkey.prefix(8))… for mid=\(message.id.prefix(8))…", category: .session) - } - - // Same for READ receipt if viewing - if !wasReadBefore && selectedPrivateChatPeer == message.senderPeerID { - if let _ = key { - if let id = try? idBridge.getCurrentNostrIdentity() { - let nt = NostrTransport(keychain: keychain, idBridge: idBridge) - nt.senderPeerID = meshService.myPeerID - nt.sendReadReceiptGeohash(message.id, toRecipientHex: senderPubkey, from: id) - } - } else if let id = try? idBridge.getCurrentNostrIdentity() { - let nt = NostrTransport(keychain: keychain, idBridge: idBridge) - nt.senderPeerID = meshService.myPeerID - nt.sendReadReceiptGeohash(message.id, toRecipientHex: senderPubkey, from: id) - SecureLogger.debug("Viewing chat; sent READ ack directly to Nostr pub=\(senderPubkey.prefix(8))… for mid=\(message.id.prefix(8))…", category: .session) - } - } - } - - func handleFavoriteNotification(content: String, from nostrPubkey: String) { - // Try to find Noise key associated with this Nostr pubkey - guard let senderNoiseKey = findNoiseKey(for: nostrPubkey) else { return } - - let isFavorite = content.contains("FAVORITE:TRUE") - let senderNickname = content.components(separatedBy: "|").last ?? "Unknown" - - // Update favorite status - if isFavorite { - FavoritesPersistenceService.shared.addFavorite( - peerNoisePublicKey: senderNoiseKey, - peerNostrPublicKey: nostrPubkey, - peerNickname: senderNickname - ) - } else { - // Only remove if we don't have it set locally - // Logic handled by persistence service usually, here we just update remote state - // Actually for now we just process the notification - } - - // Extract Nostr public key if included - var extractedNostrPubkey: String? = nil - if let range = content.range(of: "NPUB:") { - let suffix = content[range.upperBound...] - let parts = suffix.components(separatedBy: "|") - if let key = parts.first { - extractedNostrPubkey = String(key) - } - } else if content.contains(":") { - // Fallback: simple format FAVORITE:TRUE:npub... - let parts = content.components(separatedBy: ":") - if parts.count >= 3 { - extractedNostrPubkey = String(parts[2]) - } - } - - SecureLogger.info("📝 Received favorite notification from \(senderNickname): \(isFavorite)", category: .session) - - // If they favorited us and provided their Nostr key, ensure it's stored - if isFavorite && extractedNostrPubkey != nil { - SecureLogger.info("💾 Storing Nostr key association for \(senderNickname): \(extractedNostrPubkey!.prefix(16))...", category: .session) - FavoritesPersistenceService.shared.addFavorite( - peerNoisePublicKey: senderNoiseKey, - peerNostrPublicKey: extractedNostrPubkey, - peerNickname: senderNickname - ) - } - - // Show notification - NotificationService.shared.sendLocalNotification( - title: isFavorite ? "New Favorite" : "Favorite Removed", - body: "\(senderNickname) \(isFavorite ? "favorited" : "unfavorited") you", - identifier: "fav-\(UUID().uuidString)" + @MainActor + func sendDeliveryAckViaNostrEmbedded( + _ message: BitchatMessage, + wasReadBefore: Bool, + senderPubkey: String, + key: Data? + ) { + nostrCoordinator.sendDeliveryAckViaNostrEmbedded( + message, + wasReadBefore: wasReadBefore, + senderPubkey: senderPubkey, + key: key ) } + @MainActor + func handleFavoriteNotification(content: String, from nostrPubkey: String) { + nostrCoordinator.handleFavoriteNotification(content: content, from: nostrPubkey) + } + + @MainActor func sendFavoriteNotificationViaNostr(noisePublicKey: Data, isFavorite: Bool) { - // Find peer Nostr key - guard let relationship = FavoritesPersistenceService.shared.getFavoriteStatus(for: noisePublicKey), - relationship.peerNostrPublicKey != nil else { - SecureLogger.warning("⚠️ Cannot send favorite notification - no Nostr key for peer", category: .session) - return - } - - let peerID = PeerID(hexData: noisePublicKey) - - // Route via message router - messageRouter.sendFavoriteNotification(to: peerID, isFavorite: isFavorite) + nostrCoordinator.sendFavoriteNotificationViaNostr(noisePublicKey: noisePublicKey, isFavorite: isFavorite) } - private static func decodeEmbeddedBitChatPacket(from content: String) -> BitchatPacket? { - guard content.hasPrefix("bitchat1:") else { return nil } - let encoded = String(content.dropFirst("bitchat1:".count)) - let maxBytes = FileTransferLimits.maxFramedFileBytes - // Base64url length upper bound for maxBytes (padded length; unpadded is <= this). - let maxEncoded = ((maxBytes + 2) / 3) * 4 - guard encoded.count <= maxEncoded else { return nil } - guard let packetData = Self.base64URLDecode(encoded), - packetData.count <= maxBytes - else { return nil } - return BitchatPacket.from(packetData) - } - - // MARK: - Geohash Nickname Resolution (for /block in geohash) - + @MainActor func nostrPubkeyForDisplayName(_ name: String) -> String? { - // Look up current visible geohash participants for an exact displayName match - for p in visibleGeohashPeople() { - if p.displayName == name { - return p.id - } - } - // Also check nickname cache directly - for (pub, nick) in geoNicknames { - if nick == name { return pub } - } - return nil + nostrCoordinator.nostrPubkeyForDisplayName(name) } - + + @MainActor func startGeohashDM(withPubkeyHex hex: String) { - let convKey = PeerID(nostr_: hex) - nostrKeyMapping[convKey] = hex - startPrivateChat(with: convKey) + nostrCoordinator.startGeohashDM(withPubkeyHex: hex) } - + + @MainActor func fullNostrHex(forSenderPeerID senderID: PeerID) -> String? { - return nostrKeyMapping[senderID] + nostrCoordinator.fullNostrHex(forSenderPeerID: senderID) } - + + @MainActor func geohashDisplayName(for convKey: PeerID) -> String { - guard let full = nostrKeyMapping[convKey] else { - return convKey.bare - } - return displayNameForNostrPubkey(full) + nostrCoordinator.geohashDisplayName(for: convKey) } } diff --git a/bitchat/ViewModels/Extensions/ChatViewModel+PrivateChat.swift b/bitchat/ViewModels/Extensions/ChatViewModel+PrivateChat.swift index 146c3959..fb288dbc 100644 --- a/bitchat/ViewModels/Extensions/ChatViewModel+PrivateChat.swift +++ b/bitchat/ViewModels/Extensions/ChatViewModel+PrivateChat.swift @@ -5,193 +5,23 @@ // Private chat and media transfer logic for ChatViewModel // -import Foundation -import Combine -import BitLogger import BitFoundation +import Foundation import SwiftUI extension ChatViewModel { - // MARK: - Private Chat Sending - - /// Sends an encrypted private message to a specific peer. - /// - Parameters: - /// - content: The message content to encrypt and send - /// - peerID: The recipient's peer ID - /// - Note: Automatically establishes Noise encryption if not already active @MainActor func sendPrivateMessage(_ content: String, to peerID: PeerID) { - guard !content.isEmpty else { return } - - // Check if blocked - if unifiedPeerService.isBlocked(peerID) { - let nickname = meshService.peerNickname(peerID: peerID) ?? "user" - addSystemMessage( - String( - format: String(localized: "system.dm.blocked_recipient", comment: "System message when attempting to message a blocked user"), - locale: .current, - nickname - ) - ) - return - } - - // Geohash DM routing: conversation keys start with "nostr_" - if peerID.isGeoDM { - sendGeohashDM(content, to: peerID) - return - } - - // Determine routing method and recipient nickname - guard let noiseKey = Data(hexString: peerID.id) else { return } - let isConnected = meshService.isPeerConnected(peerID) - let isReachable = meshService.isPeerReachable(peerID) - let favoriteStatus = FavoritesPersistenceService.shared.getFavoriteStatus(for: noiseKey) - let isMutualFavorite = favoriteStatus?.isMutual ?? false - let hasNostrKey = favoriteStatus?.peerNostrPublicKey != nil - - // Get nickname from various sources - var recipientNickname = meshService.peerNickname(peerID: peerID) - if recipientNickname == nil && favoriteStatus != nil { - recipientNickname = favoriteStatus?.peerNickname - } - recipientNickname = recipientNickname ?? "user" - - // Generate message ID - let messageID = UUID().uuidString - - // Create the message object - let message = BitchatMessage( - id: messageID, - sender: nickname, - content: content, - timestamp: Date(), - isRelay: false, - originalSender: nil, - isPrivate: true, - recipientNickname: recipientNickname, - senderPeerID: meshService.myPeerID, - mentions: nil, - deliveryStatus: .sending - ) - - // Add to local chat - if privateChats[peerID] == nil { - privateChats[peerID] = [] - } - privateChats[peerID]?.append(message) - - // Trigger UI update for sent message - objectWillChange.send() - - // Send via appropriate transport (BLE if connected/reachable, else Nostr when possible) - if isConnected || isReachable || (isMutualFavorite && hasNostrKey) { - messageRouter.sendPrivate(content, to: peerID, recipientNickname: recipientNickname ?? "user", messageID: messageID) - // Optimistically mark as sent for both transports; delivery/read will update subsequently - if let idx = privateChats[peerID]?.firstIndex(where: { $0.id == messageID }) { - privateChats[peerID]?[idx].deliveryStatus = .sent - } - } else { - // Update delivery status to failed - if let index = privateChats[peerID]?.firstIndex(where: { $0.id == messageID }) { - privateChats[peerID]?[index].deliveryStatus = .failed( - reason: String(localized: "content.delivery.reason.unreachable", comment: "Failure reason when a peer is unreachable") - ) - } - let name = recipientNickname ?? "user" - addSystemMessage( - String( - format: String(localized: "system.dm.unreachable", comment: "System message when a recipient is unreachable"), - locale: .current, - name - ) - ) - } + privateConversationCoordinator.sendPrivateMessage(content, to: peerID) } - + + @MainActor func sendGeohashDM(_ content: String, to peerID: PeerID) { - guard case .location(let ch) = activeChannel else { - addSystemMessage( - String(localized: "system.location.not_in_channel", comment: "System message when attempting to send without being in a location channel") - ) - return - } - let messageID = UUID().uuidString - - // Local echo in the DM thread - let message = BitchatMessage( - id: messageID, - sender: nickname, - content: content, - timestamp: Date(), - isRelay: false, - isPrivate: true, - recipientNickname: nickname, - senderPeerID: meshService.myPeerID, - deliveryStatus: .sending - ) - - if privateChats[peerID] == nil { - privateChats[peerID] = [] - } - - privateChats[peerID]?.append(message) - objectWillChange.send() - - // Resolve recipient hex from mapping - guard let recipientHex = nostrKeyMapping[peerID] else { - if let msgIdx = privateChats[peerID]?.firstIndex(where: { $0.id == messageID }) { - privateChats[peerID]?[msgIdx].deliveryStatus = .failed( - reason: String(localized: "content.delivery.reason.unknown_recipient", comment: "Failure reason when the recipient is unknown") - ) - } - return - } - - // Respect geohash blocks - if identityManager.isNostrBlocked(pubkeyHexLowercased: recipientHex) { - if let msgIdx = privateChats[peerID]?.firstIndex(where: { $0.id == messageID }) { - privateChats[peerID]?[msgIdx].deliveryStatus = .failed( - reason: String(localized: "content.delivery.reason.blocked", comment: "Failure reason when the user is blocked") - ) - } - addSystemMessage( - String(localized: "system.dm.blocked_generic", comment: "System message when sending fails because user is blocked") - ) - return - } - - // Send via Nostr using per-geohash identity - do { - let id = try idBridge.deriveIdentity(forGeohash: ch.geohash) - // Prevent messaging ourselves - if recipientHex.lowercased() == id.publicKeyHex.lowercased() { - if let idx = privateChats[peerID]?.firstIndex(where: { $0.id == messageID }) { - privateChats[peerID]?[idx].deliveryStatus = .failed( - reason: String(localized: "content.delivery.reason.self", comment: "Failure reason when attempting to message yourself") - ) - } - return - } - SecureLogger.debug("GeoDM: local send mid=\(messageID.prefix(8))… to=\(recipientHex.prefix(8))… conv=\(peerID)", category: .session) - let nostrTransport = NostrTransport(keychain: keychain, idBridge: idBridge) - nostrTransport.senderPeerID = meshService.myPeerID - nostrTransport.sendPrivateMessageGeohash(content: content, toRecipientHex: recipientHex, from: id, messageID: messageID) - if let msgIdx = privateChats[peerID]?.firstIndex(where: { $0.id == messageID }) { - privateChats[peerID]?[msgIdx].deliveryStatus = .sent - } - } catch { - if let idx = privateChats[peerID]?.firstIndex(where: { $0.id == messageID }) { - privateChats[peerID]?[idx].deliveryStatus = .failed( - reason: String(localized: "content.delivery.reason.send_error", comment: "Failure reason for a generic send error") - ) - } - } + privateConversationCoordinator.sendGeohashDM(content, to: peerID) } - // MARK: - Private Chat Handling (Geohash/Ephemeral) - + @MainActor func handlePrivateMessage( _ payload: NoisePayload, senderPubkey: String, @@ -199,409 +29,97 @@ extension ChatViewModel { id: NostrIdentity, messageTimestamp: Date ) { - guard let pm = PrivateMessagePacket.decode(from: payload.data) else { return } - let messageId = pm.messageID - - SecureLogger.info("GeoDM: recv PM <- sender=\(senderPubkey.prefix(8))… mid=\(messageId.prefix(8))…", category: .session) - - sendDeliveryAckIfNeeded(to: messageId, senderPubKey: senderPubkey, from: id) - - // Respect geohash blocks - if identityManager.isNostrBlocked(pubkeyHexLowercased: senderPubkey) { - return - } - - // Duplicate check - if privateChats[convKey]?.contains(where: { $0.id == messageId }) == true { return } - for (_, arr) in privateChats { - if arr.contains(where: { $0.id == messageId }) { - return - } - } - - let senderName = displayNameForNostrPubkey(senderPubkey) - let msg = BitchatMessage( - id: messageId, - sender: senderName, - content: pm.content, - timestamp: messageTimestamp, - isRelay: false, - isPrivate: true, - recipientNickname: nickname, - senderPeerID: convKey, - deliveryStatus: .delivered(to: nickname, at: Date()) + privateConversationCoordinator.handlePrivateMessage( + payload, + senderPubkey: senderPubkey, + convKey: convKey, + id: id, + messageTimestamp: messageTimestamp ) - - if privateChats[convKey] == nil { - privateChats[convKey] = [] - } - privateChats[convKey]?.append(msg) - - let isViewing = selectedPrivateChatPeer == convKey - let wasReadBefore = sentReadReceipts.contains(messageId) - let isRecentMessage = Date().timeIntervalSince(messageTimestamp) < 30 - let shouldMarkUnread = !wasReadBefore && !isViewing && isRecentMessage - if shouldMarkUnread { - unreadPrivateMessages.insert(convKey) - } - - // Send READ if viewing this conversation - if isViewing { - sendReadReceiptIfNeeded(to: messageId, senderPubKey: senderPubkey, from: id) - } - - // Notify for truly unread and recent messages when not viewing - if !isViewing && shouldMarkUnread { - NotificationService.shared.sendPrivateMessageNotification( - from: senderName, - message: pm.content, - peerID: convKey - ) - } - - objectWillChange.send() } - + + @MainActor func handleDelivered(_ payload: NoisePayload, senderPubkey: String, convKey: PeerID) { - guard let messageID = String(data: payload.data, encoding: .utf8) else { return } - - if let idx = privateChats[convKey]?.firstIndex(where: { $0.id == messageID }) { - privateChats[convKey]?[idx].deliveryStatus = .delivered(to: displayNameForNostrPubkey(senderPubkey), at: Date()) - objectWillChange.send() - SecureLogger.info("GeoDM: recv DELIVERED for mid=\(messageID.prefix(8))… from=\(senderPubkey.prefix(8))…", category: .session) - } else { - SecureLogger.warning("GeoDM: delivered ack for unknown mid=\(messageID.prefix(8))… conv=\(convKey)", category: .session) - } + privateConversationCoordinator.handleDelivered(payload, senderPubkey: senderPubkey, convKey: convKey) } - + + @MainActor func handleReadReceipt(_ payload: NoisePayload, senderPubkey: String, convKey: PeerID) { - guard let messageID = String(data: payload.data, encoding: .utf8) else { return } - - if let idx = privateChats[convKey]?.firstIndex(where: { $0.id == messageID }) { - privateChats[convKey]?[idx].deliveryStatus = .read(by: displayNameForNostrPubkey(senderPubkey), at: Date()) - objectWillChange.send() - SecureLogger.info("GeoDM: recv READ for mid=\(messageID.prefix(8))… from=\(senderPubkey.prefix(8))…", category: .session) - } else { - SecureLogger.warning("GeoDM: read ack for unknown mid=\(messageID.prefix(8))… conv=\(convKey)", category: .session) - } + privateConversationCoordinator.handleReadReceipt(payload, senderPubkey: senderPubkey, convKey: convKey) } + @MainActor func sendDeliveryAckIfNeeded(to messageId: String, senderPubKey: String, from id: NostrIdentity) { - guard !sentGeoDeliveryAcks.contains(messageId) else { return } - let nt = NostrTransport(keychain: keychain, idBridge: idBridge) - nt.senderPeerID = meshService.myPeerID - nt.sendDeliveryAckGeohash(for: messageId, toRecipientHex: senderPubKey, from: id) - sentGeoDeliveryAcks.insert(messageId) + privateConversationCoordinator.sendDeliveryAckIfNeeded(to: messageId, senderPubKey: senderPubKey, from: id) } - + + @MainActor func sendReadReceiptIfNeeded(to messageId: String, senderPubKey: String, from id: NostrIdentity) { - guard !sentReadReceipts.contains(messageId) else { return } - let nt = NostrTransport(keychain: keychain, idBridge: idBridge) - nt.senderPeerID = meshService.myPeerID - nt.sendReadReceiptGeohash(messageId, toRecipientHex: senderPubKey, from: id) - sentReadReceipts.insert(messageId) - } - - // MARK: - Media Transfers - - private enum MediaSendError: Error { - case encodingFailed - case tooLarge - case copyFailed + privateConversationCoordinator.sendReadReceiptIfNeeded(to: messageId, senderPubKey: senderPubKey, from: id) } @MainActor func sendVoiceNote(at url: URL) { - guard canSendMediaInCurrentContext else { - SecureLogger.info("Voice note blocked outside mesh/private context", category: .session) - try? FileManager.default.removeItem(at: url) - addSystemMessage("Voice notes are only available in mesh chats.") - return - } - - let targetPeer = selectedPrivateChatPeer - let message = enqueueMediaMessage(content: "\(MimeType.Category.audio.messagePrefix)\(url.lastPathComponent)", targetPeer: targetPeer) - let messageID = message.id - let transferId = makeTransferID(messageID: messageID) - - Task.detached(priority: .userInitiated) { [weak self] in - guard let self = self else { return } - do { - // Security H1: Check file size BEFORE reading into memory - let attrs = try FileManager.default.attributesOfItem(atPath: url.path) - guard let fileSize = attrs[.size] as? Int, - fileSize <= FileTransferLimits.maxVoiceNoteBytes else { - let size = (attrs[.size] as? Int) ?? 0 - SecureLogger.warning("Voice note exceeds size limit (\(size) bytes)", category: .session) - try? FileManager.default.removeItem(at: url) - await MainActor.run { - self.handleMediaSendFailure(messageID: messageID, reason: "Voice note too large") - } - return - } - - let data = try Data(contentsOf: url) - let packet = BitchatFilePacket( - fileName: url.lastPathComponent, - fileSize: UInt64(data.count), - mimeType: "audio/mp4", - content: data - ) - guard packet.encode() != nil else { throw MediaSendError.encodingFailed } - await MainActor.run { - self.registerTransfer(transferId: transferId, messageID: messageID) - if let peerID = targetPeer { - self.meshService.sendFilePrivate(packet, to: peerID, transferId: transferId) - } else { - self.meshService.sendFileBroadcast(packet, transferId: transferId) - } - } - } catch { - SecureLogger.error("Voice note send failed: \(error)", category: .session) - await MainActor.run { - self.handleMediaSendFailure(messageID: messageID, reason: "Failed to send voice note") - } - } - } + mediaTransferCoordinator.sendVoiceNote(at: url) } #if os(iOS) func processThenSendImage(_ image: UIImage?) { - guard let image else { return } - Task.detached { - do { - let processedURL = try ImageUtils.processImage(image) - await MainActor.run { - self.sendImage(from: processedURL) - } - } catch { - SecureLogger.error("Image processing failed: \(error)", category: .session) - } - } + mediaTransferCoordinator.processThenSendImage(image) } #elseif os(macOS) func processThenSendImage(from url: URL?) { - guard let url else { return } - Task.detached { - do { - let processedURL = try ImageUtils.processImage(at: url) - await MainActor.run { - self.sendImage(from: processedURL) - } - } catch { - SecureLogger.error("Image processing failed: \(error)", category: .session) - } - } + mediaTransferCoordinator.processThenSendImage(from: url) } #endif @MainActor func sendImage(from sourceURL: URL, cleanup: (() -> Void)? = nil) { - guard canSendMediaInCurrentContext else { - SecureLogger.info("Image send blocked outside mesh/private context", category: .session) - cleanup?() - addSystemMessage("Images are only available in mesh chats.") - return - } - - let targetPeer = selectedPrivateChatPeer - - Task.detached(priority: .userInitiated) { [weak self] in - guard let self = self else { return } - var processedURL: URL? - do { - let outputURL = try ImageUtils.processImage(at: sourceURL) - processedURL = outputURL - let data = try Data(contentsOf: outputURL) - guard data.count <= FileTransferLimits.maxImageBytes else { - SecureLogger.warning("Processed image exceeds size limit (\(data.count) bytes)", category: .session) - await MainActor.run { - self.addSystemMessage("Image is too large to send.") - } - try? FileManager.default.removeItem(at: outputURL) - return - } - let packet = BitchatFilePacket( - fileName: outputURL.lastPathComponent, - fileSize: UInt64(data.count), - mimeType: "image/jpeg", - content: data - ) - guard packet.encode() != nil else { throw MediaSendError.encodingFailed } - await MainActor.run { - let message = self.enqueueMediaMessage(content: "\(MimeType.Category.image.messagePrefix)\(outputURL.lastPathComponent)", targetPeer: targetPeer) - let messageID = message.id - let transferId = self.makeTransferID(messageID: messageID) - self.registerTransfer(transferId: transferId, messageID: messageID) - if let peerID = targetPeer { - self.meshService.sendFilePrivate(packet, to: peerID, transferId: transferId) - } else { - self.meshService.sendFileBroadcast(packet, transferId: transferId) - } - } - } catch { - SecureLogger.error("Image send preparation failed: \(error)", category: .session) - await MainActor.run { - self.addSystemMessage("Failed to prepare image for sending.") - } - if let url = processedURL { - try? FileManager.default.removeItem(at: url) - } - } - } + mediaTransferCoordinator.sendImage(from: sourceURL, cleanup: cleanup) } @MainActor func enqueueMediaMessage(content: String, targetPeer: PeerID?) -> BitchatMessage { - let timestamp = Date() - let message: BitchatMessage - - if let peerID = targetPeer { - message = BitchatMessage( - sender: nickname, - content: content, - timestamp: timestamp, - isRelay: false, - originalSender: nil, - isPrivate: true, - recipientNickname: nicknameForPeer(peerID), - senderPeerID: meshService.myPeerID, - deliveryStatus: .sending - ) - var chats = privateChats - chats[peerID, default: []].append(message) - privateChats = chats - trimMessagesIfNeeded() - } else { - let (displayName, senderPeerID) = currentPublicSender() - message = BitchatMessage( - sender: displayName, - content: content, - timestamp: timestamp, - isRelay: false, - originalSender: nil, - isPrivate: false, - recipientNickname: nil, - senderPeerID: senderPeerID, - deliveryStatus: .sending - ) - timelineStore.append(message, to: activeChannel) - messages = timelineStore.messages(for: activeChannel) - trimMessagesIfNeeded() - } - - let key = deduplicationService.normalizedContentKey(message.content) - deduplicationService.recordContentKey(key, timestamp: timestamp) - objectWillChange.send() - return message + mediaTransferCoordinator.enqueueMediaMessage(content: content, targetPeer: targetPeer) } @MainActor func registerTransfer(transferId: String, messageID: String) { - transferIdToMessageIDs[transferId, default: []].append(messageID) - messageIDToTransferId[messageID] = transferId + mediaTransferCoordinator.registerTransfer(transferId: transferId, messageID: messageID) } func makeTransferID(messageID: String) -> String { - "\(messageID)-\(UUID().uuidString)" + mediaTransferCoordinator.makeTransferID(messageID: messageID) } @MainActor func clearTransferMapping(for messageID: String) { - guard let transferId = messageIDToTransferId.removeValue(forKey: messageID) else { return } - guard var queue = transferIdToMessageIDs[transferId] else { return } - if !queue.isEmpty { - if queue.first == messageID { - queue.removeFirst() - } else if let idx = queue.firstIndex(of: messageID) { - queue.remove(at: idx) - } - } - transferIdToMessageIDs[transferId] = queue.isEmpty ? nil : queue + mediaTransferCoordinator.clearTransferMapping(for: messageID) } @MainActor func handleMediaSendFailure(messageID: String, reason: String) { - updateMessageDeliveryStatus(messageID, status: .failed(reason: reason)) - clearTransferMapping(for: messageID) + mediaTransferCoordinator.handleMediaSendFailure(messageID: messageID, reason: reason) } @MainActor func handleTransferEvent(_ event: TransferProgressManager.Event) { - switch event { - case .started(let id, let total): - guard let messageID = transferIdToMessageIDs[id]?.first else { return } - updateMessageDeliveryStatus(messageID, status: .partiallyDelivered(reached: 0, total: total)) - case .updated(let id, let sent, let total): - guard let messageID = transferIdToMessageIDs[id]?.first else { return } - updateMessageDeliveryStatus(messageID, status: .partiallyDelivered(reached: sent, total: total)) - case .completed(let id, _): - guard let messageID = transferIdToMessageIDs[id]?.first else { return } - updateMessageDeliveryStatus(messageID, status: .sent) - clearTransferMapping(for: messageID) - case .cancelled(let id, _, _): - guard let messageID = transferIdToMessageIDs[id]?.first else { return } - clearTransferMapping(for: messageID) - removeMessage(withID: messageID, cleanupFile: true) - } + mediaTransferCoordinator.handleTransferEvent(event) } func cleanupLocalFile(forMessage message: BitchatMessage) { - // Check both outgoing and incoming directories for thorough cleanup - let categories: [MimeType.Category] = [.audio, .image, .file] - guard let category = categories.first(where: { message.content.hasPrefix($0.messagePrefix) }), - let rawFilename = String(message.content.dropFirst(category.messagePrefix.count)).trimmedOrNilIfEmpty, - let base = try? applicationFilesDirectory(), - // Security: Extract only the last path component to prevent directory traversal - let safeFilename = (rawFilename as NSString).lastPathComponent.nilIfEmpty, - safeFilename != "." && safeFilename != ".." - else { - return - } - - // Try all possible locations (outgoing and incoming) - let subdirs = categories.flatMap { ["\($0.mediaDir)/outgoing", "\($0.mediaDir)/incoming"] } - for subdir in subdirs { - let target = base.appendingPathComponent(subdir, isDirectory: true).appendingPathComponent(safeFilename) - - // Security: Verify target is within expected directory before deletion - guard target.path.hasPrefix(base.path) else { continue } - - do { - try FileManager.default.removeItem(at: target) - } catch CocoaError.fileNoSuchFile { - // Expected - file not in this directory - } catch { - SecureLogger.error("Failed to cleanup \(safeFilename): \(error)", category: .session) - } - } - } - - func applicationFilesDirectory() throws -> URL { - let base = try FileManager.default.url(for: .applicationSupportDirectory, in: .userDomainMask, appropriateFor: nil, create: true) - let filesDir = base.appendingPathComponent("files", isDirectory: true) - try FileManager.default.createDirectory(at: filesDir, withIntermediateDirectories: true, attributes: nil) - return filesDir + mediaTransferCoordinator.cleanupLocalFile(forMessage: message) } @MainActor func cancelMediaSend(messageID: String) { - if let transferId = messageIDToTransferId[messageID], - let active = transferIdToMessageIDs[transferId]?.first, - active == messageID { - meshService.cancelTransfer(transferId) - } - clearTransferMapping(for: messageID) - removeMessage(withID: messageID, cleanupFile: true) + mediaTransferCoordinator.cancelMediaSend(messageID: messageID) } @MainActor func deleteMediaMessage(messageID: String) { - clearTransferMapping(for: messageID) - removeMessage(withID: messageID, cleanupFile: true) + mediaTransferCoordinator.deleteMediaMessage(messageID: messageID) } - - // MARK: - Private Chat Handling (Main) @MainActor func handlePrivateMessage( @@ -612,249 +130,46 @@ extension ChatViewModel { messageTimestamp: Date, senderPubkey: String ) { - guard let pm = PrivateMessagePacket.decode(from: payload.data) else { return } - let messageId = pm.messageID - let messageContent = pm.content - - // Favorite/unfavorite notifications embedded as private messages - if messageContent.hasPrefix("[FAVORITED]") || messageContent.hasPrefix("[UNFAVORITED]") { - if let key = actualSenderNoiseKey { - handleFavoriteNotificationFromMesh(messageContent, from: PeerID(hexData: key), senderNickname: senderNickname) - } - return - } - - if isDuplicateMessage(messageId, targetPeerID: targetPeerID) { - return - } - - let wasReadBefore = sentReadReceipts.contains(messageId) - - // Is viewing? - var isViewingThisChat = false - if selectedPrivateChatPeer == targetPeerID { - isViewingThisChat = true - } else if let selectedPeer = selectedPrivateChatPeer, - let selectedPeerData = unifiedPeerService.getPeer(by: selectedPeer), - let key = actualSenderNoiseKey, - selectedPeerData.noisePublicKey == key { - isViewingThisChat = true - } - - // Recency check - let isRecentMessage = Date().timeIntervalSince(messageTimestamp) < 30 - let shouldMarkAsUnread = !wasReadBefore && !isViewingThisChat && isRecentMessage - - let message = BitchatMessage( - id: messageId, - sender: senderNickname, - content: messageContent, - timestamp: messageTimestamp, - isRelay: false, - isPrivate: true, - recipientNickname: nickname, - senderPeerID: targetPeerID, - deliveryStatus: .delivered(to: nickname, at: Date()) + privateConversationCoordinator.handlePrivateMessage( + payload, + actualSenderNoiseKey: actualSenderNoiseKey, + senderNickname: senderNickname, + targetPeerID: targetPeerID, + messageTimestamp: messageTimestamp, + senderPubkey: senderPubkey ) - - addMessageToPrivateChatsIfNeeded(message, targetPeerID: targetPeerID) - mirrorToEphemeralIfNeeded(message, targetPeerID: targetPeerID, key: actualSenderNoiseKey) - - // Using simplified internal helper in this file (or make the main one internal) - // sendDeliveryAckViaNostrEmbedded is in ChatViewModel+Nostr.swift and is internal. - // However, it was missing in ChatViewModel+Nostr.swift in previous step check? - // Wait, I added `sendDeliveryAckViaNostrEmbedded` to `ChatViewModel+Nostr.swift` in Step 19? - // Let's re-check `ChatViewModel+Nostr.swift` content in my mind. - // I see `sendDeliveryAckViaNostrEmbedded` in `ChatViewModel+Nostr.swift` in the output of step 33. - // So I can call it. - sendDeliveryAckViaNostrEmbedded( - message, - wasReadBefore: wasReadBefore, - senderPubkey: senderPubkey, - key: actualSenderNoiseKey - ) - - if wasReadBefore { - // do nothing - } else if isViewingThisChat { - handleViewingThisChat( - message, - targetPeerID: targetPeerID, - key: actualSenderNoiseKey, - senderPubkey: senderPubkey - ) - } else { - markAsUnreadIfNeeded( - shouldMarkAsUnread: shouldMarkAsUnread, - targetPeerID: targetPeerID, - key: actualSenderNoiseKey, - isRecentMessage: isRecentMessage, - senderNickname: senderNickname, - messageContent: messageContent - ) - } - - objectWillChange.send() } - - /// Handle incoming private message (Mesh) + @MainActor func handlePrivateMessage(_ message: BitchatMessage) { - SecureLogger.debug("📥 handlePrivateMessage called for message from \(message.sender)", category: .session) - let senderPeerID = message.senderPeerID ?? getPeerIDForNickname(message.sender) - - guard let peerID = senderPeerID else { - SecureLogger.warning("⚠️ Could not get peer ID for sender \(message.sender)", category: .session) - return - } - - // Check if this is a favorite/unfavorite notification - if message.content.hasPrefix("[FAVORITED]") || message.content.hasPrefix("[UNFAVORITED]") { - handleFavoriteNotificationFromMesh(message.content, from: peerID, senderNickname: message.sender) - return // Don't store as a regular message - } - - // Migrate chats if needed - migratePrivateChatsIfNeeded(for: peerID, senderNickname: message.sender) - - // IMPORTANT: Also consolidate messages from stable Noise key if this is an ephemeral peer - // This ensures Nostr messages appear in BLE chats - if peerID.id.count == 16 { // This is an ephemeral peer ID (8 bytes = 16 hex chars) - if let peer = unifiedPeerService.getPeer(by: peerID) { - let stableKeyHex = PeerID(hexData: peer.noisePublicKey) - - // If we have messages stored under the stable key, merge them - if stableKeyHex != peerID, let nostrMessages = privateChats[stableKeyHex], !nostrMessages.isEmpty { - // Merge messages from stable key into ephemeral peer ID storage - if privateChats[peerID] == nil { - privateChats[peerID] = [] - } - - // Add any messages that aren't already in the ephemeral storage - let existingMessageIds = Set(privateChats[peerID]?.map { $0.id } ?? []) - for nostrMessage in nostrMessages { - if !existingMessageIds.contains(nostrMessage.id) { - privateChats[peerID]?.append(nostrMessage) - } - } - - // Sort by timestamp - privateChats[peerID]?.sort { $0.timestamp < $1.timestamp } - - // Clean up the stable key storage to avoid duplication - privateChats.removeValue(forKey: stableKeyHex) - - SecureLogger.info("📥 Consolidated \(nostrMessages.count) Nostr messages from stable key to ephemeral peer \(peerID)", category: .session) - } - } - } - - // Avoid duplicates - if isDuplicateMessage(message.id, targetPeerID: peerID) { - return - } - - // Store the message - addMessageToPrivateChatsIfNeeded(message, targetPeerID: peerID) - - // Mirror to ephemeral if needed (if we are talking to a stable key peer but have an ephemeral session) - // Actually, logic usually mirrors TO stable key storage if available? - // Or mirrors to ephemeral if we received on stable. - // Let's just use the existing helper which seems to mirror TO ephemeral. - // But we need to get the noise key. - let noiseKey = peerID.noiseKey ?? unifiedPeerService.getPeer(by: peerID)?.noisePublicKey - mirrorToEphemeralIfNeeded(message, targetPeerID: peerID, key: noiseKey) - - // Notifications and Read Receipts - let isViewing = selectedPrivateChatPeer == peerID - - if isViewing { - // Mark read immediately if viewing - // Use the incoming peerID directly - it has the established Noise session. - // Don't use PeerID(hexData: noiseKey) as that creates a 64-hex ID without a session. - // Use meshService directly (not messageRouter) so it queues if peer disconnects. - let receipt = ReadReceipt(originalMessageID: message.id, readerID: meshService.myPeerID, readerNickname: nickname) - meshService.sendReadReceipt(receipt, to: peerID) - sentReadReceipts.insert(message.id) - } else { - // Notify - unreadPrivateMessages.insert(peerID) - NotificationService.shared.sendPrivateMessageNotification( - from: message.sender, - message: message.content, - peerID: peerID - ) - } - - objectWillChange.send() + privateConversationCoordinator.handlePrivateMessage(message) } + @MainActor func isDuplicateMessage(_ messageId: String, targetPeerID: PeerID) -> Bool { - if privateChats[targetPeerID]?.contains(where: { $0.id == messageId }) == true { - return true - } - for (_, messages) in privateChats where messages.contains(where: { $0.id == messageId }) { - return true - } - return false + privateConversationCoordinator.isDuplicateMessage(messageId, targetPeerID: targetPeerID) } - + + @MainActor func addMessageToPrivateChatsIfNeeded(_ message: BitchatMessage, targetPeerID: PeerID) { - if privateChats[targetPeerID] == nil { - privateChats[targetPeerID] = [] - } - if let idx = privateChats[targetPeerID]?.firstIndex(where: { $0.id == message.id }) { - privateChats[targetPeerID]?[idx] = message - } else { - privateChats[targetPeerID]?.append(message) - } - // Sanitize to avoid duplicate IDs - privateChatManager.sanitizeChat(for: targetPeerID) + privateConversationCoordinator.addMessageToPrivateChatsIfNeeded(message, targetPeerID: targetPeerID) } - + @MainActor func mirrorToEphemeralIfNeeded(_ message: BitchatMessage, targetPeerID: PeerID, key: Data?) { - guard let key, - let ephemeralPeerID = unifiedPeerService.peers.first(where: { $0.noisePublicKey == key })?.peerID, - ephemeralPeerID != targetPeerID - else { - return - } - - if privateChats[ephemeralPeerID] == nil { - privateChats[ephemeralPeerID] = [] - } - if let idx = privateChats[ephemeralPeerID]?.firstIndex(where: { $0.id == message.id }) { - privateChats[ephemeralPeerID]?[idx] = message - } else { - privateChats[ephemeralPeerID]?.append(message) - } - privateChatManager.sanitizeChat(for: ephemeralPeerID) + privateConversationCoordinator.mirrorToEphemeralIfNeeded(message, targetPeerID: targetPeerID, key: key) } - + @MainActor func handleViewingThisChat(_ message: BitchatMessage, targetPeerID: PeerID, key: Data?, senderPubkey: String) { - unreadPrivateMessages.remove(targetPeerID) - if let key, - let ephemeralPeerID = unifiedPeerService.peers.first(where: { $0.noisePublicKey == key })?.peerID { - unreadPrivateMessages.remove(ephemeralPeerID) - } - if !sentReadReceipts.contains(message.id) { - if let key { - let receipt = ReadReceipt(originalMessageID: message.id, readerID: meshService.myPeerID, readerNickname: nickname) - SecureLogger.debug("Viewing chat; sending READ ack for \(message.id.prefix(8))… via router", category: .session) - messageRouter.sendReadReceipt(receipt, to: PeerID(hexData: key)) - sentReadReceipts.insert(message.id) - } else if let id = try? idBridge.getCurrentNostrIdentity() { - let nt = NostrTransport(keychain: keychain, idBridge: idBridge) - nt.senderPeerID = meshService.myPeerID - nt.sendReadReceiptGeohash(message.id, toRecipientHex: senderPubkey, from: id) - sentReadReceipts.insert(message.id) - SecureLogger.debug("Viewing chat; sent READ ack directly to Nostr pub=\(senderPubkey.prefix(8))… for mid=\(message.id.prefix(8))…", category: .session) - } - } + privateConversationCoordinator.handleViewingThisChat( + message, + targetPeerID: targetPeerID, + key: key, + senderPubkey: senderPubkey + ) } - + @MainActor func markAsUnreadIfNeeded( shouldMarkAsUnread: Bool, @@ -864,227 +179,42 @@ extension ChatViewModel { senderNickname: String, messageContent: String ) { - guard shouldMarkAsUnread else { return } - - unreadPrivateMessages.insert(targetPeerID) - if let key, - let ephemeralPeerID = unifiedPeerService.peers.first(where: { $0.noisePublicKey == key })?.peerID, - ephemeralPeerID != targetPeerID { - unreadPrivateMessages.insert(ephemeralPeerID) - } - if isRecentMessage { - NotificationService.shared.sendPrivateMessageNotification( - from: senderNickname, - message: messageContent, - peerID: targetPeerID - ) - } + privateConversationCoordinator.markAsUnreadIfNeeded( + shouldMarkAsUnread: shouldMarkAsUnread, + targetPeerID: targetPeerID, + key: key, + isRecentMessage: isRecentMessage, + senderNickname: senderNickname, + messageContent: messageContent + ) } - + @MainActor func handleFavoriteNotificationFromMesh(_ content: String, from peerID: PeerID, senderNickname: String) { - // Parse the message format: "[FAVORITED]:npub..." or "[UNFAVORITED]:npub..." - let isFavorite = content.hasPrefix("[FAVORITED]") - let parts = content.split(separator: ":") - - // Extract Nostr public key if included - var nostrPubkey: String? = nil - if parts.count > 1 { - nostrPubkey = String(parts[1]) - SecureLogger.info("📝 Received Nostr npub in favorite notification: \(nostrPubkey ?? "none")", category: .session) - } - - // Get the noise public key for this peer - let noiseKey = peerID.noiseKey ?? unifiedPeerService.getPeer(by: peerID)?.noisePublicKey - - guard let finalNoiseKey = noiseKey else { - SecureLogger.warning("⚠️ Cannot get Noise key for peer \(peerID)", category: .session) - return - } - // Determine prior state to avoid duplicate system messages on repeated notifications - let prior = FavoritesPersistenceService.shared.getFavoriteStatus(for: finalNoiseKey)?.theyFavoritedUs ?? false - - // Update the favorite relationship (idempotent storage) - FavoritesPersistenceService.shared.updatePeerFavoritedUs( - peerNoisePublicKey: finalNoiseKey, - favorited: isFavorite, - peerNickname: senderNickname, - peerNostrPublicKey: nostrPubkey + privateConversationCoordinator.handleFavoriteNotificationFromMesh( + content, + from: peerID, + senderNickname: senderNickname ) - - // If they favorited us and provided their Nostr key, ensure it's stored (log only) - if isFavorite && nostrPubkey != nil { - SecureLogger.info("💾 Storing Nostr key association for \(senderNickname): \(nostrPubkey!.prefix(16))...", category: .session) - } - - // Only show a system message when the state changes, and only in mesh - if prior != isFavorite { - let action = isFavorite ? "favorited" : "unfavorited" - addMeshOnlySystemMessage("\(senderNickname) \(action) you") - } } - - /// Process action messages (hugs, slaps) into system messages + + @MainActor func processActionMessage(_ message: BitchatMessage) -> BitchatMessage { - let isActionMessage = message.content.hasPrefix("* ") && message.content.hasSuffix(" *") && - (message.content.contains("🫂") || message.content.contains("🐟") || - message.content.contains("took a screenshot")) - - if isActionMessage { - return BitchatMessage( - id: message.id, - sender: "system", - content: String(message.content.dropFirst(2).dropLast(2)), // Remove * * wrapper - timestamp: message.timestamp, - isRelay: message.isRelay, - originalSender: message.originalSender, - isPrivate: message.isPrivate, - recipientNickname: message.recipientNickname, - senderPeerID: message.senderPeerID, - mentions: message.mentions, - deliveryStatus: message.deliveryStatus - ) - } - return message + privateConversationCoordinator.processActionMessage(message) } - - /// Migrate private chats when peer reconnects with new ID + @MainActor func migratePrivateChatsIfNeeded(for peerID: PeerID, senderNickname: String) { - let currentFingerprint = getFingerprint(for: peerID) - - if privateChats[peerID] == nil || privateChats[peerID]?.isEmpty == true { - var migratedMessages: [BitchatMessage] = [] - var oldPeerIDsToRemove: [PeerID] = [] - - // Only migrate messages from the last 24 hours to prevent old messages from flooding - let cutoffTime = Date().addingTimeInterval(-TransportConfig.uiMigrationCutoffSeconds) - - for (oldPeerID, messages) in privateChats { - if oldPeerID != peerID { - let oldFingerprint = peerIDToPublicKeyFingerprint[oldPeerID] - - // Filter messages to only recent ones - let recentMessages = messages.filter { $0.timestamp > cutoffTime } - - // Skip if no recent messages - guard !recentMessages.isEmpty else { continue } - - // Check fingerprint match first (most reliable) - if let currentFp = currentFingerprint, - let oldFp = oldFingerprint, - currentFp == oldFp { - migratedMessages.append(contentsOf: recentMessages) - - // Only remove old peer ID if we migrated ALL its messages - if recentMessages.count == messages.count { - oldPeerIDsToRemove.append(oldPeerID) - } else { - // Keep old messages in original location but don't show in UI - SecureLogger.info("📦 Partially migrating \(recentMessages.count) of \(messages.count) messages from \(oldPeerID)", category: .session) - } - - SecureLogger.info("📦 Migrating \(recentMessages.count) recent messages from old peer ID \(oldPeerID) to \(peerID) (fingerprint match)", category: .session) - } else if currentFingerprint == nil || oldFingerprint == nil { - // Check if this chat contains messages with this sender by nickname - let isRelevantChat = recentMessages.contains { msg in - (msg.sender == senderNickname && msg.sender != nickname) || - (msg.sender == nickname && msg.recipientNickname == senderNickname) - } - - if isRelevantChat { - migratedMessages.append(contentsOf: recentMessages) - - // Only remove if all messages were migrated - if recentMessages.count == messages.count { - oldPeerIDsToRemove.append(oldPeerID) - } - - SecureLogger.warning("📦 Migrating \(recentMessages.count) recent messages from old peer ID \(oldPeerID) to \(peerID) (nickname match)", category: .session) - } - } - } - } - - // Remove old peer ID entries - if !oldPeerIDsToRemove.isEmpty { - // Track if we need to update selectedPrivateChatPeer - let needsSelectedUpdate = oldPeerIDsToRemove.contains { selectedPrivateChatPeer == $0 } - - for oldID in oldPeerIDsToRemove { - privateChats.removeValue(forKey: oldID) - unreadPrivateMessages.remove(oldID) - - // Also clean up fingerprint mapping - if peerIDToPublicKeyFingerprint[oldID] != nil { - peerIDToPublicKeyFingerprint.removeValue(forKey: oldID) - } - } - - if needsSelectedUpdate { - selectedPrivateChatPeer = peerID - } - } - - // Add migrated messages to new peer ID - if !migratedMessages.isEmpty { - if privateChats[peerID] == nil { - privateChats[peerID] = [] - } - privateChats[peerID]?.append(contentsOf: migratedMessages) - - // Sort by timestamp - privateChats[peerID]?.sort { $0.timestamp < $1.timestamp } - - // De-duplicate just in case - privateChatManager.sanitizeChat(for: peerID) - - objectWillChange.send() - } - } - } - - @MainActor - func sendFavoriteNotification(to peerID: PeerID, isFavorite: Bool) { - // Handle both ephemeral peer IDs and Noise key hex strings - var noiseKey: Data? - - // First check if peerID is a hex-encoded Noise key - if let hexKey = Data(hexString: peerID.id) { - noiseKey = hexKey - } else { - // It's an ephemeral peer ID, get the Noise key from UnifiedPeerService - if let peer = unifiedPeerService.getPeer(by: peerID) { - noiseKey = peer.noisePublicKey - } - } - - // Try mesh first for connected peers - if meshService.isPeerConnected(peerID) { - messageRouter.sendFavoriteNotification(to: peerID, isFavorite: isFavorite) - SecureLogger.debug("📤 Sent favorite notification via BLE to \(peerID)", category: .session) - } else if let key = noiseKey { - // Send via Nostr for offline peers (using router) - messageRouter.sendFavoriteNotification(to: PeerID(hexData: key), isFavorite: isFavorite) - } else { - SecureLogger.warning("⚠️ Cannot send favorite notification - peer not connected and no Nostr pubkey", category: .session) - } + privateConversationCoordinator.migratePrivateChatsIfNeeded(for: peerID, senderNickname: senderNickname) + } + + @MainActor + func sendFavoriteNotification(to peerID: PeerID, isFavorite: Bool) { + privateConversationCoordinator.sendFavoriteNotification(to: peerID, isFavorite: isFavorite) } - /// Check if a message should be blocked based on sender @MainActor func isMessageBlocked(_ message: BitchatMessage) -> Bool { - if let peerID = message.senderPeerID ?? getPeerIDForNickname(message.sender) { - // Check mesh/known peers first - if isPeerBlocked(peerID) { return true } - // Check geohash (Nostr) blocks using mapping to full pubkey - if peerID.isGeoChat || peerID.isGeoDM { - if let full = nostrKeyMapping[peerID]?.lowercased() { - if identityManager.isNostrBlocked(pubkeyHexLowercased: full) { return true } - } - } - return false - } - return false + privateConversationCoordinator.isMessageBlocked(message) } } diff --git a/bitchat/Views/Components/CommandSuggestionsView.swift b/bitchat/Views/Components/CommandSuggestionsView.swift index 4c9d0213..3ccc8f1e 100644 --- a/bitchat/Views/Components/CommandSuggestionsView.swift +++ b/bitchat/Views/Components/CommandSuggestionsView.swift @@ -8,8 +8,8 @@ import SwiftUI struct CommandSuggestionsView: View { - @EnvironmentObject private var viewModel: ChatViewModel - @ObservedObject private var locationManager = LocationChannelManager.shared + @EnvironmentObject private var privateConversationModel: PrivateConversationModel + @EnvironmentObject private var locationChannelsModel: LocationChannelsModel @Binding var messageText: String @@ -19,8 +19,8 @@ struct CommandSuggestionsView: View { private var filteredCommands: [CommandInfo] { guard messageText.hasPrefix("/") && !messageText.contains(" ") else { return [] } - let isGeoPublic = locationManager.selectedChannel.isLocation - let isGeoDM = viewModel.selectedPrivateChatPeer?.isGeoDM == true + let isGeoPublic = locationChannelsModel.selectedChannel.isLocation + let isGeoDM = privateConversationModel.selectedPeerID?.isGeoDM == true return CommandInfo.all(isGeoPublic: isGeoPublic, isGeoDM: isGeoDM).filter { command in command.alias.starts(with: messageText.lowercased()) } @@ -79,6 +79,11 @@ struct CommandSuggestionsView: View { idBridge: NostrIdentityBridge(), identityManager: SecureIdentityStateManager(keychain) ) + let privateConversationModel = PrivateConversationModel( + chatViewModel: viewModel, + conversationStore: viewModel.conversationStore + ) + let locationChannelsModel = LocationChannelsModel() CommandSuggestionsView( messageText: $messageText, @@ -86,5 +91,6 @@ struct CommandSuggestionsView: View { backgroundColor: .primary, secondaryTextColor: .secondary ) - .environmentObject(viewModel) + .environmentObject(privateConversationModel) + .environmentObject(locationChannelsModel) } diff --git a/bitchat/Views/Components/TextMessageView.swift b/bitchat/Views/Components/TextMessageView.swift index 7b89a781..6b1be23a 100644 --- a/bitchat/Views/Components/TextMessageView.swift +++ b/bitchat/Views/Components/TextMessageView.swift @@ -11,7 +11,7 @@ import BitFoundation struct TextMessageView: View { @Environment(\.colorScheme) private var colorScheme: ColorScheme - @EnvironmentObject private var viewModel: ChatViewModel + @EnvironmentObject private var conversationUIModel: ConversationUIModel let message: BitchatMessage @State private var expandedMessageIDs: Set = [] @@ -24,13 +24,13 @@ struct TextMessageView: View { HStack(alignment: .top, spacing: 0) { let isLong = (message.content.count > TransportConfig.uiLongMessageLengthThreshold || message.content.hasVeryLongToken(threshold: TransportConfig.uiVeryLongTokenThreshold)) && cashuLinks.isEmpty let isExpanded = expandedMessageIDs.contains(message.id) - Text(viewModel.formatMessageAsText(message, colorScheme: colorScheme)) + Text(conversationUIModel.formatMessage(message, colorScheme: colorScheme)) .fixedSize(horizontal: false, vertical: true) .lineLimit(isLong && !isExpanded ? TransportConfig.uiLongMessageLineLimit : nil) .frame(maxWidth: .infinity, alignment: .leading) // Delivery status indicator for private messages - if message.isPrivate && message.sender == viewModel.nickname, + if message.isPrivate && conversationUIModel.isSentByCurrentUser(message), let status = message.deliveryStatus { DeliveryStatusView(status: status) .padding(.leading, 4) @@ -69,6 +69,20 @@ struct TextMessageView: View { #Preview { let keychain = PreviewKeychainManager() + let viewModel = ChatViewModel( + keychain: keychain, + idBridge: NostrIdentityBridge(), + identityManager: SecureIdentityStateManager(keychain) + ) + let privateConversationModel = PrivateConversationModel( + chatViewModel: viewModel, + conversationStore: viewModel.conversationStore + ) + let conversationUIModel = ConversationUIModel( + chatViewModel: viewModel, + privateConversationModel: privateConversationModel, + conversationStore: viewModel.conversationStore + ) Group { List { @@ -87,11 +101,5 @@ struct TextMessageView: View { } .environment(\.colorScheme, .dark) } - .environmentObject( - ChatViewModel( - keychain: keychain, - idBridge: NostrIdentityBridge(), - identityManager: SecureIdentityStateManager(keychain) - ) - ) + .environmentObject(conversationUIModel) } diff --git a/bitchat/Views/ContentComposerView.swift b/bitchat/Views/ContentComposerView.swift new file mode 100644 index 00000000..424a649b --- /dev/null +++ b/bitchat/Views/ContentComposerView.swift @@ -0,0 +1,248 @@ +import SwiftUI +#if os(iOS) +import UIKit +#endif + +struct ContentComposerView: View { + @EnvironmentObject private var conversationUIModel: ConversationUIModel + @EnvironmentObject private var privateConversationModel: PrivateConversationModel + @Environment(\.colorScheme) private var colorScheme + + @Binding var messageText: String + var isTextFieldFocused: FocusState.Binding + @ObservedObject var voiceRecordingVM: VoiceRecordingViewModel + @Binding var autocompleteDebounceTimer: Timer? + + let backgroundColor: Color + let textColor: Color + let secondaryTextColor: Color + let onSendMessage: () -> Void + + #if os(iOS) + @Binding var showImagePicker: Bool + @Binding var imagePickerSourceType: UIImagePickerController.SourceType + #else + @Binding var showMacImagePicker: Bool + #endif + + var body: some View { + VStack(alignment: .leading, spacing: 6) { + if conversationUIModel.showAutocomplete && !conversationUIModel.autocompleteSuggestions.isEmpty { + VStack(alignment: .leading, spacing: 0) { + ForEach(Array(conversationUIModel.autocompleteSuggestions.prefix(4)), id: \.self) { suggestion in + Button(action: { + _ = conversationUIModel.completeNickname(suggestion, in: &messageText) + }) { + HStack { + Text(suggestion) + .font(.bitchatSystem(size: 11, design: .monospaced)) + .foregroundColor(textColor) + .fontWeight(.medium) + Spacer() + } + .padding(.horizontal, 12) + .padding(.vertical, 3) + .frame(maxWidth: .infinity, alignment: .leading) + } + .buttonStyle(.plain) + .background(Color.gray.opacity(0.1)) + } + } + .background(backgroundColor) + .overlay( + RoundedRectangle(cornerRadius: 4) + .stroke(secondaryTextColor.opacity(0.3), lineWidth: 1) + ) + .padding(.horizontal, 12) + } + + CommandSuggestionsView( + messageText: $messageText, + textColor: textColor, + backgroundColor: backgroundColor, + secondaryTextColor: secondaryTextColor + ) + + if voiceRecordingVM.state.isActive { + recordingIndicator + } + + HStack(alignment: .center, spacing: 4) { + TextField( + "", + text: $messageText, + prompt: Text( + String(localized: "content.input.message_placeholder", comment: "Placeholder shown in the chat composer") + ) + .foregroundColor(secondaryTextColor.opacity(0.6)) + ) + .textFieldStyle(.plain) + .font(.bitchatSystem(size: 15, design: .monospaced)) + .foregroundColor(textColor) + .focused(isTextFieldFocused) + .autocorrectionDisabled(true) + #if os(iOS) + .textInputAutocapitalization(.sentences) + #endif + .submitLabel(.send) + .onSubmit(onSendMessage) + .padding(.vertical, 4) + .padding(.horizontal, 6) + .background( + RoundedRectangle(cornerRadius: 14, style: .continuous) + .fill(colorScheme == .dark ? Color.black.opacity(0.35) : Color.white.opacity(0.7)) + ) + .modifier(FocusEffectDisabledModifier()) + .frame(maxWidth: .infinity, alignment: .leading) + .onChange(of: messageText) { newValue in + autocompleteDebounceTimer?.invalidate() + autocompleteDebounceTimer = Timer.scheduledTimer(withTimeInterval: 0.15, repeats: false) { _ in + let cursorPosition = newValue.count + Task { @MainActor in + conversationUIModel.updateAutocomplete(for: newValue, cursorPosition: cursorPosition) + } + } + } + + HStack(alignment: .center, spacing: 4) { + if conversationUIModel.canSendMediaInCurrentContext { + attachmentButton + } + + sendOrMicButton + } + } + } + .padding(.horizontal, 6) + .padding(.top, 6) + .padding(.bottom, 8) + .background(backgroundColor.opacity(0.95)) + .onDisappear { + autocompleteDebounceTimer?.invalidate() + } + } +} + +private extension ContentComposerView { + var recordingIndicator: some View { + HStack(spacing: 12) { + Image(systemName: "waveform.circle.fill") + .foregroundColor(.red) + .font(.bitchatSystem(size: 20)) + TimelineView(.periodic(from: .now, by: 0.05)) { context in + Text( + "recording \(voiceRecordingVM.formattedDuration(for: context.date))", + comment: "Voice note recording duration indicator" + ) + .font(.bitchatSystem(size: 13, design: .monospaced)) + .foregroundColor(.red) + } + Spacer() + Button(action: voiceRecordingVM.cancel) { + Label("Cancel", systemImage: "xmark.circle") + .labelStyle(.iconOnly) + .font(.bitchatSystem(size: 18)) + .foregroundColor(.red) + } + .buttonStyle(.plain) + } + .padding(10) + .background( + RoundedRectangle(cornerRadius: 12) + .fill(Color.red.opacity(0.15)) + ) + } + + var composerAccentColor: Color { + privateConversationModel.selectedPeerID != nil ? Color.orange : textColor + } + + var attachmentButton: some View { + #if os(iOS) + Image(systemName: "camera.circle.fill") + .font(.bitchatSystem(size: 24)) + .foregroundColor(composerAccentColor) + .frame(width: 36, height: 36) + .contentShape(Circle()) + .onTapGesture { + imagePickerSourceType = .photoLibrary + showImagePicker = true + } + .onLongPressGesture(minimumDuration: 0.3) { + imagePickerSourceType = .camera + showImagePicker = true + } + .accessibilityLabel("Tap for library, long press for camera") + #else + Button(action: { showMacImagePicker = true }) { + Image(systemName: "photo.circle.fill") + .font(.bitchatSystem(size: 24)) + .foregroundColor(composerAccentColor) + .frame(width: 36, height: 36) + } + .buttonStyle(.plain) + .accessibilityLabel("Choose photo") + #endif + } + + @ViewBuilder + var sendOrMicButton: some View { + let hasText = !messageText.trimmed.isEmpty + if conversationUIModel.canSendMediaInCurrentContext { + ZStack { + micButtonView + .opacity(hasText ? 0 : 1) + .allowsHitTesting(!hasText) + sendButtonView(enabled: hasText) + .opacity(hasText ? 1 : 0) + .allowsHitTesting(hasText) + } + .frame(width: 36, height: 36) + } else { + sendButtonView(enabled: hasText) + .frame(width: 36, height: 36) + } + } + + var micButtonView: some View { + Image(systemName: "mic.circle.fill") + .font(.bitchatSystem(size: 24)) + .foregroundColor(voiceRecordingVM.state.isActive ? Color.red : composerAccentColor) + .frame(width: 36, height: 36) + .contentShape(Circle()) + .overlay( + Color.clear + .contentShape(Circle()) + .gesture( + DragGesture(minimumDistance: 0) + .onChanged { _ in + voiceRecordingVM.start(shouldShow: conversationUIModel.canSendMediaInCurrentContext) + } + .onEnded { _ in + voiceRecordingVM.finish(completion: conversationUIModel.sendVoiceNote) + } + ) + ) + .accessibilityLabel("Hold to record a voice note") + } + + func sendButtonView(enabled: Bool) -> some View { + let activeColor = composerAccentColor + return Button(action: onSendMessage) { + Image(systemName: "arrow.up.circle.fill") + .font(.bitchatSystem(size: 24)) + .foregroundColor(enabled ? activeColor : Color.gray) + .frame(width: 36, height: 36) + } + .buttonStyle(.plain) + .disabled(!enabled) + .accessibilityLabel( + String(localized: "content.accessibility.send_message", comment: "Accessibility label for the send message button") + ) + .accessibilityHint( + enabled + ? String(localized: "content.accessibility.send_hint_ready", comment: "Hint prompting the user to send the message") + : String(localized: "content.accessibility.send_hint_empty", comment: "Hint prompting the user to enter a message") + ) + } +} diff --git a/bitchat/Views/ContentHeaderView.swift b/bitchat/Views/ContentHeaderView.swift new file mode 100644 index 00000000..baa15034 --- /dev/null +++ b/bitchat/Views/ContentHeaderView.swift @@ -0,0 +1,315 @@ +import SwiftUI +#if os(iOS) +import UIKit +#endif + +struct ContentHeaderView: View { + @EnvironmentObject private var appChromeModel: AppChromeModel + @EnvironmentObject private var verificationModel: VerificationModel + @EnvironmentObject private var locationChannelsModel: LocationChannelsModel + @EnvironmentObject private var peerListModel: PeerListModel + @Environment(\.colorScheme) private var colorScheme + @Environment(\.dynamicTypeSize) private var dynamicTypeSize + + @Binding var showSidebar: Bool + @Binding var showVerifySheet: Bool + @Binding var showLocationNotes: Bool + @Binding var notesGeohash: String? + var isNicknameFieldFocused: FocusState.Binding + + let headerHeight: CGFloat + let headerPeerIconSize: CGFloat + let headerPeerCountFontSize: CGFloat + let backgroundColor: Color + let textColor: Color + let secondaryTextColor: Color + + var body: some View { + HStack(spacing: 0) { + Text(verbatim: "bitchat/") + .font(.bitchatSystem(size: 18, weight: .medium, design: .monospaced)) + .foregroundColor(textColor) + .onTapGesture(count: 3) { + appChromeModel.panicClearAllData() + } + .onTapGesture(count: 1) { + appChromeModel.presentAppInfo() + } + + HStack(spacing: 0) { + Text(verbatim: "@") + .font(.bitchatSystem(size: 14, design: .monospaced)) + .foregroundColor(secondaryTextColor) + + TextField( + "content.input.nickname_placeholder", + text: Binding( + get: { appChromeModel.nickname }, + set: { appChromeModel.setNickname($0) } + ) + ) + .textFieldStyle(.plain) + .font(.bitchatSystem(size: 14, design: .monospaced)) + .frame(maxWidth: 80) + .foregroundColor(textColor) + .focused(isNicknameFieldFocused) + .autocorrectionDisabled(true) + #if os(iOS) + .textInputAutocapitalization(.never) + #endif + .modifier(FocusEffectDisabledModifier()) + .onChange(of: isNicknameFieldFocused.wrappedValue) { isFocused in + if !isFocused { + appChromeModel.validateAndSaveNickname() + } + } + .onSubmit { + appChromeModel.validateAndSaveNickname() + } + } + + Spacer() + + let countAndColor = channelPeopleCountAndColor() + let headerCountColor = countAndColor.1 + let headerOtherPeersCount: Int = { + if case .location = locationChannelsModel.selectedChannel { + return peerListModel.visibleGeohashPeerCount + } + return countAndColor.0 + }() + + HStack(spacing: 10) { + if appChromeModel.hasUnreadPrivateMessages { + Button(action: { appChromeModel.openMostRelevantPrivateChat() }) { + Image(systemName: "envelope.fill") + .font(.bitchatSystem(size: 12)) + .foregroundColor(Color.orange) + } + .buttonStyle(.plain) + .accessibilityLabel( + String(localized: "content.accessibility.open_unread_private_chat", comment: "Accessibility label for the unread private chat button") + ) + } + + if case .mesh = locationChannelsModel.selectedChannel, + locationChannelsModel.permissionState == .authorized { + Button(action: { + locationChannelsModel.enableAndRefresh() + notesGeohash = locationChannelsModel.currentBuildingGeohash + showLocationNotes = true + }) { + HStack(alignment: .center, spacing: 4) { + Image(systemName: "note.text") + .font(.bitchatSystem(size: 12)) + .foregroundColor(Color.orange.opacity(0.8)) + .padding(.top, 1) + } + .fixedSize(horizontal: true, vertical: false) + } + .buttonStyle(.plain) + .accessibilityLabel( + String(localized: "content.accessibility.location_notes", comment: "Accessibility label for location notes button") + ) + } + + if case .location(let channel) = locationChannelsModel.selectedChannel { + Button(action: { locationChannelsModel.toggleBookmark(channel.geohash) }) { + Image(systemName: locationChannelsModel.isBookmarked(channel.geohash) ? "bookmark.fill" : "bookmark") + .font(.bitchatSystem(size: 12)) + } + .buttonStyle(.plain) + .accessibilityLabel( + String( + format: String(localized: "content.accessibility.toggle_bookmark", comment: "Accessibility label for toggling a geohash bookmark"), + locale: .current, + channel.geohash + ) + ) + } + + Button(action: { appChromeModel.isLocationChannelsSheetPresented = true }) { + let badgeText: String = { + switch locationChannelsModel.selectedChannel { + case .mesh: return "#mesh" + case .location(let channel): return "#\(channel.geohash)" + } + }() + let badgeColor: Color = { + switch locationChannelsModel.selectedChannel { + case .mesh: + return Color(hue: 0.60, saturation: 0.85, brightness: 0.82) + case .location: + return colorScheme == .dark ? Color.green : Color(red: 0, green: 0.5, blue: 0) + } + }() + + Text(badgeText) + .font(.bitchatSystem(size: 14, design: .monospaced)) + .foregroundColor(badgeColor) + .lineLimit(headerLineLimit) + .fixedSize(horizontal: true, vertical: false) + .layoutPriority(2) + .accessibilityLabel( + String(localized: "content.accessibility.location_channels", comment: "Accessibility label for the location channels button") + ) + } + .buttonStyle(.plain) + .padding(.leading, 4) + .padding(.trailing, 2) + + HStack(spacing: 4) { + Image(systemName: "person.2.fill") + .font(.system(size: headerPeerIconSize, weight: .regular)) + .accessibilityLabel( + String( + format: String(localized: "content.accessibility.people_count", comment: "Accessibility label announcing number of people in header"), + locale: .current, + headerOtherPeersCount + ) + ) + Text("\(headerOtherPeersCount)") + .font(.system(size: headerPeerCountFontSize, weight: .regular, design: .monospaced)) + .accessibilityHidden(true) + } + .foregroundColor(headerCountColor) + .padding(.leading, 2) + .lineLimit(headerLineLimit) + .fixedSize(horizontal: true, vertical: false) + } + .layoutPriority(3) + .onTapGesture { + withAnimation(.easeInOut(duration: TransportConfig.uiAnimationMediumSeconds)) { + showSidebar.toggle() + } + } + .sheet(isPresented: $showVerifySheet) { + VerificationSheetView(isPresented: $showVerifySheet) + .environmentObject(verificationModel) + } + } + .frame(height: headerHeight) + .padding(.horizontal, 12) + .sheet(isPresented: $appChromeModel.isLocationChannelsSheetPresented) { + LocationChannelsSheet(isPresented: $appChromeModel.isLocationChannelsSheetPresented) + .environmentObject(locationChannelsModel) + .environmentObject(peerListModel) + } + .sheet(isPresented: $showLocationNotes, onDismiss: { + notesGeohash = nil + }) { + Group { + if let geohash = notesGeohash ?? locationChannelsModel.currentBuildingGeohash { + LocationNotesView( + geohash: geohash, + senderNickname: appChromeModel.nickname + ) + .environmentObject(locationChannelsModel) + } else { + ContentLocationNotesUnavailableView( + showLocationNotes: $showLocationNotes, + headerHeight: headerHeight, + backgroundColor: backgroundColor, + textColor: textColor, + secondaryTextColor: secondaryTextColor + ) + .environmentObject(locationChannelsModel) + } + } + .onAppear { + locationChannelsModel.enableLocationChannels() + locationChannelsModel.beginLiveRefresh() + } + .onDisappear { + locationChannelsModel.endLiveRefresh() + } + .onChange(of: locationChannelsModel.availableChannels) { channels in + if let current = channels.first(where: { $0.level == .building })?.geohash, + notesGeohash != current { + notesGeohash = current + #if os(iOS) + let generator = UIImpactFeedbackGenerator(style: .light) + generator.prepare() + generator.impactOccurred() + #endif + } + } + } + .onAppear { + locationChannelsModel.refreshMeshChannelsIfNeeded() + } + .onChange(of: locationChannelsModel.selectedChannel) { _ in + locationChannelsModel.refreshMeshChannelsIfNeeded() + } + .onChange(of: locationChannelsModel.permissionState) { _ in + locationChannelsModel.refreshMeshChannelsIfNeeded() + } + .alert("content.alert.screenshot.title", isPresented: $appChromeModel.showScreenshotPrivacyWarning) { + Button("common.ok", role: .cancel) {} + } message: { + Text("content.alert.screenshot.message") + } + .background(backgroundColor.opacity(0.95)) + } +} + +private extension ContentHeaderView { + var headerLineLimit: Int? { + dynamicTypeSize.isAccessibilitySize ? 2 : 1 + } + + func channelPeopleCountAndColor() -> (Int, Color) { + switch locationChannelsModel.selectedChannel { + case .location: + let count = peerListModel.visibleGeohashPeerCount + let standardGreen = colorScheme == .dark ? Color.green : Color(red: 0, green: 0.5, blue: 0) + return (count, count > 0 ? standardGreen : Color.secondary) + case .mesh: + let meshBlue = Color(hue: 0.60, saturation: 0.85, brightness: 0.82) + let color: Color = peerListModel.connectedMeshPeerCount > 0 ? meshBlue : Color.secondary + return (peerListModel.reachableMeshPeerCount, color) + } + } +} + +private struct ContentLocationNotesUnavailableView: View { + @EnvironmentObject private var locationChannelsModel: LocationChannelsModel + + @Binding var showLocationNotes: Bool + + let headerHeight: CGFloat + let backgroundColor: Color + let textColor: Color + let secondaryTextColor: Color + + var body: some View { + VStack(spacing: 12) { + HStack { + Text("content.notes.title") + .font(.bitchatSystem(size: 16, weight: .bold, design: .monospaced)) + Spacer() + Button(action: { showLocationNotes = false }) { + Image(systemName: "xmark") + .font(.bitchatSystem(size: 13, weight: .semibold, design: .monospaced)) + .foregroundColor(textColor) + .frame(width: 32, height: 32) + } + .buttonStyle(.plain) + .accessibilityLabel(String(localized: "common.close", comment: "Accessibility label for close buttons")) + } + .frame(height: headerHeight) + .padding(.horizontal, 12) + .background(backgroundColor.opacity(0.95)) + Text("content.notes.location_unavailable") + .font(.bitchatSystem(size: 14, design: .monospaced)) + .foregroundColor(secondaryTextColor) + Button("content.location.enable") { + locationChannelsModel.enableAndRefresh() + } + .buttonStyle(.bordered) + Spacer() + } + .background(backgroundColor) + .foregroundColor(textColor) + } +} diff --git a/bitchat/Views/ContentSheetViews.swift b/bitchat/Views/ContentSheetViews.swift new file mode 100644 index 00000000..35edede8 --- /dev/null +++ b/bitchat/Views/ContentSheetViews.swift @@ -0,0 +1,517 @@ +import BitFoundation +import SwiftUI +#if os(iOS) +import UIKit +#elseif os(macOS) +import AppKit +#endif + +struct ContentPeopleSheetView: View { + @EnvironmentObject private var appChromeModel: AppChromeModel + @EnvironmentObject private var privateConversationModel: PrivateConversationModel + @EnvironmentObject private var verificationModel: VerificationModel + @EnvironmentObject private var conversationUIModel: ConversationUIModel + @EnvironmentObject private var locationChannelsModel: LocationChannelsModel + @EnvironmentObject private var peerListModel: PeerListModel + + @Binding var showSidebar: Bool + @Binding var messageText: String + @Binding var selectedMessageSender: String? + @Binding var selectedMessageSenderID: PeerID? + @Binding var imagePreviewURL: URL? + @Binding var windowCountPublic: Int + @Binding var windowCountPrivate: [PeerID: Int] + @Binding var isAtBottomPrivate: Bool + var isTextFieldFocused: FocusState.Binding + @ObservedObject var voiceRecordingVM: VoiceRecordingViewModel + @Binding var autocompleteDebounceTimer: Timer? + + let backgroundColor: Color + let textColor: Color + let secondaryTextColor: Color + let headerHeight: CGFloat + let onSendMessage: () -> Void + + #if os(iOS) + @Binding var showImagePicker: Bool + @Binding var imagePickerSourceType: UIImagePickerController.SourceType + #else + @Binding var showMacImagePicker: Bool + #endif + + var body: some View { + NavigationStack { + Group { + if privateConversationModel.selectedPeerID != nil { + #if os(iOS) + ContentPrivateChatSheetView( + showSidebar: $showSidebar, + messageText: $messageText, + selectedMessageSender: $selectedMessageSender, + selectedMessageSenderID: $selectedMessageSenderID, + imagePreviewURL: $imagePreviewURL, + windowCountPublic: $windowCountPublic, + windowCountPrivate: $windowCountPrivate, + isAtBottomPrivate: $isAtBottomPrivate, + isTextFieldFocused: isTextFieldFocused, + voiceRecordingVM: voiceRecordingVM, + autocompleteDebounceTimer: $autocompleteDebounceTimer, + backgroundColor: backgroundColor, + textColor: textColor, + secondaryTextColor: secondaryTextColor, + headerHeight: headerHeight, + onSendMessage: onSendMessage, + showImagePicker: $showImagePicker, + imagePickerSourceType: $imagePickerSourceType + ) + #else + ContentPrivateChatSheetView( + showSidebar: $showSidebar, + messageText: $messageText, + selectedMessageSender: $selectedMessageSender, + selectedMessageSenderID: $selectedMessageSenderID, + imagePreviewURL: $imagePreviewURL, + windowCountPublic: $windowCountPublic, + windowCountPrivate: $windowCountPrivate, + isAtBottomPrivate: $isAtBottomPrivate, + isTextFieldFocused: isTextFieldFocused, + voiceRecordingVM: voiceRecordingVM, + autocompleteDebounceTimer: $autocompleteDebounceTimer, + backgroundColor: backgroundColor, + textColor: textColor, + secondaryTextColor: secondaryTextColor, + headerHeight: headerHeight, + onSendMessage: onSendMessage, + showMacImagePicker: $showMacImagePicker + ) + #endif + } else { + ContentPeopleListView( + showSidebar: $showSidebar, + backgroundColor: backgroundColor, + textColor: textColor, + secondaryTextColor: secondaryTextColor, + headerHeight: headerHeight + ) + } + } + .navigationDestination(isPresented: Binding( + get: { appChromeModel.showingFingerprintFor != nil && (showSidebar || privateConversationModel.selectedPeerID != nil) }, + set: { isPresented in + if !isPresented { + appChromeModel.clearFingerprint() + } + } + )) { + if let peerID = appChromeModel.showingFingerprintFor { + FingerprintView(peerID: peerID) + .environmentObject(verificationModel) + } + } + } + .background(backgroundColor) + .foregroundColor(textColor) + #if os(macOS) + .frame(minWidth: 420, minHeight: 520) + #endif + #if os(iOS) + .fullScreenCover(isPresented: Binding( + get: { showImagePicker && (showSidebar || privateConversationModel.selectedPeerID != nil) }, + set: { newValue in + if !newValue { + showImagePicker = false + } + } + )) { + ImagePickerView(sourceType: imagePickerSourceType) { image in + showImagePicker = false + conversationUIModel.processSelectedImage(image) + } + .ignoresSafeArea() + } + #endif + #if os(macOS) + .sheet(isPresented: $showMacImagePicker) { + MacImagePickerView { url in + showMacImagePicker = false + conversationUIModel.processSelectedImage(from: url) + } + } + #endif + } +} + +private struct ContentPeopleListView: View { + @EnvironmentObject private var appChromeModel: AppChromeModel + @EnvironmentObject private var privateConversationModel: PrivateConversationModel + @EnvironmentObject private var verificationModel: VerificationModel + @EnvironmentObject private var locationChannelsModel: LocationChannelsModel + @EnvironmentObject private var peerListModel: PeerListModel + @Environment(\.dismiss) private var dismiss + + @Binding var showSidebar: Bool + + let backgroundColor: Color + let textColor: Color + let secondaryTextColor: Color + let headerHeight: CGFloat + + @State private var showVerifySheet = false + + var body: some View { + VStack(spacing: 0) { + VStack(alignment: .leading, spacing: 8) { + HStack(spacing: 12) { + Text(peopleSheetTitle) + .font(.bitchatSystem(size: 18, design: .monospaced)) + .foregroundColor(textColor) + Spacer() + if case .mesh = locationChannelsModel.selectedChannel { + Button(action: { showVerifySheet = true }) { + Image(systemName: "qrcode") + .font(.bitchatSystem(size: 14)) + } + .buttonStyle(.plain) + .help( + String(localized: "content.help.verification", comment: "Help text for verification button") + ) + } + Button(action: { + withAnimation(.easeInOut(duration: TransportConfig.uiAnimationMediumSeconds)) { + dismiss() + showSidebar = false + showVerifySheet = false + privateConversationModel.endConversation() + } + }) { + Image(systemName: "xmark") + .font(.bitchatSystem(size: 12, weight: .semibold, design: .monospaced)) + .frame(width: 32, height: 32) + } + .buttonStyle(.plain) + .accessibilityLabel("Close") + } + + let activeText = String.localizedStringWithFormat( + String(localized: "%@ active", comment: "Count of active users in the people sheet"), + "\(peopleSheetActiveCount)" + ) + + if let subtitle = peopleSheetSubtitle { + let subtitleColor: Color = { + switch locationChannelsModel.selectedChannel { + case .mesh: + return Color.blue + case .location: + return Color.green + } + }() + + HStack(spacing: 6) { + Text(subtitle) + .foregroundColor(subtitleColor) + Text(activeText) + .foregroundColor(.secondary) + } + .font(.bitchatSystem(size: 12, design: .monospaced)) + } else { + Text(activeText) + .font(.bitchatSystem(size: 12, design: .monospaced)) + .foregroundColor(.secondary) + } + } + .padding(.horizontal, 16) + .padding(.top, 16) + .padding(.bottom, 12) + .background(backgroundColor) + + ScrollView { + VStack(alignment: .leading, spacing: 6) { + if case .location = locationChannelsModel.selectedChannel { + GeohashPeopleList( + textColor: textColor, + secondaryTextColor: secondaryTextColor, + onTapPerson: { + showSidebar = true + } + ) + } else { + MeshPeerList( + textColor: textColor, + secondaryTextColor: secondaryTextColor, + onTapPeer: { peerID in + peerListModel.startConversation(with: peerID) + showSidebar = true + }, + onToggleFavorite: { peerID in + peerListModel.toggleFavorite(peerID: peerID) + }, + onShowFingerprint: { peerID in + appChromeModel.showFingerprint(for: peerID) + } + ) + } + } + .padding(.top, 4) + .id(peerListModel.renderID) + } + } + .sheet(isPresented: $showVerifySheet) { + VerificationSheetView(isPresented: $showVerifySheet) + .environmentObject(verificationModel) + } + } +} + +private extension ContentPeopleListView { + var peopleSheetTitle: String { + String(localized: "content.header.people", comment: "Title for the people list sheet").lowercased() + } + + var peopleSheetSubtitle: String? { + switch locationChannelsModel.selectedChannel { + case .mesh: + return "#mesh" + case .location(let channel): + return "#\(channel.geohash.lowercased())" + } + } + + var peopleSheetActiveCount: Int { + switch locationChannelsModel.selectedChannel { + case .mesh: + return peerListModel.reachableMeshPeerCount + case .location: + return peerListModel.visibleGeohashPeerCount + } + } +} + +private struct ContentPrivateChatSheetView: View { + @EnvironmentObject private var appChromeModel: AppChromeModel + @EnvironmentObject private var privateConversationModel: PrivateConversationModel + + @Binding var showSidebar: Bool + @Binding var messageText: String + @Binding var selectedMessageSender: String? + @Binding var selectedMessageSenderID: PeerID? + @Binding var imagePreviewURL: URL? + @Binding var windowCountPublic: Int + @Binding var windowCountPrivate: [PeerID: Int] + @Binding var isAtBottomPrivate: Bool + var isTextFieldFocused: FocusState.Binding + @ObservedObject var voiceRecordingVM: VoiceRecordingViewModel + @Binding var autocompleteDebounceTimer: Timer? + + let backgroundColor: Color + let textColor: Color + let secondaryTextColor: Color + let headerHeight: CGFloat + let onSendMessage: () -> Void + + #if os(iOS) + @Binding var showImagePicker: Bool + @Binding var imagePickerSourceType: UIImagePickerController.SourceType + #else + @Binding var showMacImagePicker: Bool + #endif + + var body: some View { + VStack(spacing: 0) { + if let headerState = privateConversationModel.selectedHeaderState { + HStack(spacing: 12) { + Button(action: { + withAnimation(.easeInOut(duration: TransportConfig.uiAnimationMediumSeconds)) { + privateConversationModel.endConversation() + } + }) { + Image(systemName: "chevron.left") + .font(.bitchatSystem(size: 12)) + .foregroundColor(textColor) + .frame(width: 44, height: 44) + .contentShape(Rectangle()) + } + .buttonStyle(.plain) + .accessibilityLabel( + String(localized: "content.accessibility.back_to_main_chat", comment: "Accessibility label for returning to main chat") + ) + + Spacer(minLength: 0) + + HStack(spacing: 8) { + ContentPrivateHeaderInfoButton( + headerState: headerState, + headerHeight: headerHeight, + textColor: textColor + ) + + if headerState.supportsFavoriteToggle { + Button(action: { + privateConversationModel.toggleFavoriteForSelectedConversation() + }) { + Image(systemName: headerState.isFavorite ? "star.fill" : "star") + .font(.bitchatSystem(size: 14)) + .foregroundColor(headerState.isFavorite ? Color.yellow : textColor) + } + .buttonStyle(.plain) + .accessibilityLabel( + headerState.isFavorite + ? String(localized: "content.accessibility.remove_favorite", comment: "Accessibility label to remove a favorite") + : String(localized: "content.accessibility.add_favorite", comment: "Accessibility label to add a favorite") + ) + } + } + .frame(maxWidth: .infinity) + + Spacer(minLength: 0) + + Button(action: { + withAnimation(.easeInOut(duration: TransportConfig.uiAnimationMediumSeconds)) { + privateConversationModel.endConversation() + showSidebar = true + } + }) { + Image(systemName: "xmark") + .font(.bitchatSystem(size: 12, weight: .semibold, design: .monospaced)) + .frame(width: 32, height: 32) + } + .buttonStyle(.plain) + .accessibilityLabel("Close") + } + .frame(height: headerHeight) + .padding(.horizontal, 16) + .padding(.top, 10) + .padding(.bottom, 12) + .background(backgroundColor) + } + + MessageListView( + privatePeer: privateConversationModel.selectedPeerID, + isAtBottom: $isAtBottomPrivate, + messageText: $messageText, + selectedMessageSender: $selectedMessageSender, + selectedMessageSenderID: $selectedMessageSenderID, + imagePreviewURL: $imagePreviewURL, + windowCountPublic: $windowCountPublic, + windowCountPrivate: $windowCountPrivate, + showSidebar: $showSidebar, + isTextFieldFocused: isTextFieldFocused + ) + .background(backgroundColor) + .frame(maxWidth: .infinity, maxHeight: .infinity) + + Divider() + + #if os(iOS) + ContentComposerView( + messageText: $messageText, + isTextFieldFocused: isTextFieldFocused, + voiceRecordingVM: voiceRecordingVM, + autocompleteDebounceTimer: $autocompleteDebounceTimer, + backgroundColor: backgroundColor, + textColor: textColor, + secondaryTextColor: secondaryTextColor, + onSendMessage: onSendMessage, + showImagePicker: $showImagePicker, + imagePickerSourceType: $imagePickerSourceType + ) + #else + ContentComposerView( + messageText: $messageText, + isTextFieldFocused: isTextFieldFocused, + voiceRecordingVM: voiceRecordingVM, + autocompleteDebounceTimer: $autocompleteDebounceTimer, + backgroundColor: backgroundColor, + textColor: textColor, + secondaryTextColor: secondaryTextColor, + onSendMessage: onSendMessage, + showMacImagePicker: $showMacImagePicker + ) + #endif + } + .background(backgroundColor) + .foregroundColor(textColor) + .highPriorityGesture( + DragGesture(minimumDistance: 25, coordinateSpace: .local) + .onEnded { value in + let horizontal = value.translation.width + let vertical = abs(value.translation.height) + guard horizontal > 80, vertical < 60 else { return } + withAnimation(.easeInOut(duration: TransportConfig.uiAnimationMediumSeconds)) { + showSidebar = true + privateConversationModel.endConversation() + } + } + ) + } +} + +private struct ContentPrivateHeaderInfoButton: View { + @EnvironmentObject private var appChromeModel: AppChromeModel + + let headerState: PrivateConversationHeaderState + let headerHeight: CGFloat + let textColor: Color + + var body: some View { + Button(action: { + appChromeModel.showFingerprint(for: headerState.headerPeerID) + }) { + HStack(spacing: 6) { + switch headerState.availability { + case .bluetoothConnected: + Image(systemName: "dot.radiowaves.left.and.right") + .font(.bitchatSystem(size: 14)) + .foregroundColor(textColor) + .accessibilityLabel(String(localized: "content.accessibility.connected_mesh", comment: "Accessibility label for mesh-connected peer indicator")) + case .meshReachable: + Image(systemName: "point.3.filled.connected.trianglepath.dotted") + .font(.bitchatSystem(size: 14)) + .foregroundColor(textColor) + .accessibilityLabel(String(localized: "content.accessibility.reachable_mesh", comment: "Accessibility label for mesh-reachable peer indicator")) + case .nostrAvailable: + Image(systemName: "globe") + .font(.bitchatSystem(size: 14)) + .foregroundColor(.purple) + .accessibilityLabel(String(localized: "content.accessibility.available_nostr", comment: "Accessibility label for Nostr-available peer indicator")) + case .offline: + EmptyView() + } + + Text(headerState.displayName) + .font(.bitchatSystem(size: 16, weight: .medium, design: .monospaced)) + .foregroundColor(textColor) + + if let encryptionStatus = headerState.encryptionStatus, + let icon = encryptionStatus.icon { + Image(systemName: icon) + .font(.bitchatSystem(size: 14)) + .foregroundColor( + encryptionStatus == .noiseVerified || encryptionStatus == .noiseSecured + ? textColor + : Color.red + ) + .accessibilityLabel( + String( + format: String(localized: "content.accessibility.encryption_status", comment: "Accessibility label announcing encryption status"), + locale: .current, + encryptionStatus.accessibilityDescription + ) + ) + } + } + } + .buttonStyle(.plain) + .accessibilityLabel( + String( + format: String(localized: "content.accessibility.private_chat_header", comment: "Accessibility label describing the private chat header"), + locale: .current, + headerState.displayName + ) + ) + .accessibilityHint( + String(localized: "content.accessibility.view_fingerprint_hint", comment: "Accessibility hint for viewing encryption fingerprint") + ) + .frame(height: headerHeight) + } +} diff --git a/bitchat/Views/ContentView.swift b/bitchat/Views/ContentView.swift index 88b2f19b..420f72c6 100644 --- a/bitchat/Views/ContentView.swift +++ b/bitchat/Views/ContentView.swift @@ -9,17 +9,14 @@ import SwiftUI #if os(iOS) import UIKit -#endif -#if os(macOS) +#elseif os(macOS) import AppKit #endif -import UniformTypeIdentifiers -import BitLogger import BitFoundation /// On macOS 14+, disables the default system focus ring on TextFields. /// On earlier macOS versions and on iOS this is a no-op. -private struct FocusEffectDisabledModifier: ViewModifier { +struct FocusEffectDisabledModifier: ViewModifier { func body(content: Content) -> some View { #if os(macOS) if #available(macOS 14.0, *) { @@ -33,49 +30,39 @@ private struct FocusEffectDisabledModifier: ViewModifier { } } -// MARK: - Main Content View - struct ContentView: View { - // MARK: - Properties - - @EnvironmentObject var viewModel: ChatViewModel + @EnvironmentObject private var appChromeModel: AppChromeModel + @EnvironmentObject private var privateConversationModel: PrivateConversationModel + @EnvironmentObject private var verificationModel: VerificationModel + @EnvironmentObject private var conversationUIModel: ConversationUIModel + @StateObject private var voiceRecordingVM = VoiceRecordingViewModel() - @ObservedObject private var locationManager = LocationChannelManager.shared - @ObservedObject private var bookmarks = GeohashBookmarksStore.shared @State private var messageText = "" @FocusState private var isTextFieldFocused: Bool @Environment(\.colorScheme) var colorScheme - @Environment(\.dismiss) private var dismiss - @Environment(\.dynamicTypeSize) private var dynamicTypeSize @State private var showSidebar = false - @State private var showAppInfo = false @State private var selectedMessageSender: String? @State private var selectedMessageSenderID: PeerID? @FocusState private var isNicknameFieldFocused: Bool - @State private var isAtBottomPublic: Bool = true - @State private var isAtBottomPrivate: Bool = true + @State private var isAtBottomPublic = true + @State private var isAtBottomPrivate = true @State private var autocompleteDebounceTimer: Timer? - @State private var showLocationChannelsSheet = false @State private var showVerifySheet = false @State private var showLocationNotes = false - @State private var notesGeohash: String? = nil - @State private var imagePreviewURL: URL? = nil -#if os(iOS) + @State private var notesGeohash: String? + @State private var imagePreviewURL: URL? + #if os(iOS) @State private var showImagePicker = false @State private var imagePickerSourceType: UIImagePickerController.SourceType = .camera -#else + #else @State private var showMacImagePicker = false -#endif + #endif @ScaledMetric(relativeTo: .body) private var headerHeight: CGFloat = 44 @ScaledMetric(relativeTo: .subheadline) private var headerPeerIconSize: CGFloat = 11 @ScaledMetric(relativeTo: .subheadline) private var headerPeerCountFontSize: CGFloat = 12 - // Timer-based refresh removed; use LocationChannelManager live updates instead - // Window sizes for rendering (infinite scroll up) @State private var windowCountPublic: Int = 300 @State private var windowCountPrivate: [PeerID: Int] = [:] - - // MARK: - Computed Properties - + private var backgroundColor: Color { colorScheme == .dark ? Color.black : Color.white } @@ -88,58 +75,37 @@ struct ContentView: View { colorScheme == .dark ? Color.green.opacity(0.8) : Color(red: 0, green: 0.5, blue: 0).opacity(0.8) } - private var headerLineLimit: Int? { - dynamicTypeSize.isAccessibilitySize ? 2 : 1 + private var selectedPrivatePeerID: PeerID? { + privateConversationModel.selectedPeerID } - private var peopleSheetTitle: String { - String(localized: "content.header.people", comment: "Title for the people list sheet").lowercased() - } - - private var peopleSheetSubtitle: String? { - switch locationManager.selectedChannel { - case .mesh: - return "#mesh" - case .location(let channel): - return "#\(channel.geohash.lowercased())" - } - } - - private var peopleSheetActiveCount: Int { - switch locationManager.selectedChannel { - case .mesh: - return viewModel.allPeers.filter { $0.peerID != viewModel.meshService.myPeerID }.count - case .location: - return viewModel.visibleGeohashPeople().count - } - } - - - private struct PrivateHeaderContext { - let headerPeerID: PeerID - let peer: BitchatPeer? - let displayName: String - let isNostrAvailable: Bool - } - -// MARK: - Body - var body: some View { VStack(spacing: 0) { - mainHeaderView - .onAppear { - viewModel.currentColorScheme = colorScheme - #if os(macOS) - // Focus message input on macOS launch, not nickname field - DispatchQueue.main.async { - isNicknameFieldFocused = false - isTextFieldFocused = true - } - #endif - } - .onChange(of: colorScheme) { newValue in - viewModel.currentColorScheme = newValue + ContentHeaderView( + showSidebar: $showSidebar, + showVerifySheet: $showVerifySheet, + showLocationNotes: $showLocationNotes, + notesGeohash: $notesGeohash, + isNicknameFieldFocused: $isNicknameFieldFocused, + headerHeight: headerHeight, + headerPeerIconSize: headerPeerIconSize, + headerPeerCountFontSize: headerPeerCountFontSize, + backgroundColor: backgroundColor, + textColor: textColor, + secondaryTextColor: secondaryTextColor + ) + .onAppear { + conversationUIModel.setCurrentColorScheme(colorScheme) + #if os(macOS) + DispatchQueue.main.async { + isNicknameFieldFocused = false + isTextFieldFocused = true } + #endif + } + .onChange(of: colorScheme) { newValue in + conversationUIModel.setCurrentColorScheme(newValue) + } Divider() @@ -155,7 +121,7 @@ struct ContentView: View { windowCountPublic: $windowCountPublic, windowCountPrivate: $windowCountPrivate, showSidebar: $showSidebar, - isTextFieldFocused: $isTextFieldFocused, + isTextFieldFocused: $isTextFieldFocused ) .background(backgroundColor) .frame(maxWidth: .infinity, maxHeight: .infinity) @@ -165,8 +131,33 @@ struct ContentView: View { Divider() - if viewModel.selectedPrivateChatPeer == nil { - inputView + if selectedPrivatePeerID == nil { + #if os(iOS) + ContentComposerView( + messageText: $messageText, + isTextFieldFocused: $isTextFieldFocused, + voiceRecordingVM: voiceRecordingVM, + autocompleteDebounceTimer: $autocompleteDebounceTimer, + backgroundColor: backgroundColor, + textColor: textColor, + secondaryTextColor: secondaryTextColor, + onSendMessage: sendMessage, + showImagePicker: $showImagePicker, + imagePickerSourceType: $imagePickerSourceType + ) + #else + ContentComposerView( + messageText: $messageText, + isTextFieldFocused: $isTextFieldFocused, + voiceRecordingVM: voiceRecordingVM, + autocompleteDebounceTimer: $autocompleteDebounceTimer, + backgroundColor: backgroundColor, + textColor: textColor, + secondaryTextColor: secondaryTextColor, + onSendMessage: sendMessage, + showMacImagePicker: $showMacImagePicker + ) + #endif } } .background(backgroundColor) @@ -174,44 +165,80 @@ struct ContentView: View { #if os(macOS) .frame(minWidth: 600, minHeight: 400) #endif - .onChange(of: viewModel.selectedPrivateChatPeer) { newValue in + .onChange(of: selectedPrivatePeerID) { newValue in if newValue != nil { showSidebar = true } } .sheet( isPresented: Binding( - get: { showSidebar || viewModel.selectedPrivateChatPeer != nil }, + get: { showSidebar || selectedPrivatePeerID != nil }, set: { isPresented in if !isPresented { showSidebar = false - viewModel.endPrivateChat() + privateConversationModel.endConversation() } } ) ) { - peopleSheetView - .environmentObject(viewModel) + #if os(iOS) + ContentPeopleSheetView( + showSidebar: $showSidebar, + messageText: $messageText, + selectedMessageSender: $selectedMessageSender, + selectedMessageSenderID: $selectedMessageSenderID, + imagePreviewURL: $imagePreviewURL, + windowCountPublic: $windowCountPublic, + windowCountPrivate: $windowCountPrivate, + isAtBottomPrivate: $isAtBottomPrivate, + isTextFieldFocused: $isTextFieldFocused, + voiceRecordingVM: voiceRecordingVM, + autocompleteDebounceTimer: $autocompleteDebounceTimer, + backgroundColor: backgroundColor, + textColor: textColor, + secondaryTextColor: secondaryTextColor, + headerHeight: headerHeight, + onSendMessage: sendMessage, + showImagePicker: $showImagePicker, + imagePickerSourceType: $imagePickerSourceType + ) + #else + ContentPeopleSheetView( + showSidebar: $showSidebar, + messageText: $messageText, + selectedMessageSender: $selectedMessageSender, + selectedMessageSenderID: $selectedMessageSenderID, + imagePreviewURL: $imagePreviewURL, + windowCountPublic: $windowCountPublic, + windowCountPrivate: $windowCountPrivate, + isAtBottomPrivate: $isAtBottomPrivate, + isTextFieldFocused: $isTextFieldFocused, + voiceRecordingVM: voiceRecordingVM, + autocompleteDebounceTimer: $autocompleteDebounceTimer, + backgroundColor: backgroundColor, + textColor: textColor, + secondaryTextColor: secondaryTextColor, + headerHeight: headerHeight, + onSendMessage: sendMessage, + showMacImagePicker: $showMacImagePicker + ) + #endif } - .sheet(isPresented: $showAppInfo) { + .sheet(isPresented: $appChromeModel.isAppInfoPresented) { AppInfoView() - .environmentObject(viewModel) - .onAppear { viewModel.isAppInfoPresented = true } - .onDisappear { viewModel.isAppInfoPresented = false } } .sheet(isPresented: Binding( - get: { viewModel.showingFingerprintFor != nil && !showSidebar && viewModel.selectedPrivateChatPeer == nil }, - set: { _ in viewModel.showingFingerprintFor = nil } + get: { appChromeModel.showingFingerprintFor != nil && !showSidebar && selectedPrivatePeerID == nil }, + set: { _ in appChromeModel.clearFingerprint() } )) { - if let peerID = viewModel.showingFingerprintFor { - FingerprintView(viewModel: viewModel, peerID: peerID) - .environmentObject(viewModel) + if let peerID = appChromeModel.showingFingerprintFor { + FingerprintView(peerID: peerID) + .environmentObject(verificationModel) } } -#if os(iOS) - // Only present image picker from main view when NOT in a sheet + #if os(iOS) .fullScreenCover(isPresented: Binding( - get: { showImagePicker && !showSidebar && viewModel.selectedPrivateChatPeer == nil }, + get: { showImagePicker && !showSidebar && selectedPrivatePeerID == nil }, set: { newValue in if !newValue { showImagePicker = false @@ -220,16 +247,14 @@ struct ContentView: View { )) { ImagePickerView(sourceType: imagePickerSourceType) { image in showImagePicker = false - viewModel.processThenSendImage(image) + conversationUIModel.processSelectedImage(image) } - .environmentObject(viewModel) .ignoresSafeArea() } -#endif -#if os(macOS) - // Only present Mac image picker from main view when NOT in a sheet + #endif + #if os(macOS) .sheet(isPresented: Binding( - get: { showMacImagePicker && !showSidebar && viewModel.selectedPrivateChatPeer == nil }, + get: { showMacImagePicker && !showSidebar && selectedPrivatePeerID == nil }, set: { newValue in if !newValue { showMacImagePicker = false @@ -238,18 +263,20 @@ struct ContentView: View { )) { MacImagePickerView { url in showMacImagePicker = false - viewModel.processThenSendImage(from: url) + conversationUIModel.processSelectedImage(from: url) } - .environmentObject(viewModel) } -#endif + #endif .sheet(isPresented: Binding( get: { imagePreviewURL != nil }, - set: { presenting in if !presenting { imagePreviewURL = nil } } + set: { presenting in + if !presenting { + imagePreviewURL = nil + } + } )) { if let url = imagePreviewURL { ImagePreviewView(url: url) - .environmentObject(viewModel) } } .alert("Recording Error", isPresented: $voiceRecordingVM.showAlert, actions: { @@ -262,964 +289,26 @@ struct ContentView: View { }, message: { Text(voiceRecordingVM.state.alertMessage) }) - .alert("content.alert.bluetooth_required.title", isPresented: $viewModel.showBluetoothAlert) { + .alert("content.alert.bluetooth_required.title", isPresented: $appChromeModel.showBluetoothAlert) { Button("content.alert.bluetooth_required.settings") { SystemSettings.bluetooth.open() } Button("common.ok", role: .cancel) {} } message: { - Text(viewModel.bluetoothAlertMessage) + Text(appChromeModel.bluetoothAlertMessage) } .onDisappear { autocompleteDebounceTimer?.invalidate() } } - - // MARK: - Input View - @ViewBuilder - private var inputView: some View { - VStack(alignment: .leading, spacing: 6) { - // @mentions autocomplete - if viewModel.showAutocomplete && !viewModel.autocompleteSuggestions.isEmpty { - VStack(alignment: .leading, spacing: 0) { - ForEach(Array(viewModel.autocompleteSuggestions.prefix(4)), id: \.self) { suggestion in - Button(action: { - _ = viewModel.completeNickname(suggestion, in: &messageText) - }) { - HStack { - Text(suggestion) - .font(.bitchatSystem(size: 11, design: .monospaced)) - .foregroundColor(textColor) - .fontWeight(.medium) - Spacer() - } - .padding(.horizontal, 12) - .padding(.vertical, 3) - .frame(maxWidth: .infinity, alignment: .leading) - } - .buttonStyle(.plain) - .background(Color.gray.opacity(0.1)) - } - } - .background(backgroundColor) - .overlay( - RoundedRectangle(cornerRadius: 4) - .stroke(secondaryTextColor.opacity(0.3), lineWidth: 1) - ) - .padding(.horizontal, 12) - } - - CommandSuggestionsView( - messageText: $messageText, - textColor: textColor, - backgroundColor: backgroundColor, - secondaryTextColor: secondaryTextColor - ) - - if voiceRecordingVM.state.isActive { - recordingIndicator - } - - HStack(alignment: .center, spacing: 4) { - TextField( - "", - text: $messageText, - prompt: Text( - String(localized: "content.input.message_placeholder", comment: "Placeholder shown in the chat composer") - ) - .foregroundColor(secondaryTextColor.opacity(0.6)) - ) - .textFieldStyle(.plain) - .font(.bitchatSystem(size: 15, design: .monospaced)) - .foregroundColor(textColor) - .focused($isTextFieldFocused) - .autocorrectionDisabled(true) -#if os(iOS) - .textInputAutocapitalization(.sentences) -#endif - .submitLabel(.send) - .onSubmit { sendMessage() } - .padding(.vertical, 4) - .padding(.horizontal, 6) - .background( - RoundedRectangle(cornerRadius: 14, style: .continuous) - .fill(colorScheme == .dark ? Color.black.opacity(0.35) : Color.white.opacity(0.7)) - ) - .modifier(FocusEffectDisabledModifier()) - .frame(maxWidth: .infinity, alignment: .leading) - .onChange(of: messageText) { newValue in - autocompleteDebounceTimer?.invalidate() - autocompleteDebounceTimer = Timer.scheduledTimer(withTimeInterval: 0.15, repeats: false) { [weak viewModel] _ in - let cursorPosition = newValue.count - Task { @MainActor in - viewModel?.updateAutocomplete(for: newValue, cursorPosition: cursorPosition) - } - } - } - - HStack(alignment: .center, spacing: 4) { - if shouldShowMediaControls { - attachmentButton - } - - sendOrMicButton - } - } - } - .padding(.horizontal, 6) - .padding(.top, 6) - .padding(.bottom, 8) - .background(backgroundColor.opacity(0.95)) - } - - // MARK: - Actions - private func sendMessage() { guard let trimmed = messageText.trimmedOrNilIfEmpty else { return } - // Clear input immediately for instant feedback messageText = "" - // Defer actual send to next runloop to avoid blocking DispatchQueue.main.async { - self.viewModel.sendMessage(trimmed) + self.conversationUIModel.sendMessage(trimmed) } } - - // MARK: - Sheet Content - - private var peopleSheetView: some View { - NavigationStack { - Group { - if viewModel.selectedPrivateChatPeer != nil { - privateChatSheetView - } else { - peopleListSheetView - } - } - .navigationDestination(isPresented: Binding( - get: { viewModel.showingFingerprintFor != nil && (showSidebar || viewModel.selectedPrivateChatPeer != nil) }, - set: { isPresented in - if !isPresented { - viewModel.showingFingerprintFor = nil - } - } - )) { - if let peerID = viewModel.showingFingerprintFor { - FingerprintView(viewModel: viewModel, peerID: peerID) - .environmentObject(viewModel) - } - } - } - .background(backgroundColor) - .foregroundColor(textColor) - #if os(macOS) - .frame(minWidth: 420, minHeight: 520) - #endif - // Present image picker from sheet context when IN a sheet (parent-child pattern) - #if os(iOS) - .fullScreenCover(isPresented: Binding( - get: { showImagePicker && (showSidebar || viewModel.selectedPrivateChatPeer != nil) }, - set: { newValue in - if !newValue { - showImagePicker = false - } - } - )) { - ImagePickerView(sourceType: imagePickerSourceType) { image in - showImagePicker = false - viewModel.processThenSendImage(image) - } - .environmentObject(viewModel) - .ignoresSafeArea() - } - #endif - #if os(macOS) - .sheet(isPresented: $showMacImagePicker) { - MacImagePickerView { url in - showMacImagePicker = false - viewModel.processThenSendImage(from: url) - } - .environmentObject(viewModel) - } - #endif - } - - // MARK: - People Sheet Views - - private var peopleListSheetView: some View { - VStack(spacing: 0) { - VStack(alignment: .leading, spacing: 8) { - HStack(spacing: 12) { - Text(peopleSheetTitle) - .font(.bitchatSystem(size: 18, design: .monospaced)) - .foregroundColor(textColor) - Spacer() - if case .mesh = locationManager.selectedChannel { - Button(action: { showVerifySheet = true }) { - Image(systemName: "qrcode") - .font(.bitchatSystem(size: 14)) - } - .buttonStyle(.plain) - .help( - String(localized: "content.help.verification", comment: "Help text for verification button") - ) - } - Button(action: { - withAnimation(.easeInOut(duration: TransportConfig.uiAnimationMediumSeconds)) { - dismiss() - showSidebar = false - showVerifySheet = false - viewModel.endPrivateChat() - } - }) { - Image(systemName: "xmark") - .font(.bitchatSystem(size: 12, weight: .semibold, design: .monospaced)) - .frame(width: 32, height: 32) - } - .buttonStyle(.plain) - .accessibilityLabel("Close") - } - let activeText = String.localizedStringWithFormat( - String(localized: "%@ active", comment: "Count of active users in the people sheet"), - "\(peopleSheetActiveCount)" - ) - - if let subtitle = peopleSheetSubtitle { - let subtitleColor: Color = { - switch locationManager.selectedChannel { - case .mesh: - return Color.blue - case .location: - return Color.green - } - }() - HStack(spacing: 6) { - Text(subtitle) - .foregroundColor(subtitleColor) - Text(activeText) - .foregroundColor(.secondary) - } - .font(.bitchatSystem(size: 12, design: .monospaced)) - } else { - Text(activeText) - .font(.bitchatSystem(size: 12, design: .monospaced)) - .foregroundColor(.secondary) - } - } - .padding(.horizontal, 16) - .padding(.top, 16) - .padding(.bottom, 12) - .background(backgroundColor) - - ScrollView { - VStack(alignment: .leading, spacing: 6) { - if case .location = locationManager.selectedChannel { - GeohashPeopleList( - viewModel: viewModel, - textColor: textColor, - secondaryTextColor: secondaryTextColor, - onTapPerson: { - showSidebar = true - } - ) - } else { - MeshPeerList( - viewModel: viewModel, - textColor: textColor, - secondaryTextColor: secondaryTextColor, - onTapPeer: { peerID in - viewModel.startPrivateChat(with: peerID) - showSidebar = true - }, - onToggleFavorite: { peerID in - viewModel.toggleFavorite(peerID: peerID) - }, - onShowFingerprint: { peerID in - viewModel.showFingerprint(for: peerID) - } - ) - } - } - .padding(.top, 4) - .id(viewModel.allPeers.map { "\($0.peerID)-\($0.isConnected)" }.joined()) - } - } - } - - // MARK: - View Components - - private var privateChatSheetView: some View { - VStack(spacing: 0) { - if let privatePeerID = viewModel.selectedPrivateChatPeer { - let headerContext = makePrivateHeaderContext(for: privatePeerID) - - HStack(spacing: 12) { - Button(action: { - withAnimation(.easeInOut(duration: TransportConfig.uiAnimationMediumSeconds)) { - viewModel.endPrivateChat() - } - }) { - Image(systemName: "chevron.left") - .font(.bitchatSystem(size: 12)) - .foregroundColor(textColor) - .frame(width: 44, height: 44) - .contentShape(Rectangle()) - } - .buttonStyle(.plain) - .accessibilityLabel( - String(localized: "content.accessibility.back_to_main_chat", comment: "Accessibility label for returning to main chat") - ) - - Spacer(minLength: 0) - - HStack(spacing: 8) { - privateHeaderInfo(context: headerContext, privatePeerID: privatePeerID) - let isFavorite = viewModel.isFavorite(peerID: headerContext.headerPeerID) - - if !privatePeerID.isGeoDM { - Button(action: { - viewModel.toggleFavorite(peerID: headerContext.headerPeerID) - }) { - Image(systemName: isFavorite ? "star.fill" : "star") - .font(.bitchatSystem(size: 14)) - .foregroundColor(isFavorite ? Color.yellow : textColor) - } - .buttonStyle(.plain) - .accessibilityLabel( - isFavorite - ? String(localized: "content.accessibility.remove_favorite", comment: "Accessibility label to remove a favorite") - : String(localized: "content.accessibility.add_favorite", comment: "Accessibility label to add a favorite") - ) - } - } - .frame(maxWidth: .infinity) - - Spacer(minLength: 0) - - Button(action: { - withAnimation(.easeInOut(duration: TransportConfig.uiAnimationMediumSeconds)) { - viewModel.endPrivateChat() - showSidebar = true - } - }) { - Image(systemName: "xmark") - .font(.bitchatSystem(size: 12, weight: .semibold, design: .monospaced)) - .frame(width: 32, height: 32) - } - - .buttonStyle(.plain) - .accessibilityLabel("Close") - } - .frame(height: headerHeight) - .padding(.horizontal, 16) - .padding(.top, 10) - .padding(.bottom, 12) - .background(backgroundColor) - } - - MessageListView( - privatePeer: viewModel.selectedPrivateChatPeer, - isAtBottom: $isAtBottomPrivate, - messageText: $messageText, - selectedMessageSender: $selectedMessageSender, - selectedMessageSenderID: $selectedMessageSenderID, - imagePreviewURL: $imagePreviewURL, - windowCountPublic: $windowCountPublic, - windowCountPrivate: $windowCountPrivate, - showSidebar: $showSidebar, - isTextFieldFocused: $isTextFieldFocused, - ) - .background(backgroundColor) - .frame(maxWidth: .infinity, maxHeight: .infinity) - - Divider() - - inputView - } - .background(backgroundColor) - .foregroundColor(textColor) - .highPriorityGesture( - DragGesture(minimumDistance: 25, coordinateSpace: .local) - .onEnded { value in - let horizontal = value.translation.width - let vertical = abs(value.translation.height) - guard horizontal > 80, vertical < 60 else { return } - withAnimation(.easeInOut(duration: TransportConfig.uiAnimationMediumSeconds)) { - showSidebar = true - viewModel.endPrivateChat() - } - } - ) - } - - private func privateHeaderInfo(context: PrivateHeaderContext, privatePeerID: PeerID) -> some View { - Button(action: { - viewModel.showFingerprint(for: context.headerPeerID) - }) { - HStack(spacing: 6) { - if let connectionState = context.peer?.connectionState { - switch connectionState { - case .bluetoothConnected: - Image(systemName: "dot.radiowaves.left.and.right") - .font(.bitchatSystem(size: 14)) - .foregroundColor(textColor) - .accessibilityLabel(String(localized: "content.accessibility.connected_mesh", comment: "Accessibility label for mesh-connected peer indicator")) - case .meshReachable: - Image(systemName: "point.3.filled.connected.trianglepath.dotted") - .font(.bitchatSystem(size: 14)) - .foregroundColor(textColor) - .accessibilityLabel(String(localized: "content.accessibility.reachable_mesh", comment: "Accessibility label for mesh-reachable peer indicator")) - case .nostrAvailable: - Image(systemName: "globe") - .font(.bitchatSystem(size: 14)) - .foregroundColor(.purple) - .accessibilityLabel(String(localized: "content.accessibility.available_nostr", comment: "Accessibility label for Nostr-available peer indicator")) - case .offline: - EmptyView() - } - } else if viewModel.meshService.isPeerReachable(context.headerPeerID) { - Image(systemName: "point.3.filled.connected.trianglepath.dotted") - .font(.bitchatSystem(size: 14)) - .foregroundColor(textColor) - .accessibilityLabel(String(localized: "content.accessibility.reachable_mesh", comment: "Accessibility label for mesh-reachable peer indicator")) - } else if context.isNostrAvailable { - Image(systemName: "globe") - .font(.bitchatSystem(size: 14)) - .foregroundColor(.purple) - .accessibilityLabel(String(localized: "content.accessibility.available_nostr", comment: "Accessibility label for Nostr-available peer indicator")) - } else if viewModel.meshService.isPeerConnected(context.headerPeerID) || viewModel.connectedPeers.contains(context.headerPeerID) { - Image(systemName: "dot.radiowaves.left.and.right") - .font(.bitchatSystem(size: 14)) - .foregroundColor(textColor) - .accessibilityLabel(String(localized: "content.accessibility.connected_mesh", comment: "Accessibility label for mesh-connected peer indicator")) - } - - Text(context.displayName) - .font(.bitchatSystem(size: 16, weight: .medium, design: .monospaced)) - .foregroundColor(textColor) - - if !privatePeerID.isGeoDM { - let statusPeerID = viewModel.getShortIDForNoiseKey(privatePeerID) - let encryptionStatus = viewModel.getEncryptionStatus(for: statusPeerID) - if let icon = encryptionStatus.icon { - Image(systemName: icon) - .font(.bitchatSystem(size: 14)) - .foregroundColor(encryptionStatus == .noiseVerified ? textColor : - encryptionStatus == .noiseSecured ? textColor : - Color.red) - .accessibilityLabel( - String( - format: String(localized: "content.accessibility.encryption_status", comment: "Accessibility label announcing encryption status"), - locale: .current, - encryptionStatus.accessibilityDescription - ) - ) - } - } - } - } - .buttonStyle(.plain) - .accessibilityLabel( - String( - format: String(localized: "content.accessibility.private_chat_header", comment: "Accessibility label describing the private chat header"), - locale: .current, - context.displayName - ) - ) - .accessibilityHint( - String(localized: "content.accessibility.view_fingerprint_hint", comment: "Accessibility hint for viewing encryption fingerprint") - ) - .frame(height: headerHeight) - } - - private func makePrivateHeaderContext(for privatePeerID: PeerID) -> PrivateHeaderContext { - let headerPeerID = viewModel.getShortIDForNoiseKey(privatePeerID) - let peer = viewModel.getPeer(byID: headerPeerID) - - let displayName: String = { - if privatePeerID.isGeoDM, case .location(let ch) = locationManager.selectedChannel { - let disp = viewModel.geohashDisplayName(for: privatePeerID) - return "#\(ch.geohash)/@\(disp)" - } - if let name = peer?.displayName { return name } - if let name = viewModel.meshService.peerNickname(peerID: headerPeerID) { return name } - if let fav = FavoritesPersistenceService.shared.getFavoriteStatus(for: Data(hexString: headerPeerID.id) ?? Data()), - !fav.peerNickname.isEmpty { return fav.peerNickname } - if headerPeerID.id.count == 16 { - let candidates = viewModel.identityManager.getCryptoIdentitiesByPeerIDPrefix(headerPeerID) - if let id = candidates.first, - let social = viewModel.identityManager.getSocialIdentity(for: id.fingerprint) { - if let pet = social.localPetname, !pet.isEmpty { return pet } - if !social.claimedNickname.isEmpty { return social.claimedNickname } - } - } else if let keyData = headerPeerID.noiseKey { - let fp = keyData.sha256Fingerprint() - if let social = viewModel.identityManager.getSocialIdentity(for: fp) { - if let pet = social.localPetname, !pet.isEmpty { return pet } - if !social.claimedNickname.isEmpty { return social.claimedNickname } - } - } - return String(localized: "common.unknown", comment: "Fallback label for unknown peer") - }() - - let isNostrAvailable: Bool = { - guard let connectionState = peer?.connectionState else { - if let noiseKey = Data(hexString: headerPeerID.id), - let favoriteStatus = FavoritesPersistenceService.shared.getFavoriteStatus(for: noiseKey), - favoriteStatus.isMutual { - return true - } - return false - } - return connectionState == .nostrAvailable - }() - - return PrivateHeaderContext( - headerPeerID: headerPeerID, - peer: peer, - displayName: displayName, - isNostrAvailable: isNostrAvailable - ) - } - - // Compute channel-aware people count and color for toolbar (cross-platform) - private func channelPeopleCountAndColor() -> (Int, Color) { - switch locationManager.selectedChannel { - case .location: - let n = viewModel.geohashPeople.count - let standardGreen = (colorScheme == .dark) ? Color.green : Color(red: 0, green: 0.5, blue: 0) - return (n, n > 0 ? standardGreen : Color.secondary) - case .mesh: - let counts = viewModel.allPeers.reduce(into: (others: 0, mesh: 0)) { counts, peer in - guard peer.peerID != viewModel.meshService.myPeerID else { return } - if peer.isConnected { counts.mesh += 1; counts.others += 1 } - else if peer.isReachable { counts.others += 1 } - } - let meshBlue = Color(hue: 0.60, saturation: 0.85, brightness: 0.82) - let color: Color = counts.mesh > 0 ? meshBlue : Color.secondary - return (counts.others, color) - } - } - - - private var mainHeaderView: some View { - HStack(spacing: 0) { - Text(verbatim: "bitchat/") - .font(.bitchatSystem(size: 18, weight: .medium, design: .monospaced)) - .foregroundColor(textColor) - .onTapGesture(count: 3) { - // PANIC: Triple-tap to clear all data - viewModel.panicClearAllData() - } - .onTapGesture(count: 1) { - // Single tap for app info - showAppInfo = true - } - - HStack(spacing: 0) { - Text(verbatim: "@") - .font(.bitchatSystem(size: 14, design: .monospaced)) - .foregroundColor(secondaryTextColor) - - TextField("content.input.nickname_placeholder", text: $viewModel.nickname) - .textFieldStyle(.plain) - .font(.bitchatSystem(size: 14, design: .monospaced)) - .frame(maxWidth: 80) - .foregroundColor(textColor) - .focused($isNicknameFieldFocused) - .autocorrectionDisabled(true) - #if os(iOS) - .textInputAutocapitalization(.never) - #endif - .modifier(FocusEffectDisabledModifier()) - .onChange(of: isNicknameFieldFocused) { isFocused in - if !isFocused { - // Only validate when losing focus - viewModel.validateAndSaveNickname() - } - } - .onSubmit { - viewModel.validateAndSaveNickname() - } - } - - Spacer() - - // Channel badge + dynamic spacing + people counter - // Precompute header count and color outside the ViewBuilder expressions - let cc = channelPeopleCountAndColor() - let headerCountColor: Color = cc.1 - let headerOtherPeersCount: Int = { - if case .location = locationManager.selectedChannel { - return viewModel.visibleGeohashPeople().count - } - return cc.0 - }() - - HStack(spacing: 10) { - // Unread icon immediately to the left of the channel badge (independent from channel button) - - // Unread indicator (now shown on iOS and macOS) - if viewModel.hasAnyUnreadMessages { - Button(action: { viewModel.openMostRelevantPrivateChat() }) { - Image(systemName: "envelope.fill") - .font(.bitchatSystem(size: 12)) - .foregroundColor(Color.orange) - } - .buttonStyle(.plain) - .accessibilityLabel( - String(localized: "content.accessibility.open_unread_private_chat", comment: "Accessibility label for the unread private chat button") - ) - } - // Notes icon (mesh only and when location is authorized), to the left of #mesh - if case .mesh = locationManager.selectedChannel, locationManager.permissionState == .authorized { - Button(action: { - // Kick a one-shot refresh and show the sheet immediately. - LocationChannelManager.shared.enableLocationChannels() - LocationChannelManager.shared.refreshChannels() - // If we already have a block geohash, pass it; otherwise wait in the sheet. - notesGeohash = LocationChannelManager.shared.availableChannels.first(where: { $0.level == .building })?.geohash - showLocationNotes = true - }) { - HStack(alignment: .center, spacing: 4) { - Image(systemName: "note.text") - .font(.bitchatSystem(size: 12)) - .foregroundColor(Color.orange.opacity(0.8)) - .padding(.top, 1) - } - .fixedSize(horizontal: true, vertical: false) - } - .buttonStyle(.plain) - .accessibilityLabel( - String(localized: "content.accessibility.location_notes", comment: "Accessibility label for location notes button") - ) - } - - // Bookmark toggle (geochats): to the left of #geohash - if case .location(let ch) = locationManager.selectedChannel { - Button(action: { bookmarks.toggle(ch.geohash) }) { - Image(systemName: bookmarks.isBookmarked(ch.geohash) ? "bookmark.fill" : "bookmark") - .font(.bitchatSystem(size: 12)) - } - .buttonStyle(.plain) - .accessibilityLabel( - String( - format: String(localized: "content.accessibility.toggle_bookmark", comment: "Accessibility label for toggling a geohash bookmark"), - locale: .current, - ch.geohash - ) - ) - } - - // Location channels button '#' - Button(action: { showLocationChannelsSheet = true }) { - let badgeText: String = { - switch locationManager.selectedChannel { - case .mesh: return "#mesh" - case .location(let ch): return "#\(ch.geohash)" - } - }() - let badgeColor: Color = { - switch locationManager.selectedChannel { - case .mesh: - return Color(hue: 0.60, saturation: 0.85, brightness: 0.82) - case .location: - return (colorScheme == .dark) ? Color.green : Color(red: 0, green: 0.5, blue: 0) - } - }() - Text(badgeText) - .font(.bitchatSystem(size: 14, design: .monospaced)) - .foregroundColor(badgeColor) - .lineLimit(headerLineLimit) - .fixedSize(horizontal: true, vertical: false) - .layoutPriority(2) - .accessibilityLabel( - String(localized: "content.accessibility.location_channels", comment: "Accessibility label for the location channels button") - ) - } - .buttonStyle(.plain) - .padding(.leading, 4) - .padding(.trailing, 2) - - HStack(spacing: 4) { - // People icon with count - Image(systemName: "person.2.fill") - .font(.system(size: headerPeerIconSize, weight: .regular)) - .accessibilityLabel( - String( - format: String(localized: "content.accessibility.people_count", comment: "Accessibility label announcing number of people in header"), - locale: .current, - headerOtherPeersCount - ) - ) - Text("\(headerOtherPeersCount)") - .font(.system(size: headerPeerCountFontSize, weight: .regular, design: .monospaced)) - .accessibilityHidden(true) - } - .foregroundColor(headerCountColor) - .padding(.leading, 2) - .lineLimit(headerLineLimit) - .fixedSize(horizontal: true, vertical: false) - - // QR moved to the PEOPLE header in the sidebar when on mesh channel - } - .layoutPriority(3) - .onTapGesture { - withAnimation(.easeInOut(duration: TransportConfig.uiAnimationMediumSeconds)) { - showSidebar.toggle() - } - } - .sheet(isPresented: $showVerifySheet) { - VerificationSheetView(isPresented: $showVerifySheet) - .environmentObject(viewModel) - } - } - .frame(height: headerHeight) - .padding(.horizontal, 12) - .sheet(isPresented: $showLocationChannelsSheet) { - LocationChannelsSheet(isPresented: $showLocationChannelsSheet) - .environmentObject(viewModel) - .onAppear { viewModel.isLocationChannelsSheetPresented = true } - .onDisappear { viewModel.isLocationChannelsSheetPresented = false } - } - .sheet(isPresented: $showLocationNotes, onDismiss: { - notesGeohash = nil - }) { - Group { - if let gh = notesGeohash ?? LocationChannelManager.shared.availableChannels.first(where: { $0.level == .building })?.geohash { - LocationNotesView(geohash: gh) - .environmentObject(viewModel) - } else { - VStack(spacing: 12) { - HStack { - Text("content.notes.title") - .font(.bitchatSystem(size: 16, weight: .bold, design: .monospaced)) - Spacer() - Button(action: { showLocationNotes = false }) { - Image(systemName: "xmark") - .font(.bitchatSystem(size: 13, weight: .semibold, design: .monospaced)) - .foregroundColor(textColor) - .frame(width: 32, height: 32) - } - .buttonStyle(.plain) - .accessibilityLabel(String(localized: "common.close", comment: "Accessibility label for close buttons")) - } - .frame(height: headerHeight) - .padding(.horizontal, 12) - .background(backgroundColor.opacity(0.95)) - Text("content.notes.location_unavailable") - .font(.bitchatSystem(size: 14, design: .monospaced)) - .foregroundColor(secondaryTextColor) - Button("content.location.enable") { - LocationChannelManager.shared.enableLocationChannels() - LocationChannelManager.shared.refreshChannels() - } - .buttonStyle(.bordered) - Spacer() - } - .background(backgroundColor) - .foregroundColor(textColor) - // per-sheet global onChange added below - } - } - .onAppear { - // Ensure we are authorized and start live location updates (distance-filtered) - LocationChannelManager.shared.enableLocationChannels() - LocationChannelManager.shared.beginLiveRefresh() - } - .onDisappear { - LocationChannelManager.shared.endLiveRefresh() - } - .onChange(of: locationManager.availableChannels) { channels in - if let current = channels.first(where: { $0.level == .building })?.geohash, - notesGeohash != current { - notesGeohash = current - #if os(iOS) - // Light taptic when geohash changes while the sheet is open - let generator = UIImpactFeedbackGenerator(style: .light) - generator.prepare() - generator.impactOccurred() - #endif - } - } - } - .onAppear { - if case .mesh = locationManager.selectedChannel, - locationManager.permissionState == .authorized, - LocationChannelManager.shared.availableChannels.isEmpty { - LocationChannelManager.shared.refreshChannels() - } - } - .onChange(of: locationManager.selectedChannel) { _ in - if case .mesh = locationManager.selectedChannel, - locationManager.permissionState == .authorized, - LocationChannelManager.shared.availableChannels.isEmpty { - LocationChannelManager.shared.refreshChannels() - } - } - .onChange(of: locationManager.permissionState) { _ in - if case .mesh = locationManager.selectedChannel, - locationManager.permissionState == .authorized, - LocationChannelManager.shared.availableChannels.isEmpty { - LocationChannelManager.shared.refreshChannels() - } - } - .alert("content.alert.screenshot.title", isPresented: $viewModel.showScreenshotPrivacyWarning) { - Button("common.ok", role: .cancel) {} - } message: { - Text("content.alert.screenshot.message") - } - .background(backgroundColor.opacity(0.95)) - } - -} - -// MARK: - Helper Views - -private extension ContentView { - var recordingIndicator: some View { - HStack(spacing: 12) { - Image(systemName: "waveform.circle.fill") - .foregroundColor(.red) - .font(.bitchatSystem(size: 20)) - TimelineView(.periodic(from: .now, by: 0.05)) { context in - Text( - "recording \(voiceRecordingVM.formattedDuration(for: context.date))", - comment: "Voice note recording duration indicator" - ) - .font(.bitchatSystem(size: 13, design: .monospaced)) - .foregroundColor(.red) - } - Spacer() - Button(action: voiceRecordingVM.cancel) { - Label("Cancel", systemImage: "xmark.circle") - .labelStyle(.iconOnly) - .font(.bitchatSystem(size: 18)) - .foregroundColor(.red) - } - .buttonStyle(.plain) - } - .padding(10) - .background( - RoundedRectangle(cornerRadius: 12) - .fill(Color.red.opacity(0.15)) - ) - } - - private var shouldShowMediaControls: Bool { - if let peer = viewModel.selectedPrivateChatPeer, !(peer.isGeoDM || peer.isGeoChat) { - return true - } - switch locationManager.selectedChannel { - case .mesh: - return true - case .location: - return false - } - } - - private var shouldShowVoiceControl: Bool { - if let peer = viewModel.selectedPrivateChatPeer, !(peer.isGeoDM || peer.isGeoChat) { - return true - } - switch locationManager.selectedChannel { - case .mesh: - return true - case .location: - return false - } - } - - private var composerAccentColor: Color { - viewModel.selectedPrivateChatPeer != nil ? Color.orange : textColor - } - - var attachmentButton: some View { - #if os(iOS) - Image(systemName: "camera.circle.fill") - .font(.bitchatSystem(size: 24)) - .foregroundColor(composerAccentColor) - .frame(width: 36, height: 36) - .contentShape(Circle()) - .onTapGesture { - // Tap = Photo Library - imagePickerSourceType = .photoLibrary - showImagePicker = true - } - .onLongPressGesture(minimumDuration: 0.3) { - // Long press = Camera - imagePickerSourceType = .camera - showImagePicker = true - } - .accessibilityLabel("Tap for library, long press for camera") - #else - Button(action: { showMacImagePicker = true }) { - Image(systemName: "photo.circle.fill") - .font(.bitchatSystem(size: 24)) - .foregroundColor(composerAccentColor) - .frame(width: 36, height: 36) - } - .buttonStyle(.plain) - .accessibilityLabel("Choose photo") - #endif - } - - @ViewBuilder - var sendOrMicButton: some View { - let hasText = !messageText.trimmed.isEmpty - if shouldShowVoiceControl { - ZStack { - micButtonView - .opacity(hasText ? 0 : 1) - .allowsHitTesting(!hasText) - sendButtonView(enabled: hasText) - .opacity(hasText ? 1 : 0) - .allowsHitTesting(hasText) - } - .frame(width: 36, height: 36) - } else { - sendButtonView(enabled: hasText) - .frame(width: 36, height: 36) - } - } - - private var micButtonView: some View { - Image(systemName: "mic.circle.fill") - .font(.bitchatSystem(size: 24)) - .foregroundColor(voiceRecordingVM.state.isActive ? Color.red : composerAccentColor) - .frame(width: 36, height: 36) - .contentShape(Circle()) - .overlay( - Color.clear - .contentShape(Circle()) - .gesture( - DragGesture(minimumDistance: 0) - .onChanged { _ in voiceRecordingVM.start(shouldShow: shouldShowVoiceControl) } - .onEnded { _ in voiceRecordingVM.finish(completion: viewModel.sendVoiceNote) } - ) - ) - .accessibilityLabel("Hold to record a voice note") - } - - private func sendButtonView(enabled: Bool) -> some View { - let activeColor = composerAccentColor - return Button(action: sendMessage) { - Image(systemName: "arrow.up.circle.fill") - .font(.bitchatSystem(size: 24)) - .foregroundColor(enabled ? activeColor : Color.gray) - .frame(width: 36, height: 36) - } - .buttonStyle(.plain) - .disabled(!enabled) - .accessibilityLabel( - String(localized: "content.accessibility.send_message", comment: "Accessibility label for the send message button") - ) - .accessibilityHint( - enabled - ? String(localized: "content.accessibility.send_hint_ready", comment: "Hint prompting the user to send the message") - : String(localized: "content.accessibility.send_hint_empty", comment: "Hint prompting the user to enter a message") - ) - } } diff --git a/bitchat/Views/FingerprintView.swift b/bitchat/Views/FingerprintView.swift index 9c764e9e..d49007a1 100644 --- a/bitchat/Views/FingerprintView.swift +++ b/bitchat/Views/FingerprintView.swift @@ -10,7 +10,7 @@ import SwiftUI import BitFoundation struct FingerprintView: View { - @ObservedObject var viewModel: ChatViewModel + @EnvironmentObject private var verificationModel: VerificationModel let peerID: PeerID @Environment(\.dismiss) var dismiss @Environment(\.colorScheme) var colorScheme @@ -47,6 +47,8 @@ struct FingerprintView: View { } var body: some View { + let fingerprintState = verificationModel.fingerprintPresentation(for: peerID) + VStack(spacing: 20) { // Header HStack { @@ -65,38 +67,19 @@ struct FingerprintView: View { .padding() VStack(alignment: .leading, spacing: 16) { - // Prefer short mesh ID for session/encryption status - let statusPeerID = viewModel.getShortIDForNoiseKey(peerID) - // Resolve a friendly name - let peerNickname: String = { - if let p = viewModel.getPeer(byID: statusPeerID) { return p.displayName } - if let name = viewModel.meshService.peerNickname(peerID: statusPeerID) { return name } - if let data = peerID.noiseKey { - if let fav = FavoritesPersistenceService.shared.getFavoriteStatus(for: data), !fav.peerNickname.isEmpty { return fav.peerNickname } - let fp = data.sha256Fingerprint() - if let social = viewModel.identityManager.getSocialIdentity(for: fp) { - if let pet = social.localPetname, !pet.isEmpty { return pet } - if !social.claimedNickname.isEmpty { return social.claimedNickname } - } - } - return Strings.unknownPeer() - }() - // Accurate encryption state based on short ID session - let encryptionStatus = viewModel.getEncryptionStatus(for: statusPeerID) - HStack { - if let icon = encryptionStatus.icon { + if let icon = fingerprintState.encryptionStatus.icon { Image(systemName: icon) .font(.bitchatSystem(size: 20)) - .foregroundColor(encryptionStatus == .noiseVerified ? Color.green : textColor) + .foregroundColor(fingerprintState.encryptionStatus == .noiseVerified ? Color.green : textColor) } VStack(alignment: .leading, spacing: 4) { - Text(peerNickname) + Text(fingerprintState.peerNickname) .font(.bitchatSystem(size: 18, weight: .semibold, design: .monospaced)) .foregroundColor(textColor) - Text(encryptionStatus.description) + Text(fingerprintState.encryptionStatus.description) .font(.bitchatSystem(size: 12, design: .monospaced)) .foregroundColor(textColor.opacity(0.7)) } @@ -113,7 +96,7 @@ struct FingerprintView: View { .font(.bitchatSystem(size: 12, weight: .bold, design: .monospaced)) .foregroundColor(textColor.opacity(0.7)) - if let fingerprint = viewModel.getFingerprint(for: statusPeerID) { + if let fingerprint = fingerprintState.theirFingerprint { Text(formatFingerprint(fingerprint)) .font(.bitchatSystem(size: 14, design: .monospaced)) .foregroundColor(textColor) @@ -148,8 +131,7 @@ struct FingerprintView: View { .font(.bitchatSystem(size: 12, weight: .bold, design: .monospaced)) .foregroundColor(textColor.opacity(0.7)) - let myFingerprint = viewModel.getMyFingerprint() - Text(formatFingerprint(myFingerprint)) + Text(formatFingerprint(fingerprintState.myFingerprint)) .font(.bitchatSystem(size: 14, design: .monospaced)) .foregroundColor(textColor) .multilineTextAlignment(.leading) @@ -162,30 +144,28 @@ struct FingerprintView: View { .contextMenu { Button(Strings.copy) { #if os(iOS) - UIPasteboard.general.string = myFingerprint + UIPasteboard.general.string = fingerprintState.myFingerprint #else NSPasteboard.general.clearContents() - NSPasteboard.general.setString(myFingerprint, forType: .string) + NSPasteboard.general.setString(fingerprintState.myFingerprint, forType: .string) #endif } } } // Verification status - if encryptionStatus == .noiseSecured || encryptionStatus == .noiseVerified { - let isVerified = encryptionStatus == .noiseVerified - + if fingerprintState.canToggleVerification { VStack(spacing: 12) { - Text(isVerified ? Strings.verifiedBadge : Strings.notVerifiedBadge) + Text(fingerprintState.isVerified ? Strings.verifiedBadge : Strings.notVerifiedBadge) .font(.bitchatSystem(size: 14, weight: .bold, design: .monospaced)) - .foregroundColor(isVerified ? Color.green : Color.orange) + .foregroundColor(fingerprintState.isVerified ? Color.green : Color.orange) .frame(maxWidth: .infinity) Group { - if isVerified { + if fingerprintState.isVerified { Text(Strings.verifiedMessage) } else { - Text(Strings.verifyHint(peerNickname)) + Text(Strings.verifyHint(fingerprintState.peerNickname)) } } .font(.bitchatSystem(size: 12, design: .monospaced)) @@ -195,9 +175,9 @@ struct FingerprintView: View { .fixedSize(horizontal: false, vertical: true) .frame(maxWidth: .infinity) - if !isVerified { + if !fingerprintState.isVerified { Button(action: { - viewModel.verifyFingerprint(for: peerID) + verificationModel.verifyFingerprint(for: peerID) dismiss() }) { Text(Strings.markVerified) @@ -211,7 +191,7 @@ struct FingerprintView: View { .buttonStyle(PlainButtonStyle()) } else { Button(action: { - viewModel.unverifyFingerprint(for: peerID) + verificationModel.unverifyFingerprint(for: peerID) dismiss() }) { Text(Strings.removeVerification) diff --git a/bitchat/Views/GeohashPeopleList.swift b/bitchat/Views/GeohashPeopleList.swift index dabdcc02..4a3f0f12 100644 --- a/bitchat/Views/GeohashPeopleList.swift +++ b/bitchat/Views/GeohashPeopleList.swift @@ -1,7 +1,7 @@ import SwiftUI struct GeohashPeopleList: View { - @ObservedObject var viewModel: ChatViewModel + @EnvironmentObject private var peerListModel: PeerListModel let textColor: Color let secondaryTextColor: Color let onTapPerson: () -> Void @@ -17,7 +17,7 @@ struct GeohashPeopleList: View { } var body: some View { - if viewModel.visibleGeohashPeople().isEmpty { + if peerListModel.geohashPeople.isEmpty { VStack(alignment: .leading, spacing: 0) { Text(Strings.noneNearby) .font(.bitchatSystem(size: 14, design: .monospaced)) @@ -26,26 +26,16 @@ struct GeohashPeopleList: View { .padding(.top, 12) } } else { - let myHex: String? = { - if case .location(let ch) = LocationChannelManager.shared.selectedChannel, - let id = try? viewModel.idBridge.deriveIdentity(forGeohash: ch.geohash) { - return id.publicKeyHex.lowercased() - } - return nil - }() - let people = viewModel.visibleGeohashPeople() - let currentIDs = people.map { $0.id } - - let teleportedSet = Set(viewModel.teleportedGeo.map { $0.lowercased() }) - let isTeleportedID: (String) -> Bool = { id in - if teleportedSet.contains(id.lowercased()) { return true } - if let me = myHex, id == me, LocationChannelManager.shared.teleported { return true } - return false - } + let people = peerListModel.geohashPeople + let currentIDs = people.map(\.id) let displayIDs = orderedIDs.filter { currentIDs.contains($0) } + currentIDs.filter { !orderedIDs.contains($0) } - let nonTele = displayIDs.filter { !isTeleportedID($0) } - let tele = displayIDs.filter { isTeleportedID($0) } + let nonTele = displayIDs.filter { id in + !(people.first(where: { $0.id == id })?.isTeleported ?? false) + } + let tele = displayIDs.filter { id in + people.first(where: { $0.id == id })?.isTeleported ?? false + } let finalOrder: [String] = nonTele + tele let firstID = finalOrder.first let personByID = Dictionary(uniqueKeysWithValues: people.map { ($0.id, $0) }) @@ -54,38 +44,34 @@ struct GeohashPeopleList: View { ForEach(finalOrder.filter { personByID[$0] != nil }, id: \.self) { pid in let person = personByID[pid]! HStack(spacing: 4) { - let isMe = (person.id == myHex) - let teleported = viewModel.teleportedGeo.contains(person.id.lowercased()) || (isMe && LocationChannelManager.shared.teleported) - let icon = teleported ? "face.dashed" : "mappin.and.ellipse" - let assignedColor = viewModel.colorForNostrPubkey(person.id, isDark: colorScheme == .dark) - let rowColor: Color = isMe ? .orange : assignedColor + let icon = person.isTeleported ? "face.dashed" : "mappin.and.ellipse" + let assignedColor = peerListModel.colorForGeohashPerson(id: person.id, isDark: colorScheme == .dark) + let rowColor: Color = person.isMe ? .orange : assignedColor Image(systemName: icon).font(.bitchatSystem(size: 12)).foregroundColor(rowColor) let (base, suffix) = person.displayName.splitSuffix() HStack(spacing: 0) { Text(base) .font(.bitchatSystem(size: 14, design: .monospaced)) - .fontWeight(isMe ? .bold : .regular) + .fontWeight(person.isMe ? .bold : .regular) .foregroundColor(rowColor) if !suffix.isEmpty { - let suffixColor = isMe ? Color.orange.opacity(0.6) : rowColor.opacity(0.6) + let suffixColor = person.isMe ? Color.orange.opacity(0.6) : rowColor.opacity(0.6) Text(suffix) .font(.bitchatSystem(size: 14, design: .monospaced)) .foregroundColor(suffixColor) } - if isMe { + if person.isMe { Text(Strings.youSuffix) .font(.bitchatSystem(size: 14, design: .monospaced)) .foregroundColor(rowColor) } } - if let me = myHex, person.id != me { - if viewModel.isGeohashUserBlocked(pubkeyHexLowercased: person.id) { - Image(systemName: "nosign") - .font(.bitchatSystem(size: 10)) - .foregroundColor(.red) - .help(Strings.blockedTooltip) - } + if person.isBlocked { + Image(systemName: "nosign") + .font(.bitchatSystem(size: 10)) + .foregroundColor(.red) + .help(Strings.blockedTooltip) } Spacer() } @@ -94,20 +80,29 @@ struct GeohashPeopleList: View { .padding(.top, person.id == firstID ? 10 : 0) .contentShape(Rectangle()) .onTapGesture { - if person.id != myHex { - viewModel.startGeohashDM(withPubkeyHex: person.id) + if !person.isMe { + peerListModel.openGeohashDirectMessage(with: person.id) onTapPerson() } } .contextMenu { - if let me = myHex, person.id == me { + if person.isMe { EmptyView() } else { - let blocked = viewModel.isGeohashUserBlocked(pubkeyHexLowercased: person.id) - if blocked { - Button(Strings.unblock) { viewModel.unblockGeohashUser(pubkeyHexLowercased: person.id, displayName: person.displayName) } + if person.isBlocked { + Button(Strings.unblock) { + peerListModel.unblockGeohashUser( + pubkeyHexLowercased: person.id, + displayName: person.displayName + ) + } } else { - Button(Strings.block) { viewModel.blockGeohashUser(pubkeyHexLowercased: person.id, displayName: person.displayName) } + Button(Strings.block) { + peerListModel.blockGeohashUser( + pubkeyHexLowercased: person.id, + displayName: person.displayName + ) + } } } } diff --git a/bitchat/Views/LocationChannelsSheet.swift b/bitchat/Views/LocationChannelsSheet.swift index a54fb32e..a4046c42 100644 --- a/bitchat/Views/LocationChannelsSheet.swift +++ b/bitchat/Views/LocationChannelsSheet.swift @@ -7,10 +7,8 @@ import AppKit #endif struct LocationChannelsSheet: View { @Binding var isPresented: Bool - @ObservedObject private var manager = LocationChannelManager.shared - @ObservedObject private var bookmarks = GeohashBookmarksStore.shared - @ObservedObject private var network = NetworkActivationService.shared - @EnvironmentObject var viewModel: ChatViewModel + @EnvironmentObject private var locationChannelsModel: LocationChannelsModel + @EnvironmentObject private var peerListModel: PeerListModel @Environment(\.colorScheme) var colorScheme @State private var customGeohash: String = "" @State private var customError: String? = nil @@ -108,9 +106,9 @@ struct LocationChannelsSheet: View { .foregroundColor(.secondary) Group { - switch manager.permissionState { - case LocationChannelManager.PermissionState.notDetermined: - Button(action: { manager.enableLocationChannels() }) { + switch locationChannelsModel.permissionState { + case .notDetermined: + Button(action: { locationChannelsModel.enableLocationChannels() }) { Text(Strings.requestPermissions) .font(.bitchatSystem(size: 12, design: .monospaced)) .foregroundColor(standardGreen) @@ -120,7 +118,7 @@ struct LocationChannelsSheet: View { .cornerRadius(6) } .buttonStyle(.plain) - case LocationChannelManager.PermissionState.denied, LocationChannelManager.PermissionState.restricted: + case .denied, .restricted: VStack(alignment: .leading, spacing: 8) { Text(Strings.permissionDenied) .font(.bitchatSystem(size: 12, design: .monospaced)) @@ -128,7 +126,7 @@ struct LocationChannelsSheet: View { Button(Strings.openSettings, action: SystemSettings.location.open) .buttonStyle(.plain) } - case LocationChannelManager.PermissionState.authorized: + case .authorized: EmptyView() } } @@ -152,22 +150,22 @@ struct LocationChannelsSheet: View { .background(backgroundColor) .onAppear { // Refresh channels when opening - if manager.permissionState == LocationChannelManager.PermissionState.authorized { - manager.refreshChannels() + if locationChannelsModel.permissionState == .authorized { + locationChannelsModel.refreshChannels() } // Begin periodic refresh while sheet is open - manager.beginLiveRefresh() + locationChannelsModel.beginLiveRefresh() // Geohash sampling is now managed by ChatViewModel globally } .onDisappear { - manager.endLiveRefresh() + locationChannelsModel.endLiveRefresh() } - .onChange(of: manager.permissionState) { newValue in - if newValue == LocationChannelManager.PermissionState.authorized { - manager.refreshChannels() + .onChange(of: locationChannelsModel.permissionState) { newValue in + if newValue == .authorized { + locationChannelsModel.refreshChannels() } } - .onChange(of: manager.availableChannels) { _ in } + .onChange(of: locationChannelsModel.availableChannels) { _ in } } private var closeButton: some View { @@ -183,20 +181,20 @@ struct LocationChannelsSheet: View { private var channelList: some View { ScrollView { LazyVStack(spacing: 0) { - channelRow(title: Strings.meshTitle(meshCount()), subtitlePrefix: Strings.subtitlePrefix(geohash: "bluetooth", coverage: bluetoothRangeString()), isSelected: isMeshSelected, titleColor: standardBlue, titleBold: meshCount() > 0) { - manager.select(ChannelID.mesh) + channelRow(title: Strings.meshTitle(peerListModel.reachableMeshPeerCount), subtitlePrefix: Strings.subtitlePrefix(geohash: "bluetooth", coverage: bluetoothRangeString()), isSelected: isMeshSelected, titleColor: standardBlue, titleBold: peerListModel.reachableMeshPeerCount > 0) { + locationChannelsModel.select(ChannelID.mesh) isPresented = false } .padding(.vertical, 6) - let nearby = manager.availableChannels.filter { $0.level != .building } + let nearby = locationChannelsModel.availableChannels.filter { $0.level != .building } if !nearby.isEmpty { ForEach(nearby) { channel in sectionDivider let coverage = coverageString(forPrecision: channel.geohash.count) let nameBase = locationName(for: channel.level) let namePart = nameBase.map { formattedNamePrefix(for: channel.level) + $0 } - let participantCount = viewModel.geohashParticipantCount(for: channel.geohash) + let participantCount = peerListModel.participantCount(for: channel.geohash) let subtitlePrefix = Strings.subtitlePrefix(geohash: channel.geohash, coverage: coverage) let highlight = participantCount > 0 channelRow( @@ -206,16 +204,16 @@ struct LocationChannelsSheet: View { isSelected: isSelected(channel), titleBold: highlight, trailingAccessory: { - Button(action: { bookmarks.toggle(channel.geohash) }) { - Image(systemName: bookmarks.isBookmarked(channel.geohash) ? "bookmark.fill" : "bookmark") + Button(action: { locationChannelsModel.toggleBookmark(channel.geohash) }) { + Image(systemName: locationChannelsModel.isBookmarked(channel.geohash) ? "bookmark.fill" : "bookmark") .font(.bitchatSystem(size: 14)) } .buttonStyle(.plain) .padding(.leading, 8) } ) { - manager.markTeleported(for: channel.geohash, false) - manager.select(ChannelID.location(channel)) + locationChannelsModel.markTeleported(for: channel.geohash, false) + locationChannelsModel.select(ChannelID.location(channel)) isPresented = false } .padding(.vertical, 6) @@ -235,14 +233,14 @@ struct LocationChannelsSheet: View { customTeleportSection .padding(.vertical, 8) - let bookmarkedList = bookmarks.bookmarks + let bookmarkedList = locationChannelsModel.bookmarks if !bookmarkedList.isEmpty { sectionDivider bookmarkedSection(bookmarkedList) .padding(.vertical, 8) } - if manager.permissionState == LocationChannelManager.PermissionState.authorized { + if locationChannelsModel.permissionState == .authorized { sectionDivider torToggleSection .padding(.top, 12) @@ -309,10 +307,7 @@ struct LocationChannelsSheet: View { Button(action: { let gh = normalized guard isValid else { customError = Strings.invalidGeohash; return } - let level = levelForLength(gh.count) - let ch = GeohashChannel(level: level, geohash: gh) - manager.markTeleported(for: ch.geohash, true) - manager.select(ChannelID.location(ch)) + locationChannelsModel.teleport(to: gh) isPresented = false }) { HStack(spacing: 6) { @@ -350,33 +345,33 @@ struct LocationChannelsSheet: View { let channel = GeohashChannel(level: level, geohash: gh) let coverage = coverageString(forPrecision: gh.count) let subtitle = Strings.subtitlePrefix(geohash: gh, coverage: coverage) - let name = bookmarks.bookmarkNames[gh] - let participantCount = viewModel.geohashParticipantCount(for: gh) + let name = locationChannelsModel.bookmarkNames[gh] + let participantCount = peerListModel.participantCount(for: gh) channelRow( title: Strings.bookmarkTitle(geohash: gh, count: participantCount), subtitlePrefix: subtitle, subtitleName: name.map { formattedNamePrefix(for: level) + $0 }, - isSelected: isSelected(channel), + isSelected: locationChannelsModel.isSelected(channel), trailingAccessory: { - Button(action: { bookmarks.toggle(gh) }) { - Image(systemName: bookmarks.isBookmarked(gh) ? "bookmark.fill" : "bookmark") + Button(action: { locationChannelsModel.toggleBookmark(gh) }) { + Image(systemName: locationChannelsModel.isBookmarked(gh) ? "bookmark.fill" : "bookmark") .font(.bitchatSystem(size: 14)) } .buttonStyle(.plain) .padding(.leading, 8) } ) { - let inRegional = manager.availableChannels.contains { $0.geohash == gh } - if !inRegional && !manager.availableChannels.isEmpty { - manager.markTeleported(for: gh, true) + let inRegional = locationChannelsModel.availableChannels.contains { $0.geohash == gh } + if !inRegional && !locationChannelsModel.availableChannels.isEmpty { + locationChannelsModel.markTeleported(for: gh, true) } else { - manager.markTeleported(for: gh, false) + locationChannelsModel.markTeleported(for: gh, false) } - manager.select(ChannelID.location(channel)) + locationChannelsModel.select(ChannelID.location(channel)) isPresented = false } .padding(.vertical, 6) - .onAppear { bookmarks.resolveBookmarkNameIfNeeded(for: gh) } + .onAppear { locationChannelsModel.resolveBookmarkNameIfNeeded(for: gh) } if index < entries.count - 1 { sectionDivider @@ -388,14 +383,11 @@ struct LocationChannelsSheet: View { private func isSelected(_ channel: GeohashChannel) -> Bool { - if case .location(let ch) = manager.selectedChannel { - return ch == channel - } - return false + locationChannelsModel.isSelected(channel) } private var isMeshSelected: Bool { - if case .mesh = manager.selectedChannel { return true } + if case .mesh = locationChannelsModel.selectedChannel { return true } return false } @@ -453,17 +445,6 @@ struct LocationChannelsSheet: View { let suffix = String(s[idx...]) return (prefix, suffix) } - - // MARK: - Helpers for counts - private func meshCount() -> Int { - // Count mesh-connected OR mesh-reachable peers (exclude self) - let myID = viewModel.meshService.myPeerID - return viewModel.allPeers.reduce(0) { acc, peer in - if peer.peerID != myID && (peer.isConnected || peer.isReachable) { return acc + 1 } - return acc - } - } - private func validateGeohash(_ s: String) -> Bool { let allowed = Set("0123456789bcdefghjkmnpqrstuvwxyz") guard !s.isEmpty, s.count <= 12 else { return false } @@ -487,8 +468,8 @@ struct LocationChannelsSheet: View { extension LocationChannelsSheet { private var torToggleBinding: Binding { Binding( - get: { network.userTorEnabled }, - set: { network.setUserTorEnabled($0) } + get: { locationChannelsModel.userTorEnabled }, + set: { locationChannelsModel.setUserTorEnabled($0) } ) } @@ -608,7 +589,7 @@ extension LocationChannelsSheet { } private func locationName(for level: GeohashChannelLevel) -> String? { - manager.locationNames[level] + locationChannelsModel.locationName(for: level) } private func formattedNamePrefix(for level: GeohashChannelLevel) -> String { diff --git a/bitchat/Views/LocationNotesView.swift b/bitchat/Views/LocationNotesView.swift index 4d302524..4124a87d 100644 --- a/bitchat/Views/LocationNotesView.swift +++ b/bitchat/Views/LocationNotesView.swift @@ -1,24 +1,26 @@ import SwiftUI struct LocationNotesView: View { - @EnvironmentObject var viewModel: ChatViewModel @StateObject private var manager: LocationNotesManager let geohash: String + let senderNickname: String let onNotesCountChanged: ((Int) -> Void)? @Environment(\.colorScheme) var colorScheme @Environment(\.dynamicTypeSize) private var dynamicTypeSize - @ObservedObject private var locationManager = LocationChannelManager.shared + @EnvironmentObject private var locationChannelsModel: LocationChannelsModel @Environment(\.dismiss) private var dismiss @State private var draft: String = "" init( geohash: String, + senderNickname: String, onNotesCountChanged: ((Int) -> Void)? = nil, manager: LocationNotesManager? = nil ) { let gh = geohash.lowercased() self.geohash = gh + self.senderNickname = senderNickname self.onNotesCountChanged = onNotesCountChanged _manager = StateObject(wrappedValue: manager ?? LocationNotesManager(geohash: gh)) } @@ -113,11 +115,11 @@ struct LocationNotesView: View { Spacer() closeButton } - if let building = locationManager.locationNames[.building], !building.isEmpty { + if let building = locationChannelsModel.locationName(for: .building), !building.isEmpty { Text(building) .font(.bitchatSystem(size: 12, design: .monospaced)) .foregroundColor(accentGreen) - } else if let block = locationManager.locationNames[.block], !block.isEmpty { + } else if let block = locationChannelsModel.locationName(for: .block), !block.isEmpty { Text(block) .font(.bitchatSystem(size: 12, design: .monospaced)) .foregroundColor(accentGreen) @@ -265,7 +267,7 @@ struct LocationNotesView: View { private func send() { guard let content = draft.trimmedOrNilIfEmpty else { return } - manager.send(content: content, nickname: viewModel.nickname) + manager.send(content: content, nickname: senderNickname) draft = "" } diff --git a/bitchat/Views/Media/MediaMessageView.swift b/bitchat/Views/Media/MediaMessageView.swift index 0673e522..cc88fd03 100644 --- a/bitchat/Views/Media/MediaMessageView.swift +++ b/bitchat/Views/Media/MediaMessageView.swift @@ -10,8 +10,7 @@ import BitFoundation struct MediaMessageView: View { @Environment(\.colorScheme) private var colorScheme - - @EnvironmentObject var viewModel: ChatViewModel + @EnvironmentObject private var conversationUIModel: ConversationUIModel let message: BitchatMessage let media: BitchatMessage.Media @@ -19,15 +18,15 @@ struct MediaMessageView: View { var body: some View { let state = mediaSendState(for: message) - let isFromMe = message.sender == viewModel.nickname || message.senderPeerID == viewModel.meshService.myPeerID - let cancelAction: (() -> Void)? = state.canCancel ? { viewModel.cancelMediaSend(messageID: message.id) } : nil + let isFromMe = conversationUIModel.isMediaMessageFromCurrentUser(message) + let cancelAction: (() -> Void)? = state.canCancel ? { conversationUIModel.cancelMediaSend(messageID: message.id) } : nil VStack(alignment: .leading, spacing: 2) { HStack(alignment: .center, spacing: 4) { - Text(viewModel.formatMessageHeader(message, colorScheme: colorScheme)) + Text(conversationUIModel.formatMessageHeader(message, colorScheme: colorScheme)) .fixedSize(horizontal: false, vertical: true) .frame(maxWidth: .infinity, alignment: .leading) - if message.isPrivate && message.sender == viewModel.nickname, + if message.isPrivate && conversationUIModel.isSentByCurrentUser(message), let status = message.deliveryStatus { DeliveryStatusView(status: status) .padding(.leading, 4) @@ -55,7 +54,7 @@ struct MediaMessageView: View { imagePreviewURL = url } }, - onDelete: !isFromMe ? { viewModel.deleteMediaMessage(messageID: message.id) } : nil + onDelete: !isFromMe ? { conversationUIModel.deleteMediaMessage(messageID: message.id) } : nil ) .frame(maxWidth: 280) } @@ -81,7 +80,7 @@ struct MediaMessageView: View { break } } - let canCancel = isSending && message.sender == viewModel.nickname + let canCancel = isSending && conversationUIModel.isSentByCurrentUser(message) let clamped = progress.map { max(0, min(1, $0)) } return (isSending, isSending ? clamped : nil, canCancel) } diff --git a/bitchat/Views/MeshPeerList.swift b/bitchat/Views/MeshPeerList.swift index 4c785f5e..5a838230 100644 --- a/bitchat/Views/MeshPeerList.swift +++ b/bitchat/Views/MeshPeerList.swift @@ -2,7 +2,7 @@ import SwiftUI import BitFoundation struct MeshPeerList: View { - @ObservedObject var viewModel: ChatViewModel + @EnvironmentObject private var peerListModel: PeerListModel let textColor: Color let secondaryTextColor: Color let onTapPeer: (PeerID) -> Void @@ -19,21 +19,13 @@ struct MeshPeerList: View { } var body: some View { - let myPeerID = viewModel.meshService.myPeerID - let mapped: [(peer: BitchatPeer, isMe: Bool, hasUnread: Bool, enc: EncryptionStatus)] = viewModel.allPeers.map { peer in - let isMe = peer.peerID == myPeerID - let hasUnread = viewModel.hasUnreadMessages(for: peer.peerID) - let enc = viewModel.getEncryptionStatus(for: peer.peerID) - return (peer, isMe, hasUnread, enc) - } - // Stable visual order without mutating state here - let currentIDs = mapped.map { $0.peer.peerID.id } + let currentIDs = peerListModel.meshRows.map(\.id) let displayIDs = orderedIDs.filter { currentIDs.contains($0) } + currentIDs.filter { !orderedIDs.contains($0) } - let peers: [(peer: BitchatPeer, isMe: Bool, hasUnread: Bool, enc: EncryptionStatus)] = displayIDs.compactMap { id in - mapped.first(where: { $0.peer.peerID.id == id }) + let peers: [MeshPeerRow] = displayIDs.compactMap { id in + peerListModel.meshRows.first(where: { $0.id == id }) } - - if viewModel.allPeers.isEmpty { + + if peerListModel.meshRows.isEmpty { VStack(alignment: .leading, spacing: 0) { Text(Strings.noneNearby) .font(.bitchatSystem(size: 14, design: .monospaced)) @@ -44,11 +36,10 @@ struct MeshPeerList: View { } else { VStack(alignment: .leading, spacing: 0) { ForEach(0.. some View { - Text(viewModel.formatMessageAsText(message, colorScheme: colorScheme)) + Text(conversationUIModel.formatMessage(message, colorScheme: colorScheme)) .fixedSize(horizontal: false, vertical: true) .frame(maxWidth: .infinity, alignment: .leading) } @@ -246,7 +236,7 @@ private extension MessageListView { if let peer = privatePeer { "dm:\(peer)" } else { - locationManager.selectedChannel.contextKey + locationChannelsModel.selectedChannel.contextKey } }() let preserveID = "\(contextKey)|\(message.id)" @@ -278,15 +268,12 @@ private extension MessageListView { let peerID = PeerID(str: id.removingPercentEncoding ?? id) selectedMessageSenderID = peerID - if peerID.isGeoDM || peerID.isGeoChat { - selectedMessageSender = viewModel.geohashDisplayName(for: peerID) - } else if let name = viewModel.meshService.peerNickname(peerID: peerID) { - selectedMessageSender = name - } else { - selectedMessageSender = viewModel.messages.last(where: { $0.senderPeerID == peerID && $0.sender != "system" })?.sender - } + selectedMessageSender = conversationUIModel.senderDisplayName( + for: peerID, + fallbackMessages: conversationMessages(for: privatePeer) + ) - if viewModel.isSelfSender(peerID: peerID, displayName: selectedMessageSender) { + if conversationUIModel.isSelfSender(peerID: peerID, displayName: selectedMessageSender) { selectedMessageSender = nil selectedMessageSenderID = nil } else { @@ -297,26 +284,7 @@ private extension MessageListView { let gh = url.path.trimmingCharacters(in: CharacterSet(charactersIn: "/")).lowercased() let allowed = Set("0123456789bcdefghjkmnpqrstuvwxyz") guard (2...12).contains(gh.count), gh.allSatisfy({ allowed.contains($0) }) else { return } - - func levelForLength(_ len: Int) -> GeohashChannelLevel { - switch len { - case 0...2: return .region - case 3...4: return .province - case 5: return .city - case 6: return .neighborhood - case 7: return .block - default: return .block - } - } - - let level = levelForLength(gh.count) - let channel = GeohashChannel(level: level, geohash: gh) - - let inRegional = LocationChannelManager.shared.availableChannels.contains { $0.geohash == gh } - if !inRegional && !LocationChannelManager.shared.availableChannels.isEmpty { - LocationChannelManager.shared.markTeleported(for: gh, true) - } - LocationChannelManager.shared.select(ChannelID.location(channel)) + locationChannelsModel.openLocationChannel(for: gh) default: return @@ -337,20 +305,21 @@ private extension MessageListView { var targetPeerID: String? { if let peer = privatePeer, - let last = viewModel.getPrivateChatMessages(for: peer).suffix(300).last?.id { + let last = privateInboxModel.messages(for: peer).suffix(300).last?.id { return "dm:\(peer)|\(last)" } - if let last = viewModel.messages.suffix(300).last?.id { - return "\(locationManager.selectedChannel.contextKey)|\(last)" + if let last = publicChatModel.messages.suffix(300).last?.id { + return "\(locationChannelsModel.selectedChannel.contextKey)|\(last)" } return nil } func onMessagesChange(proxy: ScrollViewProxy) { - guard privatePeer == nil, let lastMsg = viewModel.messages.last else { return } + let messages = publicChatModel.messages + guard privatePeer == nil, let lastMsg = messages.last else { return } // If the newest message is from me, always scroll to bottom - let isFromSelf = (lastMsg.sender == viewModel.nickname) || lastMsg.sender.hasPrefix(viewModel.nickname + "#") + let isFromSelf = conversationUIModel.isSentByCurrentUser(lastMsg) if !isFromSelf && !isAtBottom { // Only autoscroll when user is at/near bottom return } else { // Ensure we consider ourselves at bottom for subsequent messages @@ -359,8 +328,8 @@ private extension MessageListView { func scrollIfNeeded(date: Date) { lastScrollTime = date - let contextKey = locationManager.selectedChannel.contextKey - if let target = viewModel.messages.suffix(windowCountPublic).last.map({ "\(contextKey)|\($0.id)" }) { + let contextKey = locationChannelsModel.selectedChannel.contextKey + if let target = messages.suffix(windowCountPublic).last.map({ "\(contextKey)|\($0.id)" }) { proxy.scrollTo(target, anchor: .bottom) } } @@ -382,12 +351,14 @@ private extension MessageListView { } func onPrivateChatsChange(proxy: ScrollViewProxy) { - guard let peerID = privatePeer, let messages = viewModel.privateChats[peerID], let lastMsg = messages.last else { + guard let peerID = privatePeer, + let lastMsg = privateInboxModel.messages(for: peerID).last else { return } + let messages = privateInboxModel.messages(for: peerID) // If the newest private message is from me, always scroll - let isFromSelf = (lastMsg.sender == viewModel.nickname) || lastMsg.sender.hasPrefix(viewModel.nickname + "#") + let isFromSelf = conversationUIModel.isSentByCurrentUser(lastMsg) if !isFromSelf && !isAtBottom { // Only autoscroll when user is at/near bottom return } else { @@ -428,11 +399,22 @@ private extension MessageListView { isAtBottom = true windowCountPublic = TransportConfig.uiWindowInitialCountPublic let contextKey = "geo:\(ch.geohash)" - if let target = viewModel.messages.suffix(windowCountPublic).last?.id.map({ "\(contextKey)|\($0)" }) { + if let target = publicChatModel.messages.suffix(windowCountPublic).last?.id.map({ "\(contextKey)|\($0)" }) { proxy.scrollTo(target, anchor: .bottom) } } } + + func conversationMessages(for privatePeer: PeerID?) -> [BitchatMessage] { + if let privatePeer { + return privateInboxModel.messages(for: privatePeer) + } + return publicChatModel.messages + } + + func privateMessageCount(for privatePeer: PeerID?) -> Int { + conversationMessages(for: privatePeer).count + } } private extension ChannelID { diff --git a/bitchat/Views/VerificationViews.swift b/bitchat/Views/VerificationViews.swift index 180e2b46..acd2402b 100644 --- a/bitchat/Views/VerificationViews.swift +++ b/bitchat/Views/VerificationViews.swift @@ -107,7 +107,7 @@ struct ImageWrapper: View { /// Placeholder scanner UI; real camera scanning will be added later. struct QRScanView: View { - @EnvironmentObject var viewModel: ChatViewModel + @EnvironmentObject private var verificationModel: VerificationModel var isActive: Bool = true var onSuccess: (() -> Void)? = nil // Called when verification succeeds @State private var input = "" @@ -135,17 +135,15 @@ struct QRScanView: View { // Deduplicate: ignore if we just processed this exact QR code guard code != lastValid else { return } - if let qr = VerificationService.shared.verifyScannedQR(code) { - let ok = viewModel.beginQRVerification(with: qr) - if ok { - // Successfully initiated verification; remember this QR to prevent re-scanning - lastValid = code - // Close scanner and return to "My QR" view - onSuccess?() - } - // If !ok, peer not found or already pending - don't set lastValid so user can retry - } else { - // ignore invalid reads; continue scanning + switch verificationModel.verifyScannedPayload(code) { + case .requested: + // Successfully initiated verification; remember this QR to prevent re-scanning + lastValid = code + // Close scanner and return to "My QR" view + onSuccess?() + case .notFound, .invalid: + // Ignore invalid/no-match reads and keep scanning + break } } .frame(height: 260) @@ -163,17 +161,15 @@ struct QRScanView: View { return } - if let qr = VerificationService.shared.verifyScannedQR(input) { - let ok = viewModel.beginQRVerification(with: qr) - if ok { - result = Strings.requested(qr.nickname) - lastValid = input - // Close scanner and return to "My QR" view - onSuccess?() - } else { - result = Strings.notFound - } - } else { + switch verificationModel.verifyScannedPayload(input) { + case .requested(let nickname): + result = Strings.requested(nickname) + lastValid = input + // Close scanner and return to "My QR" view + onSuccess?() + case .notFound: + result = Strings.notFound + case .invalid: result = Strings.invalid } } @@ -282,7 +278,7 @@ struct CameraScannerView: UIViewRepresentable { // Combined sheet: shows my QR by default with a button to scan instead struct VerificationSheetView: View { - @EnvironmentObject var viewModel: ChatViewModel + @EnvironmentObject private var verificationModel: VerificationModel @Binding var isPresented: Bool @State private var showingScanner = false @Environment(\.colorScheme) var colorScheme @@ -291,11 +287,6 @@ struct VerificationSheetView: View { private var accentColor: Color { colorScheme == .dark ? Color.green : Color(red: 0, green: 0.5, blue: 0) } private var boxColor: Color { Color.gray.opacity(0.1) } - private func myQRString() -> String { - let npub = try? viewModel.idBridge.getCurrentNostrIdentity()?.npub - return VerificationService.shared.buildMyQRString(nickname: viewModel.nickname, npub: npub) ?? "" - } - var body: some View { VStack(spacing: 0) { // Top header (always at top) @@ -333,14 +324,14 @@ struct VerificationSheetView: View { QRScanView(isActive: showingScanner, onSuccess: { showingScanner = false }) - .environmentObject(viewModel) + .environmentObject(verificationModel) .frame(height: 280) .clipShape(RoundedRectangle(cornerRadius: 10)) #else QRScanView(onSuccess: { showingScanner = false }) - .environmentObject(viewModel) + .environmentObject(verificationModel) #endif } .padding() @@ -348,8 +339,7 @@ struct VerificationSheetView: View { .background(boxColor) .cornerRadius(8) } else { - let qr = myQRString() - MyQRView(qrString: qr) + MyQRView(qrString: verificationModel.myQRString()) } } .padding(16) @@ -373,10 +363,9 @@ struct VerificationSheetView: View { } // Optional: Remove verification for selected peer (if verified) - if let pid = viewModel.selectedPrivateChatPeer, - let fp = viewModel.getFingerprint(for: pid), - viewModel.verifiedFingerprints.contains(fp) { - Button(action: { viewModel.unverifyFingerprint(for: pid) }) { + if let peerID = verificationModel.selectedPeerID, + verificationModel.isVerified(peerID: peerID) { + Button(action: { verificationModel.unverifyFingerprint(for: peerID) }) { Label("remove verification", systemImage: "minus.circle") .font(.bitchatSystem(size: 12, design: .monospaced)) } diff --git a/bitchatTests/AppArchitectureTests.swift b/bitchatTests/AppArchitectureTests.swift new file mode 100644 index 00000000..c58a6fd4 --- /dev/null +++ b/bitchatTests/AppArchitectureTests.swift @@ -0,0 +1,699 @@ +import BitFoundation +import Foundation +import Testing +@testable import bitchat + +@MainActor +private func makeArchitectureViewModel( + locationManager: LocationChannelManager? = nil +) -> ChatViewModel { + let keychain = MockKeychain() + let keychainHelper = MockKeychainHelper() + let idBridge = NostrIdentityBridge(keychain: keychainHelper) + let identityManager = MockIdentityManager(keychain) + let locationManager = locationManager ?? makeArchitectureLocationManager() + + return ChatViewModel( + keychain: keychain, + idBridge: idBridge, + identityManager: identityManager, + transport: MockTransport(), + locationManager: locationManager + ) +} + +@MainActor +private func makeArchitectureLocationManager() -> LocationChannelManager { + let suiteName = "AppArchitectureTests.\(UUID().uuidString)" + let storage = UserDefaults(suiteName: suiteName) ?? .standard + storage.removePersistentDomain(forName: suiteName) + return LocationChannelManager(storage: storage) +} + +private func makeArchitectureSnapshot( + peerID: PeerID, + nickname: String, + connected: Bool, + noisePublicKey: Data +) -> TransportPeerSnapshot { + TransportPeerSnapshot( + peerID: peerID, + nickname: nickname, + isConnected: connected, + noisePublicKey: noisePublicKey, + lastSeen: Date() + ) +} + +@MainActor +private func waitUntil( + timeoutNanoseconds: UInt64 = 3_000_000_000, + pollNanoseconds: UInt64 = 20_000_000, + _ condition: @escaping @MainActor () -> Bool +) async { + let timeout = Double(timeoutNanoseconds) / 1_000_000_000 + let deadline = Date().addingTimeInterval(timeout) + + while !condition(), Date() < deadline { + try? await Task.sleep(nanoseconds: pollNanoseconds) + } +} + +@Suite("App Architecture Tests", .serialized) +struct AppArchitectureTests { + + @Test("PeerIdentityStore owns fingerprint, mapping, and verification state") + @MainActor + func peerIdentityStoreOwnsIdentityState() { + let store = PeerIdentityStore() + let shortPeerID = PeerID(str: "peer-short") + let stablePeerID = PeerID(str: "peer-stable") + let canonicalPeerID = PeerID(str: "peer-canonical") + + store.setStablePeerID(stablePeerID, forShortID: shortPeerID) + store.setFingerprint("fp-1", for: shortPeerID) + store.setCachedEncryptionStatus(.noiseHandshaking, for: shortPeerID) + store.setEncryptionStatus(.noiseSecured, for: shortPeerID) + store.setVerified("fp-1", verified: true) + + let migratedFingerprint = store.migrateFingerprintMapping( + from: shortPeerID, + to: canonicalPeerID + ) + + #expect(store.stablePeerID(forShortID: shortPeerID) == stablePeerID) + #expect(store.shortPeerID(forStablePeerID: stablePeerID) == shortPeerID) + #expect(migratedFingerprint == "fp-1") + #expect(store.fingerprint(for: shortPeerID) == nil) + #expect(store.fingerprint(for: canonicalPeerID) == "fp-1") + #expect(store.selectedPrivateChatFingerprint == "fp-1") + #expect(store.encryptionStatus(for: shortPeerID) == .noiseSecured) + #expect(store.cachedEncryptionStatus(for: shortPeerID) == nil) + #expect(store.isVerified("fp-1")) + + store.clearAll() + + #expect(store.encryptionStatuses.isEmpty) + #expect(store.verifiedFingerprints.isEmpty) + #expect(store.peerFingerprintsByPeerID.isEmpty) + #expect(store.selectedPrivateChatFingerprint == nil) + #expect(store.stablePeerID(forShortID: shortPeerID) == nil) + } + + @Test("LocationPresenceStore normalizes and resets geohash presence state") + @MainActor + func locationPresenceStoreNormalizesPresenceState() { + let store = LocationPresenceStore() + + store.setCurrentGeohash("U4PRUY") + store.replaceGeoNicknames([ + "ABCDEF": "alice", + "123456": "bob" + ]) + store.markTeleported("ABCDEF") + store.replaceTeleportedGeo(Set(["FEDCBA", "123456"])) + + #expect(store.currentGeohash == "u4pruy") + #expect(store.geoNicknames["abcdef"] == "alice") + #expect(store.geoNicknames["123456"] == "bob") + #expect(store.teleportedGeo == Set(["fedcba", "123456"])) + + store.reset() + + #expect(store.currentGeohash == nil) + #expect(store.geoNicknames.isEmpty) + #expect(store.teleportedGeo.isEmpty) + } + + @Test("PeerHandle equality and hashing use the canonical identity only") + func peerHandleEqualityUsesCanonicalIdentity() { + let first = PeerHandle( + id: "noise:abc123", + routingPeerID: PeerID(str: "peer-a"), + displayName: "alice", + noisePublicKeyHex: "abc123", + nostrPublicKey: nil + ) + let second = PeerHandle( + id: "noise:abc123", + routingPeerID: PeerID(str: "peer-b"), + displayName: "alice-renamed", + noisePublicKeyHex: nil, + nostrPublicKey: "npub123" + ) + + #expect(first == second) + #expect(Set([first, second]).count == 1) + } + + @Test("ConversationStore normalizes timeline ordering and duplicates") + @MainActor + func conversationStoreNormalizesMessages() { + let store = ConversationStore() + let older = BitchatMessage( + id: "m1", + sender: "alice", + content: "first", + timestamp: Date(timeIntervalSince1970: 1), + isRelay: false, + originalSender: nil, + isPrivate: false, + recipientNickname: nil, + senderPeerID: PeerID(str: "peer-a") + ) + let newer = BitchatMessage( + id: "m2", + sender: "alice", + content: "second", + timestamp: Date(timeIntervalSince1970: 2), + isRelay: false, + originalSender: nil, + isPrivate: false, + recipientNickname: nil, + senderPeerID: PeerID(str: "peer-a") + ) + let replacement = BitchatMessage( + id: "m2", + sender: "alice", + content: "second-updated", + timestamp: Date(timeIntervalSince1970: 2), + isRelay: false, + originalSender: nil, + isPrivate: false, + recipientNickname: nil, + senderPeerID: PeerID(str: "peer-a") + ) + + store.replaceMessages([newer, older, replacement], for: ConversationID.mesh) + + let messages = store.messages(for: ConversationID.mesh) + #expect(messages.map(\.id) == ["m1", "m2"]) + #expect(messages.last?.content == "second-updated") + } + + @Test("ConversationStore tracks unread direct conversations with canonical IDs") + @MainActor + func conversationStoreTracksUnreadDirectConversations() { + let store = ConversationStore() + let resolver = IdentityResolver() + let peerID = PeerID(str: "peer-1") + let message = BitchatMessage( + id: "dm-1", + sender: "alice", + content: "hello", + timestamp: Date(), + isRelay: false, + originalSender: nil, + isPrivate: true, + recipientNickname: "bob", + senderPeerID: peerID + ) + + store.synchronizePrivateChats( + [peerID: [message]], + unreadPeerIDs: Set([peerID]), + identityResolver: resolver + ) + + let conversationID = ConversationID.direct( + resolver.canonicalHandle(for: peerID, displayName: "alice") + ) + + #expect(store.messages(for: conversationID).map(\.id) == ["dm-1"]) + #expect(store.unreadConversations.contains(conversationID)) + + store.markRead(conversationID) + #expect(!store.unreadConversations.contains(conversationID)) + } + + @Test("ConversationStore tracks the selected app conversation context") + @MainActor + func conversationStoreTracksSelectedConversationContext() { + let store = ConversationStore() + let resolver = IdentityResolver() + let noiseKey = Data((0..<32).map(UInt8.init)) + let shortPeerID = PeerID(str: "0011223344556677") + let geohashChannel = ChannelID.location(GeohashChannel(level: .city, geohash: "9q8yy")) + let peer = BitchatPeer( + peerID: shortPeerID, + noisePublicKey: noiseKey, + nickname: "alice", + isConnected: true, + isReachable: true + ) + + resolver.register(peers: [peer]) + store.synchronizeSelection( + activeChannel: geohashChannel, + selectedPeerID: shortPeerID, + identityResolver: resolver + ) + + let expectedConversationID = ConversationID.direct( + resolver.canonicalHandle(for: shortPeerID, displayName: "alice") + ) + + #expect(store.activeChannel == geohashChannel) + #expect(store.selectedPrivatePeerID == shortPeerID) + #expect(store.selectedConversationID == expectedConversationID) + + store.synchronizeSelection( + activeChannel: ChannelID.mesh, + selectedPeerID: nil, + identityResolver: resolver + ) + + #expect(store.activeChannel == ChannelID.mesh) + #expect(store.selectedPrivatePeerID == nil) + #expect(store.selectedConversationID == ConversationID.mesh) + } + + @Test("ConversationStore exposes direct conversations by the latest routing peer ID") + @MainActor + func conversationStoreExposesDirectConversationsByLatestRoutingPeerID() { + let store = ConversationStore() + let resolver = IdentityResolver() + let noiseKey = Data((0..<32).map(UInt8.init)) + let shortPeerID = PeerID(str: "0011223344556677") + let fullPeerID = PeerID(hexData: noiseKey) + let firstMessage = BitchatMessage( + id: "dm-1", + sender: "alice", + content: "short id", + timestamp: Date(timeIntervalSince1970: 1), + isRelay: false, + originalSender: nil, + isPrivate: true, + recipientNickname: "builder", + senderPeerID: shortPeerID + ) + let secondMessage = BitchatMessage( + id: "dm-2", + sender: "alice", + content: "full id", + timestamp: Date(timeIntervalSince1970: 2), + isRelay: false, + originalSender: nil, + isPrivate: true, + recipientNickname: "builder", + senderPeerID: fullPeerID + ) + + resolver.register( + peer: BitchatPeer( + peerID: shortPeerID, + noisePublicKey: noiseKey, + nickname: "alice", + isConnected: true, + isReachable: true + ) + ) + store.synchronizePrivateChats( + [shortPeerID: [firstMessage]], + unreadPeerIDs: Set([shortPeerID]), + identityResolver: resolver + ) + + resolver.register( + peer: BitchatPeer( + peerID: fullPeerID, + noisePublicKey: noiseKey, + nickname: "alice", + isConnected: true, + isReachable: true + ) + ) + store.synchronizePrivateChats( + [fullPeerID: [secondMessage]], + unreadPeerIDs: Set([fullPeerID]), + identityResolver: resolver + ) + + #expect(Set(store.directMessagesByPeerID().keys) == Set([fullPeerID])) + #expect(store.directMessagesByPeerID()[fullPeerID]?.map(\.id) == ["dm-2"]) + #expect(store.unreadDirectPeerIDs() == Set([fullPeerID])) + } + + @Test("PrivateInboxModel mirrors direct message state from ConversationStore") + @MainActor + func privateInboxModelMirrorsDirectMessageStateFromConversationStore() async { + let store = ConversationStore() + let resolver = IdentityResolver() + let inboxModel = PrivateInboxModel(conversationStore: store) + let messagePeerID = PeerID(str: "peer-1") + let unreadOnlyPeerID = PeerID(str: "peer-2") + let selectedOnlyPeerID = PeerID(str: "peer-3") + let message = BitchatMessage( + id: "dm-1", + sender: "alice", + content: "hello", + timestamp: Date(), + isRelay: false, + originalSender: nil, + isPrivate: true, + recipientNickname: "builder", + senderPeerID: messagePeerID + ) + + store.synchronizePrivateChats( + [messagePeerID: [message]], + unreadPeerIDs: Set([messagePeerID, unreadOnlyPeerID]), + identityResolver: resolver + ) + store.synchronizeSelection( + activeChannel: ChannelID.mesh, + selectedPeerID: selectedOnlyPeerID, + identityResolver: resolver + ) + + await waitUntil { + inboxModel.selectedPeerID == selectedOnlyPeerID && + inboxModel.unreadPeerIDs == Set([messagePeerID, unreadOnlyPeerID]) && + Set(inboxModel.messagesByPeerID.keys) == Set([messagePeerID, unreadOnlyPeerID, selectedOnlyPeerID]) + } + + #expect(inboxModel.selectedPeerID == selectedOnlyPeerID) + #expect(inboxModel.unreadPeerIDs == Set([messagePeerID, unreadOnlyPeerID])) + #expect(inboxModel.messages(for: messagePeerID).map(\.id) == ["dm-1"]) + #expect(inboxModel.messages(for: unreadOnlyPeerID).isEmpty) + #expect(inboxModel.messages(for: selectedOnlyPeerID).isEmpty) + } + + @Test("AppChromeModel mirrors nickname and unread state through focused models") + @MainActor + func appChromeModelMirrorsNicknameAndUnreadState() async { + let viewModel = makeArchitectureViewModel() + let conversationStore = ConversationStore() + let resolver = IdentityResolver() + let privateInboxModel = PrivateInboxModel(conversationStore: conversationStore) + let chromeModel = AppChromeModel(chatViewModel: viewModel, privateInboxModel: privateInboxModel) + + chromeModel.setNickname("builder") + await waitUntil { + viewModel.nickname == "builder" && chromeModel.nickname == "builder" + } + + #expect(viewModel.nickname == "builder") + #expect(chromeModel.nickname == "builder") + #expect(!chromeModel.hasUnreadPrivateMessages) + + let peerID = PeerID(str: "peer-1") + conversationStore.synchronizePrivateChats( + [:], + unreadPeerIDs: Set([peerID]), + identityResolver: resolver + ) + await waitUntil { + chromeModel.hasUnreadPrivateMessages + } + + #expect(chromeModel.hasUnreadPrivateMessages) + } + + @Test("AppChromeModel owns fingerprint and screenshot presentation state") + @MainActor + func appChromeModelOwnsPresentationState() { + let viewModel = makeArchitectureViewModel() + let conversationStore = ConversationStore() + let privateInboxModel = PrivateInboxModel(conversationStore: conversationStore) + let chromeModel = AppChromeModel(chatViewModel: viewModel, privateInboxModel: privateInboxModel) + let peerID = PeerID(str: "peer-2") + + chromeModel.showFingerprint(for: peerID) + chromeModel.presentAppInfo() + chromeModel.isLocationChannelsSheetPresented = true + chromeModel.triggerScreenshotPrivacyWarning() + + #expect(chromeModel.showingFingerprintFor == peerID) + #expect(chromeModel.isAppInfoPresented) + #expect(chromeModel.shouldSuppressScreenshotNotification) + #expect(chromeModel.showScreenshotPrivacyWarning) + + chromeModel.clearFingerprint() + #expect(chromeModel.showingFingerprintFor == nil) + } + + @Test("PrivateConversationModel resolves canonical header state for the selected DM") + @MainActor + func privateConversationModelResolvesSelectedHeaderState() async { + let viewModel = makeArchitectureViewModel() + guard let transport = viewModel.meshService as? MockTransport else { + Issue.record("Expected ChatViewModel meshService to be a MockTransport in architecture tests") + return + } + let conversationStore = viewModel.conversationStore + let locationChannelsModel = LocationChannelsModel(manager: makeArchitectureLocationManager()) + let conversationModel = PrivateConversationModel( + chatViewModel: viewModel, + conversationStore: conversationStore, + locationChannelsModel: locationChannelsModel + ) + + let noiseKey = Data((0..<32).map(UInt8.init)) + let shortPeerID = PeerID(str: "0011223344556677") + let fullPeerID = PeerID(hexData: noiseKey) + transport.peerNicknames[shortPeerID] = "alice" + transport.reachablePeers.insert(shortPeerID) + viewModel.allPeers = [ + BitchatPeer( + peerID: shortPeerID, + noisePublicKey: noiseKey, + nickname: "alice", + isConnected: false, + isReachable: true + ) + ] + + conversationModel.startConversation(with: fullPeerID) + await waitUntil { + conversationModel.selectedPeerID == fullPeerID + } + + #expect(conversationModel.selectedPeerID == fullPeerID) + #expect(conversationModel.selectedHeaderState?.headerPeerID == shortPeerID) + #expect(conversationModel.selectedHeaderState?.displayName == "alice") + #expect(conversationModel.selectedHeaderState?.availability == .meshReachable) + #expect(conversationModel.selectedHeaderState?.encryptionStatus == .noHandshake) + + conversationModel.endConversation() + await waitUntil { + conversationModel.selectedPeerID == nil + } + #expect(conversationModel.selectedPeerID == nil) + #expect(conversationModel.selectedHeaderState == nil) + } + + @Test("ConversationUIModel mirrors composer state and forwards sends") + @MainActor + func conversationUIModelMirrorsComposerStateAndForwardsSends() async { + let locationManager = makeArchitectureLocationManager() + let viewModel = makeArchitectureViewModel(locationManager: locationManager) + guard let transport = viewModel.meshService as? MockTransport else { + Issue.record("Expected ChatViewModel meshService to be a MockTransport in architecture tests") + return + } + + let conversationStore = viewModel.conversationStore + locationManager.select(.mesh) + let locationChannelsModel = LocationChannelsModel(manager: locationManager) + let privateConversationModel = PrivateConversationModel( + chatViewModel: viewModel, + conversationStore: conversationStore, + locationChannelsModel: locationChannelsModel + ) + let uiModel = ConversationUIModel( + chatViewModel: viewModel, + privateConversationModel: privateConversationModel, + conversationStore: conversationStore + ) + let geohashChannel = ChannelID.location(GeohashChannel(level: .city, geohash: "9q8yy")) + defer { + locationManager.select(.mesh) + } + viewModel.nickname = "builder" + viewModel.autocompleteSuggestions = ["alice"] + viewModel.showAutocomplete = true + locationChannelsModel.select(geohashChannel) + + await waitUntil { + viewModel.activeChannel == geohashChannel && + uiModel.currentNickname == "builder" && + uiModel.showAutocomplete && + uiModel.autocompleteSuggestions == ["alice"] && + !uiModel.canSendMediaInCurrentContext + } + + #expect(viewModel.activeChannel == geohashChannel) + #expect(uiModel.currentNickname == "builder") + #expect(uiModel.showAutocomplete) + #expect(uiModel.autocompleteSuggestions == ["alice"]) + #expect(!uiModel.canSendMediaInCurrentContext) + + locationChannelsModel.select(ChannelID.mesh) + await waitUntil { + viewModel.activeChannel == ChannelID.mesh && + uiModel.canSendMediaInCurrentContext + } + + #expect(viewModel.activeChannel == ChannelID.mesh) + #expect(uiModel.canSendMediaInCurrentContext) + + uiModel.sendMessage("hello mesh") + + await waitUntil { + transport.sentMessages.last?.content == "hello mesh" + } + + #expect(transport.sentMessages.last?.content == "hello mesh") + } + + @Test("VerificationModel bridges selected conversation and fingerprint actions") + @MainActor + func verificationModelBridgesSelectedConversationAndFingerprintActions() async { + let viewModel = makeArchitectureViewModel() + guard let transport = viewModel.meshService as? MockTransport else { + Issue.record("Expected ChatViewModel meshService to be a MockTransport in architecture tests") + return + } + + let peerID = PeerID(str: "0011223344556677") + let fingerprint = "verified-fingerprint" + let conversationStore = viewModel.conversationStore + let locationChannelsModel = LocationChannelsModel(manager: makeArchitectureLocationManager()) + let privateConversationModel = PrivateConversationModel( + chatViewModel: viewModel, + conversationStore: conversationStore, + locationChannelsModel: locationChannelsModel + ) + let verificationModel = VerificationModel( + chatViewModel: viewModel, + privateConversationModel: privateConversationModel + ) + + transport.peerFingerprints[peerID] = fingerprint + transport.peerNicknames[peerID] = "alice" + viewModel.allPeers = [ + BitchatPeer( + peerID: peerID, + noisePublicKey: Data((0..<32).map(UInt8.init)), + nickname: "alice", + isConnected: true, + isReachable: true + ) + ] + + privateConversationModel.startConversation(with: peerID) + await waitUntil { + verificationModel.selectedPeerID == peerID + } + + let presentation = verificationModel.fingerprintPresentation(for: peerID) + #expect(verificationModel.selectedPeerID == peerID) + #expect(presentation.peerNickname == "alice") + #expect(presentation.theirFingerprint == fingerprint) + #expect(!presentation.myFingerprint.isEmpty) + #expect(!verificationModel.isVerified(peerID: peerID)) + + verificationModel.verifyFingerprint(for: peerID) + await waitUntil { + verificationModel.isVerified(peerID: peerID) + } + #expect(verificationModel.isVerified(peerID: peerID)) + + verificationModel.unverifyFingerprint(for: peerID) + await waitUntil { + !verificationModel.isVerified(peerID: peerID) + } + #expect(!verificationModel.isVerified(peerID: peerID)) + } + + @Test("PeerListModel publishes mesh and geohash directory state") + @MainActor + func peerListModelPublishesDirectoryState() async { + let viewModel = makeArchitectureViewModel() + guard let transport = viewModel.meshService as? MockTransport else { + Issue.record("Expected ChatViewModel meshService to be a MockTransport in architecture tests") + return + } + + let myPeerID = PeerID(str: "me-peer") + let otherPeerID = PeerID(str: "0011223344556677") + let geohash = "9q8yy" + let remoteGeoID = String(repeating: "b", count: 64) + let locationManager = makeArchitectureLocationManager() + let locationChannelsModel = LocationChannelsModel(manager: locationManager) + let otherNoiseKey = Data((0..<32).map(UInt8.init)) + let verifiedFingerprint = otherNoiseKey.sha256Fingerprint() + + transport.myPeerID = myPeerID + transport.peerFingerprints[otherPeerID] = verifiedFingerprint + transport.peerNicknames[otherPeerID] = "alice" + transport.reachablePeers.insert(otherPeerID) + viewModel.nickname = "builder" + viewModel.verifiedFingerprints.insert(verifiedFingerprint) + viewModel.unreadPrivateMessages = Set([otherPeerID]) + transport.updatePeerSnapshots([ + makeArchitectureSnapshot( + peerID: myPeerID, + nickname: "builder", + connected: true, + noisePublicKey: Data(repeating: 0, count: 32) + ), + makeArchitectureSnapshot( + peerID: otherPeerID, + nickname: "alice", + connected: false, + noisePublicKey: otherNoiseKey + ) + ]) + + locationManager.select(.location(GeohashChannel(level: .city, geohash: geohash))) + await waitUntil { + if case .location(let channel) = locationManager.selectedChannel { + return channel.geohash == geohash && !viewModel.allPeers.isEmpty + } + return false + } + + viewModel.participantTracker.setActiveGeohash(geohash) + viewModel.teleportedGeo = Set([remoteGeoID]) + viewModel.participantTracker.recordParticipant(pubkeyHex: remoteGeoID, geohash: geohash) + if let myGeoID = try? viewModel.idBridge.deriveIdentity(forGeohash: geohash).publicKeyHex.lowercased() { + viewModel.participantTracker.recordParticipant(pubkeyHex: myGeoID, geohash: geohash) + } + + let peerListModel = PeerListModel( + chatViewModel: viewModel, + conversationStore: viewModel.conversationStore, + locationChannelsModel: locationChannelsModel + ) + + await waitUntil { + peerListModel.reachableMeshPeerCount == 1 && + peerListModel.connectedMeshPeerCount == 0 && + peerListModel.meshRows.contains(where: { $0.peerID == otherPeerID && $0.hasUnread }) && + peerListModel.geohashPeople.contains(where: { $0.id == remoteGeoID && $0.isTeleported }) + } + + let meshRow = peerListModel.meshRows.first(where: { $0.peerID == otherPeerID }) + #expect(peerListModel.reachableMeshPeerCount == 1) + #expect(peerListModel.connectedMeshPeerCount == 0) + #expect(meshRow?.displayName == "alice") + #expect(meshRow?.showsVerifiedBadgeWhenOffline == true) + #expect(meshRow?.hasUnread == true) + #expect(peerListModel.visibleGeohashPeerCount >= 1) + #expect(peerListModel.participantCount(for: geohash) >= 1) + #expect(peerListModel.geohashPeople.contains(where: { $0.id == remoteGeoID && $0.isTeleported })) + + viewModel.participantTracker.clear() + viewModel.teleportedGeo = [] + locationManager.markTeleported(for: geohash, false) + locationManager.select(ChannelID.mesh) + await waitUntil { + if case ChannelID.mesh = locationManager.selectedChannel { + return true + } + return false + } + } +} diff --git a/bitchatTests/ChatViewModelDeliveryStatusTests.swift b/bitchatTests/ChatViewModelDeliveryStatusTests.swift index 057a97c3..fc87ae6a 100644 --- a/bitchatTests/ChatViewModelDeliveryStatusTests.swift +++ b/bitchatTests/ChatViewModelDeliveryStatusTests.swift @@ -167,6 +167,31 @@ struct ChatViewModelDeliveryStatusTests { }()) } + @Test @MainActor + func cleanupOldReadReceipts_removesReceiptIDsWithoutMessages() async { + let (viewModel, transport) = makeTestableViewModel() + let peerID = PeerID(str: "0102030405060709") + + let message = BitchatMessage( + id: "keep-receipt", + sender: viewModel.nickname, + content: "Keep me", + timestamp: Date(), + isRelay: false, + isPrivate: true, + recipientNickname: "Peer", + senderPeerID: transport.myPeerID, + deliveryStatus: .sent + ) + viewModel.privateChats[peerID] = [message] + viewModel.sentReadReceipts = ["keep-receipt", "drop-receipt"] + viewModel.isStartupPhase = false + + viewModel.cleanupOldReadReceipts() + + #expect(viewModel.sentReadReceipts == ["keep-receipt"]) + } + // MARK: - Public Timeline Status Tests @Test @MainActor diff --git a/bitchatTests/ChatViewModelTests.swift b/bitchatTests/ChatViewModelTests.swift index 1be3b578..d59c911a 100644 --- a/bitchatTests/ChatViewModelTests.swift +++ b/bitchatTests/ChatViewModelTests.swift @@ -67,6 +67,135 @@ struct ChatViewModelInitializationTests { // Nickname should be set during init #expect(!transport.myNickname.isEmpty) } + + @Test @MainActor + func initialization_bindsPeerSnapshotsIntoAllPeers() async { + let (viewModel, transport) = makeTestableViewModel() + let peerID = PeerID(str: "00000000000000a1") + let noiseKey = Data(repeating: 0xAB, count: 32) + + transport.updatePeerSnapshots([ + TransportPeerSnapshot( + peerID: peerID, + nickname: "Alice", + isConnected: true, + noisePublicKey: noiseKey, + lastSeen: Date() + ) + ]) + + let updated = await TestHelpers.waitUntil({ + viewModel.allPeers.contains { $0.peerID == peerID && $0.nickname == "Alice" } + }, timeout: TestConstants.defaultTimeout) + + #expect(updated) + } +} + +// MARK: - Identity Tests + +struct ChatViewModelIdentityTests { + + @Test @MainActor + func updatePrivateChatPeerIfNeeded_migratesSelectionHistoryByFingerprint() async { + let (viewModel, transport) = makeTestableViewModel() + let oldPeerID = PeerID(str: "00000000000000d1") + let newPeerID = PeerID(str: "00000000000000d2") + let sharedFingerprint = "fingerprint-shared" + let sharedNoiseKey = Data(repeating: 0xAB, count: 32) + + transport.peerFingerprints[oldPeerID] = sharedFingerprint + transport.peerFingerprints[newPeerID] = sharedFingerprint + transport.peerNicknames[oldPeerID] = "Alice" + transport.peerNicknames[newPeerID] = "Alice" + transport.updatePeerSnapshots([ + TransportPeerSnapshot( + peerID: oldPeerID, + nickname: "Alice", + isConnected: true, + noisePublicKey: sharedNoiseKey, + lastSeen: Date() + ) + ]) + + let oldPeerBound = await TestHelpers.waitUntil({ + viewModel.connectedPeers.contains(oldPeerID) + }, timeout: TestConstants.defaultTimeout) + #expect(oldPeerBound) + + let existingMessage = BitchatMessage( + id: "pm-migrate-1", + sender: "Alice", + content: "Still here", + timestamp: Date(), + isRelay: false, + originalSender: nil, + isPrivate: true, + recipientNickname: viewModel.nickname, + senderPeerID: oldPeerID, + mentions: nil + ) + viewModel.privateChats[oldPeerID] = [existingMessage] + viewModel.startPrivateChat(with: oldPeerID) + + #expect(viewModel.selectedPrivateChatPeer == oldPeerID) + #expect(viewModel.hasTrackedPrivateChatSelection) + #expect(viewModel.selectedPrivateChatFingerprint == viewModel.getFingerprint(for: oldPeerID)) + + transport.updatePeerSnapshots([ + TransportPeerSnapshot( + peerID: newPeerID, + nickname: "Alice", + isConnected: true, + noisePublicKey: sharedNoiseKey, + lastSeen: Date() + ) + ]) + + let newPeerBound = await TestHelpers.waitUntil({ + viewModel.connectedPeers.contains(newPeerID) && !viewModel.connectedPeers.contains(oldPeerID) + }, timeout: TestConstants.defaultTimeout) + #expect(newPeerBound) + + viewModel.updatePrivateChatPeerIfNeeded() + + #expect(viewModel.selectedPrivateChatPeer == newPeerID) + #expect(viewModel.privateChats[oldPeerID] == nil) + #expect(viewModel.privateChats[newPeerID]?.contains(where: { $0.id == "pm-migrate-1" }) == true) + } + + @Test @MainActor + func resolveNickname_prefersLocalPetnameOverClaimedNickname() async { + let keychain = MockKeychain() + let keychainHelper = MockKeychainHelper() + let idBridge = NostrIdentityBridge(keychain: keychainHelper) + let identityManager = MockIdentityManager(keychain) + let transport = MockTransport() + let viewModel = ChatViewModel( + keychain: keychain, + idBridge: idBridge, + identityManager: identityManager, + transport: transport + ) + let peerID = PeerID(str: "00000000000000d3") + let fingerprint = "fingerprint-petname" + + transport.peerFingerprints[peerID] = fingerprint + identityManager.updateSocialIdentity( + SocialIdentity( + fingerprint: fingerprint, + localPetname: "Buddy", + claimedNickname: "Alice", + trustLevel: .trusted, + isFavorite: false, + isBlocked: false, + notes: nil + ) + ) + + #expect(viewModel.getFingerprint(for: peerID) == fingerprint) + #expect(viewModel.resolveNickname(for: peerID) == "Buddy") + } } // MARK: - Message Sending Tests @@ -135,6 +264,116 @@ struct ChatViewModelCommandTests { } } +// MARK: - Composer Tests + +struct ChatViewModelComposerTests { + + @Test @MainActor + func updateAutocomplete_suggestsKnownPeersAndExcludesSelf() async { + let (viewModel, transport) = makeTestableViewModel() + let alice = PeerID(str: "00000000000000a1") + let selfAlias = PeerID(str: "00000000000000a2") + + transport.simulateConnect(alice, nickname: "Alice") + transport.simulateConnect(selfAlias, nickname: viewModel.nickname) + + viewModel.updateAutocomplete(for: "hello @Al", cursorPosition: 9) + + #expect(viewModel.showAutocomplete) + #expect(viewModel.autocompleteSuggestions == ["@Alice"]) + } + + @Test @MainActor + func completeNickname_replacesTokenAndClearsAutocompleteState() async { + let (viewModel, _) = makeTestableViewModel() + var text = "hello @Al" + + viewModel.autocompleteSuggestions = ["@Alice"] + viewModel.autocompleteRange = NSRange(location: 6, length: 3) + viewModel.showAutocomplete = true + viewModel.selectedAutocompleteIndex = 0 + + _ = viewModel.completeNickname("@Alice", in: &text) + + #expect(text == "hello @Alice") + #expect(viewModel.autocompleteSuggestions.isEmpty) + #expect(viewModel.autocompleteRange == nil) + #expect(!viewModel.showAutocomplete) + #expect(viewModel.selectedAutocompleteIndex == 0) + } + + @Test @MainActor + func parseMentions_filtersToKnownPeerAndSelfTokens() async { + let (viewModel, transport) = makeTestableViewModel() + let alice = PeerID(str: "00000000000000b1") + + transport.simulateConnect(alice, nickname: "Alice") + + let mentions = Set( + viewModel.parseMentions( + from: "hi @Alice @nobody @\(viewModel.nickname)" + ) + ) + + #expect(mentions.contains("Alice")) + #expect(mentions.contains(viewModel.nickname)) + #expect(!mentions.contains("nobody")) + } +} + +// MARK: - Lifecycle Tests + +struct ChatViewModelServiceLifecycleTests { + + @Test @MainActor + func handleDidBecomeActive_marksVisiblePrivateMessagesAsRead() async { + let (viewModel, transport) = makeTestableViewModel() + let peerID = PeerID(str: "0000000000000001") + transport.simulateConnect(peerID, nickname: "Alice") + + let message = BitchatMessage( + id: "read-1", + sender: "Alice", + content: "Hello from Alice", + timestamp: Date(), + isRelay: false, + originalSender: nil, + isPrivate: true, + recipientNickname: viewModel.nickname, + senderPeerID: peerID, + mentions: nil + ) + + viewModel.privateChats[peerID] = [message] + viewModel.unreadPrivateMessages.insert(peerID) + viewModel.selectedPrivateChatPeer = peerID + + viewModel.handleDidBecomeActive() + + let sentReadReceipt = await TestHelpers.waitUntil({ + transport.sentReadReceipts.contains { + $0.peerID == peerID && $0.receipt.originalMessageID == "read-1" + } + }, timeout: TestConstants.defaultTimeout) + + #expect(sentReadReceipt) + #expect(!viewModel.unreadPrivateMessages.contains(peerID)) + } + + @Test @MainActor + func handleScreenshotCaptured_privateChatAddsLocalNoticeWithoutSession() async { + let (viewModel, transport) = makeTestableViewModel() + let peerID = PeerID(str: "0000000000000002") + transport.simulateConnect(peerID, nickname: "Alice") + + viewModel.selectedPrivateChatPeer = peerID + viewModel.handleScreenshotCaptured() + + #expect(transport.sentPrivateMessages.isEmpty) + #expect(viewModel.privateChats[peerID]?.last?.content == "you took a screenshot") + } +} + // MARK: - Timeline Cap Tests struct ChatViewModelTimelineCapTests { @@ -159,7 +398,7 @@ struct ChatViewModelReceivingTests { @Test @MainActor func didReceiveMessage_callsDelegate() async { - let (_, transport) = makeTestableViewModel() + let (viewModel, transport) = makeTestableViewModel() let message = BitchatMessage( id: "msg-001", @@ -181,7 +420,7 @@ struct ChatViewModelReceivingTests { // Message may or may not appear due to rate limiting/pipeline batching // The important thing is no crash and delegate was called - #expect(transport.delegate != nil) + #expect(transport.delegate === viewModel) } @Test @MainActor @@ -204,6 +443,176 @@ struct ChatViewModelReceivingTests { } } +// MARK: - Noise Payload Tests + +struct ChatViewModelNoisePayloadTests { + + @Test @MainActor + func didReceiveNoisePayload_privateMessageStoresMessageAndSendsDeliveryAck() async { + let (viewModel, transport) = makeTestableViewModel() + let peerID = PeerID(str: "0000000000000003") + transport.simulateConnect(peerID, nickname: "Alice") + + let payload = PrivateMessagePacket(messageID: "pm-noise-1", content: "Secret hello").encode() + #expect(payload != nil) + guard let payload else { return } + + viewModel.didReceiveNoisePayload( + from: peerID, + type: .privateMessage, + payload: payload, + timestamp: Date() + ) + + let stored = await TestHelpers.waitUntil({ + viewModel.privateChats[peerID]?.contains(where: { $0.id == "pm-noise-1" && $0.content == "Secret hello" }) == true + }, timeout: TestConstants.defaultTimeout) + + let acked = await TestHelpers.waitUntil({ + transport.sentDeliveryAcks.contains { $0.messageID == "pm-noise-1" && $0.peerID == peerID } + }, timeout: TestConstants.defaultTimeout) + + #expect(stored) + #expect(acked) + } + + @Test @MainActor + func didReceiveNoisePayload_deliveredUpdatesExistingPrivateMessageStatus() async { + let (viewModel, transport) = makeTestableViewModel() + let peerID = PeerID(str: "0000000000000004") + transport.simulateConnect(peerID, nickname: "Bob") + + let message = BitchatMessage( + id: "pm-delivered-1", + sender: viewModel.nickname, + content: "Waiting on ack", + timestamp: Date(), + isRelay: false, + originalSender: nil, + isPrivate: true, + recipientNickname: "Bob", + senderPeerID: viewModel.meshService.myPeerID, + mentions: nil, + deliveryStatus: .sent + ) + viewModel.privateChats[peerID] = [message] + + viewModel.didReceiveNoisePayload( + from: peerID, + type: .delivered, + payload: Data("pm-delivered-1".utf8), + timestamp: Date() + ) + + let delivered = await TestHelpers.waitUntil({ + guard let status = viewModel.privateChats[peerID]?.first?.deliveryStatus else { return false } + if case .delivered(let name, _) = status { + return name == "Bob" + } + return false + }, timeout: TestConstants.defaultTimeout) + + #expect(delivered) + } +} + +// MARK: - Formatting Tests + +struct ChatViewModelFormattingTests { + + @Test @MainActor + func formatMessageAsText_formatsSenderContentAndTimestamp() async { + let (viewModel, _) = makeTestableViewModel() + let message = BitchatMessage( + id: "fmt-1", + sender: "Alice#a1b2", + content: "hello #mesh", + timestamp: Date(timeIntervalSince1970: 1_700_010_000), + isRelay: false, + senderPeerID: PeerID(str: "00000000000000b1") + ) + + let formatted = viewModel.formatMessageAsText(message, colorScheme: .light) + + #expect(String(formatted.characters) == "<@Alice#a1b2> hello #mesh [\(message.formattedTimestamp)]") + } + + @Test @MainActor + func formatMessageHeader_formatsSenderHeader() async { + let (viewModel, _) = makeTestableViewModel() + let message = BitchatMessage( + id: "fmt-2", + sender: "Alice#a1b2", + content: "hello", + timestamp: Date(), + isRelay: false, + senderPeerID: PeerID(str: "00000000000000b2") + ) + + let header = viewModel.formatMessageHeader(message, colorScheme: .dark) + + #expect(String(header.characters) == "<@Alice#a1b2> ") + } +} + +// MARK: - Verification Tests + +struct ChatViewModelVerificationTests { + + @Test @MainActor + func beginQRVerification_unknownNoiseKeyReturnsFalse() async { + let (viewModel, _) = makeTestableViewModel() + let qr = VerificationService.VerificationQR( + v: 1, + noiseKeyHex: String(repeating: "a", count: 64), + signKeyHex: String(repeating: "b", count: 64), + npub: nil, + nickname: "Alice", + ts: 1_700_000_000, + nonceB64: "nonce", + sigHex: "sig" + ) + + #expect(!viewModel.beginQRVerification(with: qr)) + } + + @Test @MainActor + func beginQRVerification_knownPeerTriggersHandshakeWhenSessionNotEstablished() async { + let (viewModel, transport) = makeTestableViewModel() + let peerID = PeerID(str: "00000000000000c1") + let noiseKey = Data(repeating: 0xAB, count: 32) + + transport.updatePeerSnapshots([ + TransportPeerSnapshot( + peerID: peerID, + nickname: "Alice", + isConnected: true, + noisePublicKey: noiseKey, + lastSeen: Date() + ) + ]) + + let bound = await TestHelpers.waitUntil({ + viewModel.unifiedPeerService.peers.contains { $0.peerID == peerID } + }, timeout: TestConstants.defaultTimeout) + #expect(bound) + + let qr = VerificationService.VerificationQR( + v: 1, + noiseKeyHex: noiseKey.hexEncodedString(), + signKeyHex: String(repeating: "c", count: 64), + npub: nil, + nickname: "Alice", + ts: 1_700_000_000, + nonceB64: "nonce", + sigHex: "sig" + ) + + #expect(viewModel.beginQRVerification(with: qr)) + #expect(transport.triggeredHandshakes == [peerID]) + } +} + // MARK: - Rate Limiting Tests struct ChatViewModelRateLimitingTests { @@ -238,6 +647,35 @@ struct ChatViewModelRateLimitingTests { } } +// MARK: - Public Conversation Tests + +struct ChatViewModelPublicConversationTests { + + @Test @MainActor + func addPublicSystemMessage_persistsAcrossTimelineRefresh() async { + let (viewModel, _) = makeTestableViewModel() + + viewModel.addPublicSystemMessage("system refresh test") + viewModel.messages.removeAll() + viewModel.refreshVisibleMessages(from: .mesh) + + #expect(viewModel.messages.last?.content == "system refresh test") + } + + @Test @MainActor + func clearCurrentPublicTimeline_clearsVisibleAndBackedMessages() async { + let (viewModel, _) = makeTestableViewModel() + + viewModel.addPublicSystemMessage("system clear test") + #expect(!viewModel.messages.isEmpty) + + viewModel.clearCurrentPublicTimeline() + viewModel.refreshVisibleMessages(from: .mesh) + + #expect(viewModel.messages.isEmpty) + } +} + // MARK: - Peer Connection Tests struct ChatViewModelPeerTests { @@ -275,6 +713,46 @@ struct ChatViewModelPeerTests { #expect(transport.isPeerConnected(peerID)) } + + @Test @MainActor + func didUpdatePeerList_removesStaleUnreadPeerWithoutMessages() async { + let (viewModel, _) = makeTestableViewModel() + let stalePeer = PeerID(str: "00000000000000a2") + viewModel.unreadPrivateMessages = [stalePeer] + + viewModel.didUpdatePeerList([]) + + let cleaned = await TestHelpers.waitUntil({ + !viewModel.unreadPrivateMessages.contains(stalePeer) + }, timeout: TestConstants.defaultTimeout) + + #expect(cleaned) + } + + @Test @MainActor + func didUpdatePeerList_preservesStableUnreadPeerWhenMessagesExist() async { + let (viewModel, _) = makeTestableViewModel() + let stablePeer = PeerID(str: String(repeating: "a", count: 64)) + let message = BitchatMessage( + id: "stable-noise-1", + sender: "Alice", + content: "Offline hello", + timestamp: Date(), + isRelay: false, + originalSender: nil, + isPrivate: true, + recipientNickname: viewModel.nickname, + senderPeerID: stablePeer, + mentions: nil + ) + viewModel.privateChats[stablePeer] = [message] + viewModel.unreadPrivateMessages = [stablePeer] + + viewModel.didUpdatePeerList([]) + try? await Task.sleep(nanoseconds: 100_000_000) + + #expect(viewModel.unreadPrivateMessages.contains(stablePeer)) + } } // MARK: - Deduplication Integration Tests @@ -328,7 +806,7 @@ struct ChatViewModelPrivateChatTests { // The message routing depends on connection state and other factors // At minimum, it should not crash - #expect(true) // If we get here without crash, the test passes + #expect(Bool(true)) // If we get here without crash, the test passes } } diff --git a/bitchatTests/CommandProcessorTests.swift b/bitchatTests/CommandProcessorTests.swift index 12e57d27..214d675f 100644 --- a/bitchatTests/CommandProcessorTests.swift +++ b/bitchatTests/CommandProcessorTests.swift @@ -53,7 +53,7 @@ struct CommandProcessorTests { context.nicknameToPeerID["alice"] = peerID let processor = CommandProcessor(contextProvider: context, meshService: nil, identityManager: identityManager) - let result = await withSelectedChannel(.mesh) { + let result = await withSelectedChannel(.mesh, context: context) { processor.process("/msg @alice hello there") } @@ -72,14 +72,15 @@ struct CommandProcessorTests { @MainActor @Test func whoInMeshListsSortedPeerNicknames() async { let identityManager = MockIdentityManager(MockKeychain()) + let context = MockCommandContextProvider() let transport = MockTransport() transport.peerNicknames = [ PeerID(str: "b"): "bob", PeerID(str: "a"): "alice" ] - let processor = CommandProcessor(contextProvider: MockCommandContextProvider(), meshService: transport, identityManager: identityManager) + let processor = CommandProcessor(contextProvider: context, meshService: transport, identityManager: identityManager) - let result = await withSelectedChannel(.mesh) { + let result = await withSelectedChannel(.mesh, context: context) { processor.process("/who") } @@ -105,7 +106,7 @@ struct CommandProcessorTests { let processor = CommandProcessor(contextProvider: context, meshService: MockTransport(), identityManager: identityManager) let channel = ChannelID.location(GeohashChannel(level: .city, geohash: geohash)) - let result = await withSelectedChannel(channel) { + let result = await withSelectedChannel(channel, context: context) { processor.process("/who") } @@ -130,7 +131,7 @@ struct CommandProcessorTests { ] let processor = CommandProcessor(contextProvider: context, meshService: nil, identityManager: identityManager) - let result = await withSelectedChannel(.mesh) { + let result = await withSelectedChannel(.mesh, context: context) { processor.process("/clear") } @@ -150,7 +151,7 @@ struct CommandProcessorTests { let context = MockCommandContextProvider() let processor = CommandProcessor(contextProvider: context, meshService: nil, identityManager: identityManager) - let result = await withSelectedChannel(.mesh) { + let result = await withSelectedChannel(.mesh, context: context) { processor.process("/clear") } @@ -174,7 +175,7 @@ struct CommandProcessorTests { transport.peerNicknames[peerID] = "Bob" let processor = CommandProcessor(contextProvider: context, meshService: transport, identityManager: identityManager) - let result = await withSelectedChannel(.mesh) { + let result = await withSelectedChannel(.mesh, context: context) { processor.process("/hug @bob") } @@ -198,7 +199,7 @@ struct CommandProcessorTests { context.nicknameToPeerID["bob"] = peerID let processor = CommandProcessor(contextProvider: context, meshService: MockTransport(), identityManager: identityManager) - let result = await withSelectedChannel(.mesh) { + let result = await withSelectedChannel(.mesh, context: context) { processor.process("/slap @bob") } @@ -227,7 +228,7 @@ struct CommandProcessorTests { identityManager.setNostrBlocked(String(repeating: "c", count: 64), isBlocked: true) let processor = CommandProcessor(contextProvider: context, meshService: transport, identityManager: identityManager) - let result = await withSelectedChannel(.mesh) { + let result = await withSelectedChannel(.mesh, context: context) { processor.process("/block") } @@ -249,7 +250,7 @@ struct CommandProcessorTests { context.nicknameToPeerID["bob"] = peerID let processor = CommandProcessor(contextProvider: context, meshService: transport, identityManager: identityManager) - let blockResult = await withSelectedChannel(.mesh) { + let blockResult = await withSelectedChannel(.mesh, context: context) { processor.process("/block @bob") } switch blockResult { @@ -260,7 +261,7 @@ struct CommandProcessorTests { } #expect(identityManager.isBlocked(fingerprint: "fp-bob")) - let unblockResult = await withSelectedChannel(.mesh) { + let unblockResult = await withSelectedChannel(.mesh, context: context) { processor.process("/unblock bob") } switch unblockResult { @@ -279,7 +280,7 @@ struct CommandProcessorTests { context.displayNameToNostrPubkey["carol"] = String(repeating: "d", count: 64) let processor = CommandProcessor(contextProvider: context, meshService: MockTransport(), identityManager: identityManager) - let blockResult = await withSelectedChannel(.mesh) { + let blockResult = await withSelectedChannel(.mesh, context: context) { processor.process("/block carol") } switch blockResult { @@ -290,7 +291,7 @@ struct CommandProcessorTests { } #expect(identityManager.isNostrBlocked(pubkeyHexLowercased: String(repeating: "d", count: 64))) - let unblockResult = await withSelectedChannel(.mesh) { + let unblockResult = await withSelectedChannel(.mesh, context: context) { processor.process("/unblock @carol") } switch unblockResult { @@ -305,14 +306,15 @@ struct CommandProcessorTests { @MainActor @Test func favoriteCommandIsRejectedOutsideMesh() async { let identityManager = MockIdentityManager(MockKeychain()) + let context = MockCommandContextProvider() let processor = CommandProcessor( - contextProvider: MockCommandContextProvider(), + contextProvider: context, meshService: MockTransport(), identityManager: identityManager ) let channel = ChannelID.location(GeohashChannel(level: .city, geohash: "u4pruy")) - let result = await withSelectedChannel(channel) { + let result = await withSelectedChannel(channel, context: context) { processor.process("/fav alice") } @@ -325,21 +327,31 @@ struct CommandProcessorTests { } @MainActor - private func withSelectedChannel(_ channel: ChannelID, perform work: @escaping () throws -> T) async rethrows -> T { + private func withSelectedChannel( + _ channel: ChannelID, + context: MockCommandContextProvider? = nil, + perform work: @escaping () throws -> T + ) async rethrows -> T { let originalChannel = LocationChannelManager.shared.selectedChannel - await setSelectedChannel(channel) + let originalContextChannel = context?.activeChannel + await setSelectedChannel(channel, context: context) do { let result = try work() - await setSelectedChannel(originalChannel) + await setSelectedChannel(originalChannel, context: context, explicitChannel: originalContextChannel) return result } catch { - await setSelectedChannel(originalChannel) + await setSelectedChannel(originalChannel, context: context, explicitChannel: originalContextChannel) throw error } } @MainActor - private func setSelectedChannel(_ channel: ChannelID) async { + private func setSelectedChannel( + _ channel: ChannelID, + context: MockCommandContextProvider? = nil, + explicitChannel: ChannelID? = nil + ) async { + context?.activeChannel = explicitChannel ?? channel LocationChannelManager.shared.select(channel) for _ in 0..<40 { if LocationChannelManager.shared.selectedChannel == channel { @@ -363,6 +375,7 @@ struct CommandProcessorTests { @MainActor private final class MockCommandContextProvider: CommandContextProvider { var nickname: String + var activeChannel: ChannelID = .mesh var selectedPrivateChatPeer: PeerID? var blockedUsers: Set = [] var privateChats: [PeerID: [BitchatMessage]] = [:] diff --git a/bitchatTests/Fragmentation/FragmentationTests.swift b/bitchatTests/Fragmentation/FragmentationTests.swift index c645b1f9..59fdc364 100644 --- a/bitchatTests/Fragmentation/FragmentationTests.swift +++ b/bitchatTests/Fragmentation/FragmentationTests.swift @@ -12,26 +12,12 @@ import CoreBluetooth import BitFoundation @testable import bitchat +@Suite("Fragmentation Tests", .serialized) struct FragmentationTests { - - private let mockKeychain: MockKeychain - private let mockIdentityManager: MockIdentityManager - private let idBridge: NostrIdentityBridge - - init() { - mockKeychain = MockKeychain() - mockIdentityManager = MockIdentityManager(mockKeychain) - idBridge = NostrIdentityBridge(keychain: MockKeychainHelper()) - } - + @Test("Reassembly from fragments delivers a public message") func reassemblyFromFragmentsDeliversPublicMessage() async throws { - let ble = BLEService( - keychain: mockKeychain, - idBridge: idBridge, - identityManager: mockIdentityManager, - initializeBluetoothManagers: false - ) + let ble = makeBLEService() let capture = CaptureDelegate() ble.delegate = capture @@ -54,7 +40,7 @@ struct FragmentationTests { } // Wait for delegate callback with proper timeout - try await capture.waitForPublicMessages(count: 1, timeout: .seconds(2)) + try await capture.waitForPublicMessages(count: 1, timeout: .seconds(5)) #expect(capture.publicMessages.count == 1) #expect(capture.publicMessages.first?.content.count == 3_000) @@ -62,12 +48,7 @@ struct FragmentationTests { @Test("Duplicate fragment does not break reassembly") func duplicateFragmentDoesNotBreakReassembly() async throws { - let ble = BLEService( - keychain: mockKeychain, - idBridge: idBridge, - identityManager: mockIdentityManager, - initializeBluetoothManagers: false - ) + let ble = makeBLEService() let capture = CaptureDelegate() ble.delegate = capture @@ -89,7 +70,7 @@ struct FragmentationTests { } // Wait for delegate callback with proper timeout - try await capture.waitForPublicMessages(count: 1, timeout: .seconds(2)) + try await capture.waitForPublicMessages(count: 1, timeout: .seconds(5)) #expect(capture.publicMessages.count == 1) #expect(capture.publicMessages.first?.content.count == 2048) @@ -97,12 +78,7 @@ struct FragmentationTests { @Test("Max-sized file transfer survives reassembly") func maxSizedFileTransferSurvivesReassembly() async throws { - let ble = BLEService( - keychain: mockKeychain, - idBridge: idBridge, - identityManager: mockIdentityManager, - initializeBluetoothManagers: false - ) + let ble = makeBLEService() let capture = CaptureDelegate() ble.delegate = capture @@ -131,14 +107,13 @@ struct FragmentationTests { #expect(!fragments.isEmpty) for (i, fragment) in fragments.enumerated() { - let delay = 5 * Double(i) * 0.001 - Task { - try await sleep(delay) - ble._test_handlePacket(fragment, fromPeerID: remoteID) + if i > 0 { + try await Task.sleep(for: .milliseconds(5)) } + ble._test_handlePacket(fragment, fromPeerID: remoteID) } - try await capture.waitForReceivedMessages(count: 1, timeout: .seconds(2)) + try await capture.waitForReceivedMessages(count: 1, timeout: .seconds(5)) let message = try #require(capture.receivedMessages.first, "Expected file transfer message") #expect(message.content.hasPrefix("[file]")) @@ -154,12 +129,7 @@ struct FragmentationTests { @Test("Invalid fragment header is ignored") func invalidFragmentHeaderIsIgnored() async throws { - let ble = BLEService( - keychain: mockKeychain, - idBridge: idBridge, - identityManager: mockIdentityManager, - initializeBluetoothManagers: false - ) + let ble = makeBLEService() let capture = CaptureDelegate() ble.delegate = capture @@ -184,11 +154,10 @@ struct FragmentationTests { } for (i, fragment) in corrupted.enumerated() { - let delay = 5 * Double(i) * 0.001 - Task { - try await sleep(delay) - ble._test_handlePacket(fragment, fromPeerID: remoteShortID) + if i > 0 { + try await Task.sleep(for: .milliseconds(5)) } + ble._test_handlePacket(fragment, fromPeerID: remoteShortID) } // Allow async processing @@ -200,6 +169,19 @@ struct FragmentationTests { } extension FragmentationTests { + private func makeBLEService() -> BLEService { + let mockKeychain = MockKeychain() + let mockIdentityManager = MockIdentityManager(mockKeychain) + let idBridge = NostrIdentityBridge(keychain: MockKeychainHelper()) + + return BLEService( + keychain: mockKeychain, + idBridge: idBridge, + identityManager: mockIdentityManager, + initializeBluetoothManagers: false + ) + } + /// Thread-safe delegate that supports awaiting message delivery private final class CaptureDelegate: BitchatDelegate, @unchecked Sendable { private let lock = NSLock() diff --git a/bitchatTests/Services/NostrRelayManagerTests.swift b/bitchatTests/Services/NostrRelayManagerTests.swift index 5d3ce8df..ee9fb3d2 100644 --- a/bitchatTests/Services/NostrRelayManagerTests.swift +++ b/bitchatTests/Services/NostrRelayManagerTests.swift @@ -4,6 +4,8 @@ import XCTest @MainActor final class NostrRelayManagerTests: XCTestCase { + private let expectedDefaultRelayCount = 4 + func test_connect_directMode_connectsExistingDefaultRelaysWhenActivationBecomesAllowed() async { let context = makeContext(permission: .authorized, activationAllowed: false) @@ -13,7 +15,7 @@ final class NostrRelayManagerTests: XCTestCase { context.manager.connect() let connected = await waitUntil { - context.sessionFactory.requestedURLs.count == 5 && + context.sessionFactory.requestedURLs.count == self.expectedDefaultRelayCount && context.manager.relays.allSatisfy(\.isConnected) } XCTAssertTrue(connected) @@ -27,7 +29,7 @@ final class NostrRelayManagerTests: XCTestCase { context.permissionSubject.send(.authorized) let defaultRelaysConnected = await waitUntil { - context.manager.getRelayStatuses().count == 5 && + context.manager.getRelayStatuses().count == self.expectedDefaultRelayCount && context.manager.relays.allSatisfy(\.isConnected) } XCTAssertTrue(defaultRelaysConnected) @@ -38,7 +40,7 @@ final class NostrRelayManagerTests: XCTestCase { context.manager.getRelayStatuses().isEmpty } XCTAssertTrue(defaultRelaysRemoved) - XCTAssertEqual(context.sessionFactory.allConnections.count, 5) + XCTAssertEqual(context.sessionFactory.allConnections.count, expectedDefaultRelayCount) XCTAssertTrue(context.sessionFactory.allConnections.allSatisfy { $0.cancelCallCount >= 1 }) } @@ -52,7 +54,26 @@ final class NostrRelayManagerTests: XCTestCase { context.torWaiter.resolve(true) let connectedAfterTorReady = await waitUntil { - context.sessionFactory.requestedURLs.count == 5 && + context.sessionFactory.requestedURLs.count == self.expectedDefaultRelayCount && + context.manager.relays.allSatisfy(\.isConnected) + } + XCTAssertTrue(connectedAfterTorReady) + } + + func test_connect_coalescesRepeatedCallsWhileWaitingForTor() async { + let context = makeContext(permission: .authorized, userTorEnabled: true, torEnforced: true, torIsReady: false) + + context.manager.connect() + context.manager.connect() + context.manager.connect() + + XCTAssertEqual(context.torWaiter.awaitCallCount, 1) + XCTAssertTrue(context.sessionFactory.requestedURLs.isEmpty) + + context.torWaiter.resolve(true) + + let connectedAfterTorReady = await waitUntil { + context.sessionFactory.requestedURLs.count == self.expectedDefaultRelayCount && context.manager.relays.allSatisfy(\.isConnected) } XCTAssertTrue(connectedAfterTorReady) @@ -87,6 +108,24 @@ final class NostrRelayManagerTests: XCTestCase { XCTAssertTrue(sentAfterTorReady) } + func test_sendEvent_queuesUntilRelayIsMarkedConnected() async throws { + let relayURL = "wss://connect-before-send.example" + let context = makeContext(permission: .denied) + let event = try makeSignedEvent(content: "wait for connected") + + context.manager.sendEvent(event, to: [relayURL]) + + XCTAssertEqual(context.sessionFactory.latestConnection(for: relayURL)?.sentStrings.count, 0) + XCTAssertEqual(context.manager.debugPendingMessageQueueCount, 1) + + let sentAfterConnected = await waitUntil { + context.sessionFactory.latestConnection(for: relayURL)?.sentStrings.count == 1 && + context.manager.debugPendingMessageQueueCount == 0 && + context.manager.relays.first(where: { $0.url == relayURL })?.messagesSent == 1 + } + XCTAssertTrue(sentAfterConnected) + } + func test_sendEvent_queuesWhileBackgroundedAndFlushesWhenForegrounded() async throws { let relayURL = "wss://queue-flush.example" let context = makeContext( @@ -179,6 +218,26 @@ final class NostrRelayManagerTests: XCTestCase { XCTAssertEqual(context.sessionFactory.requestedURLs, [relayOne, relayTwo]) } + func test_ensureConnections_coalescesTargetsWhileWaitingForTor() async { + let relayOne = "wss://tor-one.example" + let relayTwo = "wss://tor-two.example" + let context = makeContext(permission: .denied, userTorEnabled: true, torEnforced: true, torIsReady: false) + + context.manager.ensureConnections(to: [relayOne]) + context.manager.ensureConnections(to: [relayTwo, relayOne]) + + XCTAssertEqual(context.torWaiter.awaitCallCount, 1) + XCTAssertTrue(context.sessionFactory.requestedURLs.isEmpty) + + context.torWaiter.resolve(true) + + let connected = await waitUntil { + Set(context.sessionFactory.requestedURLs) == Set([relayOne, relayTwo]) && + context.manager.relays.allSatisfy(\.isConnected) + } + XCTAssertTrue(connected) + } + func test_subscribe_coalescesRapidDuplicateRequests() async { let relayURL = "wss://subscribe.example" let context = makeContext(permission: .denied) @@ -197,6 +256,63 @@ final class NostrRelayManagerTests: XCTestCase { XCTAssertEqual(context.sessionFactory.latestConnection(for: relayURL)?.sentStrings.count, 1) } + func test_subscribe_coalescesDuplicateRequestsBeforeTorReadyAndDefersEOSE() async throws { + let relayURL = "wss://tor-subscribe-coalesce.example" + let context = makeContext(permission: .denied, userTorEnabled: true, torEnforced: true, torIsReady: false) + var eoseCount = 0 + + context.manager.subscribe( + filter: makeFilter(), + id: "tor-sub", + relayUrls: [relayURL], + handler: { _ in }, + onEOSE: { eoseCount += 1 } + ) + context.manager.subscribe( + filter: makeFilter(), + id: "tor-sub", + relayUrls: [relayURL], + handler: { _ in }, + onEOSE: { eoseCount += 1 } + ) + + XCTAssertEqual(context.torWaiter.awaitCallCount, 1) + XCTAssertEqual(context.manager.debugPendingSubscriptionCount(for: relayURL), 1) + try? await Task.sleep(nanoseconds: 20_000_000) + XCTAssertEqual(eoseCount, 0) + + context.torWaiter.resolve(true) + + let subscribed = await waitUntil { + context.sessionFactory.latestConnection(for: relayURL)?.sentStrings.count == 1 + } + XCTAssertTrue(subscribed) + + try context.sessionFactory.latestConnection(for: relayURL)?.emitEOSE(subscriptionID: "tor-sub") + let eoseCompleted = await waitUntil { eoseCount == 1 } + XCTAssertTrue(eoseCompleted) + } + + func test_subscribe_sameActiveRequestDoesNotRequeue() async { + let relayURL = "wss://active-subscribe.example" + let context = makeContext(permission: .denied) + let filter = makeFilter() + + context.manager.subscribe(filter: filter, id: "sub", relayUrls: [relayURL], handler: { _ in }) + + let firstSent = await waitUntil { + context.sessionFactory.latestConnection(for: relayURL)?.sentStrings.count == 1 + } + XCTAssertTrue(firstSent) + + context.clock.now = context.clock.now.addingTimeInterval(2.0) + context.manager.subscribe(filter: filter, id: "sub", relayUrls: [relayURL], handler: { _ in }) + try? await Task.sleep(nanoseconds: 20_000_000) + + XCTAssertEqual(context.sessionFactory.latestConnection(for: relayURL)?.sentStrings.count, 1) + XCTAssertEqual(context.manager.debugPendingSubscriptionCount(for: relayURL), 0) + } + func test_subscribe_waitsForTorReadinessAndPreservesEOSECallback() async throws { let relayURL = "wss://tor-subscribe.example" let context = makeContext(permission: .denied, userTorEnabled: true, torEnforced: true, torIsReady: false) @@ -239,7 +355,7 @@ final class NostrRelayManagerTests: XCTestCase { context.permissionSubject.send(.authorized) let connected = await waitUntil { - context.sessionFactory.allConnections.count == 5 && + context.sessionFactory.allConnections.count == self.expectedDefaultRelayCount && context.manager.relays.allSatisfy(\.isConnected) } XCTAssertTrue(connected) @@ -810,6 +926,7 @@ private final class MutableBool { private final class MockTorWaiter { private var completions: [(Bool) -> Void] = [] + private(set) var awaitCallCount = 0 var isReady: Bool init(isReady: Bool) { @@ -817,6 +934,7 @@ private final class MockTorWaiter { } func await(completion: @escaping (Bool) -> Void) { + awaitCallCount += 1 completions.append(completion) } diff --git a/bitchatTests/ViewSmokeTests.swift b/bitchatTests/ViewSmokeTests.swift index cdf9a8df..9a2aaef3 100644 --- a/bitchatTests/ViewSmokeTests.swift +++ b/bitchatTests/ViewSmokeTests.swift @@ -29,6 +29,151 @@ private func makeSmokeViewModel() -> (viewModel: ChatViewModel, transport: MockT return (viewModel, transport, identityManager) } +@MainActor +private struct SmokeFeatureModels { + let publicChatModel: PublicChatModel + let appChromeModel: AppChromeModel + let locationChannelsModel: LocationChannelsModel + let privateInboxModel: PrivateInboxModel + let privateConversationModel: PrivateConversationModel + let verificationModel: VerificationModel + let conversationUIModel: ConversationUIModel + let peerListModel: PeerListModel +} + +@MainActor +private func makeSmokeLocationManager() -> LocationChannelManager { + let suiteName = "ViewSmokeTests.\(UUID().uuidString)" + let storage = UserDefaults(suiteName: suiteName) ?? .standard + storage.removePersistentDomain(forName: suiteName) + return LocationChannelManager(storage: storage) +} + +@MainActor +private func makeSmokeFeatureModels(for viewModel: ChatViewModel) -> SmokeFeatureModels { + let locationManager = makeSmokeLocationManager() + let conversationStore = viewModel.conversationStore + let publicChatModel = PublicChatModel(conversationStore: conversationStore) + let locationChannelsModel = LocationChannelsModel(manager: locationManager) + let privateInboxModel = PrivateInboxModel(conversationStore: conversationStore) + let appChromeModel = AppChromeModel( + chatViewModel: viewModel, + privateInboxModel: privateInboxModel + ) + let privateConversationModel = PrivateConversationModel( + chatViewModel: viewModel, + conversationStore: conversationStore, + locationChannelsModel: locationChannelsModel + ) + let verificationModel = VerificationModel( + chatViewModel: viewModel, + privateConversationModel: privateConversationModel + ) + let conversationUIModel = ConversationUIModel( + chatViewModel: viewModel, + privateConversationModel: privateConversationModel, + conversationStore: conversationStore + ) + let peerListModel = PeerListModel( + chatViewModel: viewModel, + conversationStore: conversationStore, + locationChannelsModel: locationChannelsModel + ) + + return SmokeFeatureModels( + publicChatModel: publicChatModel, + appChromeModel: appChromeModel, + locationChannelsModel: locationChannelsModel, + privateInboxModel: privateInboxModel, + privateConversationModel: privateConversationModel, + verificationModel: verificationModel, + conversationUIModel: conversationUIModel, + peerListModel: peerListModel + ) +} + +@MainActor +private func installSmokeEnvironment( + _ view: V, + featureModels: SmokeFeatureModels +) -> some View { + view + .environmentObject(featureModels.publicChatModel) + .environmentObject(featureModels.appChromeModel) + .environmentObject(featureModels.locationChannelsModel) + .environmentObject(featureModels.privateInboxModel) + .environmentObject(featureModels.privateConversationModel) + .environmentObject(featureModels.verificationModel) + .environmentObject(featureModels.conversationUIModel) + .environmentObject(featureModels.peerListModel) +} + +@MainActor +private struct ContentPeopleSheetHarness: View { + @State private var showSidebar = true + @State private var messageText = "" + @State private var selectedMessageSender: String? + @State private var selectedMessageSenderID: PeerID? + @State private var imagePreviewURL: URL? + @State private var windowCountPublic = 300 + @State private var windowCountPrivate: [PeerID: Int] = [:] + @State private var isAtBottomPrivate = true + @State private var autocompleteDebounceTimer: Timer? + @StateObject private var voiceRecordingVM = VoiceRecordingViewModel() + @FocusState private var isTextFieldFocused: Bool + #if os(iOS) + @State private var showImagePicker = false + @State private var imagePickerSourceType: UIImagePickerController.SourceType = .photoLibrary + #else + @State private var showMacImagePicker = false + #endif + + var body: some View { + #if os(iOS) + ContentPeopleSheetView( + showSidebar: $showSidebar, + messageText: $messageText, + selectedMessageSender: $selectedMessageSender, + selectedMessageSenderID: $selectedMessageSenderID, + imagePreviewURL: $imagePreviewURL, + windowCountPublic: $windowCountPublic, + windowCountPrivate: $windowCountPrivate, + isAtBottomPrivate: $isAtBottomPrivate, + isTextFieldFocused: $isTextFieldFocused, + voiceRecordingVM: voiceRecordingVM, + autocompleteDebounceTimer: $autocompleteDebounceTimer, + backgroundColor: .black, + textColor: .green, + secondaryTextColor: .gray, + headerHeight: 44, + onSendMessage: {}, + showImagePicker: $showImagePicker, + imagePickerSourceType: $imagePickerSourceType + ) + #else + ContentPeopleSheetView( + showSidebar: $showSidebar, + messageText: $messageText, + selectedMessageSender: $selectedMessageSender, + selectedMessageSenderID: $selectedMessageSenderID, + imagePreviewURL: $imagePreviewURL, + windowCountPublic: $windowCountPublic, + windowCountPrivate: $windowCountPrivate, + isAtBottomPrivate: $isAtBottomPrivate, + isTextFieldFocused: $isTextFieldFocused, + voiceRecordingVM: voiceRecordingVM, + autocompleteDebounceTimer: $autocompleteDebounceTimer, + backgroundColor: .black, + textColor: .green, + secondaryTextColor: .gray, + headerHeight: 44, + onSendMessage: {}, + showMacImagePicker: $showMacImagePicker + ) + #endif + } +} + @MainActor @discardableResult private func mount(_ view: V) -> AnyObject { @@ -112,11 +257,13 @@ private func makeTemporaryImageURL() throws -> URL { return url } +@Suite("View Smoke Tests", .serialized) @MainActor struct ViewSmokeTests { @Test func fingerprintView_renders_verifiedAndPendingStates() async { let (viewModel, transport, _) = makeSmokeViewModel() + let featureModels = makeSmokeFeatureModels(for: viewModel) let verifiedPeer = PeerID(str: "0102030405060708") let pendingPeer = PeerID(str: "1112131415161718") let verifiedFingerprint = String(repeating: "ab", count: 32) @@ -131,11 +278,11 @@ struct ViewSmokeTests { viewModel.verifiedFingerprints.insert(verifiedFingerprint) - let verifiedView = FingerprintView(viewModel: viewModel, peerID: verifiedPeer) - let pendingView = FingerprintView(viewModel: viewModel, peerID: pendingPeer) + let verifiedView = FingerprintView(peerID: verifiedPeer) + .environmentObject(featureModels.verificationModel) + let pendingView = FingerprintView(peerID: pendingPeer) + .environmentObject(featureModels.verificationModel) - _ = verifiedView.body - _ = pendingView.body _ = mount(verifiedView) _ = mount(pendingView) @@ -145,13 +292,14 @@ struct ViewSmokeTests { @Test func verificationViews_renderCoreBranches() throws { let (viewModel, transport, _) = makeSmokeViewModel() + let featureModels = makeSmokeFeatureModels(for: viewModel) let peerID = PeerID(str: "2122232425262728") let fingerprint = String(repeating: "cd", count: 32) var isPresented = true transport.peerFingerprints[peerID] = fingerprint transport.updatePeerSnapshots([makeSnapshot(peerID: peerID, nickname: "Verifier", noiseByte: 0x33)]) - viewModel.selectedPrivateChatPeer = peerID + featureModels.privateConversationModel.startConversation(with: peerID) viewModel.verifiedFingerprints.insert(fingerprint) let image = try makeCGImage() @@ -173,35 +321,36 @@ struct ViewSmokeTests { set: { isPresented = $0 } ) ) - .environmentObject(viewModel) + .environmentObject(featureModels.verificationModel) ) } @Test func meshPeerList_renders_emptyAndPopulatedStates() async { let (viewModel, transport, identityManager) = makeSmokeViewModel() + let featureModels = makeSmokeFeatureModels(for: viewModel) let connectedPeer = PeerID(str: "3132333435363738") let blockedPeer = PeerID(str: "4142434445464748") let blockedFingerprint = String(repeating: "ef", count: 32) _ = mount( MeshPeerList( - viewModel: viewModel, textColor: .green, secondaryTextColor: .gray, onTapPeer: { _ in }, onToggleFavorite: { _ in }, onShowFingerprint: { _ in } ) + .environmentObject(featureModels.peerListModel) ) _ = MeshPeerList( - viewModel: viewModel, textColor: .green, secondaryTextColor: .gray, onTapPeer: { _ in }, onToggleFavorite: { _ in }, onShowFingerprint: { _ in } - ).body + ) + .environmentObject(featureModels.peerListModel) transport.peerFingerprints[blockedPeer] = blockedFingerprint identityManager.setBlocked(blockedFingerprint, isBlocked: true) @@ -214,13 +363,13 @@ struct ViewSmokeTests { _ = mount( MeshPeerList( - viewModel: viewModel, textColor: .green, secondaryTextColor: .gray, onTapPeer: { _ in }, onToggleFavorite: { _ in }, onShowFingerprint: { _ in } ) + .environmentObject(featureModels.peerListModel) ) #expect(viewModel.hasUnreadMessages(for: blockedPeer)) @@ -229,10 +378,11 @@ struct ViewSmokeTests { @Test func commandSuggestionsAndLocationViews_render() { let (viewModel, _, _) = makeSmokeViewModel() + let featureModels = makeSmokeFeatureModels(for: viewModel) let channel = GeohashChannel(level: .city, geohash: "u4pruy") var messageText = "/f" - LocationChannelManager.shared.select(.location(channel)) + featureModels.locationChannelsModel.select(.location(channel)) _ = mount( CommandSuggestionsView( @@ -244,22 +394,25 @@ struct ViewSmokeTests { backgroundColor: .black, secondaryTextColor: .gray ) - .environmentObject(viewModel) + .environmentObject(featureModels.privateConversationModel) + .environmentObject(featureModels.locationChannelsModel) ) _ = mount( LocationChannelsSheet(isPresented: .constant(true)) - .environmentObject(viewModel) + .environmentObject(featureModels.locationChannelsModel) + .environmentObject(featureModels.peerListModel) ) #expect(messageText == "/f") - LocationChannelManager.shared.select(.mesh) - LocationChannelManager.shared.endLiveRefresh() + featureModels.locationChannelsModel.select(.mesh) + featureModels.locationChannelsModel.endLiveRefresh() } @Test func locationNotesView_rendersNoRelayAndLoadedStates() throws { let (viewModel, _, _) = makeSmokeViewModel() + let featureModels = makeSmokeFeatureModels(for: viewModel) let noRelayManager = LocationNotesManager( geohash: "u4pruydq", @@ -302,12 +455,20 @@ struct ViewSmokeTests { eose?() _ = mount( - LocationNotesView(geohash: "u4pruydq", manager: noRelayManager) - .environmentObject(viewModel) + LocationNotesView( + geohash: "u4pruydq", + senderNickname: viewModel.nickname, + manager: noRelayManager + ) + .environmentObject(featureModels.locationChannelsModel) ) _ = mount( - LocationNotesView(geohash: "u4pruydq", manager: loadedManager) - .environmentObject(viewModel) + LocationNotesView( + geohash: "u4pruydq", + senderNickname: viewModel.nickname, + manager: loadedManager + ) + .environmentObject(featureModels.locationChannelsModel) ) #expect(loadedManager.notes.count == 1) @@ -350,11 +511,34 @@ struct ViewSmokeTests { #expect(PaymentChipView.PaymentType.lightning("lightning:lnbc1test").url?.scheme == "lightning") } + @Test + func contentShellViews_renderPublicAndPrivateBranches() async { + let (viewModel, transport, _) = makeSmokeViewModel() + let featureModels = makeSmokeFeatureModels(for: viewModel) + let peerID = PeerID(str: "5152535455565758") + + transport.updatePeerSnapshots([ + makeSnapshot(peerID: peerID, nickname: "Alice", noiseByte: 0x66) + ]) + try? await Task.sleep(nanoseconds: 50_000_000) + + _ = mount(installSmokeEnvironment(ContentView(), featureModels: featureModels)) + _ = mount(installSmokeEnvironment(ContentPeopleSheetHarness(), featureModels: featureModels)) + + featureModels.privateConversationModel.startConversation(with: peerID) + try? await Task.sleep(nanoseconds: 50_000_000) + + _ = mount(installSmokeEnvironment(ContentPeopleSheetHarness(), featureModels: featureModels)) + + #expect(featureModels.privateConversationModel.selectedPeerID == peerID) + #expect(featureModels.privateConversationModel.selectedHeaderState?.headerPeerID == peerID) + } + @Test func geohashAndTextMessageViews_renderCoreBranches() { let (viewModel, _, _) = makeSmokeViewModel() + let featureModels = makeSmokeFeatureModels(for: viewModel) let geohashPeopleList = GeohashPeopleList( - viewModel: viewModel, textColor: .green, secondaryTextColor: .gray, onTapPerson: {} @@ -377,10 +561,10 @@ struct ViewSmokeTests { deliveryStatus: .partiallyDelivered(reached: 1, total: 2) ) - _ = geohashPeopleList.body - _ = mount(geohashPeopleList) - _ = mount(TextMessageView(message: truncatableMessage).environmentObject(viewModel)) - _ = mount(TextMessageView(message: paymentMessage).environmentObject(viewModel)) + _ = mount(geohashPeopleList.environmentObject(featureModels.peerListModel)) + _ = mount(geohashPeopleList.environmentObject(featureModels.peerListModel)) + _ = mount(TextMessageView(message: truncatableMessage).environmentObject(featureModels.conversationUIModel)) + _ = mount(TextMessageView(message: paymentMessage).environmentObject(featureModels.conversationUIModel)) #expect(truncatableMessage.content.count > TransportConfig.uiLongMessageLengthThreshold) #expect(paymentMessage.content.contains("lightning:") && paymentMessage.content.contains("cashu")) diff --git a/docs/ARCHITECTURE_V2.md b/docs/ARCHITECTURE_V2.md new file mode 100644 index 00000000..6b2c1037 --- /dev/null +++ b/docs/ARCHITECTURE_V2.md @@ -0,0 +1,40 @@ +# Architecture V2 + +This branch starts a larger simplification effort focused on performance, reliability, and maintainability without rewriting the transport and protocol stack in one pass. + +## What Landed + +1. `AppRuntime` is now the composition root for startup, lifecycle, notification routing, and shared-content intake. +2. `BitchatApp` is reduced to app wiring and no longer owns operational startup logic. +3. `AppEventStream` introduces a typed async event surface for app-level events. +4. `PeerHandle` and `ConversationID` establish canonical identity/conversation keys above the existing transport-specific IDs. +5. `IdentityResolver` mirrors the current peer graph into canonical handles. +6. `ConversationStore` now owns app-layer conversation context for the active public channel and selected private conversation, while also mirroring the current public/private message timelines under canonical IDs. +7. `AppRuntime` now owns Tor, screenshot, and Nostr reconnect observer wiring instead of leaving that app-lifecycle graph inside `ChatViewModel`. +8. `PublicChatModel`, `PrivateInboxModel`, `PrivateConversationModel`, `ConversationUIModel`, `LocationChannelsModel`, and `PeerListModel` provide focused view-facing models for public chat, private inbox state, selected-DM state, composer/message interactions, location-channel state, and peer counts. `PrivateInboxModel` now reads its message, unread, and selection state directly from `ConversationStore` instead of merging through `PrivateChatManager`. +9. `AppChromeModel` now owns app-chrome presentation state for nickname editing, fingerprint routing, app-info/location sheet visibility, unread-private-chat affordances, and screenshot/privacy UI. +10. `ContentView`, `MessageListView`, `LocationChannelsSheet`, `LocationNotesView`, `CommandSuggestionsView`, `FingerprintView`, and `VerificationSheetView` no longer talk directly to `ChatViewModel` or location singletons for their primary app-layer state; they consume feature-scoped models injected from `AppRuntime`. +11. `PeerListModel` now consumes the runtime-owned `LocationChannelsModel` instead of reading the location manager directly, and QR scan parsing is funneled through `VerificationModel` rather than the SwiftUI views. +12. `ChatViewModel` is thinner on the app side: startup wiring now lives in `ChatViewModelBootstrapper`, send/lifecycle/transport seams live in focused coordinators, and peer-list notification/timer state now lives in `ChatPeerListCoordinator` instead of the main view model. + +## Why This Shape + +- `ChatViewModel` remains the active domain/UI bridge so the app can keep working while we migrate feature-by-feature. +- The new runtime/store layer gives us a safe place to move lifecycle, routing, and cross-cutting state before we split the UI into smaller feature models. +- `ConversationStore` now owns the selected conversation context and private-inbox read state, which lets feature models read one runtime-managed source of truth for focus/navigation and DM timelines even while legacy mutation paths still flow through `ChatViewModel`. +- The new chrome model lets us remove presentation-only state from `ChatViewModel` without forcing a big rewrite of the domain/message paths. +- The private-conversation model pulls selected-DM header identity, availability, encryption, and favorite state out of `ContentView`, which keeps the view from re-implementing peer lookup rules. +- The conversation UI model centralizes composer state, autocomplete, message formatting, and row-level actions so the main views no longer proxy most conversation interactions directly to `ChatViewModel`. +- The location channels model gives the remaining location-heavy views a focused adapter over the location/bookmark/network singletons, which reduces direct global reads in the view layer and makes smoke/architecture tests more reliable. +- Reusing that same location model inside the peer-list feature keeps geohash/mesh presence presentation on one runtime-owned source of truth instead of mixing view models with singleton reads. +- `BitchatApp` now injects only feature-scoped models into the view tree, which removes the old pattern of keeping `ChatViewModel` as a global environment object for the entire app shell. +- Routing QR scan parsing through the verification model keeps the verification UI as a passive renderer and gives us a clearer seam for future camera/manual-scan behavior changes. +- The new `ChatViewModel` coordinators are intentionally transitional: they shrink the main file and isolate composition, lifecycle, transport, and peer-list responsibilities without forcing a risky rewrite of the transport/BLE core in the same pass. + +## Next Steps + +1. Migrate view composition from one global `ChatViewModel` to focused feature models backed by `ConversationStore`. +2. Route more inbound transport events through typed app/domain events instead of delegate plus notification fan-out. +3. Move private/public conversation mutation behind the new store instead of still mirroring legacy message writes from `ChatViewModel`. +4. Replace remaining singleton-heavy seams with injected runtime services where practical. +5. Revisit actor isolation for identity and conversation state once the remaining message/peer models are safe to move off the main actor. From 3be8fbf1c425337def5eb9b75aa9b563e22cf048 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 31 May 2026 07:17:57 +0000 Subject: [PATCH 011/216] Automated update of relay data - Sun May 31 07:17:57 UTC 2026 --- relays/online_relays_gps.csv | 692 ++++++++++++++++++++--------------- 1 file changed, 392 insertions(+), 300 deletions(-) diff --git a/relays/online_relays_gps.csv b/relays/online_relays_gps.csv index 546dcc20..2be682e0 100644 --- a/relays/online_relays_gps.csv +++ b/relays/online_relays_gps.csv @@ -1,307 +1,399 @@ Relay URL,Latitude,Longitude -schnorr.me,43.6532,-79.3832 -relay.jbnco.co,43.6532,-79.3832 -relay.layer.systems,49.0291,8.35695 -relay.satlantis.io,40.8054,-74.0241 -relay.plebeian.market:443,50.1109,8.68213 -nittom.nostr1.com:443,40.7057,-74.0136 -relay.lab.rytswd.com,49.4543,11.0746 -relay.bornheimer.app,51.5072,-0.127586 -nostrelites.org,41.8781,-87.6298 -dev.relay.edufeed.org,49.4521,11.0767 -relay.trustr.ing,43.6548,-79.3885 -nostr.aruku.ovh,1.27994,103.849 -relay.vrtmrz.net,43.6532,-79.3832 -relay.nostr.net,43.6532,-79.3832 -testnet-relay.samt.st,40.8302,-74.1299 -nostr.hybner.org,46.9895,28.8602 -test.thedude.cloud,50.1109,8.68213 -relay-rpi.edufeed.org,49.4521,11.0767 -relay.artx.market,43.6548,-79.3885 -nostr.thalheim.io,60.1699,24.9384 -dm-test-strfry-generic.samt.st,43.6532,-79.3832 -dev.relay.stream,43.6532,-79.3832 -relay.thecryptosquid.com,50.4754,12.3683 -nostr-rs-relay.dev.fedibtc.com,39.0438,-77.4874 -nostr-dev.wellorder.net,45.5201,-122.99 -relay.binaryrobot.com,43.6532,-79.3832 -relay.threenine.services,51.5222,-0.62916 -relay2.veganostr.com,60.1699,24.9384 -nostr-pub.wellorder.net,45.5201,-122.99 -mostro-p2p.tech,50.1109,8.68213 -relay.mwaters.net,50.9871,2.12554 -nexus.libernet.app,43.6532,-79.3832 -testnet.samt.st,43.6532,-79.3832 -nostr.girino.org,43.6532,-79.3832 -relay.orangepill.ovh,49.1689,-0.358841 -soloco.nl,43.6532,-79.3832 -relay.nostrhub.fr,48.1045,11.6004 -nostr.rtvslawenia.com:443,49.4543,11.0746 -nostr.dlcdevkit.com,40.0992,-83.1141 -relay.mostro.network,40.8302,-74.1299 -relay.mccormick.cx:443,52.3563,4.95714 -nrs-02.darkcloudarcade.com,39.9526,-75.1652 -nostr.sathoarder.com,48.5734,7.75211 -myvoiceourstory.org,37.3598,-121.981 -nostr-relay.cbrx.io,43.6532,-79.3832 -relay.bikel.ink,60.1699,24.9384 nostr.tac.lol,47.4748,-122.273 -adre.su,59.9311,30.3609 -relay.ru.ac.th,13.7607,100.627 -0x-nostr-relay.fly.dev,37.7648,-122.432 -nostr.easycryptosend.it,43.6532,-79.3832 -relay.wavlake.com:443,41.2619,-95.8608 -nostr-relay.online,43.6532,-79.3832 -top.testrelay.top,43.6532,-79.3832 -video.czas.plus,50.1109,8.68213 -relay.gorrdy.cz,43.6532,-79.3832 -relay.shadowbip.com,50.1109,8.68213 -ribo.us.nostria.app,43.6532,-79.3832 -bucket.coracle.social,37.7775,-122.397 -relay.staging.plebeian.market,51.5072,-0.127586 -wot.nostr.party,36.1659,-86.7844 -relay.beginningend.com,35.2227,-97.4786 -blossom.gnostr.cloud,43.6532,-79.3832 -relay01.lnfi.network,35.6764,139.65 -satsage.xyz,37.3986,-121.964 -x.kojira.io,43.6532,-79.3832 -nostr.data.haus,50.4754,12.3683 -relay.homeinhk.xyz,35.694,139.754 -relay.olas.app,60.1699,24.9384 -relay.lacompagniemaximus.com,45.3147,-73.8785 -relay.satmaxt.xyz,43.6532,-79.3832 -nostr.chaima.info,50.1109,8.68213 -nostr.tadryanom.me,43.6532,-79.3832 -relay.notoshi.win,13.966,101.513 -relay.damus.io,43.6532,-79.3832 -relay5.bitransfer.org,43.6532,-79.3832 -relay.btcforplebs.com,43.6532,-79.3832 -prl.plus,55.7628,37.5983 -nostr-rs-relay-qj1h.onrender.com,37.7775,-122.397 -ribo.nostria.app,43.6532,-79.3832 -dk.6yv.cn,39.9042,116.407 -relay.nearhood.co.uk,51.5072,-0.127586 -wot.dergigi.com,64.1476,-21.9392 -relay.fundstr.me,42.3601,-71.0589 -nostr.nodesmap.com,59.3327,18.0656 -nostr.bgbitcoin.club,50.4754,12.3683 -relay.libernet.app,43.6532,-79.3832 -nostr.spaceshell.xyz,43.6532,-79.3832 -relay.erybody.com,41.4513,-81.7021 -nostr-01.yakihonne.com,1.32123,103.695 -nostr.bond,50.1109,8.68213 -offchain.pub,39.1585,-94.5728 -relay.klabo.world,47.2343,-119.853 -nostrelay.circum.space,52.3676,4.90414 -kotukonostr.onrender.com,37.7775,-122.397 -relay.comcomponent.com,43.6532,-79.3832 -nostr.infero.net,35.6764,139.65 -purplerelay.com,43.6532,-79.3832 -relay.nostr.blockhenge.com,39.0438,-77.4874 -nos.lol,50.4754,12.3683 -bridge.tagomago.me,42.3601,-71.0589 -nostr.spicyz.io,43.6532,-79.3832 -relay.samt.st,40.8302,-74.1299 -nostr.ps1829.com,33.8851,130.883 -nostr.tagomago.me,42.3601,-71.0589 -nostr.88mph.life,52.1941,-2.21905 -no.str.cr,9.27447,-83.5797 -relay-dev.satlantis.io,40.8302,-74.1299 -nostr.self-determined.de,53.495,10.2542 -yabu.me,35.6092,139.73 -nostr-verified.wellorder.net,45.5201,-122.99 -nostr-rs-relay-ishosta.phamthanh.me,43.6532,-79.3832 -quantum-relay.3nostr.com,42.8864,-78.8784 -nostr-relay.amethyst.name,39.0438,-77.4874 -relay.mccormick.cx,52.3563,4.95714 -nostr.nadajnik.org,50.1109,8.68213 -nostr.azzamo.net,52.2633,21.0283 -relay.nostu.be,40.4167,-3.70329 -relay.decentnewsroom.com,50.4754,12.3683 -relay.bebond.net,43.6532,-79.3832 -relay.nostr-check.me,43.6532,-79.3832 -nostr.hifish.org,47.4244,8.57658 -eu.nostr.pikachat.org,49.4543,11.0746 -strfry.ymir.cloud,43.6532,-79.3832 -bitcoiner.social,47.6743,-117.112 -nostr.computingcache.com,34.0356,-118.442 -nostr.twinkle.lol,51.902,7.6657 -relay.aidatanorge.no,43.6532,-79.3832 -relay.mulatta.io,37.5665,126.978 -ynostr.yael.at,60.1699,24.9384 -relay.mrmave.work,43.6532,-79.3832 -damus.bostr.online,43.6532,-79.3832 -nostr.rtvslawenia.com,49.4543,11.0746 -herbstmeister.com,34.0549,-118.243 -antiprimal.net,43.6532,-79.3832 -relay.endfiat.money,59.3327,18.0656 -relay.sigit.io,50.4754,12.3683 -kasztanowa.bieda.it,43.6532,-79.3832 -nostr.purpura.cloud,43.6532,-79.3832 -relay.dreamith.to,43.6532,-79.3832 -fanfares.nostr1.com,40.7057,-74.0136 -portal-relay.pareto.space,49.0291,8.35696 -relay.agorist.space,52.3734,4.89406 -nostr.debate.report,50.1109,8.68213 -relay.lightning.pub,39.0438,-77.4874 -relay.lanacoin-eternity.com,40.8302,-74.1299 -wot.makenomistakes.ca,43.7064,-79.3986 -nostr.carroarmato0.be,51.0368,3.21186 -relay.trotters.cc,43.6532,-79.3832 -dm-test-nostr-rs-42-disabled.samt.st,43.6532,-79.3832 -us-east.nostr.pikachat.org,39.0438,-77.4874 -rilo.nostria.app,43.6532,-79.3832 -relay.degmods.com,50.4754,12.3683 -nostr.snowbla.de,60.1699,24.9384 -relay.illuminodes.com,47.6061,-122.333 -intl-rocks-microphone-did.trycloudflare.com,43.6532,-79.3832 -testr.nymble.world,40.8054,-74.0241 -nostr.blankfors.se,60.1699,24.9384 -nostr.mom,50.4754,12.3683 -r.0kb.io,32.789,-96.7989 -relay.nostr.place,43.6532,-79.3832 -relay.angor.io,48.1046,11.6002 -relay.wisp.talk,49.4543,11.0746 -nrs-01.darkcloudarcade.com,39.1008,-94.5811 -nostriches.club,43.6532,-79.3832 -relay.npubhaus.com,43.6532,-79.3832 -relay02.lnfi.network,35.6764,139.65 -armada.sharegap.net,43.6532,-79.3832 -dev-relay.nostreon.com,60.1699,24.9384 -relay1.privkey.io,25.7617,-80.1918 -nostr.wecsats.io,43.6532,-79.3832 -relay.mitchelltribe.com,39.0438,-77.4874 -conduitl2.fly.dev,37.7648,-122.432 -relay.nostx.io,43.6532,-79.3832 -rele.speyhard.fi,50.1109,8.68213 -relay.getsafebox.app,43.6532,-79.3832 -relay.cosmicbolt.net,37.3986,-121.964 -relayone.soundhsa.com,39.1008,-94.5811 -relay.openresist.com,43.6532,-79.3832 -relay.bullishbounty.com,43.6532,-79.3832 -relay-testnet.k8s.layer3.news,37.3387,-121.885 -chat-relay.zap-work.com,43.6532,-79.3832 -nostrbtc.com,43.6532,-79.3832 -insta-relay.apps3.slidestr.net,40.4167,-3.70329 -relay-arg.zombi.cloudrodion.com,1.35208,103.82 -ribo.eu.nostria.app,43.6532,-79.3832 -bcast.girino.org,43.6532,-79.3832 -relay.ditto.pub,43.6532,-79.3832 -relay.chorus.community,48.5333,10.7 -vault.iris.to,43.6532,-79.3832 -nostr.vulpem.com,49.4543,11.0746 -nostrcheck.me,43.6532,-79.3832 -relay-dev.gulugulu.moe,43.6532,-79.3832 -wot.codingarena.top,50.4754,12.3683 -relay.snotr.nl:49999,52.0195,4.42946 -nostr-relay-1.trustlessenterprise.com,43.6532,-79.3832 -relay.sharegap.net,43.6532,-79.3832 -nas01xanthosnet.synology.me:7778,47.1285,8.74735 -relay.flashapp.me,43.6548,-79.3885 -syb.lol,43.6532,-79.3832 -relay.lanavault.space,60.1699,24.9384 -nostr2.thalheim.io,49.4543,11.0746 -nostrcity-club.fly.dev,37.7648,-122.432 -nostr2.girino.org,43.6532,-79.3832 -relay.typedcypher.com,51.5072,-0.127586 -relay.underorion.se,50.1109,8.68213 -nostr.bitcoiner.social,47.6743,-117.112 -relay.dyne.org,49.0291,8.35705 -nostr-relay.corb.net,38.8353,-104.822 -relay.nostrmap.net,60.1699,24.9384 -relay.wavefunc.live,41.8781,-87.6298 -nostr.night7.space,50.4754,12.3683 -nostr-2.21crypto.ch,47.5356,8.73209 -wot.nostr.place,43.6532,-79.3832 -relay.sovbit.dev,60.1699,24.9384 -spookstr2.nostr1.com,40.7057,-74.0136 -relay.arx-ccn.com,50.4754,12.3683 -offchain.bostr.online,43.6532,-79.3832 -nittom.nostr1.com,40.7057,-74.0136 -relay.veganostr.com,60.1699,24.9384 -relay.tapestry.ninja,40.8054,-74.0241 -relay.nostar.org,43.6532,-79.3832 -relay.aarpia.com,37.3986,-121.964 -nostr.2b9t.xyz,34.0549,-118.243 -relayrs.notoshi.win,43.6532,-79.3832 -aeon.libretechsystems.xyz,55.486,9.86577 -nostr.21crypto.ch,47.5356,8.73209 -nostr.n7ekb.net,36.1527,-95.9902 -nostr-relay.zimage.com,34.0549,-118.243 -dm-test-strfry-discovery.samt.st,43.6532,-79.3832 -relay.camelus.app,45.5201,-122.99 -relay.openfarmtools.org,60.1699,24.9384 -relay.agentry.com,42.8864,-78.8784 -nostr.4rs.nl,49.0291,8.35696 -relay.0xchat.com,43.6532,-79.3832 -treuzkas.branruz.com,48.8575,2.35138 -nostr.stakey.net,52.3676,4.90414 -relay.mmwaves.de,48.8575,2.35138 -relay.gulugulu.moe,43.6532,-79.3832 -relay.nostrdice.com,-33.8688,151.209 -relay.plebeian.market,50.1109,8.68213 -relay2.angor.io,48.1046,11.6002 -relay.bullishbounty.com:443,43.6532,-79.3832 -relay.nostrcheck.me,43.6532,-79.3832 -bbw-nostr.xyz,41.5284,-87.4237 -relay.jeffg.fyi,43.6532,-79.3832 -relay.toastr.net,40.8054,-74.0241 -premium.primal.net,43.6532,-79.3832 -temp.iris.to,43.6532,-79.3832 -relay.internationalright-wing.org,-22.5022,-48.7114 -relay.inforsupports.com,43.6532,-79.3832 -bitchat.nostr1.com,40.7057,-74.0136 -relay.getsafebox.app:443,43.6532,-79.3832 -nostrja-kari.heguro.com,43.6532,-79.3832 -relay.guggero.org,46.5971,9.59652 +relay.nostr.net,43.6532,-79.3832 +relay.lab.rytswd.com,49.4543,11.0746 freelay.sovbit.dev,60.1699,24.9384 -speakeasy.cellar.social,49.4543,11.0746 -relay.paulstephenborile.com,49.4543,11.0746 -relay.wellorder.net,45.5201,-122.99 -slick.mjex.me,39.0418,-77.4744 -strfry.shock.network,39.0438,-77.4874 -nostr-relay.psfoundation.info,39.0438,-77.4874 -nostr.islandarea.net,35.4669,-97.6473 -nostr-relay.nextblockvending.com,47.2343,-119.853 -nostr.bitczat.pl,60.1699,24.9384 -wot.utxo.one,43.6532,-79.3832 -cs-relay.nostrdev.com,50.4754,12.3683 -nostr.notribe.net,40.8302,-74.1299 -nostr.quali.chat,60.1699,24.9384 -nostr.ac,38.958,-77.3592 -relay.fountain.fm,43.6532,-79.3832 -nostr-relay.xbytez.io,50.6924,3.20113 -relay.minibolt.info,43.6532,-79.3832 -ephemeral.snowflare.cc,43.6532,-79.3832 -relay.ohstr.com,43.6532,-79.3832 -nostr.pbfs.io,50.4754,12.3683 -schnorr.me:443,43.6532,-79.3832 -relay.nostriot.com,41.5695,-83.9786 -relay.mostr.pub,43.6532,-79.3832 -relaisnostr.trivaco.fr,48.5734,7.75211 -relay.cypherflow.ai,48.8575,2.35138 -nostr.hekster.org,37.3986,-121.964 -cache.trustr.ing,43.6548,-79.3885 -nostr-kyomu-haskell.onrender.com,37.7775,-122.397 -strfry.bonsai.com,39.0438,-77.4874 -relay.edufeed.org,49.4521,11.0767 -strfry.apps3.slidestr.net,40.4167,-3.70329 -relay.wavlake.com,41.2619,-95.8608 -relay.nostrmap.net:443,60.1699,24.9384 -nostr.robosats.org,64.1476,-21.9392 -relay.primal.net,43.6532,-79.3832 -wot.rejecttheframe.xyz,43.6532,-79.3832 -dev-nostr.bityacht.io,43.6532,-79.3832 -wot.shaving.kiwi,43.6532,-79.3832 -relay.bitmacro.cloud,43.6532,-79.3832 -relay.bnos.space,43.6532,-79.3832 +relay2.veganostr.com,60.1699,24.9384 +relay.jeffg.fyi,43.6532,-79.3832 srtrelay.c-stellar.net,43.6532,-79.3832 -nostrride.io,37.3986,-121.964 +relay.typedcypher.com,51.5072,-0.127586 +nostr-relay.nextblockvending.com,47.2343,-119.853 +spookstr2.nostr1.com,40.7057,-74.0136 +relay.bitmacro.cloud,43.6532,-79.3832 +relay.degmods.com,50.4754,12.3683 +nostr-relay.amethyst.name,39.0438,-77.4874 +intl-rocks-microphone-did.trycloudflare.com,43.6532,-79.3832 +relay-fra.zombi.cloudrodion.com:443,48.8566,2.35222 +nostr.azzamo.net,52.2633,21.0283 +relay.mmwaves.de,48.8575,2.35138 +cs-relay.nostrdev.com:443,50.4754,12.3683 +myvoiceourstory.org,37.3598,-121.981 +nostr.easycryptosend.it,43.6532,-79.3832 +relay.0xchat.com,43.6532,-79.3832 +nostr.thalheim.io,60.1699,24.9384 +relay.cosmicbolt.net,37.3986,-121.964 +relay.mitchelltribe.com,39.0438,-77.4874 +nostrelites.org,41.8781,-87.6298 +nostr-2.21crypto.ch,47.5356,8.73209 +relayrs.notoshi.win,43.6532,-79.3832 +nostr-kyomu-haskell.onrender.com,37.7775,-122.397 +relay02.lnfi.network,35.6764,139.65 +prl.plus,55.7628,37.5983 +relay.snotr.nl:49999,52.0195,4.42946 +relay.plebeian.market,50.1109,8.68213 +bitcoiner.social:443,47.6743,-117.112 +relay.beginningend.com:443,35.2227,-97.4786 +damus.bostr.online,43.6532,-79.3832 +nostr-rs-relay-qj1h.onrender.com,37.7775,-122.397 +relay.bullishbounty.com:443,43.6532,-79.3832 +ribo.eu.nostria.app,43.6532,-79.3832 +relay.mostro.network:443,40.8302,-74.1299 +insta-relay.apps3.slidestr.net,40.4167,-3.70329 +kasztanowa.bieda.it,43.6532,-79.3832 +relay.trustr.ing:443,43.6548,-79.3885 +relay.layer.systems,49.0291,8.35695 +relay.angor.io,48.1046,11.6002 +nostr-relay-1.trustlessenterprise.com,43.6532,-79.3832 relay.islandbitcoin.com,12.8498,77.6545 -relay.fckstate.net,59.3293,18.0686 -relay-nl.zombi.cloudrodion.com,50.8943,6.06237 -nostr.thebiglake.org,32.71,-96.6745 -relay.staging.commonshub.brussels,49.4543,11.0746 -articles.layer3.news,37.3387,-121.885 +relay.binaryrobot.com,43.6532,-79.3832 +dm-test-nostr-rs-42-disabled.samt.st,43.6532,-79.3832 +relay.plebeian.market:443,50.1109,8.68213 +nostr.n7ekb.net,36.1527,-95.9902 +nostr.snowbla.de:443,60.1699,24.9384 +nostr.debate.report,50.1109,8.68213 +nostr.snowbla.de,60.1699,24.9384 +relay-dev.gulugulu.moe:443,43.6532,-79.3832 +nostrride.io,37.3986,-121.964 +relay2.angor.io:443,48.1046,11.6002 +relay.vrtmrz.net,43.6532,-79.3832 +relay.satmaxt.xyz,43.6532,-79.3832 +relay.agorist.space:443,52.3734,4.89406 +strfry.bonsai.com,39.0438,-77.4874 +dev.relay.stream,43.6532,-79.3832 +relay.btcforplebs.com,43.6532,-79.3832 +relay.lightning.pub:443,39.0438,-77.4874 +purplerelay.com,43.6532,-79.3832 +relay.libernet.app:443,43.6532,-79.3832 +nostr.robosats.org,64.1476,-21.9392 +relay.wavlake.com,41.2619,-95.8608 +nostr.bgbitcoin.club:443,50.4754,12.3683 +relay.fundstr.me:443,42.3601,-71.0589 +nostr.sathoarder.com,48.5734,7.75211 +relay.cypherflow.ai:443,48.8575,2.35138 +relay.minibolt.info:443,43.6532,-79.3832 +dm-test-strfry-discovery.samt.st:443,43.6532,-79.3832 +fanfares.nostr1.com,40.7057,-74.0136 +relay.ru.ac.th,13.7607,100.627 +relay.lightning.pub,39.0438,-77.4874 +relay.bebond.net:443,43.6532,-79.3832 +nostr.4rs.nl,49.0291,8.35696 +relay.beginningend.com,35.2227,-97.4786 +relay.nostrdice.com,-33.8688,151.209 +relay.paulstephenborile.com,49.4543,11.0746 +relay.nostr.place,43.6532,-79.3832 +relay.edufeed.org,49.4521,11.0767 +ribo.us.nostria.app,43.6532,-79.3832 +relay.damus.io,43.6532,-79.3832 +nostr.spicyz.io,43.6532,-79.3832 +nostr.overmind.lol:443,43.6532,-79.3832 +relay.mulatta.io,37.5665,126.978 +relay.homeinhk.xyz,35.694,139.754 +wot.nostr.party,36.1659,-86.7844 +nostr.chaima.info,50.1109,8.68213 +nostr-01.yakihonne.com,1.32123,103.695 +relay.laantungir.net,-19.4692,-42.5315 +nostr.wecsats.io,43.6532,-79.3832 +nostr-verified.wellorder.net,45.5201,-122.99 +nostr-2.21crypto.ch:443,47.5356,8.73209 +strfry.openhoofd.nl,51.5717,3.70417 +nostr.2b9t.xyz,34.0549,-118.243 +nostr.spaceshell.xyz:443,43.6532,-79.3832 +relay.staging.plebeian.market,51.5072,-0.127586 +relay.olas.app,60.1699,24.9384 +speakeasy.cellar.social:443,49.4543,11.0746 +relay01.lnfi.network,35.6764,139.65 +nostr-02.yakihonne.com:443,1.32123,103.695 +nostr.carroarmato0.be,51.0368,3.21186 +strfry.shock.network,39.0438,-77.4874 +wot.codingarena.top,50.4754,12.3683 +nostr.mom,50.4754,12.3683 +nostr.dlcdevkit.com:443,40.0992,-83.1141 +nostr2.thalheim.io,49.4543,11.0746 +syb.lol:443,43.6532,-79.3832 +nostrcity-club.fly.dev,37.7648,-122.432 +nostr.myshosholoza.co.za,52.3913,4.66545 +wot.brightbolt.net,47.6735,-116.781 +speakeasy.cellar.social,49.4543,11.0746 +relay.nostar.org,43.6532,-79.3832 relay.directsponsor.net,42.8864,-78.8784 +relay.bebond.net,43.6532,-79.3832 +nostr.hekster.org,37.3986,-121.964 +nrs-01.darkcloudarcade.com,39.1008,-94.5811 +relay.binaryrobot.com:443,43.6532,-79.3832 +nostr.88mph.life,52.1941,-2.21905 +nostr.self-determined.de,53.495,10.2542 +dm-test-strfry-discovery.samt.st,43.6532,-79.3832 +public.crostr.com:443,43.6532,-79.3832 +nostr-rs-relay.dev.fedibtc.com:443,39.0438,-77.4874 +relay.wellorder.net,45.5201,-122.99 +nostr.vulpem.com,49.4543,11.0746 +relay.inforsupports.com,43.6532,-79.3832 +nostr.mom:443,50.4754,12.3683 +nostrbtc.com,43.6532,-79.3832 +nostr-relay.psfoundation.info:443,39.0438,-77.4874 +nostr-relay.zimage.com,34.0549,-118.243 +articles.layer3.news,37.3387,-121.885 +nostr.computingcache.com,34.0356,-118.442 +nostr.quali.chat,60.1699,24.9384 +nostr.21crypto.ch,47.5356,8.73209 +bendernostur.duckdns.org:8443,50.1109,8.68213 +syb.lol,43.6532,-79.3832 +nexus.libernet.app,43.6532,-79.3832 +memlay.v0l.io,53.3498,-6.26031 +nostr.blankfors.se,60.1699,24.9384 +relaisnostr.trivaco.fr,48.5734,7.75211 +eu.nostr.pikachat.org:443,49.4543,11.0746 +relay.chorus.community:443,48.5333,10.7 +relay.nostu.be,40.4167,-3.70329 +relay.fountain.fm:443,43.6532,-79.3832 +adre.su,59.9311,30.3609 +nostr2.girino.org:443,43.6532,-79.3832 +nostr.azzamo.net:443,52.2633,21.0283 +relay.samt.st,40.8302,-74.1299 +relay.bullishbounty.com,43.6532,-79.3832 +relay.nostrian-conquest.com:443,41.223,-111.974 +relay.lotek-distro.com,43.6532,-79.3832 +bcast.girino.org,43.6532,-79.3832 +bridge.tagomago.me,42.3601,-71.0589 +relay.0xchat.com:443,43.6532,-79.3832 +relay.lab.rytswd.com:443,49.4543,11.0746 +relay.fckstate.net,59.3293,18.0686 +conduitl2.fly.dev,37.7648,-122.432 relay.zone667.com,60.1699,24.9384 +relay.comcomponent.com,43.6532,-79.3832 +relay.damus.io:443,43.6532,-79.3832 +relay.klabo.world,47.2343,-119.853 +nostr.data.haus,50.4754,12.3683 +relay.nostr.blockhenge.com,39.0438,-77.4874 +relay-dev.gulugulu.moe,43.6532,-79.3832 +nostr.bgbitcoin.club,50.4754,12.3683 +relay-rpi.edufeed.org:443,49.4521,11.0767 +relay.layer.systems:443,49.0291,8.35695 +relay.fountain.fm,43.6532,-79.3832 +armada.sharegap.net,43.6532,-79.3832 +nostr.quali.chat:443,60.1699,24.9384 +relay.mrmave.work,43.6532,-79.3832 +r.0kb.io:443,32.789,-96.7989 +nostr.plantroon.com,50.1013,8.62643 +treuzkas.branruz.com,48.8575,2.35138 +nostr.night7.space:443,50.4754,12.3683 +nos.lol,50.4754,12.3683 +yabu.me,35.6092,139.73 +bucket.coracle.social,37.7775,-122.397 +relay.chorus.community,48.5333,10.7 +nostr-relay.corb.net,38.8353,-104.822 +relay.bao.network:443,43.6532,-79.3832 +kotukonostr.onrender.com,37.7775,-122.397 +mostro-p2p.tech,50.1109,8.68213 +relay.bornheimer.app,51.5072,-0.127586 +wot.rejecttheframe.xyz,43.6532,-79.3832 +bitcoinostr.duckdns.org,38.9393,-0.15411 +relay.nostr.net:443,43.6532,-79.3832 +nostr-relay.xbytez.io,50.6924,3.20113 +nostr-relay.xbytez.io:443,50.6924,3.20113 +relay.satlantis.io,40.8054,-74.0241 +relay.tapestry.ninja,40.8054,-74.0241 +relay.mitchelltribe.com:443,39.0438,-77.4874 +relay.veganostr.com:443,60.1699,24.9384 +nostr.stakey.net,52.3676,4.90414 +chat-relay.zap-work.com:443,43.6532,-79.3832 +schnorr.me,43.6532,-79.3832 +relay.cosmicbolt.net:443,37.3986,-121.964 +cs-relay.nostrdev.com,50.4754,12.3683 +r.0kb.io,32.789,-96.7989 +relay.libernet.app,43.6532,-79.3832 +rele.speyhard.fi,50.1109,8.68213 +relay.mmwaves.de:443,48.8575,2.35138 +top.testrelay.top,43.6532,-79.3832 +soloco.nl,43.6532,-79.3832 +nostr-relay-1.trustlessenterprise.com:443,43.6532,-79.3832 +relay.thecryptosquid.com,50.4754,12.3683 +bitchat.nostr1.com,40.7057,-74.0136 +relay-fra.zombi.cloudrodion.com,48.8566,2.35222 +nostr.spicyz.io:443,43.6532,-79.3832 +nittom.nostr1.com:443,40.7057,-74.0136 +relay.aarpia.com,37.3986,-121.964 +relay.ohstr.com,43.6532,-79.3832 +nostr.islandarea.net,35.4669,-97.6473 +schnorr.me:443,43.6532,-79.3832 +relay.veganostr.com,60.1699,24.9384 +relay.islandbitcoin.com:443,12.8498,77.6545 +wot.nostr.place,43.6532,-79.3832 +relay.agentry.com,42.8864,-78.8784 +relay.decentnewsroom.com,50.4754,12.3683 +relay.flashapp.me:443,43.6548,-79.3885 +eu.nostr.pikachat.org,49.4543,11.0746 +wot.sudocarlos.com,43.6532,-79.3832 +strfry.openhoofd.nl:443,51.5717,3.70417 +no.str.cr:443,9.27447,-83.5797 +relay.lacompagniemaximus.com:443,45.3147,-73.8785 +us-east.nostr.pikachat.org,39.0438,-77.4874 +nostrcity-club.fly.dev:443,37.7648,-122.432 +relay.trustr.ing,43.6548,-79.3885 +relay.jbnco.co,43.6532,-79.3832 +nostr.dlcdevkit.com,40.0992,-83.1141 +nostr.aruku.ovh,1.27994,103.849 +nostr.night7.space,50.4754,12.3683 +wot.shaving.kiwi,43.6532,-79.3832 +relay.snort.social,53.3498,-6.26031 +nostrelay.circum.space:443,52.3676,4.90414 +relay.endfiat.money,59.3327,18.0656 +nostr.overmind.lol,43.6532,-79.3832 +relay.mostr.pub,43.6532,-79.3832 +nostr.girino.org,43.6532,-79.3832 +nos.lol:443,50.4754,12.3683 +nostr.bitcoiner.social,47.6743,-117.112 +relay.agorist.space,52.3734,4.89406 +herbstmeister.com,34.0549,-118.243 +relay.artx.market,43.6548,-79.3885 +nostr2.girino.org,43.6532,-79.3832 +portal-relay.pareto.space,49.0291,8.35696 +testr.nymble.world,40.8054,-74.0241 +wot.utxo.one,43.6532,-79.3832 +relay.gulugulu.moe:443,43.6532,-79.3832 +nostr-rs-relay.dev.fedibtc.com,39.0438,-77.4874 +nostr.hifish.org,47.4244,8.57658 +relay-arg.zombi.cloudrodion.com,1.35208,103.82 +relay.openresist.com,43.6532,-79.3832 +x.kojira.io,43.6532,-79.3832 +relay.sovbit.dev,60.1699,24.9384 +relay.agentry.com:443,42.8864,-78.8784 +relay.vrtmrz.net:443,43.6532,-79.3832 +bitcoiner.social,47.6743,-117.112 +testnet-relay.samt.st:443,40.8302,-74.1299 +nostr-dev.wellorder.net,45.5201,-122.99 +relay.guggero.org,46.5971,9.59652 +nostr.ps1829.com:443,33.8851,130.883 +relay.sigit.io:443,50.4754,12.3683 +relay.openfarmtools.org,60.1699,24.9384 +wot.makenomistakes.ca,43.7064,-79.3986 +relay.paulstephenborile.com:443,49.4543,11.0746 +freelay.sovbit.dev:443,60.1699,24.9384 +relay.arx-ccn.com,50.4754,12.3683 +relayone.soundhsa.com,39.1008,-94.5811 +relay.olas.app:443,60.1699,24.9384 +nostr.chaima.info:443,50.1109,8.68213 +relay.getsafebox.app:443,43.6532,-79.3832 +nostr.pbfs.io,50.4754,12.3683 +nostr-relay.amethyst.name:443,39.0438,-77.4874 +test.thedude.cloud,50.1109,8.68213 +relay.laantungir.net:443,-19.4692,-42.5315 +nrs-02.darkcloudarcade.com:443,39.9526,-75.1652 +relay.nostrhub.fr,48.1045,11.6004 +relay.lanacoin-eternity.com,40.8302,-74.1299 +nostrelay.circum.space,52.3676,4.90414 +slick.mjex.me,39.0418,-77.4744 +relay-testnet.k8s.layer3.news,37.3387,-121.885 +bbw-nostr.xyz,41.5284,-87.4237 +relay.underorion.se,50.1109,8.68213 +relay.minibolt.info,43.6532,-79.3832 +relay.mccormick.cx:443,52.3563,4.95714 +relay.toastr.net,40.8054,-74.0241 +relay.mostro.network,40.8302,-74.1299 +nas01xanthosnet.synology.me:7778,47.1285,8.74735 +relay.getsafebox.app,43.6532,-79.3832 +strfry.apps3.slidestr.net,40.4167,-3.70329 +nostr.bitczat.pl:443,60.1699,24.9384 +dev.relay.edufeed.org,49.4521,11.0767 +relay.cypherflow.ai,48.8575,2.35138 +blossom.gnostr.cloud:443,43.6532,-79.3832 +nostr.bitczat.pl,60.1699,24.9384 +relay.sigit.io,50.4754,12.3683 +chat-relay.zap-work.com,43.6532,-79.3832 +relay.mccormick.cx,52.3563,4.95714 +relay.nostriot.com,41.5695,-83.9786 +nostr-relay.cbrx.io,43.6532,-79.3832 +relay.nostx.io,43.6532,-79.3832 +nittom.nostr1.com,40.7057,-74.0136 +nrs-02.darkcloudarcade.com,39.9526,-75.1652 +offchain.pub,39.1585,-94.5728 +relay.sharegap.net,43.6532,-79.3832 +ynostr.yael.at,60.1699,24.9384 +relay.endfiat.money:443,59.3327,18.0656 +nostr.rtvslawenia.com:443,49.4543,11.0746 +relay.dyne.org,49.0291,8.35705 +relay.edufeed.org:443,49.4521,11.0767 +nostr.twinkle.lol,51.902,7.6657 +relay.illuminodes.com,43.6532,-79.3832 +ribo.nostria.app,43.6532,-79.3832 +relay.nostrian-conquest.com,41.223,-111.974 +nostr.islandarea.net:443,35.4669,-97.6473 +relay.threenine.services,51.5222,-0.62916 +relay.bao.network,43.6532,-79.3832 +dm-test-strfry-generic.samt.st,43.6532,-79.3832 +relay.wavefunc.live,41.8781,-87.6298 +x.kojira.io:443,43.6532,-79.3832 +relay-arg.zombi.cloudrodion.com:443,1.35208,103.82 +wot.dergigi.com,64.1476,-21.9392 +relay.mostr.pub:443,43.6532,-79.3832 +nostr.rtvslawenia.com,49.4543,11.0746 +nostr.ps1829.com,33.8851,130.883 +relay.nostr.place:443,43.6532,-79.3832 +blossom.gnostr.cloud,43.6532,-79.3832 +openrelay.ziomc.com,50.0755,14.4378 +nostr.robosats.org:443,64.1476,-21.9392 +relay.wavlake.com:443,41.2619,-95.8608 +relay.nostrmap.net,60.1699,24.9384 +offchain.bostr.online,43.6532,-79.3832 +nostr.stakey.net:443,52.3676,4.90414 +relay1.nostrchat.io,60.1699,24.9384 +rilo.nostria.app,43.6532,-79.3832 +relay.fundstr.me,42.3601,-71.0589 +nostrja-kari.heguro.com,43.6532,-79.3832 +relay.internationalright-wing.org,-22.5022,-48.7114 +vault.iris.to,43.6532,-79.3832 +relay-dev.satlantis.io,40.8302,-74.1299 +nostr.notribe.net,40.8302,-74.1299 +nostr.purpura.cloud,43.6532,-79.3832 +nostr.spaceshell.xyz,43.6532,-79.3832 +temp.iris.to,43.6532,-79.3832 +us-east.nostr.pikachat.org:443,39.0438,-77.4874 +nostr.unkn0wn.world,46.8499,9.53287 +nexus.libernet.app:443,43.6532,-79.3832 +articles.layer3.news:443,37.3387,-121.885 +nostr.tadryanom.me,43.6532,-79.3832 +fanfares.nostr1.com:443,40.7057,-74.0136 +relay5.bitransfer.org,43.6532,-79.3832 +testnet-relay.samt.st,40.8302,-74.1299 +nostr.janx.com,43.6532,-79.3832 +relay.gulugulu.moe,43.6532,-79.3832 +relay.staging.commonshub.brussels,49.4543,11.0746 +social.amanah.eblessing.co,48.1046,11.6002 +nostr-rs-relay-ishosta.phamthanh.me,43.6532,-79.3832 +relay.lacompagniemaximus.com,45.3147,-73.8785 +relay.trotters.cc,43.6532,-79.3832 +nostr.2b9t.xyz:443,34.0549,-118.243 +nostr.bitcoiner.social:443,47.6743,-117.112 +nostr.nodesmap.com,59.3327,18.0656 +nostr.0x7e.xyz,47.4857,8.72929 +relay2.angor.io,48.1046,11.6002 +relay.jeffg.fyi:443,43.6532,-79.3832 +relay.routstr.com,59.4016,17.9455 +nostr.0x7e.xyz:443,47.4857,8.72929 +nostr-relay.psfoundation.info,39.0438,-77.4874 +relay.nearhood.co.uk,51.5072,-0.127586 +relay.trotters.cc:443,43.6532,-79.3832 +nostr.myshosholoza.co.za:443,52.3913,4.66545 +nostr.bond,50.1109,8.68213 +nostr.faultables.net,43.6532,-79.3832 +aeon.libretechsystems.xyz,55.486,9.86577 +cache.trustr.ing,43.6548,-79.3885 +relay.flashapp.me,43.6548,-79.3885 +dev-relay.nostreon.com,60.1699,24.9384 +0x-nostr-relay.fly.dev,37.7648,-122.432 +relay.ditto.pub,43.6532,-79.3832 +nostr.wecsats.io:443,43.6532,-79.3832 +premium.primal.net,43.6532,-79.3832 +relay.notoshi.win,13.966,101.513 +no.str.cr,9.27447,-83.5797 +nostr-pub.wellorder.net,45.5201,-122.99 +satsage.xyz,37.3986,-121.964 +relay.nostrmap.net:443,60.1699,24.9384 +testnet.samt.st,43.6532,-79.3832 +nostr.plantroon.com:443,50.1013,8.62643 +relay.mwaters.net,50.9871,2.12554 +relay.wisp.talk,49.4543,11.0746 +nostr.computingcache.com:443,34.0356,-118.442 +public.crostr.com,43.6532,-79.3832 +relay-rpi.edufeed.org,49.4521,11.0767 +relay.notoshi.win:443,13.966,101.513 From ab0da61533a1091ee2d50168d587985ff9ef18ff Mon Sep 17 00:00:00 2001 From: jack <212554440+jackjackbits@users.noreply.github.com> Date: Sun, 31 May 2026 13:58:27 +0200 Subject: [PATCH 012/216] [codex] Refactor BLE transport event handling (#1266) * Refactor BLE transport event handling * Make image output paths unique * Keep queued Nostr read receipts alive * Allow self-authored RSR ingress replies --------- Co-authored-by: jack --- bitchat/Features/media/ImageUtils.swift | 2 +- .../Services/BLE/BLEOutboundWriteBuffer.swift | 83 +++++ bitchat/Services/BLE/BLEService.swift | 306 ++++++++++-------- bitchat/Services/NostrTransport.swift | 7 +- .../NotificationStreamAssembler.swift | 21 ++ bitchat/Services/Transport.swift | 51 +++ bitchat/Sync/GossipSyncManager.swift | 19 +- bitchat/ViewModels/ChatViewModel.swift | 7 +- .../ChatViewModelBootstrapper.swift | 1 + bitchatTests/BLEServiceCoreTests.swift | 71 ++++ bitchatTests/ChatViewModelTests.swift | 2 + bitchatTests/Features/ImageUtilsTests.swift | 15 + bitchatTests/GossipSyncManagerTests.swift | 37 ++- bitchatTests/Mocks/MockTransport.swift | 1 + .../NotificationStreamAssemblerTests.swift | 21 ++ bitchatTests/ProtocolContractTests.swift | 1 + .../BLEOutboundWriteBufferTests.swift | 75 +++++ .../Services/NostrTransportTests.swift | 1 + docs/ARCHITECTURE_V2.md | 6 + 19 files changed, 575 insertions(+), 152 deletions(-) create mode 100644 bitchat/Services/BLE/BLEOutboundWriteBuffer.swift create mode 100644 bitchatTests/Services/BLEOutboundWriteBufferTests.swift diff --git a/bitchat/Features/media/ImageUtils.swift b/bitchat/Features/media/ImageUtils.swift index af6a37af..f362c709 100644 --- a/bitchat/Features/media/ImageUtils.swift +++ b/bitchat/Features/media/ImageUtils.swift @@ -189,7 +189,7 @@ enum ImageUtils { private static func makeOutputURL() throws -> URL { let formatter = DateFormatter() formatter.dateFormat = "yyyyMMdd_HHmmss" - let fileName = "img_\(formatter.string(from: Date())).jpg" + let fileName = "img_\(formatter.string(from: Date()))_\(UUID().uuidString).jpg" let directory = try applicationFilesDirectory().appendingPathComponent("images/outgoing", isDirectory: true) try FileManager.default.createDirectory(at: directory, withIntermediateDirectories: true, attributes: nil) diff --git a/bitchat/Services/BLE/BLEOutboundWriteBuffer.swift b/bitchat/Services/BLE/BLEOutboundWriteBuffer.swift new file mode 100644 index 00000000..f1bbbee7 --- /dev/null +++ b/bitchat/Services/BLE/BLEOutboundWriteBuffer.swift @@ -0,0 +1,83 @@ +import Foundation + +struct BLEOutboundWritePriority: Comparable { + let level: Int + let suborder: Int + + static let high = BLEOutboundWritePriority(level: 0, suborder: 0) + + static func fragment(totalFragments: Int) -> BLEOutboundWritePriority { + BLEOutboundWritePriority(level: 1, suborder: max(1, min(totalFragments, Int(UInt16.max)))) + } + + static let fileTransfer = BLEOutboundWritePriority(level: 2, suborder: Int.max - 1) + static let low = BLEOutboundWritePriority(level: 2, suborder: Int.max) + + static func < (lhs: BLEOutboundWritePriority, rhs: BLEOutboundWritePriority) -> Bool { + if lhs.level != rhs.level { return lhs.level < rhs.level } + return lhs.suborder < rhs.suborder + } +} + +struct BLEPendingWrite { + let priority: BLEOutboundWritePriority + let data: Data +} + +struct BLEOutboundWriteBuffer { + enum EnqueueResult { + case enqueued(trimmedBytes: Int, remainingBytes: Int) + case oversized(bytes: Int) + } + + private var writesByPeripheralID: [String: [BLEPendingWrite]] = [:] + + var peripheralIDs: [String] { + Array(writesByPeripheralID.keys) + } + + mutating func removeAll() { + writesByPeripheralID.removeAll() + } + + mutating func enqueue( + data: Data, + for peripheralID: String, + priority: BLEOutboundWritePriority, + capBytes: Int + ) -> EnqueueResult { + guard data.count <= capBytes else { + return .oversized(bytes: data.count) + } + + var queue = writesByPeripheralID[peripheralID] ?? [] + let item = BLEPendingWrite(priority: priority, data: data) + let insertIndex = queue.firstIndex { item.priority < $0.priority } ?? queue.count + queue.insert(item, at: insertIndex) + + var total = queue.reduce(0) { $0 + $1.data.count } + var trimmedBytes = 0 + + while total > capBytes && !queue.isEmpty { + let removed = queue.removeLast() + trimmedBytes += removed.data.count + total -= removed.data.count + } + + writesByPeripheralID[peripheralID] = queue.isEmpty ? nil : queue + return .enqueued(trimmedBytes: trimmedBytes, remainingBytes: total) + } + + mutating func takeAll(for peripheralID: String) -> [BLEPendingWrite] { + let items = writesByPeripheralID[peripheralID] ?? [] + writesByPeripheralID[peripheralID] = nil + return items + } + + mutating func prepend(_ items: [BLEPendingWrite], for peripheralID: String) { + guard !items.isEmpty else { return } + var existing = writesByPeripheralID[peripheralID] ?? [] + existing.insert(contentsOf: items, at: 0) + writesByPeripheralID[peripheralID] = existing + } +} diff --git a/bitchat/Services/BLE/BLEService.swift b/bitchat/Services/BLE/BLEService.swift index 055c254f..be764f9b 100644 --- a/bitchat/Services/BLE/BLEService.swift +++ b/bitchat/Services/BLE/BLEService.swift @@ -155,27 +155,6 @@ final class BLEService: NSObject { } private var ingressByMessageID: [String: (link: LinkID, timestamp: Date)] = [:] - // Backpressure-aware write queue per peripheral - private struct OutboundPriority: Comparable { - let level: Int - let suborder: Int - - static let high = OutboundPriority(level: 0, suborder: 0) - static func fragment(totalFragments: Int) -> OutboundPriority { - OutboundPriority(level: 1, suborder: max(1, min(totalFragments, Int(UInt16.max)))) - } - static let fileTransfer = OutboundPriority(level: 2, suborder: Int.max - 1) - static let low = OutboundPriority(level: 2, suborder: Int.max) - - static func < (lhs: OutboundPriority, rhs: OutboundPriority) -> Bool { - if lhs.level != rhs.level { return lhs.level < rhs.level } - return lhs.suborder < rhs.suborder - } - } - private struct PendingWrite { - let priority: OutboundPriority - let data: Data - } private struct PendingFragmentTransfer { let packet: BitchatPacket let pad: Bool @@ -183,7 +162,7 @@ final class BLEService: NSObject { let directedPeer: PeerID? let transferId: String? } - private var pendingPeripheralWrites: [String: [PendingWrite]] = [:] + private var pendingPeripheralWrites = BLEOutboundWriteBuffer() private var pendingFragmentTransfers: [PendingFragmentTransfer] = [] // Debounce duplicate disconnect notifies private var recentDisconnectNotifies: [PeerID: Date] = [:] @@ -465,8 +444,9 @@ final class BLEService: NSObject { // MARK: - Transport Protocol Conformance // MARK: Delegates - + weak var delegate: BitchatDelegate? + weak var eventDelegate: TransportEventDelegate? weak var peerEventsDelegate: TransportPeerEventsDelegate? // MARK: Peer snapshots publisher (non-UI convenience) @@ -839,6 +819,44 @@ final class BLEService: NSObject { case unknown } + private struct IngressPacketContext { + let receivedFromPeerID: PeerID + let validationPeerID: PeerID + } + + private func requiresDirectSenderBinding(_ packet: BitchatPacket) -> Bool { + packet.type == MessageType.announce.rawValue && packet.ttl == messageTTL + } + + private func isSelfAuthoredSyncResponse(_ packet: BitchatPacket) -> Bool { + packet.isRSR && packet.ttl == 0 + } + + private func makeIngressPacketContext( + for packet: BitchatPacket, + claimedSenderID: PeerID, + boundPeerID: PeerID?, + linkDescription: String + ) -> IngressPacketContext? { + if claimedSenderID == myPeerID, + !isSelfAuthoredSyncResponse(packet) { + SecureLogger.debug("↩️ Dropping BLE self-loopback packet type \(packet.type) from \(linkDescription)", category: .session) + return nil + } + + if let boundPeerID, boundPeerID != claimedSenderID, requiresDirectSenderBinding(packet) { + SecureLogger.warning("🚫 SECURITY: Sender ID spoofing attempt detected! \(linkDescription) claimed to be \(claimedSenderID.id.prefix(8))… but is bound to \(boundPeerID.id.prefix(8))…", category: .security) + return nil + } + + let receivedFromPeerID = boundPeerID ?? claimedSenderID + let validationPeerID = packet.isRSR ? receivedFromPeerID : claimedSenderID + return IngressPacketContext( + receivedFromPeerID: receivedFromPeerID, + validationPeerID: validationPeerID + ) + } + private func validatePacket(_ packet: BitchatPacket, from peerID: PeerID, connectionSource: ConnectionSource = .unknown) -> Bool { let currentTime = UInt64(Date().timeIntervalSince1970 * 1000) @@ -869,6 +887,21 @@ final class BLEService: NSObject { return true } + private func recordIngressIfNew(_ packet: BitchatPacket, link: LinkID) -> Bool { + let messageID = makeMessageID(for: packet) + let now = Date() + + return collectionsQueue.sync(flags: .barrier) { + if let existing = ingressByMessageID[messageID], + now.timeIntervalSince(existing.timestamp) <= TransportConfig.bleIngressRecordLifetimeSeconds { + return false + } + + ingressByMessageID[messageID] = (link, now) + return true + } + } + // MARK: - Packet Broadcasting private func broadcastPacket(_ packet: BitchatPacket, transferId: String? = nil) { @@ -1253,9 +1286,7 @@ final class BLEService: NSObject { SecureLogger.debug("📁 Stored incoming media from \(peerID.id.prefix(8))… -> \(destination.lastPathComponent)", category: .session) - notifyUI { [weak self] in - self?.delegate?.didReceiveMessage(message) - } + emitTransportEvent(.messageReceived(message)) } func sendFavoriteNotification(to peerID: PeerID, isFavorite: Bool) { @@ -1324,8 +1355,8 @@ final class BLEService: NSObject { // Get current peer list (after removal) let currentPeerIDs = self.collectionsQueue.sync { Array(self.peers.keys) } - self.delegate?.didDisconnectFromPeer(peerID) - self.delegate?.didUpdatePeerList(currentPeerIDs) + self.deliverTransportEvent(.peerDisconnected(peerID)) + self.deliverTransportEvent(.peerListUpdated(currentPeerIDs)) } } @@ -1647,10 +1678,7 @@ extension BLEService: CBCentralManagerDelegate { #endif func centralManagerDidUpdateState(_ central: CBCentralManager) { - // Notify delegate about state change on main thread - Task { @MainActor in - self.delegate?.didUpdateBluetoothState(central.state) - } + emitTransportEvent(.bluetoothStateUpdated(central.state)) switch central.state { case .poweredOn: @@ -1939,7 +1967,7 @@ func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeriph self.notifyPeerDisconnectedDebounced(peerID) } self.requestPeerDataPublish() - self.delegate?.didUpdatePeerList(currentPeerIDs) + self.deliverTransportEvent(.peerListUpdated(currentPeerIDs)) } } @@ -2056,6 +2084,20 @@ extension BLEService { } handleReceivedPacket(packet, from: fromPeerID) } + + func _test_acceptsIngress(packet: BitchatPacket, boundPeerID: PeerID?) -> Bool { + let claimedSenderID = PeerID(hexData: packet.senderID) + return makeIngressPacketContext( + for: packet, + claimedSenderID: claimedSenderID, + boundPeerID: boundPeerID, + linkDescription: "TestLink" + ) != nil + } + + func _test_recordIngressIfNew(packet: BitchatPacket, linkID: String) -> Bool { + recordIngressIfNew(packet, link: .central(linkID)) + } } #endif @@ -2193,19 +2235,16 @@ extension BLEService: CBPeripheralDelegate { } let claimedSenderID = PeerID(hexData: packet.senderID) + let context = makeIngressPacketContext( + for: packet, + claimedSenderID: claimedSenderID, + boundPeerID: boundPeerID, + linkDescription: "Peripheral \(peripheralUUID.prefix(8))…" + ) - let trustedSenderID: PeerID? - if let knownPeerID = boundPeerID { - if knownPeerID != claimedSenderID { - SecureLogger.warning("🚫 SECURITY: Sender ID spoofing attempt detected! Peripheral \(peripheralUUID.prefix(8))… claimed to be \(claimedSenderID.id.prefix(8))… but is bound to \(knownPeerID.id.prefix(8))…", category: .security) - continue - } - trustedSenderID = knownPeerID - } else { - trustedSenderID = nil - } + guard let context else { continue } - if !validatePacket(packet, from: trustedSenderID ?? claimedSenderID, connectionSource: .peripheral(peripheralUUID)) { + if !validatePacket(packet, from: context.validationPeerID, connectionSource: .peripheral(peripheralUUID)) { continue } @@ -2217,11 +2256,20 @@ extension BLEService: CBPeripheralDelegate { state.peerID = claimedSenderID peripherals[peripheralUUID] = state } - processNotificationPacket(packet, from: peripheral, peripheralUUID: peripheralUUID) + + if !recordIngressIfNew(packet, link: .peripheral(peripheralUUID)) { + continue + } + processNotificationPacket( + packet, + from: peripheral, + peripheralUUID: peripheralUUID, + receivedFrom: context.receivedFromPeerID + ) } } - private func processNotificationPacket(_ packet: BitchatPacket, from peripheral: CBPeripheral, peripheralUUID: String) { + private func processNotificationPacket(_ packet: BitchatPacket, from peripheral: CBPeripheral, peripheralUUID: String, receivedFrom peerID: PeerID) { let senderID = PeerID(hexData: packet.senderID) if packet.type != MessageType.announce.rawValue { @@ -2238,17 +2286,9 @@ extension BLEService: CBPeripheralDelegate { refreshLocalTopology() } - let msgID = makeMessageID(for: packet) - collectionsQueue.async(flags: .barrier) { [weak self] in - self?.ingressByMessageID[msgID] = (.peripheral(peripheralUUID), Date()) - } - handleReceivedPacket(packet, from: senderID) + handleReceivedPacket(packet, from: peerID) } else { - let msgID = makeMessageID(for: packet) - collectionsQueue.async(flags: .barrier) { [weak self] in - self?.ingressByMessageID[msgID] = (.peripheral(peripheralUUID), Date()) - } - handleReceivedPacket(packet, from: senderID) + handleReceivedPacket(packet, from: peerID) } } @@ -2524,7 +2564,7 @@ extension BLEService: CBPeripheralManagerDelegate { self.notifyPeerDisconnectedDebounced(peerID) // Publish snapshots so UnifiedPeerService can refresh icons promptly self.requestPeerDataPublish() - self.delegate?.didUpdatePeerList(currentPeerIDs) + self.deliverTransportEvent(.peerListUpdated(currentPeerIDs)) } } } @@ -2633,19 +2673,15 @@ extension BLEService: CBPeripheralManagerDelegate { pendingWriteBuffers.removeValue(forKey: centralUUID) let claimedSenderID = PeerID(hexData: packet.senderID) + let context = makeIngressPacketContext( + for: packet, + claimedSenderID: claimedSenderID, + boundPeerID: centralToPeerID[centralUUID], + linkDescription: "Central \(centralUUID.prefix(8))…" + ) + guard let context else { continue } - let trustedSenderID: PeerID? - if let knownPeerID = centralToPeerID[centralUUID] { - if knownPeerID != claimedSenderID { - SecureLogger.warning("🚫 SECURITY: Sender ID spoofing attempt detected! Central \(centralUUID.prefix(8))… claimed to be \(claimedSenderID.id.prefix(8))… but is bound to \(knownPeerID.id.prefix(8))…", category: .security) - continue - } - trustedSenderID = knownPeerID - } else { - trustedSenderID = nil - } - - if !validatePacket(packet, from: trustedSenderID ?? claimedSenderID, connectionSource: .central(centralUUID)) { + if !validatePacket(packet, from: context.validationPeerID, connectionSource: .central(centralUUID)) { continue } @@ -2660,19 +2696,15 @@ extension BLEService: CBPeripheralManagerDelegate { centralToPeerID[centralUUID] = claimedSenderID refreshLocalTopology() } - // Record ingress link for last-hop suppression then process - let msgID = makeMessageID(for: packet) - collectionsQueue.async(flags: .barrier) { [weak self] in - self?.ingressByMessageID[msgID] = (.central(centralUUID), Date()) + if !recordIngressIfNew(packet, link: .central(centralUUID)) { + continue } - handleReceivedPacket(packet, from: claimedSenderID) + handleReceivedPacket(packet, from: context.receivedFromPeerID) } else { - // Record ingress link for last-hop suppression then process - let msgID = makeMessageID(for: packet) - collectionsQueue.async(flags: .barrier) { [weak self] in - self?.ingressByMessageID[msgID] = (.central(centralUUID), Date()) + if !recordIngressIfNew(packet, link: .central(centralUUID)) { + continue } - handleReceivedPacket(packet, from: claimedSenderID) + handleReceivedPacket(packet, from: context.receivedFromPeerID) } } else { // If buffer grows suspiciously large, reset to avoid memory leak @@ -2709,13 +2741,28 @@ extension BLEService { extension BLEService { /// Notify UI on the MainActor to satisfy Swift concurrency isolation - private func notifyUI(_ block: @escaping () -> Void) { + private func notifyUI(_ block: @escaping @MainActor () -> Void) { // Always hop onto the MainActor so calls to @MainActor delegates are safe Task { @MainActor in block() } } + private func emitTransportEvent(_ event: TransportEvent) { + notifyUI { [weak self] in + self?.deliverTransportEvent(event) + } + } + + @MainActor + private func deliverTransportEvent(_ event: TransportEvent) { + if let eventDelegate { + eventDelegate.didReceiveTransportEvent(event) + } else { + delegate?.receiveTransportEvent(event) + } + } + private func logBluetoothStatus(_ context: String) { bleQueue.async { [weak self] in guard let self = self else { return } @@ -2983,12 +3030,12 @@ extension BLEService { return Set(scored.prefix(k).map { $0.id }) } - private func priority(for packet: BitchatPacket, data: Data) -> OutboundPriority { + private func priority(for packet: BitchatPacket, data: Data) -> BLEOutboundWritePriority { guard let messageType = MessageType(rawValue: packet.type) else { return .low } switch messageType { case .fragment: let total = fragmentTotalCount(from: packet.payload) - return OutboundPriority.fragment(totalFragments: total) + return BLEOutboundWritePriority.fragment(totalFragments: total) case .fileTransfer: return .fileTransfer default: @@ -3004,7 +3051,7 @@ extension BLEService { return max(total, 1) } - private func writeOrEnqueue(_ data: Data, to peripheral: CBPeripheral, characteristic: CBCharacteristic, priority: OutboundPriority) { + private func writeOrEnqueue(_ data: Data, to peripheral: CBPeripheral, characteristic: CBCharacteristic, priority: BLEOutboundWritePriority) { // BLE operations run on bleQueue; keep queue affinity bleQueue.async { [weak self] in guard let self = self else { return } @@ -3013,29 +3060,20 @@ extension BLEService { peripheral.writeValue(data, for: characteristic, type: .withoutResponse) } else { self.collectionsQueue.async(flags: .barrier) { - var queue = self.pendingPeripheralWrites[uuid] ?? [] - let capBytes = TransportConfig.blePendingWriteBufferCapBytes - let newSize = data.count - // If single chunk exceeds cap, drop it immediately - if newSize > capBytes { - SecureLogger.warning("⚠️ Dropping oversized write chunk (\(newSize)B) for peripheral \(uuid)", category: .session) - } else { - let item = PendingWrite(priority: priority, data: data) - var total = queue.reduce(0) { $0 + $1.data.count } + newSize - let insertIndex = queue.firstIndex { item.priority < $0.priority } ?? queue.count - queue.insert(item, at: insertIndex) - if total > capBytes { - var removedBytes = 0 - while total > capBytes && !queue.isEmpty { - let removed = queue.removeLast() - removedBytes += removed.data.count - total -= removed.data.count - } - if removedBytes > 0 { - SecureLogger.warning("📉 Trimmed pending write buffer for \(uuid) by \(removedBytes)B to \(total)B", category: .session) - } - } - self.pendingPeripheralWrites[uuid] = queue.isEmpty ? nil : queue + let result = self.pendingPeripheralWrites.enqueue( + data: data, + for: uuid, + priority: priority, + capBytes: TransportConfig.blePendingWriteBufferCapBytes + ) + + switch result { + case .oversized(let bytes): + SecureLogger.warning("⚠️ Dropping oversized write chunk (\(bytes)B) for peripheral \(uuid)", category: .session) + case let .enqueued(trimmedBytes, remainingBytes) where trimmedBytes > 0: + SecureLogger.warning("📉 Trimmed pending write buffer for \(uuid) by \(trimmedBytes)B to \(remainingBytes)B", category: .session) + case .enqueued: + break } } } @@ -3050,10 +3088,8 @@ extension BLEService { // Atomically take all pending items from the queue to avoid race conditions // where new items could be enqueued between read and update - let itemsToSend: [PendingWrite] = self.collectionsQueue.sync(flags: .barrier) { - let items = self.pendingPeripheralWrites[uuid] ?? [] - self.pendingPeripheralWrites[uuid] = nil - return items + let itemsToSend: [BLEPendingWrite] = self.collectionsQueue.sync(flags: .barrier) { + self.pendingPeripheralWrites.takeAll(for: uuid) } guard !itemsToSend.isEmpty else { return } @@ -3072,10 +3108,7 @@ extension BLEService { let unsent = Array(itemsToSend.dropFirst(sent)) if !unsent.isEmpty { self.collectionsQueue.async(flags: .barrier) { - var existing = self.pendingPeripheralWrites[uuid] ?? [] - // Prepend unsent items to maintain priority order - existing.insert(contentsOf: unsent, at: 0) - self.pendingPeripheralWrites[uuid] = existing + self.pendingPeripheralWrites.prepend(unsent, for: uuid) } } } @@ -3118,7 +3151,7 @@ extension BLEService { /// Periodically try to drain pending writes for all connected peripherals private func drainAllPendingWrites() { - let uuids = collectionsQueue.sync { Array(pendingPeripheralWrites.keys) } + let uuids = collectionsQueue.sync { pendingPeripheralWrites.peripheralIDs } for uuid in uuids { guard let state = peripherals[uuid], state.isConnected else { continue } drainPendingWrites(for: state.peripheral) @@ -3205,7 +3238,7 @@ extension BLEService { // Notify delegate that message was sent notifyUI { [weak self] in - self?.delegate?.didUpdateMessageDeliveryStatus(messageID, status: .sent) + self?.deliverTransportEvent(.messageDeliveryStatusUpdated(messageID: messageID, status: .sent)) } } catch { SecureLogger.error("Failed to encrypt message: \(error)") @@ -3226,7 +3259,7 @@ extension BLEService { // Notify delegate that message is pending notifyUI { [weak self] in - self?.delegate?.didUpdateMessageDeliveryStatus(messageID, status: .sending) + self?.deliverTransportEvent(.messageDeliveryStatusUpdated(messageID: messageID, status: .sending)) } } } @@ -3300,7 +3333,7 @@ extension BLEService { // Notify delegate that message was sent notifyUI { [weak self] in - self?.delegate?.didUpdateMessageDeliveryStatus(messageID, status: .sent) + self?.deliverTransportEvent(.messageDeliveryStatusUpdated(messageID: messageID, status: .sent)) } SecureLogger.debug("✅ Sent pending message \(messageID) to \(peerID) after handshake", category: .session) @@ -3310,7 +3343,7 @@ extension BLEService { // Notify delegate of failure notifyUI { [weak self] in - self?.delegate?.didUpdateMessageDeliveryStatus(messageID, status: .failed(reason: "Encryption failed")) + self?.deliverTransportEvent(.messageDeliveryStatusUpdated(messageID: messageID, status: .failed(reason: "Encryption failed"))) } } } @@ -3972,13 +4005,13 @@ extension BLEService { // Only notify of connection for new or reconnected peers when it is a direct announce if (packet.ttl == self.messageTTL) && (isNewPeer || isReconnectedPeer) { - self.delegate?.didConnectToPeer(peerID) + self.deliverTransportEvent(.peerConnected(peerID)) // Schedule initial unicast sync to this peer self.gossipSyncManager?.scheduleInitialSyncToPeer(peerID, delaySeconds: 1.0) } self.requestPeerDataPublish() - self.delegate?.didUpdatePeerList(currentPeerIDs) + self.deliverTransportEvent(.peerListUpdated(currentPeerIDs)) } // Track for sync (include our own and others' announces) @@ -4115,11 +4148,15 @@ extension BLEService { resolvedSelfMessageID = selfBroadcastMessageIDs.removeValue(forKey: dedupID)?.id } notifyUI { [weak self] in - self?.delegate?.didReceivePublicMessage(from: peerID, - nickname: senderNickname, - content: content, - timestamp: ts, - messageID: resolvedSelfMessageID) + self?.deliverTransportEvent( + .publicMessageReceived( + peerID: peerID, + nickname: senderNickname, + content: content, + timestamp: ts, + messageID: resolvedSelfMessageID + ) + ) } } @@ -4183,27 +4220,27 @@ extension BLEService { case .privateMessage: let ts = Date(timeIntervalSince1970: Double(packet.timestamp) / 1000) notifyUI { [weak self] in - self?.delegate?.didReceiveNoisePayload(from: peerID, type: .privateMessage, payload: Data(payloadData), timestamp: ts) + self?.deliverTransportEvent(.noisePayloadReceived(peerID: peerID, type: .privateMessage, payload: Data(payloadData), timestamp: ts)) } case .delivered: let ts = Date(timeIntervalSince1970: Double(packet.timestamp) / 1000) notifyUI { [weak self] in - self?.delegate?.didReceiveNoisePayload(from: peerID, type: .delivered, payload: Data(payloadData), timestamp: ts) + self?.deliverTransportEvent(.noisePayloadReceived(peerID: peerID, type: .delivered, payload: Data(payloadData), timestamp: ts)) } case .readReceipt: let ts = Date(timeIntervalSince1970: Double(packet.timestamp) / 1000) notifyUI { [weak self] in - self?.delegate?.didReceiveNoisePayload(from: peerID, type: .readReceipt, payload: Data(payloadData), timestamp: ts) + self?.deliverTransportEvent(.noisePayloadReceived(peerID: peerID, type: .readReceipt, payload: Data(payloadData), timestamp: ts)) } case .verifyChallenge: let ts = Date(timeIntervalSince1970: Double(packet.timestamp) / 1000) notifyUI { [weak self] in - self?.delegate?.didReceiveNoisePayload(from: peerID, type: .verifyChallenge, payload: Data(payloadData), timestamp: ts) + self?.deliverTransportEvent(.noisePayloadReceived(peerID: peerID, type: .verifyChallenge, payload: Data(payloadData), timestamp: ts)) } case .verifyResponse: let ts = Date(timeIntervalSince1970: Double(packet.timestamp) / 1000) notifyUI { [weak self] in - self?.delegate?.didReceiveNoisePayload(from: peerID, type: .verifyResponse, payload: Data(payloadData), timestamp: ts) + self?.deliverTransportEvent(.noisePayloadReceived(peerID: peerID, type: .verifyResponse, payload: Data(payloadData), timestamp: ts)) } case .none: SecureLogger.warning("⚠️ Unknown noise payload type: \(payloadType)") @@ -4264,11 +4301,12 @@ extension BLEService { } // Debounced disconnect notifier to avoid duplicate disconnect callbacks within a short window + @MainActor private func notifyPeerDisconnectedDebounced(_ peerID: PeerID) { let now = Date() let last = recentDisconnectNotifies[peerID] if last == nil || now.timeIntervalSince(last!) >= TransportConfig.bleDisconnectNotifyDebounceSeconds { - delegate?.didDisconnectFromPeer(peerID) + deliverTransportEvent(.peerDisconnected(peerID)) recentDisconnectNotifies[peerID] = now } else { // Suppressed duplicate disconnect notification @@ -4425,11 +4463,11 @@ extension BLEService { let currentPeerIDs = self.collectionsQueue.sync { self.currentPeerIDs } for peerID in disconnectedPeers { - self.delegate?.didDisconnectFromPeer(peerID) + self.deliverTransportEvent(.peerDisconnected(peerID)) } // Publish snapshots so UnifiedPeerService updates connection/reachability icons self.requestPeerDataPublish() - self.delegate?.didUpdatePeerList(currentPeerIDs) + self.deliverTransportEvent(.peerListUpdated(currentPeerIDs)) } } diff --git a/bitchat/Services/NostrTransport.swift b/bitchat/Services/NostrTransport.swift index b822a48b..d38adfc4 100644 --- a/bitchat/Services/NostrTransport.swift +++ b/bitchat/Services/NostrTransport.swift @@ -106,6 +106,7 @@ final class NostrTransport: Transport, @unchecked Sendable { // MARK: - Transport Protocol Conformance weak var delegate: BitchatDelegate? + weak var eventDelegate: TransportEventDelegate? weak var peerEventsDelegate: TransportPeerEventsDelegate? var peerSnapshotPublisher: AnyPublisher<[TransportPeerSnapshot], Never> { @@ -173,9 +174,9 @@ final class NostrTransport: Transport, @unchecked Sendable { func sendReadReceipt(_ receipt: ReadReceipt, to peerID: PeerID) { // Enqueue and process with throttling to avoid relay rate limits // Use barrier to synchronize access to readQueue - queue.async(flags: .barrier) { [weak self] in - self?.readQueue.append(QueuedRead(receipt: receipt, peerID: peerID)) - self?.processReadQueueIfNeeded() + queue.async(flags: .barrier) { + self.readQueue.append(QueuedRead(receipt: receipt, peerID: peerID)) + self.processReadQueueIfNeeded() } } diff --git a/bitchat/Services/NotificationStreamAssembler.swift b/bitchat/Services/NotificationStreamAssembler.swift index 0a46ffbd..c4ebb25d 100644 --- a/bitchat/Services/NotificationStreamAssembler.swift +++ b/bitchat/Services/NotificationStreamAssembler.swift @@ -21,6 +21,19 @@ struct NotificationStreamAssembler { pendingFrameExpectedLength = 0 } + private mutating func discardLeadingPaddingIfPresent() -> Bool { + guard let first = buffer.first else { return false } + guard first != 1 && first != 2 else { return false } + let paddingLength = Int(first) + guard paddingLength > 0, paddingLength <= buffer.count else { return false } + guard buffer.prefix(paddingLength).allSatisfy({ $0 == first }) else { return false } + + buffer.removeFirst(paddingLength) + pendingFrameStartedAt = nil + pendingFrameExpectedLength = 0 + return true + } + mutating func append(_ chunk: Data) -> (frames: [Data], droppedPrefixes: [UInt8], reset: Bool) { guard !chunk.isEmpty else { return ([], [], false) } @@ -42,6 +55,9 @@ struct NotificationStreamAssembler { while buffer.count >= minimumFramePrefix { guard let version = buffer.first else { break } guard version == 1 || version == 2 else { + if discardLeadingPaddingIfPresent() { + continue + } dropped.append(buffer.removeFirst()) pendingFrameStartedAt = nil pendingFrameExpectedLength = 0 @@ -133,6 +149,11 @@ struct NotificationStreamAssembler { let frame = Data(buffer.prefix(frameLength)) frames.append(frame) buffer.removeFirst(frameLength) + _ = discardLeadingPaddingIfPresent() + } + + if discardLeadingPaddingIfPresent() { + return (frames, dropped, didReset) } if !buffer.isEmpty, buffer.allSatisfy({ $0 == 0 }) { diff --git a/bitchat/Services/Transport.swift b/bitchat/Services/Transport.swift index 8f7fd03d..72c6d542 100644 --- a/bitchat/Services/Transport.swift +++ b/bitchat/Services/Transport.swift @@ -1,6 +1,7 @@ import BitFoundation import Foundation import Combine +import CoreBluetooth /// Abstract transport interface used by ChatViewModel and services. /// BLEService implements this protocol; a future Nostr transport can too. @@ -12,9 +13,27 @@ struct TransportPeerSnapshot: Equatable, Hashable { let lastSeen: Date } +enum TransportEvent: @unchecked Sendable { + case messageReceived(BitchatMessage) + case publicMessageReceived(peerID: PeerID, nickname: String, content: String, timestamp: Date, messageID: String?) + case noisePayloadReceived(peerID: PeerID, type: NoisePayloadType, payload: Data, timestamp: Date) + case peerConnected(PeerID) + case peerDisconnected(PeerID) + case peerListUpdated([PeerID]) + case peerSnapshotsUpdated([TransportPeerSnapshot]) + case messageDeliveryStatusUpdated(messageID: String, status: DeliveryStatus) + case bluetoothStateUpdated(CBManagerState) +} + +protocol TransportEventDelegate: AnyObject { + @MainActor func didReceiveTransportEvent(_ event: TransportEvent) +} + protocol Transport: AnyObject { // Event sink var delegate: BitchatDelegate? { get set } + // Typed event sink for transport-domain events. Prefer this over BitchatDelegate for new code. + var eventDelegate: TransportEventDelegate? { get set } // Peer events (preferred over publishers for UI) var peerEventsDelegate: TransportPeerEventsDelegate? { get set } @@ -84,4 +103,36 @@ protocol TransportPeerEventsDelegate: AnyObject { @MainActor func didUpdatePeerSnapshots(_ peers: [TransportPeerSnapshot]) } +extension BitchatDelegate { + @MainActor + func receiveTransportEvent(_ event: TransportEvent) { + switch event { + case .messageReceived(let message): + didReceiveMessage(message) + case let .publicMessageReceived(peerID, nickname, content, timestamp, messageID): + didReceivePublicMessage( + from: peerID, + nickname: nickname, + content: content, + timestamp: timestamp, + messageID: messageID + ) + case let .noisePayloadReceived(peerID, type, payload, timestamp): + didReceiveNoisePayload(from: peerID, type: type, payload: payload, timestamp: timestamp) + case .peerConnected(let peerID): + didConnectToPeer(peerID) + case .peerDisconnected(let peerID): + didDisconnectFromPeer(peerID) + case .peerListUpdated(let peers): + didUpdatePeerList(peers) + case .peerSnapshotsUpdated: + break + case let .messageDeliveryStatusUpdated(messageID, status): + didUpdateMessageDeliveryStatus(messageID, status: status) + case .bluetoothStateUpdated(let state): + didUpdateBluetoothState(state) + } + } +} + extension BLEService: Transport {} diff --git a/bitchat/Sync/GossipSyncManager.swift b/bitchat/Sync/GossipSyncManager.swift index 1b65f9f9..3c8472d2 100644 --- a/bitchat/Sync/GossipSyncManager.swift +++ b/bitchat/Sync/GossipSyncManager.swift @@ -128,17 +128,15 @@ final class GossipSyncManager { func scheduleInitialSyncToPeer(_ peerID: PeerID, delaySeconds: TimeInterval = 5.0) { queue.asyncAfter(deadline: .now() + delaySeconds) { [weak self] in guard let self = self else { return } - self.sendRequestSync(to: peerID, types: .publicMessages) + + var types: SyncTypeFlags = .publicMessages if self.config.fragmentCapacity > 0 && self.config.fragmentSyncIntervalSeconds > 0 { - self.queue.asyncAfter(deadline: .now() + 0.5) { [weak self] in - self?.sendRequestSync(to: peerID, types: .fragment) - } + types.formUnion(.fragment) } if self.config.fileTransferCapacity > 0 && self.config.fileTransferSyncIntervalSeconds > 0 { - self.queue.asyncAfter(deadline: .now() + 1.0) { [weak self] in - self?.sendRequestSync(to: peerID, types: .fileTransfer) - } + types.formUnion(.fileTransfer) } + self.sendRequestSync(to: peerID, types: types) } } @@ -393,13 +391,18 @@ final class GossipSyncManager { cleanupStaleAnnouncementsIfNeeded(now: now) requestSyncManager.cleanup() // Cleanup expired sync requests + var dueTypes: SyncTypeFlags = [] for index in syncSchedules.indices { guard syncSchedules[index].interval > 0 else { continue } if syncSchedules[index].lastSent == .distantPast || now.timeIntervalSince(syncSchedules[index].lastSent) >= syncSchedules[index].interval { syncSchedules[index].lastSent = now - sendPeriodicSync(for: syncSchedules[index].types) + dueTypes.formUnion(syncSchedules[index].types) } } + + if !dueTypes.isEmpty { + sendPeriodicSync(for: dueTypes) + } } private func cleanupStaleAnnouncementsIfNeeded(now: Date) { diff --git a/bitchat/ViewModels/ChatViewModel.swift b/bitchat/ViewModels/ChatViewModel.swift index 77e418f2..10662a19 100644 --- a/bitchat/ViewModels/ChatViewModel.swift +++ b/bitchat/ViewModels/ChatViewModel.swift @@ -93,7 +93,7 @@ import UniformTypeIdentifiers /// Manages the application state and business logic for BitChat. /// Acts as the primary coordinator between UI components and backend services, /// implementing the BitchatDelegate protocol to handle network events. -final class ChatViewModel: ObservableObject, BitchatDelegate, CommandContextProvider, GeohashParticipantContext, MessageFormattingContext { +final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDelegate, CommandContextProvider, GeohashParticipantContext, MessageFormattingContext { // Use MessageFormattingEngine.Patterns for regex matching (shared, precompiled) typealias Patterns = MessageFormattingEngine.Patterns @@ -1298,6 +1298,11 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, CommandContextProv } // MARK: - Message Reception + + @MainActor + func didReceiveTransportEvent(_ event: TransportEvent) { + receiveTransportEvent(event) + } func didReceiveMessage(_ message: BitchatMessage) { transportEventCoordinator.didReceiveMessage(message) diff --git a/bitchat/ViewModels/ChatViewModelBootstrapper.swift b/bitchat/ViewModels/ChatViewModelBootstrapper.swift index b876ba08..2d7a8a03 100644 --- a/bitchat/ViewModels/ChatViewModelBootstrapper.swift +++ b/bitchat/ViewModels/ChatViewModelBootstrapper.swift @@ -130,6 +130,7 @@ private extension ChatViewModelBootstrapper { func configureTransport() { viewModel.meshService.delegate = viewModel + viewModel.meshService.eventDelegate = viewModel DispatchQueue.main.asyncAfter(deadline: .now() + TransportConfig.uiStartupInitialDelaySeconds) { [weak viewModel] in guard let viewModel else { return } diff --git a/bitchatTests/BLEServiceCoreTests.swift b/bitchatTests/BLEServiceCoreTests.swift index 8849f089..69df87c1 100644 --- a/bitchatTests/BLEServiceCoreTests.swift +++ b/bitchatTests/BLEServiceCoreTests.swift @@ -92,6 +92,77 @@ struct BLEServiceCoreTests { _ = await TestHelpers.waitUntil({ !ble.currentPeerSnapshots().isEmpty }, timeout: 0.3) #expect(ble.currentPeerSnapshots().isEmpty) } + + @Test + func ingressAllowsRelayedSenderOnBoundLink() async throws { + let ble = makeService() + let boundPeer = PeerID(str: "1122334455667788") + let relayedSender = PeerID(str: "8899aabbccddeeff") + let packet = makePublicPacket( + content: "Relayed", + sender: relayedSender, + timestamp: UInt64(Date().timeIntervalSince1970 * 1000) + ) + + #expect(ble._test_acceptsIngress(packet: packet, boundPeerID: boundPeer)) + } + + @Test + func ingressRejectsDirectAnnounceThatConflictsWithBoundLink() async throws { + let ble = makeService() + let boundPeer = PeerID(str: "1122334455667788") + let claimedPeer = PeerID(str: "8899aabbccddeeff") + let packet = BitchatPacket( + type: MessageType.announce.rawValue, + senderID: Data(hexString: claimedPeer.id) ?? Data(), + recipientID: nil, + timestamp: UInt64(Date().timeIntervalSince1970 * 1000), + payload: Data(), + signature: nil, + ttl: 7 + ) + + #expect(!ble._test_acceptsIngress(packet: packet, boundPeerID: boundPeer)) + } + + @Test + func ingressRejectsSelfLoopbackBeforeSpoofChecks() async throws { + let ble = makeService() + let packet = makePublicPacket( + content: "Loopback", + sender: ble.myPeerID, + timestamp: UInt64(Date().timeIntervalSince1970 * 1000) + ) + + #expect(!ble._test_acceptsIngress(packet: packet, boundPeerID: PeerID(str: "1122334455667788"))) + } + + @Test + func ingressAllowsSelfAuthoredRSRWithTTLZeroFromBoundPeer() async throws { + let ble = makeService() + var packet = makePublicPacket( + content: "Recovered by sync", + sender: ble.myPeerID, + timestamp: UInt64(Date().timeIntervalSince1970 * 1000) + ) + packet.isRSR = true + packet.ttl = 0 + + #expect(ble._test_acceptsIngress(packet: packet, boundPeerID: PeerID(str: "1122334455667788"))) + } + + @Test + func ingressRecordSuppressesSecondLinkDuplicate() async throws { + let ble = makeService() + let packet = makePublicPacket( + content: "Duplicate link copy", + sender: PeerID(str: "1122334455667788"), + timestamp: UInt64(Date().timeIntervalSince1970 * 1000) + ) + + #expect(ble._test_recordIngressIfNew(packet: packet, linkID: "central-a")) + #expect(!ble._test_recordIngressIfNew(packet: packet, linkID: "central-b")) + } } private func makeService() -> BLEService { diff --git a/bitchatTests/ChatViewModelTests.swift b/bitchatTests/ChatViewModelTests.swift index d59c911a..19737944 100644 --- a/bitchatTests/ChatViewModelTests.swift +++ b/bitchatTests/ChatViewModelTests.swift @@ -42,6 +42,7 @@ struct ChatViewModelInitializationTests { // The viewModel should set itself as the transport delegate #expect(transport.delegate === viewModel) + #expect(transport.eventDelegate === viewModel) } @Test @MainActor @@ -421,6 +422,7 @@ struct ChatViewModelReceivingTests { // Message may or may not appear due to rate limiting/pipeline batching // The important thing is no crash and delegate was called #expect(transport.delegate === viewModel) + #expect(transport.eventDelegate === viewModel) } @Test @MainActor diff --git a/bitchatTests/Features/ImageUtilsTests.swift b/bitchatTests/Features/ImageUtilsTests.swift index 880403bb..08273244 100644 --- a/bitchatTests/Features/ImageUtilsTests.swift +++ b/bitchatTests/Features/ImageUtilsTests.swift @@ -64,4 +64,19 @@ struct ImageUtilsTests { #expect(data.starts(with: Data([0xFF, 0xD8]))) #expect(data.count > 0) } + + @Test + func processImage_usesUniqueOutputURLs() throws { + let image = makePlatformImage(size: CGSize(width: 64, height: 64)) + let firstURL = try ImageUtils.processImage(image, maxDimension: 64) + let secondURL = try ImageUtils.processImage(image, maxDimension: 64) + defer { + try? FileManager.default.removeItem(at: firstURL) + try? FileManager.default.removeItem(at: secondURL) + } + + #expect(firstURL != secondURL) + #expect(FileManager.default.fileExists(atPath: firstURL.path)) + #expect(FileManager.default.fileExists(atPath: secondURL.path)) + } } diff --git a/bitchatTests/GossipSyncManagerTests.swift b/bitchatTests/GossipSyncManagerTests.swift index 9d45da98..54e65afc 100644 --- a/bitchatTests/GossipSyncManagerTests.swift +++ b/bitchatTests/GossipSyncManagerTests.swift @@ -195,12 +195,39 @@ struct GossipSyncManagerTests { manager._performMaintenanceSynchronously(now: Date()) let sentPackets = delegate.packets - #expect(sentPackets.count == 3) + #expect(sentPackets.count == 1) let decoded = sentPackets.compactMap { RequestSyncPacket.decode(from: $0.payload) } - #expect(decoded.count == 3) - #expect(decoded[0].types == .publicMessages) - #expect(decoded[1].types == .fragment) - #expect(decoded[2].types == .fileTransfer) + #expect(decoded.count == 1) + let types = try #require(decoded.first?.types) + #expect(types.contains(.announce)) + #expect(types.contains(.message)) + #expect(types.contains(.fragment)) + #expect(types.contains(.fileTransfer)) + } + + @Test func initialSyncCoalescesEnabledTypes() async throws { + var config = GossipSyncManager.Config() + config.seenCapacity = 10 + config.fragmentCapacity = 5 + config.fileTransferCapacity = 4 + config.fragmentSyncIntervalSeconds = 1 + config.fileTransferSyncIntervalSeconds = 1 + + let requestSyncManager = RequestSyncManager() + let manager = GossipSyncManager(myPeerID: myPeerID, config: config, requestSyncManager: requestSyncManager) + let delegate = RecordingDelegate() + manager.delegate = delegate + + manager.scheduleInitialSyncToPeer(PeerID(str: "FFFFFFFFFFFFFFFF"), delaySeconds: 0.0) + + try await TestHelpers.waitFor({ delegate.packets.count == 1 }, timeout: TestConstants.shortTimeout) + let packet = try #require(delegate.packets.first) + let request = try #require(RequestSyncPacket.decode(from: packet.payload)) + let types = try #require(request.types) + #expect(types.contains(.announce)) + #expect(types.contains(.message)) + #expect(types.contains(.fragment)) + #expect(types.contains(.fileTransfer)) } @Test func handleRequestSyncHonorsTypeFilter() async throws { diff --git a/bitchatTests/Mocks/MockTransport.swift b/bitchatTests/Mocks/MockTransport.swift index 2f077ed2..5ab7d7dc 100644 --- a/bitchatTests/Mocks/MockTransport.swift +++ b/bitchatTests/Mocks/MockTransport.swift @@ -19,6 +19,7 @@ final class MockTransport: Transport { // MARK: - Protocol Properties weak var delegate: BitchatDelegate? + weak var eventDelegate: TransportEventDelegate? weak var peerEventsDelegate: TransportPeerEventsDelegate? var myPeerID: PeerID = PeerID(str: "TESTPEER") diff --git a/bitchatTests/NotificationStreamAssemblerTests.swift b/bitchatTests/NotificationStreamAssemblerTests.swift index 7d78fb0a..de76bda0 100644 --- a/bitchatTests/NotificationStreamAssemblerTests.swift +++ b/bitchatTests/NotificationStreamAssemblerTests.swift @@ -97,6 +97,27 @@ struct NotificationStreamAssemblerTests { #expect(decoded.timestamp == packet.timestamp) } + @Test func discardsPKCSPaddingBetweenNotificationFrames() throws { + var assembler = NotificationStreamAssembler() + let packet1 = makePacket(timestamp: 0x111) + let packet2 = makePacket(timestamp: 0x222) + let paddedFrame1 = try #require(packet1.toBinaryData(padding: true), "Failed to encode first padded packet") + let paddedFrame2 = try #require(packet2.toBinaryData(padding: true), "Failed to encode second padded packet") + + var result = assembler.append(paddedFrame1) + #expect(result.frames.count == 1) + #expect(result.droppedPrefixes.isEmpty) + #expect(result.reset == false) + + result = assembler.append(paddedFrame2) + #expect(result.frames.count == 1) + #expect(result.droppedPrefixes.isEmpty) + #expect(result.reset == false) + + let decoded = try #require(BinaryProtocol.decode(result.frames[0]), "Failed to decode second frame") + #expect(decoded.timestamp == packet2.timestamp) + } + func testAssemblesCompressedLargeFrame() throws { var assembler = NotificationStreamAssembler() diff --git a/bitchatTests/ProtocolContractTests.swift b/bitchatTests/ProtocolContractTests.swift index df8a4b46..27541f47 100644 --- a/bitchatTests/ProtocolContractTests.swift +++ b/bitchatTests/ProtocolContractTests.swift @@ -15,6 +15,7 @@ private final class DefaultDelegateProbe: BitchatDelegate { private final class DefaultTransportProbe: Transport { weak var delegate: BitchatDelegate? + weak var eventDelegate: TransportEventDelegate? weak var peerEventsDelegate: TransportPeerEventsDelegate? let subject = CurrentValueSubject<[TransportPeerSnapshot], Never>([]) diff --git a/bitchatTests/Services/BLEOutboundWriteBufferTests.swift b/bitchatTests/Services/BLEOutboundWriteBufferTests.swift new file mode 100644 index 00000000..f8e64080 --- /dev/null +++ b/bitchatTests/Services/BLEOutboundWriteBufferTests.swift @@ -0,0 +1,75 @@ +import Foundation +import Testing +@testable import bitchat + +struct BLEOutboundWriteBufferTests { + @Test + func enqueueOrdersWritesByPriority() { + var buffer = BLEOutboundWriteBuffer() + let peerID = "peer-1" + + _ = buffer.enqueue( + data: Data(repeating: 0x01, count: 4), + for: peerID, + priority: .fileTransfer, + capBytes: 64 + ) + _ = buffer.enqueue( + data: Data(repeating: 0x02, count: 4), + for: peerID, + priority: .high, + capBytes: 64 + ) + _ = buffer.enqueue( + data: Data(repeating: 0x03, count: 4), + for: peerID, + priority: .fragment(totalFragments: 2), + capBytes: 64 + ) + + let writes = buffer.takeAll(for: peerID) + + #expect(writes.map { Int($0.data.first ?? 0) } == [0x02, 0x03, 0x01]) + } + + @Test + func enqueueTrimsLowestPriorityItemsToCap() { + var buffer = BLEOutboundWriteBuffer() + let peerID = "peer-1" + + _ = buffer.enqueue(data: Data(repeating: 0x01, count: 8), for: peerID, priority: .low, capBytes: 16) + _ = buffer.enqueue(data: Data(repeating: 0x02, count: 8), for: peerID, priority: .fileTransfer, capBytes: 16) + let result = buffer.enqueue(data: Data(repeating: 0x03, count: 8), for: peerID, priority: .high, capBytes: 16) + + if case let .enqueued(trimmedBytes, remainingBytes) = result { + #expect(trimmedBytes == 8) + #expect(remainingBytes == 16) + } else { + Issue.record("Expected buffered write to trim, not drop as oversized") + } + + let writes = buffer.takeAll(for: peerID) + + #expect(writes.map { Int($0.data.first ?? 0) } == [0x03, 0x02]) + } + + @Test + func enqueueRejectsOversizedSingleChunk() { + var buffer = BLEOutboundWriteBuffer() + + let result = buffer.enqueue( + data: Data(repeating: 0x01, count: 32), + for: "peer-1", + priority: .high, + capBytes: 16 + ) + + if case let .oversized(bytes) = result { + #expect(bytes == 32) + } else { + Issue.record("Expected oversized write to be rejected") + } + + #expect(buffer.peripheralIDs.isEmpty) + } +} diff --git a/bitchatTests/Services/NostrTransportTests.swift b/bitchatTests/Services/NostrTransportTests.swift index cb10d7fc..9541f3b8 100644 --- a/bitchatTests/Services/NostrTransportTests.swift +++ b/bitchatTests/Services/NostrTransportTests.swift @@ -306,6 +306,7 @@ struct NostrTransportTests { let secondPayload = try decodeEmbeddedPayload(from: secondEvent, recipient: recipient).payload #expect(secondPayload.type == .readReceipt) #expect(String(data: secondPayload.data, encoding: .utf8) == "read-2") + withExtendedLifetime(transport) {} } @Test("Concurrent read receipt enqueue does not crash") diff --git a/docs/ARCHITECTURE_V2.md b/docs/ARCHITECTURE_V2.md index 6b2c1037..6a6de351 100644 --- a/docs/ARCHITECTURE_V2.md +++ b/docs/ARCHITECTURE_V2.md @@ -38,3 +38,9 @@ This branch starts a larger simplification effort focused on performance, reliab 3. Move private/public conversation mutation behind the new store instead of still mirroring legacy message writes from `ChatViewModel`. 4. Replace remaining singleton-heavy seams with injected runtime services where practical. 5. Revisit actor isolation for identity and conversation state once the remaining message/peer models are safe to move off the main actor. + +## Transport Follow-Up + +The Bluetooth architecture branch begins step 2 by adding a typed `TransportEvent` boundary while preserving the legacy `BitchatDelegate` bridge. New transport code should emit typed events first, with delegate forwarding used only as a compatibility adapter during migration. + +The branch also starts carving performance-sensitive BLE scheduling state out of `BLEService`: pending write backpressure now lives in `BLEOutboundWriteBuffer`, giving the outbound hot path a focused, unit-tested component before deeper fragmentation and link-scheduler work. From df36b19afedb10a354314c91bce6c624266eb19c Mon Sep 17 00:00:00 2001 From: jack <212554440+jackjackbits@users.noreply.github.com> Date: Sun, 31 May 2026 14:08:30 +0200 Subject: [PATCH 013/216] [codex] Refine BLE ingress fanout (#1280) * Refactor BLE transport event handling * Make image output paths unique * Keep queued Nostr read receipts alive * Refine BLE ingress fanout * Rediscover BLE service after invalidation * Extract BLE notification retry buffer * Extract BLE inbound write buffer * Extract BLE fragment assembly buffer * Tidy secure log handling from device run * Allow self-authored RSR ingress replies * Harden read receipt queue test timing --------- Co-authored-by: jack --- .../Identity/SecureIdentityStateManager.swift | 8 +- bitchat/Services/BLE/BLEFanoutSelector.swift | 109 +++ .../BLE/BLEFragmentAssemblyBuffer.swift | 153 +++++ .../Services/BLE/BLEInboundWriteBuffer.swift | 70 ++ .../Services/BLE/BLEIngressLinkRegistry.swift | 108 +++ .../BLE/BLEOutboundNotificationBuffer.swift | 47 ++ bitchat/Services/BLE/BLEService.swift | 640 +++++++----------- bitchat/Services/RelayController.swift | 3 +- bitchatTests/BLEServiceCoreTests.swift | 30 + .../Services/BLEFanoutSelectorTests.swift | 95 +++ .../BLEFragmentAssemblyBufferTests.swift | 205 ++++++ .../Services/BLEInboundWriteBufferTests.swift | 140 ++++ .../BLEIngressLinkRegistryTests.swift | 178 +++++ .../BLEOutboundNotificationBufferTests.swift | 70 ++ .../Services/NostrTransportTests.swift | 7 +- .../Services/RelayControllerTests.swift | 20 + .../SecureIdentityStateManagerTests.swift | 1 + docs/ARCHITECTURE_V2.md | 2 + 18 files changed, 1503 insertions(+), 383 deletions(-) create mode 100644 bitchat/Services/BLE/BLEFanoutSelector.swift create mode 100644 bitchat/Services/BLE/BLEFragmentAssemblyBuffer.swift create mode 100644 bitchat/Services/BLE/BLEInboundWriteBuffer.swift create mode 100644 bitchat/Services/BLE/BLEIngressLinkRegistry.swift create mode 100644 bitchat/Services/BLE/BLEOutboundNotificationBuffer.swift create mode 100644 bitchatTests/Services/BLEFanoutSelectorTests.swift create mode 100644 bitchatTests/Services/BLEFragmentAssemblyBufferTests.swift create mode 100644 bitchatTests/Services/BLEInboundWriteBufferTests.swift create mode 100644 bitchatTests/Services/BLEIngressLinkRegistryTests.swift create mode 100644 bitchatTests/Services/BLEOutboundNotificationBufferTests.swift diff --git a/bitchat/Identity/SecureIdentityStateManager.swift b/bitchat/Identity/SecureIdentityStateManager.swift index c96aeb0e..a5d7b3cc 100644 --- a/bitchat/Identity/SecureIdentityStateManager.swift +++ b/bitchat/Identity/SecureIdentityStateManager.swift @@ -202,8 +202,12 @@ final class SecureIdentityStateManager: SecureIdentityStateManagerProtocol { let decryptedData = try AES.GCM.open(sealedBox, using: encryptionKey) cache = try JSONDecoder().decode(IdentityCache.self, from: decryptedData) } catch { - // Log error but continue with empty cache - SecureLogger.error(error, context: "Failed to load identity cache", category: .security) + cache = IdentityCache() + let deleted = keychain.deleteIdentityKey(forKey: cacheKey) + SecureLogger.warning( + "Discarded unreadable identity cache; starting fresh (deleted=\(deleted), error=\(error.localizedDescription))", + category: .security + ) } } diff --git a/bitchat/Services/BLE/BLEFanoutSelector.swift b/bitchat/Services/BLE/BLEFanoutSelector.swift new file mode 100644 index 00000000..7232c642 --- /dev/null +++ b/bitchat/Services/BLE/BLEFanoutSelector.swift @@ -0,0 +1,109 @@ +import BitFoundation +import CryptoKit +import Foundation + +struct BLEFanoutSelection: Equatable { + let peripheralIDs: Set + let centralIDs: Set +} + +enum BLEFanoutSelector { + static func selectLinks( + peripheralIDs: [String], + centralIDs: [String], + ingressLink: BLEIngressLinkID?, + excludedLinks: Set = [], + directedPeerHint: PeerID?, + packetType: UInt8, + messageID: String + ) -> BLEFanoutSelection { + let allowed = allowedLinks( + peripheralIDs: peripheralIDs, + centralIDs: centralIDs, + ingressLink: ingressLink, + excludedLinks: excludedLinks + ) + + guard shouldSubset(packetType: packetType, directedPeerHint: directedPeerHint) else { + return BLEFanoutSelection( + peripheralIDs: Set(allowed.peripheralIDs), + centralIDs: Set(allowed.centralIDs) + ) + } + + return BLEFanoutSelection( + peripheralIDs: deterministicSubset( + ids: allowed.peripheralIDs, + k: subsetSize(for: allowed.peripheralIDs.count), + seed: messageID + ), + centralIDs: deterministicSubset( + ids: allowed.centralIDs, + k: subsetSize(for: allowed.centralIDs.count), + seed: messageID + ) + ) + } + + private static func allowedLinks( + peripheralIDs: [String], + centralIDs: [String], + ingressLink: BLEIngressLinkID?, + excludedLinks: Set + ) -> (peripheralIDs: [String], centralIDs: [String]) { + var allowedPeripheralIDs = peripheralIDs + var allowedCentralIDs = centralIDs + var blockedLinks = excludedLinks + + if let ingressLink { + blockedLinks.insert(ingressLink) + } + + allowedPeripheralIDs.removeAll { blockedLinks.contains(.peripheral($0)) } + allowedCentralIDs.removeAll { blockedLinks.contains(.central($0)) } + + return (allowedPeripheralIDs, allowedCentralIDs) + } + + private static func shouldSubset(packetType: UInt8, directedPeerHint: PeerID?) -> Bool { + directedPeerHint == nil + && packetType != MessageType.fragment.rawValue + && packetType != MessageType.announce.rawValue + && packetType != MessageType.requestSync.rawValue + } + + private static func subsetSize(for count: Int) -> Int { + guard count > 0 else { return 0 } + if count <= 2 { return count } + + var value = count - 1 + var bits = 0 + while value > 0 { + value >>= 1 + bits += 1 + } + return min(count, max(1, bits + 1)) + } + + private static func deterministicSubset(ids: [String], k: Int, seed: String) -> Set { + guard k > 0 && ids.count > k else { return Set(ids) } + + var scored: [(score: [UInt8], id: String)] = [] + for id in ids { + let data = (seed + "::" + id).data(using: .utf8) ?? Data() + let digest = Array(SHA256.hash(data: data)) + scored.append((digest, id)) + } + + scored.sort { lhs, rhs in + for index in 0..= 13 else { return nil } + + var senderU64: UInt64 = 0 + for byte in packet.senderID.prefix(8) { + senderU64 = (senderU64 << 8) | UInt64(byte) + } + + var fragmentU64: UInt64 = 0 + for byte in packet.payload.prefix(8) { + fragmentU64 = (fragmentU64 << 8) | UInt64(byte) + } + + let index = Int((UInt16(packet.payload[8]) << 8) | UInt16(packet.payload[9])) + let total = Int((UInt16(packet.payload[10]) << 8) | UInt16(packet.payload[11])) + + guard total > 0 && total <= 10_000 && index >= 0 && index < total else { + return nil + } + + let isBroadcastFragment: Bool = { + guard let recipient = packet.recipientID else { return true } + return recipient.count == 8 && recipient.allSatisfy { $0 == 0xFF } + }() + + self.key = BLEFragmentKey(sender: senderU64, id: fragmentU64) + self.index = index + self.total = total + self.originalType = packet.payload[12] + self.fragmentData = Data(packet.payload.suffix(from: 13)) + self.isBroadcastFragment = isBroadcastFragment + } +} + +struct BLEFragmentAssemblyBuffer { + enum AppendResult: Equatable { + case stored(header: BLEFragmentHeader, started: Bool) + case complete(header: BLEFragmentHeader, reassembledData: Data, started: Bool) + case oversized(header: BLEFragmentHeader, projectedSize: Int, limit: Int, started: Bool) + } + + private struct Metadata { + let type: UInt8 + let total: Int + let timestamp: Date + } + + private var fragmentsByKey: [BLEFragmentKey: [Int: Data]] = [:] + private var metadataByKey: [BLEFragmentKey: Metadata] = [:] + + mutating func removeAll() { + fragmentsByKey.removeAll() + metadataByKey.removeAll() + } + + @discardableResult + mutating func removeExpired(before cutoff: Date) -> Int { + let expiredKeys = metadataByKey + .filter { $0.value.timestamp < cutoff } + .map(\.key) + + for key in expiredKeys { + fragmentsByKey.removeValue(forKey: key) + metadataByKey.removeValue(forKey: key) + } + + return expiredKeys.count + } + + mutating func append( + _ header: BLEFragmentHeader, + maxInFlightAssemblies: Int, + now: Date = Date() + ) -> AppendResult { + let started = startAssemblyIfNeeded(for: header, maxInFlightAssemblies: maxInFlightAssemblies, now: now) + + let currentSize = fragmentsByKey[header.key]?.values.reduce(0) { $0 + $1.count } ?? 0 + let limit = Self.assemblyLimit(for: header.originalType) + let projectedSize = currentSize + header.fragmentData.count + + guard projectedSize <= limit else { + fragmentsByKey.removeValue(forKey: header.key) + metadataByKey.removeValue(forKey: header.key) + return .oversized(header: header, projectedSize: projectedSize, limit: limit, started: started) + } + + fragmentsByKey[header.key]?[header.index] = header.fragmentData + + guard let fragments = fragmentsByKey[header.key], + fragments.count == header.total else { + return .stored(header: header, started: started) + } + + let reassembled = (0.. Bool { + guard fragmentsByKey[header.key] == nil else { return false } + + if fragmentsByKey.count >= maxInFlightAssemblies, + let oldest = metadataByKey.min(by: { $0.value.timestamp < $1.value.timestamp })?.key { + fragmentsByKey.removeValue(forKey: oldest) + metadataByKey.removeValue(forKey: oldest) + } + + fragmentsByKey[header.key] = [:] + metadataByKey[header.key] = Metadata(type: header.originalType, total: header.total, timestamp: now) + return true + } + + private static func assemblyLimit(for originalType: UInt8) -> Int { + if originalType == MessageType.fileTransfer.rawValue { + // Allow headroom for TLV metadata and binary framing overhead. + return FileTransferLimits.maxFramedFileBytes + } + + return FileTransferLimits.maxPayloadBytes + } +} diff --git a/bitchat/Services/BLE/BLEInboundWriteBuffer.swift b/bitchat/Services/BLE/BLEInboundWriteBuffer.swift new file mode 100644 index 00000000..155a16d6 --- /dev/null +++ b/bitchat/Services/BLE/BLEInboundWriteBuffer.swift @@ -0,0 +1,70 @@ +import BitFoundation +import Foundation + +struct BLEInboundWriteChunk: Equatable { + let offset: Int + let data: Data +} + +struct BLEInboundWriteAppendMetadata: Equatable { + let accumulatedBytes: Int + let appendedBytes: Int + let offsets: [Int] + let packetType: UInt8? +} + +struct BLEInboundWriteBuffer { + enum AppendResult { + case decoded(packet: BitchatPacket, metadata: BLEInboundWriteAppendMetadata) + case waiting(metadata: BLEInboundWriteAppendMetadata) + case oversized(metadata: BLEInboundWriteAppendMetadata) + } + + private var buffersByCentralID: [String: Data] = [:] + + mutating func removeAll() { + buffersByCentralID.removeAll() + } + + mutating func append( + chunks: [BLEInboundWriteChunk], + for centralID: String, + capBytes: Int + ) -> AppendResult { + var combined = buffersByCentralID[centralID] ?? Data() + var appendedBytes = 0 + var offsets: [Int] = [] + + for chunk in chunks where !chunk.data.isEmpty { + offsets.append(chunk.offset) + let end = chunk.offset + chunk.data.count + + if combined.count < end { + combined.append(Data(repeating: 0, count: end - combined.count)) + } + + combined.replaceSubrange(chunk.offset..= 2 ? combined[1] : nil + ) + + if let packet = BinaryProtocol.decode(combined) { + buffersByCentralID.removeValue(forKey: centralID) + return .decoded(packet: packet, metadata: metadata) + } + + guard combined.count <= capBytes else { + buffersByCentralID.removeValue(forKey: centralID) + return .oversized(metadata: metadata) + } + + buffersByCentralID[centralID] = combined + return .waiting(metadata: metadata) + } +} diff --git a/bitchat/Services/BLE/BLEIngressLinkRegistry.swift b/bitchat/Services/BLE/BLEIngressLinkRegistry.swift new file mode 100644 index 00000000..ba41648c --- /dev/null +++ b/bitchat/Services/BLE/BLEIngressLinkRegistry.swift @@ -0,0 +1,108 @@ +import BitFoundation +import Foundation + +enum BLEIngressLinkID: Hashable, Equatable { + case peripheral(String) + case central(String) +} + +struct BLEIngressPacketContext: Equatable { + let receivedFromPeerID: PeerID + let validationPeerID: PeerID +} + +struct BLEIngressLinkRecord: Equatable { + let link: BLEIngressLinkID + let peerID: PeerID + let timestamp: Date +} + +enum BLEIngressRejection: Error, Equatable { + case selfLoopback(packetType: UInt8) + case directSenderMismatch(boundPeerID: PeerID, claimedSenderID: PeerID) +} + +struct BLEIngressLinkRegistry { + private var ingressByMessageID: [String: BLEIngressLinkRecord] = [:] + + var isEmpty: Bool { + ingressByMessageID.isEmpty + } + + mutating func removeAll() { + ingressByMessageID.removeAll() + } + + func record(for packet: BitchatPacket) -> BLEIngressLinkRecord? { + ingressByMessageID[Self.messageID(for: packet)] + } + + func link(for packet: BitchatPacket) -> BLEIngressLinkID? { + record(for: packet)?.link + } + + func peerID(for packet: BitchatPacket) -> PeerID? { + record(for: packet)?.peerID + } + + mutating func recordIfNew( + _ packet: BitchatPacket, + link: BLEIngressLinkID, + peerID: PeerID, + now: Date = Date(), + lifetime: TimeInterval + ) -> Bool { + let messageID = Self.messageID(for: packet) + if let existing = ingressByMessageID[messageID], + now.timeIntervalSince(existing.timestamp) <= lifetime { + return false + } + + ingressByMessageID[messageID] = BLEIngressLinkRecord(link: link, peerID: peerID, timestamp: now) + return true + } + + mutating func prune(before cutoff: Date) { + ingressByMessageID = ingressByMessageID.filter { $0.value.timestamp >= cutoff } + } + + static func packetContext( + for packet: BitchatPacket, + claimedSenderID: PeerID, + boundPeerID: PeerID?, + localPeerID: PeerID, + directAnnounceTTL: UInt8 + ) -> Result { + if claimedSenderID == localPeerID, + !isSelfAuthoredSyncResponse(packet) { + return .failure(.selfLoopback(packetType: packet.type)) + } + + if let boundPeerID, + boundPeerID != claimedSenderID, + requiresDirectSenderBinding(packet, directAnnounceTTL: directAnnounceTTL) { + return .failure(.directSenderMismatch(boundPeerID: boundPeerID, claimedSenderID: claimedSenderID)) + } + + let receivedFromPeerID = boundPeerID ?? claimedSenderID + let validationPeerID = packet.isRSR ? receivedFromPeerID : claimedSenderID + return .success(BLEIngressPacketContext( + receivedFromPeerID: receivedFromPeerID, + validationPeerID: validationPeerID + )) + } + + static func messageID(for packet: BitchatPacket) -> String { + let senderID = packet.senderID.hexEncodedString() + let digestPrefix = packet.payload.sha256Hash().prefix(4).hexEncodedString() + return "\(senderID)-\(packet.timestamp)-\(packet.type)-\(digestPrefix)" + } + + private static func requiresDirectSenderBinding(_ packet: BitchatPacket, directAnnounceTTL: UInt8) -> Bool { + packet.type == MessageType.announce.rawValue && packet.ttl == directAnnounceTTL + } + + private static func isSelfAuthoredSyncResponse(_ packet: BitchatPacket) -> Bool { + packet.isRSR && packet.ttl == 0 + } +} diff --git a/bitchat/Services/BLE/BLEOutboundNotificationBuffer.swift b/bitchat/Services/BLE/BLEOutboundNotificationBuffer.swift new file mode 100644 index 00000000..6ccb4346 --- /dev/null +++ b/bitchat/Services/BLE/BLEOutboundNotificationBuffer.swift @@ -0,0 +1,47 @@ +import Foundation + +struct BLEPendingNotification { + let data: Data + let targets: [Target]? +} + +struct BLEOutboundNotificationBuffer { + enum EnqueueResult { + case enqueued(count: Int) + case full(count: Int) + } + + private var notifications: [BLEPendingNotification] = [] + + var count: Int { + notifications.count + } + + var isEmpty: Bool { + notifications.isEmpty + } + + mutating func removeAll() { + notifications.removeAll() + } + + mutating func enqueue(data: Data, targets: [Target]?, capCount: Int) -> EnqueueResult { + guard notifications.count < capCount else { + return .full(count: notifications.count) + } + + notifications.append(BLEPendingNotification(data: data, targets: targets)) + return .enqueued(count: notifications.count) + } + + mutating func takeAll() -> [BLEPendingNotification] { + let pending = notifications + notifications.removeAll() + return pending + } + + mutating func prepend(_ pending: [BLEPendingNotification]) { + guard !pending.isEmpty else { return } + notifications.insert(contentsOf: pending, at: 0) + } +} diff --git a/bitchat/Services/BLE/BLEService.swift b/bitchat/Services/BLE/BLEService.swift index be764f9b..cf4b3e37 100644 --- a/bitchat/Services/BLE/BLEService.swift +++ b/bitchat/Services/BLE/BLEService.swift @@ -3,7 +3,6 @@ import BitFoundation import Foundation import CoreBluetooth import Combine -import CryptoKit #if os(iOS) import UIKit #endif @@ -88,9 +87,7 @@ final class BLEService: NSObject { private let meshTopology = MeshTopologyTracker() // 5. Fragment Reassembly (necessary for messages > MTU) - private struct FragmentKey: Hashable { let sender: UInt64; let id: UInt64 } - private var incomingFragments: [FragmentKey: [Int: Data]] = [:] - private var fragmentMetadata: [FragmentKey: (type: UInt8, total: Int, timestamp: Date)] = [:] + private var fragmentAssemblyBuffer = BLEFragmentAssemblyBuffer() private struct ActiveTransferState { let totalFragments: Int var sentFragments: Int @@ -139,21 +136,17 @@ final class BLEService: NSObject { // Noise typed payloads (ACKs, read receipts, etc.) pending handshake private var pendingNoisePayloadsAfterHandshake: [PeerID: [Data]] = [:] // Queue for notifications that failed due to full queue - private var pendingNotifications: [(data: Data, centrals: [CBCentral]?)] = [] + private var pendingNotifications = BLEOutboundNotificationBuffer() // Accumulate long write chunks per central until a full frame decodes - private var pendingWriteBuffers: [String: Data] = [:] + private var pendingWriteBuffers = BLEInboundWriteBuffer() // Relay jitter scheduling to reduce redundant floods private var scheduledRelays: [String: DispatchWorkItem] = [:] // Track short-lived traffic bursts to adapt announces/scanning under load private var recentPacketTimestamps: [Date] = [] - // Ingress link tracking for last-hop suppression - private enum LinkID: Hashable { - case peripheral(String) - case central(String) - } - private var ingressByMessageID: [String: (link: LinkID, timestamp: Date)] = [:] + // Ingress link tracking for duplicate and last-hop suppression + private var ingressLinks = BLEIngressLinkRegistry() private struct PendingFragmentTransfer { let packet: BitchatPacket @@ -359,8 +352,9 @@ final class BLEService: NSObject { pendingPeripheralWrites.removeAll() pendingFragmentTransfers.removeAll() pendingNotifications.removeAll() + fragmentAssemblyBuffer.removeAll() pendingDirectedRelays.removeAll() - ingressByMessageID.removeAll() + ingressLinks.removeAll() recentPacketTimestamps.removeAll() scheduledRelays.values.forEach { $0.cancel() } scheduledRelays.removeAll() @@ -576,8 +570,7 @@ final class BLEService: NSObject { let cancelledTransfers: [(id: String, items: [DispatchWorkItem])] = collectionsQueue.sync(flags: .barrier) { let entries = activeTransfers.map { ($0.key, $0.value.workItems) } peers.removeAll() - incomingFragments.removeAll() - fragmentMetadata.removeAll() + fragmentAssemblyBuffer.removeAll() activeTransfers.removeAll() // Also clear pending message queues to avoid stale state across sessions pendingMessagesAfterHandshake.removeAll() @@ -819,42 +812,28 @@ final class BLEService: NSObject { case unknown } - private struct IngressPacketContext { - let receivedFromPeerID: PeerID - let validationPeerID: PeerID - } - - private func requiresDirectSenderBinding(_ packet: BitchatPacket) -> Bool { - packet.type == MessageType.announce.rawValue && packet.ttl == messageTTL - } - - private func isSelfAuthoredSyncResponse(_ packet: BitchatPacket) -> Bool { - packet.isRSR && packet.ttl == 0 - } - private func makeIngressPacketContext( for packet: BitchatPacket, claimedSenderID: PeerID, boundPeerID: PeerID?, linkDescription: String - ) -> IngressPacketContext? { - if claimedSenderID == myPeerID, - !isSelfAuthoredSyncResponse(packet) { + ) -> BLEIngressPacketContext? { + switch BLEIngressLinkRegistry.packetContext( + for: packet, + claimedSenderID: claimedSenderID, + boundPeerID: boundPeerID, + localPeerID: myPeerID, + directAnnounceTTL: messageTTL + ) { + case .success(let context): + return context + case .failure(.selfLoopback): SecureLogger.debug("↩️ Dropping BLE self-loopback packet type \(packet.type) from \(linkDescription)", category: .session) return nil - } - - if let boundPeerID, boundPeerID != claimedSenderID, requiresDirectSenderBinding(packet) { + case .failure(.directSenderMismatch(let boundPeerID, let claimedSenderID)): SecureLogger.warning("🚫 SECURITY: Sender ID spoofing attempt detected! \(linkDescription) claimed to be \(claimedSenderID.id.prefix(8))… but is bound to \(boundPeerID.id.prefix(8))…", category: .security) return nil } - - let receivedFromPeerID = boundPeerID ?? claimedSenderID - let validationPeerID = packet.isRSR ? receivedFromPeerID : claimedSenderID - return IngressPacketContext( - receivedFromPeerID: receivedFromPeerID, - validationPeerID: validationPeerID - ) } private func validatePacket(_ packet: BitchatPacket, from peerID: PeerID, connectionSource: ConnectionSource = .unknown) -> Bool { @@ -887,18 +866,14 @@ final class BLEService: NSObject { return true } - private func recordIngressIfNew(_ packet: BitchatPacket, link: LinkID) -> Bool { - let messageID = makeMessageID(for: packet) - let now = Date() - + private func recordIngressIfNew(_ packet: BitchatPacket, link: BLEIngressLinkID, peerID: PeerID) -> Bool { return collectionsQueue.sync(flags: .barrier) { - if let existing = ingressByMessageID[messageID], - now.timeIntervalSince(existing.timestamp) <= TransportConfig.bleIngressRecordLifetimeSeconds { - return false - } - - ingressByMessageID[messageID] = (link, now) - return true + ingressLinks.recordIfNew( + packet, + link: link, + peerID: peerID, + lifetime: TransportConfig.bleIngressRecordLifetimeSeconds + ) } } @@ -1005,9 +980,14 @@ final class BLEService: NSObject { private func enqueuePendingNotification(data: Data, centrals: [CBCentral]?, context: String, attempt: Int = 0) { collectionsQueue.async(flags: .barrier) { [weak self] in guard let self = self else { return } - if self.pendingNotifications.count < TransportConfig.blePendingNotificationsCapCount { - self.pendingNotifications.append((data: data, centrals: centrals)) - SecureLogger.debug("📋 Queued \(context) packet for retry (pending=\(self.pendingNotifications.count))", category: .session) + let result = self.pendingNotifications.enqueue( + data: data, + targets: centrals, + capCount: TransportConfig.blePendingNotificationsCapCount + ) + + if case let .enqueued(count) = result { + SecureLogger.debug("📋 Queued \(context) packet for retry (pending=\(count))", category: .session) return } @@ -1025,9 +1005,10 @@ final class BLEService: NSObject { } private func sendOnAllLinks(packet: BitchatPacket, data: Data, pad: Bool, directedOnlyPeer: PeerID?) { - // Determine last-hop link for this message to avoid echoing back + // Determine the last-hop peer/link for this message to avoid echoing back over either BLE role. let messageID = makeMessageID(for: packet) - let ingressLink: LinkID? = collectionsQueue.sync { ingressByMessageID[messageID]?.link } + let ingressRecord = collectionsQueue.sync { ingressLinks.record(for: packet) } + let excludedPeerLinks = links(to: ingressRecord?.peerID) let directedPeerHint: PeerID? = { if let explicit = directedOnlyPeer { return explicit } if let recipient = PeerID(str: packet.recipientID?.hexEncodedString()), !recipient.isEmpty { @@ -1073,35 +1054,19 @@ final class BLEService: NSObject { subscribedCentrals = [] } - // Exclude ingress link - var allowedPeripheralIDs = connectedPeripheralIDs - var allowedCentralIDs = centralIDs - if let ingress = ingressLink { - switch ingress { - case .peripheral(let id): - allowedPeripheralIDs.removeAll { $0 == id } - case .central(let id): - allowedCentralIDs.removeAll { $0 == id } - } - } - - // For broadcast (no directed peer) and non-fragment, choose a subset deterministically - // Special-case control/presence messages: do NOT subset to maximize immediate coverage - var selectedPeripheralIDs = Set(allowedPeripheralIDs) - var selectedCentralIDs = Set(allowedCentralIDs) - if directedPeerHint == nil - && packet.type != MessageType.fragment.rawValue - && packet.type != MessageType.announce.rawValue - && packet.type != MessageType.requestSync.rawValue { - let kp = subsetSizeForFanout(allowedPeripheralIDs.count) - let kc = subsetSizeForFanout(allowedCentralIDs.count) - selectedPeripheralIDs = selectDeterministicSubset(ids: allowedPeripheralIDs, k: kp, seed: messageID) - selectedCentralIDs = selectDeterministicSubset(ids: allowedCentralIDs, k: kc, seed: messageID) - } + let selectedLinks = BLEFanoutSelector.selectLinks( + peripheralIDs: connectedPeripheralIDs, + centralIDs: centralIDs, + ingressLink: ingressRecord?.link, + excludedLinks: excludedPeerLinks, + directedPeerHint: directedPeerHint, + packetType: packet.type, + messageID: messageID + ) // If directed and we currently have no links to forward on, spool for a short window if let only = directedPeerHint, - selectedPeripheralIDs.isEmpty && selectedCentralIDs.isEmpty, + selectedLinks.peripheralIDs.isEmpty && selectedLinks.centralIDs.isEmpty, (packet.type == MessageType.noiseEncrypted.rawValue || packet.type == MessageType.noiseHandshake.rawValue) { spoolDirectedPacket(packet, recipientPeerID: only) } @@ -1109,14 +1074,14 @@ final class BLEService: NSObject { // Writes to selected connected peripherals for s in states where s.isConnected { let pid = s.peripheral.identifier.uuidString - guard selectedPeripheralIDs.contains(pid) else { continue } + guard selectedLinks.peripheralIDs.contains(pid) else { continue } if let ch = s.characteristic { writeOrEnqueue(data, to: s.peripheral, characteristic: ch, priority: outboundPriority) } } // Notify selected subscribed centrals if let ch = characteristic { - let targets = subscribedCentrals.filter { selectedCentralIDs.contains($0.identifier.uuidString) } + let targets = subscribedCentrals.filter { selectedLinks.centralIDs.contains($0.identifier.uuidString) } if !targets.isEmpty { let success = peripheralManager?.updateValue(data, for: ch, onSubscribedCentrals: targets) ?? false if !success { @@ -2055,6 +2020,15 @@ extension BLEService { } } +private extension BLEService { + static func shouldRediscoverBitChatService( + invalidatedServiceUUIDs: [CBUUID], + cachedServiceUUIDs: [CBUUID]? + ) -> Bool { + invalidatedServiceUUIDs.contains(serviceUUID) || cachedServiceUUIDs?.contains(serviceUUID) != true + } +} + #if DEBUG // Test-only helper to inject packets into the receive pipeline extension BLEService { @@ -2096,7 +2070,17 @@ extension BLEService { } func _test_recordIngressIfNew(packet: BitchatPacket, linkID: String) -> Bool { - recordIngressIfNew(packet, link: .central(linkID)) + recordIngressIfNew(packet, link: .central(linkID), peerID: PeerID(hexData: packet.senderID)) + } + + static func _test_shouldRediscoverBitChatService( + invalidatedServiceUUIDs: [CBUUID], + cachedServiceUUIDs: [CBUUID]? + ) -> Bool { + shouldRediscoverBitChatService( + invalidatedServiceUUIDs: invalidatedServiceUUIDs, + cachedServiceUUIDs: cachedServiceUUIDs + ) } } #endif @@ -2257,7 +2241,7 @@ extension BLEService: CBPeripheralDelegate { peripherals[peripheralUUID] = state } - if !recordIngressIfNew(packet, link: .peripheral(peripheralUUID)) { + if !recordIngressIfNew(packet, link: .peripheral(peripheralUUID), peerID: context.receivedFromPeerID) { continue } processNotificationPacket( @@ -2309,18 +2293,23 @@ extension BLEService: CBPeripheralDelegate { func peripheral(_ peripheral: CBPeripheral, didModifyServices invalidatedServices: [CBService]) { SecureLogger.warning("⚠️ Services modified for \(peripheral.name ?? peripheral.identifier.uuidString)", category: .session) - - // Check if our service was invalidated (peer app quit) - let hasOurService = peripheral.services?.contains { $0.uuid == BLEService.serviceUUID } ?? false - - if !hasOurService { - // Service is gone - disconnect - SecureLogger.warning("❌ BitChat service removed - disconnecting from \(peripheral.name ?? peripheral.identifier.uuidString)", category: .session) - centralManager?.cancelPeripheralConnection(peripheral) - } else { - // Try to rediscover - peripheral.discoverServices([BLEService.serviceUUID]) + + let shouldRediscover = BLEService.shouldRediscoverBitChatService( + invalidatedServiceUUIDs: invalidatedServices.map(\.uuid), + cachedServiceUUIDs: peripheral.services?.map(\.uuid) + ) + + guard shouldRediscover else { return } + + let peripheralID = peripheral.identifier.uuidString + if var state = peripherals[peripheralID] { + state.characteristic = nil + state.assembler = NotificationStreamAssembler() + peripherals[peripheralID] = state } + + SecureLogger.debug("🔄 BitChat service changed for \(peripheral.name ?? peripheral.identifier.uuidString), rediscovering", category: .session) + peripheral.discoverServices([BLEService.serviceUUID]) } func peripheral(_ peripheral: CBPeripheral, didUpdateNotificationStateFor characteristic: CBCharacteristic, error: Error?) { @@ -2571,55 +2560,51 @@ extension BLEService: CBPeripheralManagerDelegate { func peripheralManagerIsReady(toUpdateSubscribers peripheral: CBPeripheralManager) { SecureLogger.debug("📤 Peripheral manager ready to send more notifications", category: .session) - - // Retry pending notifications now that queue has space + + drainPendingNotifications(logPrefix: "✅ Sent") + } + + private func drainPendingNotifications(logPrefix: String) { collectionsQueue.async(flags: .barrier) { [weak self] in guard let self = self, let characteristic = self.characteristic, !self.pendingNotifications.isEmpty else { return } - - let pending = self.pendingNotifications - self.pendingNotifications.removeAll() - - // Try to send pending notifications - var sentCount = 0 - for (index, (data, centrals)) in pending.enumerated() { - if let centrals = centrals { - // Send to specific centrals - let success = self.peripheralManager?.updateValue(data, for: characteristic, onSubscribedCentrals: centrals) ?? false - if !success { - // Still full, re-queue this and all remaining items - let remaining = pending.dropFirst(index) - self.pendingNotifications.append(contentsOf: remaining) - SecureLogger.debug("⚠️ Notification queue still full after \(sentCount) sent, re-queuing \(remaining.count) items", category: .session) - break // Stop trying, wait for next ready callback - } else { - sentCount += 1 - } - } else { - // Broadcast to all - let success = self.peripheralManager?.updateValue(data, for: characteristic, onSubscribedCentrals: nil) ?? false - if !success { - // Still full, re-queue this and all remaining items - let remaining = pending.dropFirst(index) - self.pendingNotifications.append(contentsOf: remaining) - SecureLogger.debug("⚠️ Notification queue still full after \(sentCount) sent, re-queuing \(remaining.count) items", category: .session) - break - } else { - sentCount += 1 - } - } - } + + let pending = self.pendingNotifications.takeAll() + let sentCount = self.sendPendingNotifications(pending, characteristic: characteristic) if sentCount > 0 { - SecureLogger.debug("✅ Sent \(sentCount) pending notifications from retry queue", category: .session) + SecureLogger.debug("\(logPrefix) \(sentCount) pending notifications from retry queue", category: .session) } - + if !self.pendingNotifications.isEmpty { SecureLogger.debug("📋 Still have \(self.pendingNotifications.count) pending notifications", category: .session) } } } + + private func sendPendingNotifications(_ pending: [BLEPendingNotification], characteristic: CBMutableCharacteristic) -> Int { + var sentCount = 0 + + for (index, notification) in pending.enumerated() { + let success = peripheralManager?.updateValue( + notification.data, + for: characteristic, + onSubscribedCentrals: notification.targets + ) ?? false + + guard success else { + let remaining = Array(pending.dropFirst(index)) + pendingNotifications.prepend(remaining) + SecureLogger.debug("⚠️ Notification queue still full after \(sentCount) sent, re-queuing \(remaining.count) items", category: .session) + break + } + + sentCount += 1 + } + + return sentCount + } func peripheralManager(_ peripheral: CBPeripheralManager, didReceiveWrite requests: [CBATTRequest]) { // Suppress logs for single write requests to reduce noise @@ -2641,85 +2626,85 @@ extension BLEService: CBPeripheralManagerDelegate { // Sort by offset ascending let sorted = group.sorted { $0.offset < $1.offset } let hasMultiple = sorted.count > 1 || (sorted.first?.offset ?? 0) > 0 - - // Always merge into a persistent per-central buffer to handle multi-callback long writes - var combined = pendingWriteBuffers[centralUUID] ?? Data() - var appendedBytes = 0 - var offsets: [Int] = [] - for r in sorted { - guard let chunk = r.value, !chunk.isEmpty else { continue } - offsets.append(r.offset) - let end = r.offset + chunk.count - if combined.count < end { - combined.append(Data(repeating: 0, count: end - combined.count)) - } - // Write chunk into the correct position (supports out-of-order and overlapping writes) - combined.replaceSubrange(r.offset..= 2 { - let peekType = combined[1] - if peekType != MessageType.announce.rawValue { - SecureLogger.debug("📥 Accumulated write from central \(centralUUID): size=\(combined.count) (+\(appendedBytes)) bytes (type=\(peekType)), offsets=\(offsets)", category: .session) - } + let chunks = sorted.compactMap { request -> BLEInboundWriteChunk? in + guard let data = request.value, !data.isEmpty else { return nil } + return BLEInboundWriteChunk(offset: request.offset, data: data) } - // Try decode the accumulated buffer - if let packet = BinaryProtocol.decode(combined) { - // Clear buffer on success - pendingWriteBuffers.removeValue(forKey: centralUUID) + let result = pendingWriteBuffers.append( + chunks: chunks, + for: centralUUID, + capBytes: TransportConfig.blePendingWriteBufferCapBytes + ) - let claimedSenderID = PeerID(hexData: packet.senderID) - let context = makeIngressPacketContext( - for: packet, - claimedSenderID: claimedSenderID, - boundPeerID: centralToPeerID[centralUUID], - linkDescription: "Central \(centralUUID.prefix(8))…" - ) - guard let context else { continue } + switch result { + case let .decoded(packet, metadata): + logAccumulatedCentralWrite(metadata, centralUUID: centralUUID) + processDecodedCentralWrite(packet, centralUUID: centralUUID, central: sorted[0].central) - if !validatePacket(packet, from: context.validationPeerID, connectionSource: .central(centralUUID)) { - continue - } + case let .waiting(metadata): + logAccumulatedCentralWrite(metadata, centralUUID: centralUUID) + logFailedSingleWriteIfNeeded(hasMultiple: hasMultiple, sortedRequests: sorted) - if packet.type != MessageType.announce.rawValue { - SecureLogger.debug("📦 Decoded (combined) packet type: \(packet.type) from sender: \(claimedSenderID)", category: .session) - } - if !subscribedCentrals.contains(sorted[0].central) { - subscribedCentrals.append(sorted[0].central) - } - if packet.type == MessageType.announce.rawValue { - if packet.ttl == messageTTL { - centralToPeerID[centralUUID] = claimedSenderID - refreshLocalTopology() - } - if !recordIngressIfNew(packet, link: .central(centralUUID)) { - continue - } - handleReceivedPacket(packet, from: context.receivedFromPeerID) - } else { - if !recordIngressIfNew(packet, link: .central(centralUUID)) { - continue - } - handleReceivedPacket(packet, from: context.receivedFromPeerID) - } - } else { - // If buffer grows suspiciously large, reset to avoid memory leak - if combined.count > TransportConfig.blePendingWriteBufferCapBytes { // cap for safety - pendingWriteBuffers.removeValue(forKey: centralUUID) - SecureLogger.warning("⚠️ Dropping oversized pending write buffer (\(combined.count) bytes) for central \(centralUUID)", category: .session) - } - // If this was a single short write and still failed, log the raw chunk for debugging - if !hasMultiple, let only = sorted.first, let raw = only.value { - let prefix = raw.prefix(16).map { String(format: "%02x", $0) }.joined(separator: " ") - SecureLogger.error("❌ Failed to decode packet from central (len=\(raw.count), prefix=\(prefix))", category: .session) - } + case let .oversized(metadata): + logAccumulatedCentralWrite(metadata, centralUUID: centralUUID) + SecureLogger.warning("⚠️ Dropping oversized pending write buffer (\(metadata.accumulatedBytes) bytes) for central \(centralUUID)", category: .session) + logFailedSingleWriteIfNeeded(hasMultiple: hasMultiple, sortedRequests: sorted) } } - } + } + + private func logAccumulatedCentralWrite(_ metadata: BLEInboundWriteAppendMetadata, centralUUID: String) { + guard let packetType = metadata.packetType, + packetType != MessageType.announce.rawValue else { return } + + SecureLogger.debug( + "📥 Accumulated write from central \(centralUUID): size=\(metadata.accumulatedBytes) (+\(metadata.appendedBytes)) bytes (type=\(packetType)), offsets=\(metadata.offsets)", + category: .session + ) + } + + private func logFailedSingleWriteIfNeeded(hasMultiple: Bool, sortedRequests: [CBATTRequest]) { + guard !hasMultiple, let raw = sortedRequests.first?.value else { return } + + let prefix = raw.prefix(16).map { String(format: "%02x", $0) }.joined(separator: " ") + SecureLogger.error("❌ Failed to decode packet from central (len=\(raw.count), prefix=\(prefix))", category: .session) + } + + private func processDecodedCentralWrite(_ packet: BitchatPacket, centralUUID: String, central: CBCentral) { + let claimedSenderID = PeerID(hexData: packet.senderID) + let context = makeIngressPacketContext( + for: packet, + claimedSenderID: claimedSenderID, + boundPeerID: centralToPeerID[centralUUID], + linkDescription: "Central \(centralUUID.prefix(8))…" + ) + guard let context else { return } + + guard validatePacket(packet, from: context.validationPeerID, connectionSource: .central(centralUUID)) else { + return + } + + if packet.type != MessageType.announce.rawValue { + SecureLogger.debug("📦 Decoded (combined) packet type: \(packet.type) from sender: \(claimedSenderID)", category: .session) + } + + if !subscribedCentrals.contains(central) { + subscribedCentrals.append(central) + } + + if packet.type == MessageType.announce.rawValue, + packet.ttl == messageTTL { + centralToPeerID[centralUUID] = claimedSenderID + refreshLocalTopology() + } + + guard recordIngressIfNew(packet, link: .central(centralUUID), peerID: context.receivedFromPeerID) else { + return + } + + handleReceivedPacket(packet, from: context.receivedFromPeerID) + } } // MARK: - Advertising Builders & Alias Rotation @@ -2860,6 +2845,10 @@ extension BLEService { } private func forwardAlongRouteIfNeeded(_ packet: BitchatPacket) -> Bool { + if PeerID(hexData: packet.recipientID) == myPeerID { + return true + } + guard let route = packet.route, !route.isEmpty else { return false } let myRoutingData = routingData(for: myPeerID) ?? (myPeerIDData.isEmpty ? nil : myPeerIDData) guard let selfData = myRoutingData else { return false } @@ -2923,6 +2912,27 @@ extension BLEService { return bleQueue.sync { computeState() } } } + + private func links(to peerID: PeerID?) -> Set { + guard let peerID else { return [] } + + let computeLinks = { () -> Set in + var links: Set = [] + if let peripheralUUID = self.peerToPeripheralUUID[peerID] { + links.insert(.peripheral(peripheralUUID)) + } + for (centralUUID, mappedPeerID) in self.centralToPeerID where mappedPeerID == peerID { + links.insert(.central(centralUUID)) + } + return links + } + + if DispatchQueue.getSpecific(key: bleQueueKey) != nil { + return computeLinks() + } else { + return bleQueue.sync { computeLinks() } + } + } private func configureNoiseServiceCallbacks(for service: NoiseEncryptionService) { service.onPeerAuthenticated = { [weak self] peerID, fingerprint in @@ -2997,37 +3007,7 @@ extension BLEService { // MARK: Helpers: IDs, selection, and write backpressure private func makeMessageID(for packet: BitchatPacket) -> String { - let senderID = packet.senderID.hexEncodedString() - let digestPrefix = packet.payload.sha256Hash().prefix(4).hexEncodedString() - return "\(senderID)-\(packet.timestamp)-\(packet.type)-\(digestPrefix)" - } - - private func subsetSizeForFanout(_ n: Int) -> Int { - guard n > 0 else { return 0 } - if n <= 2 { return n } - // approx ceil(log2(n)) + 1 without floating point - var v = n - 1 - var bits = 0 - while v > 0 { v >>= 1; bits += 1 } - return min(n, max(1, bits + 1)) - } - - private func selectDeterministicSubset(ids: [String], k: Int, seed: String) -> Set { - guard k > 0 && ids.count > k else { return Set(ids) } - // Stable order by SHA256(seed || "::" || id) - var scored: [(score: [UInt8], id: String)] = [] - for id in ids { - let msg = (seed + "::" + id).data(using: .utf8) ?? Data() - let digest = Array(SHA256.hash(data: msg)) - scored.append((digest, id)) - } - scored.sort { a, b in - for i in 0.. BLEOutboundWritePriority { @@ -3116,37 +3096,7 @@ extension BLEService { /// Periodically try to drain pending notifications as a backup mechanism private func drainPendingNotificationsIfPossible() { - collectionsQueue.async(flags: .barrier) { [weak self] in - guard let self = self, - let characteristic = self.characteristic, - !self.pendingNotifications.isEmpty else { return } - - let pending = self.pendingNotifications - self.pendingNotifications.removeAll() - - var sentCount = 0 - for (index, (data, centrals)) in pending.enumerated() { - let success: Bool - if let centrals = centrals { - success = self.peripheralManager?.updateValue(data, for: characteristic, onSubscribedCentrals: centrals) ?? false - } else { - success = self.peripheralManager?.updateValue(data, for: characteristic, onSubscribedCentrals: nil) ?? false - } - - if !success { - // Re-queue this and all remaining items - let remaining = pending.dropFirst(index) - self.pendingNotifications.append(contentsOf: remaining) - break - } else { - sentCount += 1 - } - } - - if sentCount > 0 { - SecureLogger.debug("🔄 Periodic drain: sent \(sentCount) pending notifications", category: .session) - } - } + drainPendingNotifications(logPrefix: "🔄 Periodic drain: sent") } /// Periodically try to drain pending writes for all connected peripherals @@ -3601,102 +3551,19 @@ extension BLEService { return } - // Minimum header: 8 bytes ID + 2 index + 2 total + 1 type - guard packet.payload.count >= 13 else { return } + guard let header = BLEFragmentHeader(packet: packet) else { return } - // Compute compact fragment key (sender: 8 bytes, id: 8 bytes), big-endian - var senderU64: UInt64 = 0 - for b in packet.senderID.prefix(8) { senderU64 = (senderU64 << 8) | UInt64(b) } - var fragU64: UInt64 = 0 - for b in packet.payload.prefix(8) { fragU64 = (fragU64 << 8) | UInt64(b) } - // Parse big-endian UInt16 safely without alignment assumptions - let idxHi = UInt16(packet.payload[8]) - let idxLo = UInt16(packet.payload[9]) - let index = Int((idxHi << 8) | idxLo) - let totHi = UInt16(packet.payload[10]) - let totLo = UInt16(packet.payload[11]) - let total = Int((totHi << 8) | totLo) - let originalType = packet.payload[12] - let fragmentData = packet.payload.suffix(from: 13) - - // Sanity checks - add reasonable upper bound on total to prevent DoS - guard total > 0 && total <= 10000 && index >= 0 && index < total else { return } - - let isBroadcastFragment: Bool = { - guard let recipient = packet.recipientID else { return true } - return recipient.count == 8 && recipient.allSatisfy { $0 == 0xFF } - }() - if isBroadcastFragment { + if header.isBroadcastFragment { gossipSyncManager?.onPublicPacketSeen(packet) } - // Compute fragment key for this assembly - let key = FragmentKey(sender: senderU64, id: fragU64) - - // Critical section: Store fragment and check completion status - var shouldReassemble: Bool = false - var fragmentsToReassemble: [Int: Data]? = nil - - collectionsQueue.sync(flags: .barrier) { - if incomingFragments[key] == nil { - // Cap in-flight assemblies to prevent memory/battery blowups - if incomingFragments.count >= maxInFlightAssemblies { - // Evict the oldest assembly by timestamp - if let oldest = fragmentMetadata.min(by: { $0.value.timestamp < $1.value.timestamp })?.key { - incomingFragments.removeValue(forKey: oldest) - fragmentMetadata.removeValue(forKey: oldest) - } - } - incomingFragments[key] = [:] - fragmentMetadata[key] = (originalType, total, Date()) - SecureLogger.debug("📦 Started fragment assembly id=\(String(format: "%016llx", fragU64)) total=\(total)", category: .session) - } - - // Check cumulative size before storing this fragment - let currentSize = incomingFragments[key]?.values.reduce(0) { $0 + $1.count } ?? 0 - let assemblyLimit: Int = { - if originalType == MessageType.fileTransfer.rawValue { - // Allow headroom for TLV metadata and binary framing overhead. - return FileTransferLimits.maxFramedFileBytes - } - return FileTransferLimits.maxPayloadBytes - }() - let projectedSize = currentSize + fragmentData.count - guard projectedSize <= assemblyLimit else { - // Exceeds size limit - evict this assembly - SecureLogger.warning( - "🚫 Fragment assembly exceeds size limit (\(projectedSize) bytes > \(assemblyLimit)), evicting. Type=\(originalType) Index=\(index)/\(total)", - category: .security - ) - incomingFragments.removeValue(forKey: key) - fragmentMetadata.removeValue(forKey: key) - shouldReassemble = false - fragmentsToReassemble = nil - return - } - - incomingFragments[key]?[index] = Data(fragmentData) - SecureLogger.debug("📦 Fragment \(index + 1)/\(total) (len=\(fragmentData.count)) for id=\(String(format: "%016llx", fragU64))", category: .session) - - // Check if complete - if let fragments = incomingFragments[key], fragments.count == total { - shouldReassemble = true - fragmentsToReassemble = fragments - } else { - shouldReassemble = false - fragmentsToReassemble = nil - } + let assemblyResult = collectionsQueue.sync(flags: .barrier) { + fragmentAssemblyBuffer.append(header, maxInFlightAssemblies: maxInFlightAssemblies) } - // Heavy work outside lock: reassemble and decode - guard shouldReassemble, let fragments = fragmentsToReassemble else { return } + logFragmentAssemblyResult(assemblyResult) - var reassembled = Data() - for i in 0.. \(limit)), evicting. Type=\(header.originalType) Index=\(header.index)/\(header.total)", + category: .security + ) } } @@ -3827,6 +3713,7 @@ extension BLEService { let decision = RelayController.decide( ttl: packet.ttl, senderIsSelf: senderID == myPeerID, + recipientIsSelf: PeerID(hexData: packet.recipientID) == myPeerID, isEncrypted: packet.type == MessageType.noiseEncrypted.rawValue, isDirectedEncrypted: (packet.type == MessageType.noiseEncrypted.rawValue) && (packet.recipientID != nil), isFragment: packet.type == MessageType.fragment.rawValue, @@ -4193,8 +4080,6 @@ extension BLEService { } private func handleNoiseEncrypted(_ packet: BitchatPacket, from peerID: PeerID) { - SecureLogger.debug("🔐 handleNoiseEncrypted called for packet from \(peerID)") - guard let recipientID = PeerID(hexData: packet.recipientID) else { SecureLogger.warning("⚠️ Encrypted message has no recipient ID", category: .session) return @@ -4215,8 +4100,15 @@ extension BLEService { // First byte indicates the payload type let payloadType = decrypted[0] let payloadData = decrypted.dropFirst() - - switch NoisePayloadType(rawValue: payloadType) { + + guard let noisePayloadType = NoisePayloadType(rawValue: payloadType) else { + SecureLogger.warning("⚠️ Unknown noise payload type: \(payloadType)") + return + } + + SecureLogger.debug("🔐 Decrypted noise payload type \(noisePayloadType.description) from \(peerID)", category: .session) + + switch noisePayloadType { case .privateMessage: let ts = Date(timeIntervalSince1970: Double(packet.timestamp) / 1000) notifyUI { [weak self] in @@ -4242,8 +4134,6 @@ extension BLEService { notifyUI { [weak self] in self?.deliverTransportEvent(.noisePayloadReceived(peerID: peerID, type: .verifyResponse, payload: Data(payloadData), timestamp: ts)) } - case .none: - SecureLogger.warning("⚠️ Unknown noise payload type: \(payloadType)") } } catch NoiseEncryptionError.sessionNotEstablished { // We received an encrypted message before establishing a session with this peer. @@ -4486,11 +4376,7 @@ extension BLEService { // Clean old fragments (> configured seconds old) collectionsQueue.sync(flags: .barrier) { let cutoff = now.addingTimeInterval(-TransportConfig.bleFragmentLifetimeSeconds) - let oldFragments = fragmentMetadata.filter { $0.value.timestamp < cutoff }.map { $0.key } - for fragmentID in oldFragments { - incomingFragments.removeValue(forKey: fragmentID) - fragmentMetadata.removeValue(forKey: fragmentID) - } + fragmentAssemblyBuffer.removeExpired(before: cutoff) } // Clean old connection timeout backoff entries (> window) @@ -4512,8 +4398,8 @@ extension BLEService { collectionsQueue.async(flags: .barrier) { [weak self] in guard let self = self else { return } let cutoff = now.addingTimeInterval(-TransportConfig.bleIngressRecordLifetimeSeconds) - if !self.ingressByMessageID.isEmpty { - self.ingressByMessageID = self.ingressByMessageID.filter { $0.value.timestamp >= cutoff } + if !self.ingressLinks.isEmpty { + self.ingressLinks.prune(before: cutoff) } // Clean expired directed spooled items if !self.pendingDirectedRelays.isEmpty { diff --git a/bitchat/Services/RelayController.swift b/bitchat/Services/RelayController.swift index e7593b44..83773120 100644 --- a/bitchat/Services/RelayController.swift +++ b/bitchat/Services/RelayController.swift @@ -11,6 +11,7 @@ struct RelayDecision { struct RelayController { static func decide(ttl: UInt8, senderIsSelf: Bool, + recipientIsSelf: Bool = false, isEncrypted: Bool, isDirectedEncrypted: Bool, isFragment: Bool, @@ -22,7 +23,7 @@ struct RelayController { let ttlCap = min(ttl, TransportConfig.messageTTLDefault) // Suppress obvious non-relays - if ttlCap <= 1 || senderIsSelf { + if ttlCap <= 1 || senderIsSelf || recipientIsSelf { return RelayDecision(shouldRelay: false, newTTL: ttlCap, delayMs: 0) } diff --git a/bitchatTests/BLEServiceCoreTests.swift b/bitchatTests/BLEServiceCoreTests.swift index 69df87c1..9b5155b2 100644 --- a/bitchatTests/BLEServiceCoreTests.swift +++ b/bitchatTests/BLEServiceCoreTests.swift @@ -163,6 +163,36 @@ struct BLEServiceCoreTests { #expect(ble._test_recordIngressIfNew(packet: packet, linkID: "central-a")) #expect(!ble._test_recordIngressIfNew(packet: packet, linkID: "central-b")) } + + @Test + func modifiedServices_rediscoverWhenBitChatServiceIsInvalidated() async throws { + let otherService = CBUUID(string: "0000180F-0000-1000-8000-00805F9B34FB") + + #expect(BLEService._test_shouldRediscoverBitChatService( + invalidatedServiceUUIDs: [BLEService.serviceUUID], + cachedServiceUUIDs: [otherService] + )) + } + + @Test + func modifiedServices_rediscoverWhenCachedServicesNoLongerIncludeBitChat() async throws { + let otherService = CBUUID(string: "0000180F-0000-1000-8000-00805F9B34FB") + + #expect(BLEService._test_shouldRediscoverBitChatService( + invalidatedServiceUUIDs: [otherService], + cachedServiceUUIDs: [otherService] + )) + } + + @Test + func modifiedServices_ignoreUnrelatedInvalidationWhenBitChatIsStillCached() async throws { + let otherService = CBUUID(string: "0000180F-0000-1000-8000-00805F9B34FB") + + #expect(!BLEService._test_shouldRediscoverBitChatService( + invalidatedServiceUUIDs: [otherService], + cachedServiceUUIDs: [BLEService.serviceUUID, otherService] + )) + } } private func makeService() -> BLEService { diff --git a/bitchatTests/Services/BLEFanoutSelectorTests.swift b/bitchatTests/Services/BLEFanoutSelectorTests.swift new file mode 100644 index 00000000..feec13db --- /dev/null +++ b/bitchatTests/Services/BLEFanoutSelectorTests.swift @@ -0,0 +1,95 @@ +import BitFoundation +import Foundation +import Testing +@testable import bitchat + +struct BLEFanoutSelectorTests { + @Test + func directedSendUsesAllNonIngressLinks() { + let selection = BLEFanoutSelector.selectLinks( + peripheralIDs: ["p1", "p2"], + centralIDs: ["c1", "c2"], + ingressLink: .central("c1"), + directedPeerHint: PeerID(str: "1122334455667788"), + packetType: MessageType.noiseEncrypted.rawValue, + messageID: "message-1" + ) + + #expect(selection.peripheralIDs == Set(["p1", "p2"])) + #expect(selection.centralIDs == Set(["c2"])) + } + + @Test + func directedSendExcludesAllLinksToIngressPeer() { + let selection = BLEFanoutSelector.selectLinks( + peripheralIDs: ["p1", "p2"], + centralIDs: ["c1", "c2"], + ingressLink: .central("c1"), + excludedLinks: [.peripheral("p2"), .central("c2")], + directedPeerHint: PeerID(str: "1122334455667788"), + packetType: MessageType.noiseEncrypted.rawValue, + messageID: "message-1" + ) + + #expect(selection.peripheralIDs == Set(["p1"])) + #expect(selection.centralIDs.isEmpty) + } + + @Test + func controlPacketsUseAllNonIngressLinks() { + let selection = BLEFanoutSelector.selectLinks( + peripheralIDs: ["p1", "p2", "p3"], + centralIDs: ["c1", "c2", "c3"], + ingressLink: .peripheral("p2"), + directedPeerHint: nil, + packetType: MessageType.requestSync.rawValue, + messageID: "message-1" + ) + + #expect(selection.peripheralIDs == Set(["p1", "p3"])) + #expect(selection.centralIDs == Set(["c1", "c2", "c3"])) + } + + @Test + func broadcastPacketsUseDeterministicSubsetAfterIngressExclusion() { + let peripherals = (1...8).map { "p\($0)" } + let centrals = (1...8).map { "c\($0)" } + + let first = BLEFanoutSelector.selectLinks( + peripheralIDs: peripherals, + centralIDs: centrals, + ingressLink: .peripheral("p4"), + directedPeerHint: nil, + packetType: MessageType.message.rawValue, + messageID: "message-1" + ) + let second = BLEFanoutSelector.selectLinks( + peripheralIDs: peripherals, + centralIDs: centrals, + ingressLink: .peripheral("p4"), + directedPeerHint: nil, + packetType: MessageType.message.rawValue, + messageID: "message-1" + ) + + #expect(first == second) + #expect(!first.peripheralIDs.contains("p4")) + #expect(first.peripheralIDs.count == 4) + #expect(first.centralIDs.count == 4) + } + + @Test + func broadcastWithTwoLinksKeepsBothAfterIngressExclusion() { + let selection = BLEFanoutSelector.selectLinks( + peripheralIDs: ["p1", "p2"], + centralIDs: ["c1", "c2"], + ingressLink: nil, + directedPeerHint: nil, + packetType: MessageType.message.rawValue, + messageID: "message-1" + ) + + #expect(selection.peripheralIDs == Set(["p1", "p2"])) + #expect(selection.centralIDs == Set(["c1", "c2"])) + } +} diff --git a/bitchatTests/Services/BLEFragmentAssemblyBufferTests.swift b/bitchatTests/Services/BLEFragmentAssemblyBufferTests.swift new file mode 100644 index 00000000..ed7c66a1 --- /dev/null +++ b/bitchatTests/Services/BLEFragmentAssemblyBufferTests.swift @@ -0,0 +1,205 @@ +import BitFoundation +import Foundation +import Testing +@testable import bitchat + +struct BLEFragmentAssemblyBufferTests { + @Test + func appendCompletesOutOfOrderFragments() throws { + var buffer = BLEFragmentAssemblyBuffer() + let original = makePacket(payload: makePayload(count: 512)) + let fragmentPackets = try makeFragments(for: original, chunkSize: 128, fragmentID: Data(repeating: 0x01, count: 8)) + let headers = try fragmentPackets.reversed().map { try #require(BLEFragmentHeader(packet: $0)) } + var result: BLEFragmentAssemblyBuffer.AppendResult? + + for header in headers { + result = buffer.append(header, maxInFlightAssemblies: 8) + } + + if case let .complete(header, reassembledData, started) = result { + #expect(header.total == fragmentPackets.count) + #expect(!started) + #expect(BinaryProtocol.decode(reassembledData)?.payload == original.payload) + } else { + Issue.record("Expected final fragment to complete reassembly") + } + } + + @Test + func appendDuplicateFragmentDoesNotCompleteEarly() throws { + var buffer = BLEFragmentAssemblyBuffer() + let original = makePacket(payload: makePayload(count: 384)) + let fragmentPackets = try makeFragments(for: original, chunkSize: 128, fragmentID: Data(repeating: 0x02, count: 8)) + let first = try #require(BLEFragmentHeader(packet: fragmentPackets[0])) + let second = try #require(BLEFragmentHeader(packet: fragmentPackets[1])) + + if case let .stored(_, started) = buffer.append(first, maxInFlightAssemblies: 8) { + #expect(started) + } else { + Issue.record("Expected first fragment to be stored") + } + + if case .stored = buffer.append(first, maxInFlightAssemblies: 8) { + // Duplicate should replace the same index, not increase completion count. + } else { + Issue.record("Expected duplicate fragment to remain incomplete") + } + + if case .stored = buffer.append(second, maxInFlightAssemblies: 8) { + // Still missing at least one fragment. + } else { + Issue.record("Expected assembly to remain incomplete") + } + } + + @Test + func appendEvictsOldestAssemblyWhenCapIsReached() throws { + var buffer = BLEFragmentAssemblyBuffer() + let oldPacket = makePacket(payload: makePayload(count: 256, seed: 1), timestamp: 1) + let newPacket = makePacket(payload: makePayload(count: 256, seed: 2), timestamp: 2) + let oldFragments = try makeFragments(for: oldPacket, chunkSize: 128, fragmentID: Data(repeating: 0x03, count: 8)) + let newFragments = try makeFragments(for: newPacket, chunkSize: 128, fragmentID: Data(repeating: 0x04, count: 8)) + let oldFirst = try #require(BLEFragmentHeader(packet: oldFragments[0])) + let oldSecond = try #require(BLEFragmentHeader(packet: oldFragments[1])) + let newFirst = try #require(BLEFragmentHeader(packet: newFragments[0])) + let newSecond = try #require(BLEFragmentHeader(packet: newFragments[1])) + + _ = buffer.append(oldFirst, maxInFlightAssemblies: 1, now: Date(timeIntervalSince1970: 1)) + _ = buffer.append(newFirst, maxInFlightAssemblies: 1, now: Date(timeIntervalSince1970: 2)) + + if case let .stored(_, started) = buffer.append(oldSecond, maxInFlightAssemblies: 1) { + #expect(started) + } else { + Issue.record("Expected evicted assembly to restart when old fragment arrives") + } + + if case let .stored(_, started) = buffer.append(newSecond, maxInFlightAssemblies: 1) { + #expect(started) + } else { + Issue.record("Expected new assembly to restart after old one consumed the only slot") + } + } + + @Test + func appendOversizedAssemblyDropsPartialState() throws { + var buffer = BLEFragmentAssemblyBuffer() + let fragmentID = Data(repeating: 0x05, count: 8) + let first = try #require(BLEFragmentHeader(packet: makeFragmentPacket( + fragmentID: fragmentID, + index: 0, + total: 2, + originalType: MessageType.message.rawValue, + fragmentData: Data(repeating: 0x01, count: FileTransferLimits.maxPayloadBytes) + ))) + let oversized = try #require(BLEFragmentHeader(packet: makeFragmentPacket( + fragmentID: fragmentID, + index: 1, + total: 2, + originalType: MessageType.message.rawValue, + fragmentData: Data([0x02]) + ))) + + _ = buffer.append(first, maxInFlightAssemblies: 8) + let result = buffer.append(oversized, maxInFlightAssemblies: 8) + + if case let .oversized(_, projectedSize, limit, started) = result { + #expect(projectedSize == FileTransferLimits.maxPayloadBytes + 1) + #expect(limit == FileTransferLimits.maxPayloadBytes) + #expect(!started) + } else { + Issue.record("Expected oversized fragment assembly to be evicted") + } + + if case let .stored(_, started) = buffer.append(oversized, maxInFlightAssemblies: 8) { + #expect(started) + } else { + Issue.record("Expected later fragment to start a clean assembly") + } + } + + @Test + func removeExpiredDropsOldAssemblies() throws { + var buffer = BLEFragmentAssemblyBuffer() + let packet = makePacket(payload: makePayload(count: 256)) + let fragments = try makeFragments(for: packet, chunkSize: 128, fragmentID: Data(repeating: 0x06, count: 8)) + let first = try #require(BLEFragmentHeader(packet: fragments[0])) + let second = try #require(BLEFragmentHeader(packet: fragments[1])) + + _ = buffer.append(first, maxInFlightAssemblies: 8, now: Date(timeIntervalSince1970: 1)) + #expect(buffer.removeExpired(before: Date(timeIntervalSince1970: 2)) == 1) + + if case let .stored(_, started) = buffer.append(second, maxInFlightAssemblies: 8) { + #expect(started) + } else { + Issue.record("Expected expired assembly to be gone") + } + } + + private func makePacket(payload: Data, timestamp: UInt64 = 0x0102030405) -> BitchatPacket { + BitchatPacket( + type: MessageType.message.rawValue, + senderID: Data([0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77]), + recipientID: nil, + timestamp: timestamp, + payload: payload, + signature: nil, + ttl: 3 + ) + } + + private func makePayload(count: Int, seed: UInt64 = 0x1234ABCD) -> Data { + var state = seed + return Data((0..> 32) + }) + } + + private func makeFragments(for packet: BitchatPacket, chunkSize: Int, fragmentID: Data) throws -> [BitchatPacket] { + let fullData = try #require(packet.toBinaryData(padding: false)) + let chunks = stride(from: 0, to: fullData.count, by: chunkSize).map { offset in + Data(fullData[offset.. BitchatPacket { + var payload = Data() + payload.append(fragmentID) + payload.append(contentsOf: withUnsafeBytes(of: UInt16(index).bigEndian) { Data($0) }) + payload.append(contentsOf: withUnsafeBytes(of: UInt16(total).bigEndian) { Data($0) }) + payload.append(originalType) + payload.append(fragmentData) + + return BitchatPacket( + type: MessageType.fragment.rawValue, + senderID: senderID, + recipientID: recipientID, + timestamp: timestamp, + payload: payload, + signature: nil, + ttl: 3 + ) + } +} diff --git a/bitchatTests/Services/BLEInboundWriteBufferTests.swift b/bitchatTests/Services/BLEInboundWriteBufferTests.swift new file mode 100644 index 00000000..636e2abf --- /dev/null +++ b/bitchatTests/Services/BLEInboundWriteBufferTests.swift @@ -0,0 +1,140 @@ +import BitFoundation +import Foundation +import Testing +@testable import bitchat + +struct BLEInboundWriteBufferTests { + @Test + func appendDecodesPacketAcrossChunkedWrites() throws { + var buffer = BLEInboundWriteBuffer() + let packet = makePacket() + let frame = try #require(packet.toBinaryData(padding: false)) + let splitIndex = max(1, frame.count / 2) + + let firstResult = buffer.append( + chunks: [BLEInboundWriteChunk(offset: 0, data: frame.prefix(splitIndex))], + for: "central-1", + capBytes: 1024 + ) + + if case let .waiting(metadata) = firstResult { + #expect(metadata.accumulatedBytes == splitIndex) + #expect(metadata.appendedBytes == splitIndex) + #expect(metadata.offsets == [0]) + #expect(metadata.packetType == MessageType.message.rawValue) + } else { + Issue.record("Expected first chunk to wait for more data") + } + + let secondResult = buffer.append( + chunks: [BLEInboundWriteChunk(offset: splitIndex, data: frame.suffix(from: splitIndex))], + for: "central-1", + capBytes: 1024 + ) + + if case let .decoded(decoded, metadata) = secondResult { + #expect(decoded.type == packet.type) + #expect(decoded.senderID == packet.senderID) + #expect(decoded.payload == packet.payload) + #expect(metadata.accumulatedBytes == frame.count) + #expect(metadata.offsets == [splitIndex]) + } else { + Issue.record("Expected complete frame to decode") + } + } + + @Test + func appendMergesMultipleOffsetChunksInOneCall() throws { + var buffer = BLEInboundWriteBuffer() + let packet = makePacket(timestamp: 0xABC) + let frame = try #require(packet.toBinaryData(padding: false)) + let splitIndex = max(1, frame.count / 3) + + let result = buffer.append( + chunks: [ + BLEInboundWriteChunk(offset: 0, data: frame.prefix(splitIndex)), + BLEInboundWriteChunk(offset: splitIndex, data: frame.suffix(from: splitIndex)) + ], + for: "central-1", + capBytes: 1024 + ) + + if case let .decoded(decoded, metadata) = result { + #expect(decoded.timestamp == packet.timestamp) + #expect(metadata.appendedBytes == frame.count) + #expect(metadata.offsets == [0, splitIndex]) + } else { + Issue.record("Expected merged chunks to decode") + } + } + + @Test + func appendDropsOversizedBufferAndAllowsLaterDecode() throws { + var buffer = BLEInboundWriteBuffer() + let oversized = buffer.append( + chunks: [BLEInboundWriteChunk(offset: 0, data: Data(repeating: 0xAA, count: 8))], + for: "central-1", + capBytes: 4 + ) + + if case let .oversized(metadata) = oversized { + #expect(metadata.accumulatedBytes == 8) + #expect(metadata.appendedBytes == 8) + } else { + Issue.record("Expected oversized buffer to be dropped") + } + + let packet = makePacket(timestamp: 0xDEF) + let frame = try #require(packet.toBinaryData(padding: false)) + let decoded = buffer.append( + chunks: [BLEInboundWriteChunk(offset: 0, data: frame)], + for: "central-1", + capBytes: 1024 + ) + + if case let .decoded(decodedPacket, _) = decoded { + #expect(decodedPacket.timestamp == packet.timestamp) + } else { + Issue.record("Expected later clean frame to decode") + } + } + + @Test + func removeAllClearsPartialWrites() throws { + var buffer = BLEInboundWriteBuffer() + let packet = makePacket() + let frame = try #require(packet.toBinaryData(padding: false)) + let splitIndex = max(1, frame.count / 2) + + _ = buffer.append( + chunks: [BLEInboundWriteChunk(offset: 0, data: frame.prefix(splitIndex))], + for: "central-1", + capBytes: 1024 + ) + buffer.removeAll() + + let result = buffer.append( + chunks: [BLEInboundWriteChunk(offset: splitIndex, data: frame.suffix(from: splitIndex))], + for: "central-1", + capBytes: 1024 + ) + + if case .waiting = result { + // Expected: the first half was cleared, so the second half alone cannot decode. + } else { + Issue.record("Expected buffer reset to discard the earlier partial write") + } + } + + private func makePacket(timestamp: UInt64 = 0x0102030405) -> BitchatPacket { + BitchatPacket( + type: MessageType.message.rawValue, + senderID: Data([0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77]), + recipientID: nil, + timestamp: timestamp, + payload: Data([0xDE, 0xAD, 0xBE, 0xEF]), + signature: nil, + ttl: 3 + ) + } +} diff --git a/bitchatTests/Services/BLEIngressLinkRegistryTests.swift b/bitchatTests/Services/BLEIngressLinkRegistryTests.swift new file mode 100644 index 00000000..af8c2777 --- /dev/null +++ b/bitchatTests/Services/BLEIngressLinkRegistryTests.swift @@ -0,0 +1,178 @@ +import Foundation +import Testing +import BitFoundation +@testable import bitchat + +struct BLEIngressLinkRegistryTests { + @Test + func recordIfNewSuppressesDuplicateWithinLifetime() { + var registry = BLEIngressLinkRegistry() + let packet = makePacket(sender: PeerID(str: "1122334455667788"), timestamp: 1) + let peer = PeerID(str: "1122334455667788") + let now = Date() + + let firstRecord = registry.recordIfNew(packet, link: .central("central-a"), peerID: peer, now: now, lifetime: 3.0) + let duplicateRecord = registry.recordIfNew(packet, link: .peripheral("peripheral-b"), peerID: peer, now: now.addingTimeInterval(1.0), lifetime: 3.0) + + #expect(firstRecord) + #expect(!duplicateRecord) + #expect(registry.link(for: packet) == .central("central-a")) + #expect(registry.peerID(for: packet) == peer) + } + + @Test + func recordIfNewAllowsExpiredDuplicateAndUpdatesLink() { + var registry = BLEIngressLinkRegistry() + let packet = makePacket(sender: PeerID(str: "1122334455667788"), timestamp: 1) + let peer = PeerID(str: "1122334455667788") + let now = Date() + + let firstRecord = registry.recordIfNew(packet, link: .central("central-a"), peerID: peer, now: now, lifetime: 3.0) + let expiredRecord = registry.recordIfNew(packet, link: .peripheral("peripheral-b"), peerID: peer, now: now.addingTimeInterval(4.0), lifetime: 3.0) + + #expect(firstRecord) + #expect(expiredRecord) + #expect(registry.link(for: packet) == .peripheral("peripheral-b")) + #expect(registry.peerID(for: packet) == peer) + } + + @Test + func pruneRemovesExpiredIngressLinks() { + var registry = BLEIngressLinkRegistry() + let packet = makePacket(sender: PeerID(str: "1122334455667788"), timestamp: 1) + let peer = PeerID(str: "1122334455667788") + let now = Date() + + let firstRecord = registry.recordIfNew(packet, link: .central("central-a"), peerID: peer, now: now, lifetime: 3.0) + #expect(firstRecord) + registry.prune(before: now.addingTimeInterval(4.0)) + + #expect(registry.isEmpty) + #expect(registry.link(for: packet) == nil) + #expect(registry.peerID(for: packet) == nil) + } + + @Test + func packetContextRejectsSelfLoopback() { + let localPeer = PeerID(str: "1122334455667788") + let packet = makePacket(sender: localPeer, timestamp: 1) + + let result = BLEIngressLinkRegistry.packetContext( + for: packet, + claimedSenderID: localPeer, + boundPeerID: nil, + localPeerID: localPeer, + directAnnounceTTL: 7 + ) + + #expect(result == .failure(.selfLoopback(packetType: MessageType.message.rawValue))) + } + + @Test + func packetContextAllowsRelayedSenderOnBoundLink() throws { + let localPeer = PeerID(str: "0011223344556677") + let boundPeer = PeerID(str: "1122334455667788") + let relayedSender = PeerID(str: "8899aabbccddeeff") + let packet = makePacket(sender: relayedSender, timestamp: 1) + + let context = try #require(trySuccess(BLEIngressLinkRegistry.packetContext( + for: packet, + claimedSenderID: relayedSender, + boundPeerID: boundPeer, + localPeerID: localPeer, + directAnnounceTTL: 7 + ))) + + #expect(context.receivedFromPeerID == boundPeer) + #expect(context.validationPeerID == relayedSender) + } + + @Test + func packetContextRejectsDirectAnnounceMismatchOnBoundLink() { + let localPeer = PeerID(str: "0011223344556677") + let boundPeer = PeerID(str: "1122334455667788") + let claimedPeer = PeerID(str: "8899aabbccddeeff") + let packet = makeAnnouncePacket(sender: claimedPeer, ttl: 7) + + let result = BLEIngressLinkRegistry.packetContext( + for: packet, + claimedSenderID: claimedPeer, + boundPeerID: boundPeer, + localPeerID: localPeer, + directAnnounceTTL: 7 + ) + + #expect(result == .failure(.directSenderMismatch(boundPeerID: boundPeer, claimedSenderID: claimedPeer))) + } + + @Test + func packetContextUsesBoundPeerForRSRValidation() throws { + let localPeer = PeerID(str: "0011223344556677") + let boundPeer = PeerID(str: "1122334455667788") + let relayedSender = PeerID(str: "8899aabbccddeeff") + var packet = makePacket(sender: relayedSender, timestamp: 1) + packet.isRSR = true + + let context = try #require(trySuccess(BLEIngressLinkRegistry.packetContext( + for: packet, + claimedSenderID: relayedSender, + boundPeerID: boundPeer, + localPeerID: localPeer, + directAnnounceTTL: 7 + ))) + + #expect(context.receivedFromPeerID == boundPeer) + #expect(context.validationPeerID == boundPeer) + } + + @Test + func packetContextAllowsSelfAuthoredRSRWithTTLZeroFromBoundPeer() throws { + let localPeer = PeerID(str: "0011223344556677") + let boundPeer = PeerID(str: "1122334455667788") + var packet = makePacket(sender: localPeer, timestamp: 1) + packet.isRSR = true + packet.ttl = 0 + + let context = try #require(trySuccess(BLEIngressLinkRegistry.packetContext( + for: packet, + claimedSenderID: localPeer, + boundPeerID: boundPeer, + localPeerID: localPeer, + directAnnounceTTL: 7 + ))) + + #expect(context.receivedFromPeerID == boundPeer) + #expect(context.validationPeerID == boundPeer) + } +} + +private func makePacket(sender: PeerID, timestamp: UInt64) -> BitchatPacket { + BitchatPacket( + type: MessageType.message.rawValue, + senderID: Data(hexString: sender.id) ?? Data(), + recipientID: nil, + timestamp: timestamp, + payload: Data("hello".utf8), + signature: nil, + ttl: 3 + ) +} + +private func makeAnnouncePacket(sender: PeerID, ttl: UInt8) -> BitchatPacket { + BitchatPacket( + type: MessageType.announce.rawValue, + senderID: Data(hexString: sender.id) ?? Data(), + recipientID: nil, + timestamp: 1, + payload: Data(), + signature: nil, + ttl: ttl + ) +} + +private func trySuccess(_ result: Result) -> BLEIngressPacketContext? { + guard case .success(let context) = result else { + return nil + } + return context +} diff --git a/bitchatTests/Services/BLEOutboundNotificationBufferTests.swift b/bitchatTests/Services/BLEOutboundNotificationBufferTests.swift new file mode 100644 index 00000000..4dced392 --- /dev/null +++ b/bitchatTests/Services/BLEOutboundNotificationBufferTests.swift @@ -0,0 +1,70 @@ +import Foundation +import Testing +@testable import bitchat + +struct BLEOutboundNotificationBufferTests { + @Test + func enqueueStoresNotificationsUntilTaken() { + var buffer = BLEOutboundNotificationBuffer() + + let result = buffer.enqueue( + data: Data([0x01]), + targets: ["central-1"], + capCount: 2 + ) + + if case let .enqueued(count) = result { + #expect(count == 1) + } else { + Issue.record("Expected notification to be enqueued") + } + + let pending = buffer.takeAll() + + #expect(pending.count == 1) + #expect(pending.first?.data == Data([0x01])) + #expect(pending.first?.targets == ["central-1"]) + #expect(buffer.isEmpty) + } + + @Test + func enqueueRejectsWhenCapIsFull() { + var buffer = BLEOutboundNotificationBuffer() + + _ = buffer.enqueue(data: Data([0x01]), targets: nil, capCount: 1) + let result = buffer.enqueue(data: Data([0x02]), targets: nil, capCount: 1) + + if case let .full(count) = result { + #expect(count == 1) + } else { + Issue.record("Expected full notification buffer") + } + + #expect(buffer.count == 1) + } + + @Test + func prependRestoresUnsentNotificationsAheadOfNewerItems() { + var buffer = BLEOutboundNotificationBuffer() + let unsent = [ + BLEPendingNotification(data: Data([0x01]), targets: ["old"]) + ] + + _ = buffer.enqueue(data: Data([0x02]), targets: ["new"], capCount: 4) + buffer.prepend(unsent) + + let pending = buffer.takeAll() + + #expect(pending.map { Int($0.data.first ?? 0) } == [0x01, 0x02]) + } + + @Test + func removeAllClearsBufferedNotifications() { + var buffer = BLEOutboundNotificationBuffer() + + _ = buffer.enqueue(data: Data([0x01]), targets: nil, capCount: 4) + buffer.removeAll() + + #expect(buffer.isEmpty) + } +} diff --git a/bitchatTests/Services/NostrTransportTests.swift b/bitchatTests/Services/NostrTransportTests.swift index 9541f3b8..8cde7bf8 100644 --- a/bitchatTests/Services/NostrTransportTests.swift +++ b/bitchatTests/Services/NostrTransportTests.swift @@ -289,9 +289,10 @@ struct NostrTransportTests { transport.sendReadReceipt(first, to: fullPeerID) transport.sendReadReceipt(second, to: fullPeerID) - let sentFirst = await TestHelpers.waitUntil({ probe.sentEvents.count == 1 }, timeout: 1.5) + let readReceiptTimeout: TimeInterval = 5.0 + let sentFirst = await TestHelpers.waitUntil({ probe.sentEvents.count >= 1 }, timeout: readReceiptTimeout) try #require(sentFirst, "Expected first queued read receipt event") - let scheduledThrottle = await TestHelpers.waitUntil({ probe.scheduledActionCount == 1 }, timeout: 1.5) + let scheduledThrottle = await TestHelpers.waitUntil({ probe.scheduledActionCount == 1 }, timeout: readReceiptTimeout) try #require(scheduledThrottle, "Expected queued throttle action after first read receipt") let firstEvent = try #require(probe.sentEvents.first, "Expected first queued read receipt event") let firstPayload = try decodeEmbeddedPayload(from: firstEvent, recipient: recipient).payload @@ -300,7 +301,7 @@ struct NostrTransportTests { try #require(probe.runNextScheduledAction(), "Expected queued throttle action after first read receipt") - let sentSecond = await TestHelpers.waitUntil({ probe.sentEvents.count == 2 }, timeout: 1.5) + let sentSecond = await TestHelpers.waitUntil({ probe.sentEvents.count >= 2 }, timeout: readReceiptTimeout) try #require(sentSecond, "Expected second read receipt after running throttle action") let secondEvent = try #require(probe.sentEvents.last, "Expected second queued read receipt event") let secondPayload = try decodeEmbeddedPayload(from: secondEvent, recipient: recipient).payload diff --git a/bitchatTests/Services/RelayControllerTests.swift b/bitchatTests/Services/RelayControllerTests.swift index 71553ab8..ef5b5ff2 100644 --- a/bitchatTests/Services/RelayControllerTests.swift +++ b/bitchatTests/Services/RelayControllerTests.swift @@ -50,6 +50,26 @@ struct RelayControllerTests { #expect(decision.delayMs >= 10 && decision.delayMs <= 35) } + @Test + func localRecipientDoesNotRelayDirectedTraffic() async { + let decision = RelayController.decide( + ttl: 7, + senderIsSelf: false, + recipientIsSelf: true, + isEncrypted: true, + isDirectedEncrypted: true, + isFragment: false, + isDirectedFragment: false, + isHandshake: false, + isAnnounce: false, + degree: 3, + highDegreeThreshold: TransportConfig.bleHighDegreeThreshold + ) + + #expect(!decision.shouldRelay) + #expect(decision.newTTL == 7) + } + @Test func fragment_relaysWithFragmentCap() async { let decision = RelayController.decide( diff --git a/bitchatTests/Services/SecureIdentityStateManagerTests.swift b/bitchatTests/Services/SecureIdentityStateManagerTests.swift index 6f40558f..27e57fdf 100644 --- a/bitchatTests/Services/SecureIdentityStateManagerTests.swift +++ b/bitchatTests/Services/SecureIdentityStateManagerTests.swift @@ -374,6 +374,7 @@ final class SecureIdentityStateManagerTests: XCTestCase { XCTAssertTrue(manager.getFavorites().isEmpty) XCTAssertTrue(manager.getVerifiedFingerprints().isEmpty) XCTAssertTrue(manager.getBlockedNostrPubkeys().isEmpty) + XCTAssertNil(keychain.getIdentityKey(forKey: "bitchat.identityCache.v2")) } func test_clearAllIdentityData_removesCachedState() async { diff --git a/docs/ARCHITECTURE_V2.md b/docs/ARCHITECTURE_V2.md index 6a6de351..0284e830 100644 --- a/docs/ARCHITECTURE_V2.md +++ b/docs/ARCHITECTURE_V2.md @@ -44,3 +44,5 @@ This branch starts a larger simplification effort focused on performance, reliab The Bluetooth architecture branch begins step 2 by adding a typed `TransportEvent` boundary while preserving the legacy `BitchatDelegate` bridge. New transport code should emit typed events first, with delegate forwarding used only as a compatibility adapter during migration. The branch also starts carving performance-sensitive BLE scheduling state out of `BLEService`: pending write backpressure now lives in `BLEOutboundWriteBuffer`, giving the outbound hot path a focused, unit-tested component before deeper fragmentation and link-scheduler work. + +The next transport slice continues that path by extracting ingress link memory and outbound fanout selection. `BLEIngressLinkRegistry` now owns duplicate/last-hop tracking, ingress peer memory, and direct-link sender binding decisions, while `BLEFanoutSelector` owns deterministic broadcast subsetting and ingress-peer/link exclusion. `BLEService` still coordinates CoreBluetooth callbacks, but these hot-path decisions are now pure, covered units instead of inline dictionary logic. From 9e84f5e822499f93877092fe0d48b888b285ceef Mon Sep 17 00:00:00 2001 From: jack <212554440+jackjackbits@users.noreply.github.com> Date: Sun, 31 May 2026 14:16:11 +0200 Subject: [PATCH 014/216] [codex] Refactor BLE outbound scheduling and Noise queues (#1306) * Refactor BLE transport event handling * Make image output paths unique * Keep queued Nostr read receipts alive * Refine BLE ingress fanout * Rediscover BLE service after invalidation * Extract BLE notification retry buffer * Extract BLE inbound write buffer * Extract BLE fragment assembly buffer * Tidy secure log handling from device run * Extract BLE outbound fragment scheduler * Harden app CI media tests * Redact BLE message content from logs * Extract BLE Noise session queues * Fix BLE read receipt UI updates * Allow self-authored RSR ingress replies * Harden read receipt queue test timing * Extract BLE outbound policy and incoming file storage * Avoid duplicate BLE link snapshots during send * Canonicalize Nostr relay URLs --------- Co-authored-by: jack --- bitchat/Features/media/ImageUtils.swift | 23 +- bitchat/Nostr/GeoRelayDirectory.swift | 7 +- bitchat/Nostr/NostrRelayManager.swift | 17 +- bitchat/Nostr/NostrRelayURL.swift | 51 ++ .../Services/BLE/BLEIncomingFileStore.swift | 168 ++++ .../Services/BLE/BLENoisePayloadFactory.swift | 25 + .../Services/BLE/BLENoiseSessionQueues.swift | 46 ++ ...BLEOutboundFragmentTransferScheduler.swift | 181 +++++ .../BLE/BLEOutboundPacketPolicy.swift | 43 ++ bitchat/Services/BLE/BLEService.swift | 729 +++++------------- .../ViewModels/ChatDeliveryCoordinator.swift | 20 +- .../ChatTransportEventCoordinator.swift | 77 +- bitchatTests/ChatViewModelTests.swift | 51 ++ bitchatTests/Features/ImageUtilsTests.swift | 22 +- .../Nostr/GeoRelayDirectoryTests.swift | 2 + .../BLENoisePayloadFactoryTests.swift | 34 + .../Services/BLENoiseSessionQueuesTests.swift | 67 ++ ...tboundFragmentTransferSchedulerTests.swift | 148 ++++ .../Services/NostrRelayManagerTests.swift | 2 +- 19 files changed, 1084 insertions(+), 629 deletions(-) create mode 100644 bitchat/Nostr/NostrRelayURL.swift create mode 100644 bitchat/Services/BLE/BLEIncomingFileStore.swift create mode 100644 bitchat/Services/BLE/BLENoisePayloadFactory.swift create mode 100644 bitchat/Services/BLE/BLENoiseSessionQueues.swift create mode 100644 bitchat/Services/BLE/BLEOutboundFragmentTransferScheduler.swift create mode 100644 bitchat/Services/BLE/BLEOutboundPacketPolicy.swift create mode 100644 bitchatTests/Services/BLENoisePayloadFactoryTests.swift create mode 100644 bitchatTests/Services/BLENoiseSessionQueuesTests.swift create mode 100644 bitchatTests/Services/BLEOutboundFragmentTransferSchedulerTests.swift diff --git a/bitchat/Features/media/ImageUtils.swift b/bitchat/Features/media/ImageUtils.swift index f362c709..a75cc6db 100644 --- a/bitchat/Features/media/ImageUtils.swift +++ b/bitchat/Features/media/ImageUtils.swift @@ -16,7 +16,7 @@ enum ImageUtils { private static let compressionQuality: CGFloat = 0.82 private static let targetImageBytes: Int = 45_000 - static func processImage(at url: URL, maxDimension: CGFloat = 448) throws -> URL { + static func processImage(at url: URL, maxDimension: CGFloat = 448, outputDirectory: URL? = nil) throws -> URL { // Security H1: Check file size BEFORE reading into memory let attrs = try FileManager.default.attributesOfItem(atPath: url.path) guard let fileSize = attrs[.size] as? Int else { @@ -30,15 +30,15 @@ enum ImageUtils { let data = try Data(contentsOf: url) #if os(iOS) guard let image = UIImage(data: data) else { throw ImageUtilsError.invalidImage } - return try processImage(image, maxDimension: maxDimension) + return try processImage(image, maxDimension: maxDimension, outputDirectory: outputDirectory) #else guard let image = NSImage(data: data) else { throw ImageUtilsError.invalidImage } - return try processImage(image, maxDimension: maxDimension) + return try processImage(image, maxDimension: maxDimension, outputDirectory: outputDirectory) #endif } #if os(iOS) - static func processImage(_ image: UIImage, maxDimension: CGFloat = 448) throws -> URL { + static func processImage(_ image: UIImage, maxDimension: CGFloat = 448, outputDirectory: URL? = nil) throws -> URL { return try autoreleasepool { // Scale the image first let scaled = scaledImage(image, maxDimension: maxDimension) @@ -64,7 +64,7 @@ enum ImageUtils { } } - let outputURL = try makeOutputURL() + let outputURL = try makeOutputURL(outputDirectory: outputDirectory) try jpegData.write(to: outputURL, options: .atomic) return outputURL } @@ -106,7 +106,7 @@ enum ImageUtils { return data as Data } #else - static func processImage(_ image: NSImage, maxDimension: CGFloat = 448) throws -> URL { + static func processImage(_ image: NSImage, maxDimension: CGFloat = 448, outputDirectory: URL? = nil) throws -> URL { return try autoreleasepool { let scaled = scaledImage(image, maxDimension: maxDimension) guard let inputCG = scaled.cgImage(forProposedRect: nil, context: nil, hints: nil) else { @@ -142,7 +142,7 @@ enum ImageUtils { } } } - let outputURL = try makeOutputURL() + let outputURL = try makeOutputURL(outputDirectory: outputDirectory) try jpegData.write(to: outputURL, options: .atomic) return outputURL } @@ -186,12 +186,17 @@ enum ImageUtils { } #endif - private static func makeOutputURL() throws -> URL { + private static func makeOutputURL(outputDirectory: URL? = nil) throws -> URL { let formatter = DateFormatter() formatter.dateFormat = "yyyyMMdd_HHmmss" let fileName = "img_\(formatter.string(from: Date()))_\(UUID().uuidString).jpg" - let directory = try applicationFilesDirectory().appendingPathComponent("images/outgoing", isDirectory: true) + let directory: URL + if let outputDirectory { + directory = outputDirectory + } else { + directory = try applicationFilesDirectory().appendingPathComponent("images/outgoing", isDirectory: true) + } try FileManager.default.createDirectory(at: directory, withIntermediateDirectories: true, attributes: nil) return directory.appendingPathComponent(fileName) } diff --git a/bitchat/Nostr/GeoRelayDirectory.swift b/bitchat/Nostr/GeoRelayDirectory.swift index 653fc285..a759a834 100644 --- a/bitchat/Nostr/GeoRelayDirectory.swift +++ b/bitchat/Nostr/GeoRelayDirectory.swift @@ -381,12 +381,7 @@ final class GeoRelayDirectory { if idx == 0 && line.lowercased().contains("relay url") { continue } let parts = line.split(separator: ",").map { $0.trimmed } guard parts.count >= 3 else { continue } - var host = parts[0] - host = host.replacingOccurrences(of: "https://", with: "") - host = host.replacingOccurrences(of: "http://", with: "") - host = host.replacingOccurrences(of: "wss://", with: "") - host = host.replacingOccurrences(of: "ws://", with: "") - host = host.trimmingCharacters(in: CharacterSet(charactersIn: "/")) + guard let host = NostrRelayURL.directoryAddress(parts[0]) else { continue } guard let lat = Double(parts[1]), let lon = Double(parts[2]) else { continue } result.insert(Entry(host: host, lat: lat, lon: lon)) } diff --git a/bitchat/Nostr/NostrRelayManager.swift b/bitchat/Nostr/NostrRelayManager.swift index f12d0e9e..7428fc55 100644 --- a/bitchat/Nostr/NostrRelayManager.swift +++ b/bitchat/Nostr/NostrRelayManager.swift @@ -129,7 +129,7 @@ final class NostrRelayManager: ObservableObject { "wss://offchain.pub" // For local testing, you can add: "ws://localhost:8080" ] - private static let defaultRelaySet = Set(defaultRelays) + private static let defaultRelaySet = Set(defaultRelays.compactMap { NostrRelayURL.normalized($0) }) @Published private(set) var relays: [Relay] = [] @Published private(set) var isConnected = false @@ -390,8 +390,7 @@ final class NostrRelayManager: ObservableObject { // Target specific relays if provided; else default. Filter permanently failed relays. let baseUrls = relayUrls ?? Self.defaultRelays - let candidateUrls = baseUrls.filter { !isPermanentlyFailed($0) } - let urls = allowedRelayList(from: candidateUrls) + let urls = allowedRelayList(from: baseUrls).filter { !isPermanentlyFailed($0) } let requestState = SubscriptionRequestState(messageString: messageString, relayURLs: Set(urls)) if subscriptionRequestState[id] == requestState, subscriptionStateExists(id: id, requestState: requestState) { return @@ -474,7 +473,8 @@ final class NostrRelayManager: ObservableObject { private func allowedRelayList(from urls: [String]) -> [String] { var seen = Set() var result: [String] = [] - for url in urls { + for rawURL in urls { + guard let url = NostrRelayURL.normalized(rawURL) else { continue } if !allowDefaultRelays && Self.defaultRelaySet.contains(url) { continue } if seen.insert(url).inserted { result.append(url) @@ -881,7 +881,8 @@ final class NostrRelayManager: ObservableObject { /// Manually retry connection to a specific relay func retryConnection(to relayUrl: String) { - guard let index = relays.firstIndex(where: { $0.url == relayUrl }) else { return } + let normalizedRelayUrl = NostrRelayURL.normalized(relayUrl) ?? relayUrl + guard let index = relays.firstIndex(where: { $0.url == normalizedRelayUrl }) else { return } // Reset reconnection attempts relays[index].reconnectAttempts = 0 @@ -889,13 +890,13 @@ final class NostrRelayManager: ObservableObject { relays[index].lastError = nil // Disconnect if connected - if let connection = connections[relayUrl] { + if let connection = connections[normalizedRelayUrl] { connection.cancel(with: .goingAway, reason: nil) - connections.removeValue(forKey: relayUrl) + connections.removeValue(forKey: normalizedRelayUrl) } // Attempt immediate reconnection - connectToRelay(relayUrl) + connectToRelay(normalizedRelayUrl) } /// Get detailed status for all relays diff --git a/bitchat/Nostr/NostrRelayURL.swift b/bitchat/Nostr/NostrRelayURL.swift new file mode 100644 index 00000000..be9a6fb6 --- /dev/null +++ b/bitchat/Nostr/NostrRelayURL.swift @@ -0,0 +1,51 @@ +import Foundation + +enum NostrRelayURL { + static func normalized(_ rawValue: String, defaultScheme: String? = nil) -> String? { + var value = rawValue.trimmingCharacters(in: .whitespacesAndNewlines) + guard !value.isEmpty else { return nil } + + if !value.contains("://"), let defaultScheme { + value = "\(defaultScheme)://\(value)" + } + + guard var components = URLComponents(string: value), + let rawScheme = components.scheme?.lowercased(), + let rawHost = components.host?.lowercased(), + !rawHost.isEmpty else { + return nil + } + + switch rawScheme { + case "wss", "https": + components.scheme = "wss" + if components.port == 443 { + components.port = nil + } + case "ws", "http": + components.scheme = "ws" + if components.port == 80 { + components.port = nil + } + default: + return nil + } + + components.host = rawHost + if components.path == "/" { + components.path = "" + } + components.fragment = nil + + return components.string + } + + static func directoryAddress(_ rawValue: String) -> String? { + guard var normalized = normalized(rawValue, defaultScheme: "wss") else { return nil } + for prefix in ["wss://", "ws://"] where normalized.hasPrefix(prefix) { + normalized.removeFirst(prefix.count) + break + } + return normalized + } +} diff --git a/bitchat/Services/BLE/BLEIncomingFileStore.swift b/bitchat/Services/BLE/BLEIncomingFileStore.swift new file mode 100644 index 00000000..3379cfe5 --- /dev/null +++ b/bitchat/Services/BLE/BLEIncomingFileStore.swift @@ -0,0 +1,168 @@ +import BitLogger +import BitFoundation +import Foundation + +struct BLEIncomingFileStore { + private static let quotaBytes: Int64 = 100 * 1024 * 1024 + + private let fileManager: FileManager + private let baseDirectory: URL? + private let dateProvider: () -> Date + + init(fileManager: FileManager = .default, baseDirectory: URL? = nil, dateProvider: @escaping () -> Date = Date.init) { + self.fileManager = fileManager + self.baseDirectory = baseDirectory + self.dateProvider = dateProvider + } + + func save( + data: Data, + preferredName: String?, + subdirectory: String, + fallbackExtension: String?, + defaultPrefix: String + ) -> URL? { + do { + let base = try filesDirectory().appendingPathComponent(subdirectory, isDirectory: true) + try fileManager.createDirectory(at: base, withIntermediateDirectories: true, attributes: nil) + let sanitized = sanitizedFileName( + preferredName, + defaultName: "\(defaultPrefix)_\(Self.timestampString(from: dateProvider()))", + fallbackExtension: fallbackExtension + ) + let destination = uniqueFileURL(in: base, fileName: sanitized) + try data.write(to: destination, options: .atomic) + return destination + } catch { + SecureLogger.error("❌ Failed to persist incoming media: \(error)", category: .session) + return nil + } + } + + func enforceQuota(reservingBytes: Int) { + do { + let base = try filesDirectory() + let incomingDirs = [ + base.appendingPathComponent("voicenotes/incoming", isDirectory: true), + base.appendingPathComponent("images/incoming", isDirectory: true), + base.appendingPathComponent("files/incoming", isDirectory: true) + ] + var allFiles: [(url: URL, size: Int64, modified: Date)] = [] + + for dir in incomingDirs where fileManager.fileExists(atPath: dir.path) { + guard let contents = try? fileManager.contentsOfDirectory( + at: dir, + includingPropertiesForKeys: [.fileSizeKey, .contentModificationDateKey], + options: [.skipsHiddenFiles] + ) else { continue } + + for fileURL in contents { + guard let attrs = try? fileURL.resourceValues(forKeys: [.fileSizeKey, .contentModificationDateKey]), + let size = attrs.fileSize, + let modified = attrs.contentModificationDate else { continue } + allFiles.append((url: fileURL, size: Int64(size), modified: modified)) + } + } + + let currentUsage = allFiles.reduce(0) { $0 + $1.size } + let targetUsage = Self.quotaBytes - Int64(reservingBytes) + guard currentUsage > targetUsage else { return } + + let needToFree = currentUsage - targetUsage + var freedSpace: Int64 = 0 + for file in allFiles.sorted(by: { $0.modified < $1.modified }) { + guard freedSpace < needToFree else { break } + do { + try fileManager.removeItem(at: file.url) + freedSpace += file.size + SecureLogger.debug("🗑️ BCH-01-002: Deleted old incoming file to free space: \(file.url.lastPathComponent)", category: .security) + } catch { + SecureLogger.warning("⚠️ Failed to delete old file for quota: \(error)", category: .security) + } + } + + if freedSpace > 0 { + SecureLogger.info("📊 BCH-01-002: Freed \(ByteCountFormatter.string(fromByteCount: freedSpace, countStyle: .file)) to stay within incoming files quota", category: .security) + } + } catch { + SecureLogger.warning("⚠️ Could not enforce storage quota: \(error)", category: .security) + } + } + + private func filesDirectory() throws -> URL { + let root = try baseDirectory ?? fileManager.url( + for: .applicationSupportDirectory, + in: .userDomainMask, + appropriateFor: nil, + create: true + ) + let filesDir = root.appendingPathComponent("files", isDirectory: true) + try fileManager.createDirectory(at: filesDir, withIntermediateDirectories: true, attributes: nil) + return filesDir + } + + private func sanitizedFileName(_ name: String?, defaultName: String, fallbackExtension: String?) -> String { + var candidate = (name ?? "") + .replacingOccurrences(of: "\0", with: "") + .precomposedStringWithCanonicalMapping + .replacingOccurrences(of: "/", with: "_") + .replacingOccurrences(of: "\\", with: "_") + + let invalid = CharacterSet(charactersIn: "<>:\"|?*\0").union(.controlCharacters) + candidate = candidate.components(separatedBy: invalid).joined(separator: "_").trimmed + if candidate.isEmpty { candidate = defaultName } + if candidate.hasPrefix(".") { candidate = "_" + candidate } + + if candidate.count > 120 { + let ext = (candidate as NSString).pathExtension + let base = (candidate as NSString).deletingPathExtension + candidate = ext.isEmpty + ? String(candidate.prefix(120)) + : String(base.prefix(max(10, 120 - ext.count - 1))) + "." + ext + } + + if let fallbackExtension, (candidate as NSString).pathExtension.isEmpty { + candidate += ".\(fallbackExtension)" + } + + return candidate.isEmpty ? defaultName : candidate + } + + private func uniqueFileURL(in directory: URL, fileName: String) -> URL { + let directoryPath = directory.standardizedFileURL.path + func isInsideDirectory(_ url: URL) -> Bool { + url.standardizedFileURL.path.hasPrefix(directoryPath + "/") + } + + var candidate = directory.appendingPathComponent(fileName) + guard isInsideDirectory(candidate) else { + SecureLogger.warning("⚠️ Path traversal blocked: \(fileName)", category: .security) + return directory.appendingPathComponent("blocked_\(UUID().uuidString)") + } + + if !fileManager.fileExists(atPath: candidate.path) { + return candidate + } + + let baseName = (fileName as NSString).deletingPathExtension + let ext = (fileName as NSString).pathExtension + for counter in 1..<100 { + let newName = ext.isEmpty ? "\(baseName) (\(counter))" : "\(baseName) (\(counter)).\(ext)" + candidate = directory.appendingPathComponent(newName) + guard isInsideDirectory(candidate) else { + return directory.appendingPathComponent("blocked_\(UUID().uuidString)") + } + if !fileManager.fileExists(atPath: candidate.path) { + return candidate + } + } + + return directory.appendingPathComponent("\(baseName)_\(UUID().uuidString).\(ext.isEmpty ? "dat" : ext)") + } + + private static func timestampString(from date: Date) -> String { + let formatter = DateFormatter() + formatter.dateFormat = "yyyyMMdd_HHmmss" + return formatter.string(from: date) + } +} diff --git a/bitchat/Services/BLE/BLENoisePayloadFactory.swift b/bitchat/Services/BLE/BLENoisePayloadFactory.swift new file mode 100644 index 00000000..0aac077f --- /dev/null +++ b/bitchat/Services/BLE/BLENoisePayloadFactory.swift @@ -0,0 +1,25 @@ +import Foundation + +enum BLENoisePayloadFactory { + static func privateMessage(content: String, messageID: String) -> Data? { + guard let payload = PrivateMessagePacket(messageID: messageID, content: content).encode() else { + return nil + } + + return typedPayload(.privateMessage, payload: payload) + } + + static func readReceipt(originalMessageID: String) -> Data { + typedPayload(.readReceipt, payload: Data(originalMessageID.utf8)) + } + + static func delivered(messageID: String) -> Data { + typedPayload(.delivered, payload: Data(messageID.utf8)) + } + + static func typedPayload(_ type: NoisePayloadType, payload: Data) -> Data { + var typed = Data([type.rawValue]) + typed.append(payload) + return typed + } +} diff --git a/bitchat/Services/BLE/BLENoiseSessionQueues.swift b/bitchat/Services/BLE/BLENoiseSessionQueues.swift new file mode 100644 index 00000000..84eeaba8 --- /dev/null +++ b/bitchat/Services/BLE/BLENoiseSessionQueues.swift @@ -0,0 +1,46 @@ +import BitFoundation +import Foundation + +struct BLEPendingPrivateMessage: Equatable { + let content: String + let messageID: String +} + +struct BLENoiseSessionQueues { + private var privateMessagesByPeerID: [PeerID: [BLEPendingPrivateMessage]] = [:] + private var typedPayloadsByPeerID: [PeerID: [Data]] = [:] + + var isEmpty: Bool { + privateMessagesByPeerID.isEmpty && typedPayloadsByPeerID.isEmpty + } + + mutating func removeAll() { + privateMessagesByPeerID.removeAll() + typedPayloadsByPeerID.removeAll() + } + + mutating func appendPrivateMessage(content: String, messageID: String, for peerID: PeerID) { + privateMessagesByPeerID[peerID, default: []].append(BLEPendingPrivateMessage(content: content, messageID: messageID)) + } + + mutating func takePrivateMessages(for peerID: PeerID) -> [BLEPendingPrivateMessage] { + let messages = privateMessagesByPeerID[peerID] ?? [] + privateMessagesByPeerID.removeValue(forKey: peerID) + return messages + } + + mutating func prependPrivateMessages(_ messages: [BLEPendingPrivateMessage], for peerID: PeerID) { + guard !messages.isEmpty else { return } + privateMessagesByPeerID[peerID, default: []].insert(contentsOf: messages, at: 0) + } + + mutating func appendTypedPayload(_ payload: Data, for peerID: PeerID) { + typedPayloadsByPeerID[peerID, default: []].append(payload) + } + + mutating func takeTypedPayloads(for peerID: PeerID) -> [Data] { + let payloads = typedPayloadsByPeerID[peerID] ?? [] + typedPayloadsByPeerID.removeValue(forKey: peerID) + return payloads + } +} diff --git a/bitchat/Services/BLE/BLEOutboundFragmentTransferScheduler.swift b/bitchat/Services/BLE/BLEOutboundFragmentTransferScheduler.swift new file mode 100644 index 00000000..3e9d7fe7 --- /dev/null +++ b/bitchat/Services/BLE/BLEOutboundFragmentTransferScheduler.swift @@ -0,0 +1,181 @@ +import BitFoundation +import Foundation + +struct BLEOutboundFragmentTransferRequest { + let packet: BitchatPacket + let pad: Bool + let maxChunk: Int? + let directedPeer: PeerID? + let transferId: String? + + var resolvedTransferId: String? { + guard packet.type == MessageType.fileTransfer.rawValue else { return nil } + return transferId ?? packet.payload.sha256Hex() + } +} + +struct BLEOutboundFragmentTransferScheduler { + enum QueuePosition { + case front + case back + } + + enum SubmitResult { + case start(request: BLEOutboundFragmentTransferRequest, reservedTransferId: String?) + case queued(request: BLEOutboundFragmentTransferRequest, transferId: String?, position: QueuePosition) + } + + enum CancelResult { + case active(transferId: String, workItems: [DispatchWorkItem]) + case pending(transferId: String) + case missing + } + + enum SentResult: Equatable { + case progress(sentFragments: Int, totalFragments: Int) + case complete(sentFragments: Int, totalFragments: Int) + case missing + } + + private struct ActiveTransferState { + let totalFragments: Int + var sentFragments: Int + var workItems: [DispatchWorkItem] + } + + private var activeTransfers: [String: ActiveTransferState] = [:] + private var pendingTransfers: [BLEOutboundFragmentTransferRequest] = [] + + var activeCount: Int { + activeTransfers.count + } + + var pendingCount: Int { + pendingTransfers.count + } + + mutating func removeAll() -> [(id: String, workItems: [DispatchWorkItem])] { + let active = activeTransfers.map { ($0.key, $0.value.workItems) } + activeTransfers.removeAll() + pendingTransfers.removeAll() + return active + } + + mutating func submit( + _ request: BLEOutboundFragmentTransferRequest, + maxConcurrentTransfers: Int + ) -> SubmitResult { + guard let transferId = request.resolvedTransferId else { + return .start(request: request, reservedTransferId: nil) + } + + guard activeTransfers.count < maxConcurrentTransfers else { + pendingTransfers.append(request) + return .queued(request: request, transferId: transferId, position: .back) + } + + guard activeTransfers[transferId] == nil else { + pendingTransfers.insert(request, at: 0) + return .queued(request: request, transferId: transferId, position: .front) + } + + activeTransfers[transferId] = ActiveTransferState(totalFragments: 0, sentFragments: 0, workItems: []) + return .start(request: request, reservedTransferId: transferId) + } + + mutating func activateReservedTransfer( + id transferId: String, + totalFragments: Int, + workItems: [DispatchWorkItem] + ) -> Bool { + guard activeTransfers[transferId] != nil else { return false } + activeTransfers[transferId] = ActiveTransferState( + totalFragments: totalFragments, + sentFragments: 0, + workItems: workItems + ) + return true + } + + mutating func updateWorkItems(_ workItems: [DispatchWorkItem], for transferId: String) -> Bool { + guard var state = activeTransfers[transferId] else { return false } + state.workItems = workItems + activeTransfers[transferId] = state + return true + } + + mutating func releaseReservation(_ transferId: String) -> [DispatchWorkItem]? { + activeTransfers.removeValue(forKey: transferId)?.workItems + } + + func isActive(_ transferId: String) -> Bool { + activeTransfers[transferId] != nil + } + + mutating func cancelTransfer(_ transferId: String) -> CancelResult { + if let active = activeTransfers.removeValue(forKey: transferId) { + return .active(transferId: transferId, workItems: active.workItems) + } + + if let pendingIndex = pendingTransfers.firstIndex(where: { $0.resolvedTransferId == transferId || $0.transferId == transferId }) { + pendingTransfers.remove(at: pendingIndex) + return .pending(transferId: transferId) + } + + return .missing + } + + mutating func markFragmentSent(transferId: String) -> SentResult { + guard var state = activeTransfers[transferId] else { return .missing } + + state.sentFragments = min(state.sentFragments + 1, state.totalFragments) + let isComplete = state.sentFragments >= state.totalFragments + + if isComplete { + activeTransfers.removeValue(forKey: transferId) + return .complete(sentFragments: state.sentFragments, totalFragments: state.totalFragments) + } + + activeTransfers[transferId] = state + return .progress(sentFragments: state.sentFragments, totalFragments: state.totalFragments) + } + + mutating func reservePendingStarts(maxConcurrentTransfers: Int) -> [SubmitResult] { + var availableSlots = max(0, maxConcurrentTransfers - activeTransfers.count) + guard availableSlots > 0, !pendingTransfers.isEmpty else { return [] } + + var results: [SubmitResult] = [] + var blockedFront: [BLEOutboundFragmentTransferRequest] = [] + + while availableSlots > 0, !pendingTransfers.isEmpty { + let request = pendingTransfers.removeFirst() + availableSlots -= 1 + + guard let transferId = request.resolvedTransferId else { + results.append(.start(request: request, reservedTransferId: nil)) + continue + } + + guard activeTransfers.count < maxConcurrentTransfers else { + pendingTransfers.insert(request, at: 0) + results.append(.queued(request: request, transferId: transferId, position: .front)) + break + } + + guard activeTransfers[transferId] == nil else { + blockedFront.append(request) + results.append(.queued(request: request, transferId: transferId, position: .front)) + continue + } + + activeTransfers[transferId] = ActiveTransferState(totalFragments: 0, sentFragments: 0, workItems: []) + results.append(.start(request: request, reservedTransferId: transferId)) + } + + if !blockedFront.isEmpty { + pendingTransfers.insert(contentsOf: blockedFront, at: 0) + } + + return results + } +} diff --git a/bitchat/Services/BLE/BLEOutboundPacketPolicy.swift b/bitchat/Services/BLE/BLEOutboundPacketPolicy.swift new file mode 100644 index 00000000..f7117353 --- /dev/null +++ b/bitchat/Services/BLE/BLEOutboundPacketPolicy.swift @@ -0,0 +1,43 @@ +import BitFoundation +import Foundation + +enum BLEOutboundPacketPolicy { + private static let fragmentFrameOverhead = 13 + 8 + 8 + 13 + + static func messageID(for packet: BitchatPacket) -> String { + BLEIngressLinkRegistry.messageID(for: packet) + } + + static func padsBLEFrame(for packetType: UInt8) -> Bool { + switch MessageType(rawValue: packetType) { + case .noiseEncrypted, .noiseHandshake: + return true + case .none, .announce, .message, .leave, .requestSync, .fragment, .fileTransfer: + return false + } + } + + static func priority(for packet: BitchatPacket, data: Data) -> BLEOutboundWritePriority { + guard let messageType = MessageType(rawValue: packet.type) else { return .low } + switch messageType { + case .fragment: + return .fragment(totalFragments: fragmentTotalCount(from: packet.payload)) + case .fileTransfer: + return .fileTransfer + default: + return .high + } + } + + static func fragmentChunkSize(forLinkLimit limit: Int) -> Int { + max(64, limit - fragmentFrameOverhead) + } + + private static func fragmentTotalCount(from payload: Data) -> Int { + guard payload.count >= 12 else { return Int(UInt16.max) } + let totalHigh = Int(payload[10]) + let totalLow = Int(payload[11]) + let total = (totalHigh << 8) | totalLow + return max(total, 1) + } +} diff --git a/bitchat/Services/BLE/BLEService.swift b/bitchat/Services/BLE/BLEService.swift index cf4b3e37..c10bcf02 100644 --- a/bitchat/Services/BLE/BLEService.swift +++ b/bitchat/Services/BLE/BLEService.swift @@ -79,21 +79,12 @@ final class BLEService: NSObject { // 4. Efficient Message Deduplication private let messageDeduplicator = MessageDeduplicator() private var selfBroadcastMessageIDs: [String: (id: String, timestamp: Date)] = [:] - private lazy var mediaDateFormatter: DateFormatter = { - let formatter = DateFormatter() - formatter.dateFormat = "yyyyMMdd_HHmmss" - return formatter - }() private let meshTopology = MeshTopologyTracker() // 5. Fragment Reassembly (necessary for messages > MTU) private var fragmentAssemblyBuffer = BLEFragmentAssemblyBuffer() - private struct ActiveTransferState { - let totalFragments: Int - var sentFragments: Int - var workItems: [DispatchWorkItem] - } - private var activeTransfers: [String: ActiveTransferState] = [:] + private var outboundFragmentTransfers = BLEOutboundFragmentTransferScheduler() + private let incomingFileStore = BLEIncomingFileStore() // Backoff for peripherals that recently timed out connecting private var recentConnectTimeouts: [String: Date] = [:] // Peripheral UUID -> last timeout @@ -131,10 +122,8 @@ final class BLEService: NSObject { private let bleQueue = DispatchQueue(label: "mesh.bluetooth", qos: .userInitiated) private let bleQueueKey = DispatchSpecificKey() - // Queue for messages pending handshake completion - private var pendingMessagesAfterHandshake: [PeerID: [(content: String, messageID: String)]] = [:] - // Noise typed payloads (ACKs, read receipts, etc.) pending handshake - private var pendingNoisePayloadsAfterHandshake: [PeerID: [Data]] = [:] + // Noise messages and typed payloads pending handshake completion. + private var pendingNoiseSessionQueues = BLENoiseSessionQueues() // Queue for notifications that failed due to full queue private var pendingNotifications = BLEOutboundNotificationBuffer() @@ -148,15 +137,7 @@ final class BLEService: NSObject { // Ingress link tracking for duplicate and last-hop suppression private var ingressLinks = BLEIngressLinkRegistry() - private struct PendingFragmentTransfer { - let packet: BitchatPacket - let pad: Bool - let maxChunk: Int? - let directedPeer: PeerID? - let transferId: String? - } private var pendingPeripheralWrites = BLEOutboundWriteBuffer() - private var pendingFragmentTransfers: [PendingFragmentTransfer] = [] // Debounce duplicate disconnect notifies private var recentDisconnectNotifies: [PeerID: Date] = [:] // Store-and-forward for directed messages when we have no links @@ -344,20 +325,25 @@ final class BLEService: NSObject { func resetIdentityForPanic(currentNickname: String) { messageQueue.sync(flags: .barrier) { - pendingMessagesAfterHandshake.removeAll() - pendingNoisePayloadsAfterHandshake.removeAll() + pendingNoiseSessionQueues.removeAll() } - collectionsQueue.sync(flags: .barrier) { + let cancelledTransfers = collectionsQueue.sync(flags: .barrier) { pendingPeripheralWrites.removeAll() - pendingFragmentTransfers.removeAll() pendingNotifications.removeAll() + let transfers = outboundFragmentTransfers.removeAll() fragmentAssemblyBuffer.removeAll() pendingDirectedRelays.removeAll() ingressLinks.removeAll() recentPacketTimestamps.removeAll() scheduledRelays.values.forEach { $0.cancel() } scheduledRelays.removeAll() + return transfers + } + + for entry in cancelledTransfers { + entry.workItems.forEach { $0.cancel() } + TransferProgressManager.shared.cancel(id: entry.id) } bleQueue.sync { @@ -516,7 +502,7 @@ final class BLEService: NSObject { // Send immediately to all connected peers (synchronized access to BLE state) if let data = leavePacket.toBinaryData(padding: false) { - let leavePriority = priority(for: leavePacket, data: data) + let leavePriority = BLEOutboundPacketPolicy.priority(for: leavePacket, data: data) // Snapshot BLE state under bleQueue to avoid races with delegate callbacks let (peripheralStates, centralsCount, char) = bleQueue.sync { @@ -568,13 +554,11 @@ final class BLEService: NSObject { // Clear all sessions and peers let cancelledTransfers: [(id: String, items: [DispatchWorkItem])] = collectionsQueue.sync(flags: .barrier) { - let entries = activeTransfers.map { ($0.key, $0.value.workItems) } + let entries = outboundFragmentTransfers.removeAll().map { ($0.id, $0.workItems) } peers.removeAll() fragmentAssemblyBuffer.removeAll() - activeTransfers.removeAll() // Also clear pending message queues to avoid stale state across sessions - pendingMessagesAfterHandshake.removeAll() - pendingNoisePayloadsAfterHandshake.removeAll() + pendingNoiseSessionQueues.removeAll() pendingDirectedRelays.removeAll() return entries } @@ -672,17 +656,22 @@ final class BLEService: NSObject { func cancelTransfer(_ transferId: String) { collectionsQueue.async(flags: .barrier) { [weak self] in guard let self = self else { return } - if let state = self.activeTransfers.removeValue(forKey: transferId) { - state.workItems.forEach { $0.cancel() } + + switch self.outboundFragmentTransfers.cancelTransfer(transferId) { + case let .active(id, workItems): + workItems.forEach { $0.cancel() } TransferProgressManager.shared.cancel(id: transferId) - SecureLogger.debug("🛑 Cancelled transfer \(transferId.prefix(8))…", category: .session) + SecureLogger.debug("🛑 Cancelled transfer \(id.prefix(8))…", category: .session) self.messageQueue.async { [weak self] in self?.startNextPendingTransferIfNeeded() } - } else if let pendingIndex = self.pendingFragmentTransfers.firstIndex(where: { $0.transferId == transferId }) { - self.pendingFragmentTransfers.remove(at: pendingIndex) + + case let .pending(id): TransferProgressManager.shared.cancel(id: transferId) - SecureLogger.debug("🛑 Removed pending transfer \(transferId.prefix(8))… before start", category: .session) + SecureLogger.debug("🛑 Removed pending transfer \(id.prefix(8))… before start", category: .session) + + case .missing: + break } } } @@ -748,7 +737,7 @@ final class BLEService: NSObject { // This ensures 64-hex Noise keys are converted to the canonical routing format let targetID = peerID.toShort() guard let recipientData = Data(hexString: targetID.id) else { - SecureLogger.error("❌ Invalid recipient peer ID for file transfer: \(peerID)", category: .session) + SecureLogger.error("❌ Invalid recipient peer ID for file transfer: \(peerID.id.prefix(8))…", category: .session) return } @@ -774,35 +763,22 @@ final class BLEService: NSObject { func sendReadReceipt(_ receipt: ReadReceipt, to peerID: PeerID) { - // Create typed payload: [type byte] + [message ID] - var payload = Data([NoisePayloadType.readReceipt.rawValue]) - payload.append(contentsOf: receipt.originalMessageID.utf8) + let payload = BLENoisePayloadFactory.readReceipt(originalMessageID: receipt.originalMessageID) if noiseService.hasEstablishedSession(with: peerID) { - SecureLogger.debug("📤 Sending READ receipt for message \(receipt.originalMessageID) to \(peerID)", category: .session) + SecureLogger.debug("📤 Sending READ receipt id=\(receipt.originalMessageID.prefix(8))… to \(peerID.id.prefix(8))…", category: .session) do { - let encrypted = try noiseService.encrypt(payload, for: peerID) - let packet = BitchatPacket( - type: MessageType.noiseEncrypted.rawValue, - senderID: myPeerIDData, - recipientID: Data(hexString: peerID.id), - timestamp: UInt64(Date().timeIntervalSince1970 * 1000), - payload: encrypted, - signature: nil, - ttl: messageTTL - ) - broadcastPacket(packet) + broadcastPacket(try makeEncryptedNoisePacket(payload, to: peerID)) } catch { SecureLogger.error("Failed to send read receipt: \(error)") } } else { // Queue for after handshake and initiate if needed - collectionsQueue.async(flags: .barrier) { [weak self] in - guard let self = self else { return } - self.pendingNoisePayloadsAfterHandshake[peerID, default: []].append(payload) + collectionsQueue.sync(flags: .barrier) { + pendingNoiseSessionQueues.appendTypedPayload(payload, for: peerID) } if !noiseService.hasSession(with: peerID) { initiateNoiseHandshake(with: peerID) } - SecureLogger.debug("🕒 Queued READ receipt for \(peerID) until handshake completes", category: .session) + SecureLogger.debug("🕒 Queued READ receipt for \(peerID.id.prefix(8))… until handshake completes", category: .session) } } @@ -889,7 +865,7 @@ final class BLEService: NSObject { } // Encode once using a small per-type padding policy, then delegate by type - let padForBLE = padPolicy(for: packetToSend.type) + let padForBLE = BLEOutboundPacketPolicy.padsBLEFrame(for: packetToSend.type) if packetToSend.type == MessageType.fileTransfer.rawValue { sendFragmentedPacket(packetToSend, pad: padForBLE, maxChunk: nil, directedOnlyPeer: nil, transferId: transferId) return @@ -905,52 +881,39 @@ final class BLEService: NSObject { sendGenericBroadcast(packetToSend, data: data, pad: padForBLE) } - // MARK: - Broadcast helpers (single responsibility) - private func padPolicy(for type: UInt8) -> Bool { - switch MessageType(rawValue: type) { - case .noiseEncrypted, .noiseHandshake: - return true - case .none, .announce, .message, .leave, .requestSync, .fragment, .fileTransfer: - return false - } - } - private func sendEncrypted(_ packet: BitchatPacket, data: Data, pad: Bool) { guard let recipientPeerID = PeerID(hexData: packet.recipientID) else { return } var sentEncrypted = false - let outboundPriority = priority(for: packet, data: data) + let outboundPriority = BLEOutboundPacketPolicy.priority(for: packet, data: data) // Per-link limits for the specific peer - var peripheralMaxLen: Int? - if let perUUID = (DispatchQueue.getSpecific(key: bleQueueKey) != nil) ? peerToPeripheralUUID[recipientPeerID] : bleQueue.sync(execute: { peerToPeripheralUUID[recipientPeerID] }) { - if let state = (DispatchQueue.getSpecific(key: bleQueueKey) != nil) ? peripherals[perUUID] : bleQueue.sync(execute: { peripherals[perUUID] }) { - peripheralMaxLen = state.peripheral.maximumWriteValueLength(for: .withoutResponse) + let directPeripheralState: PeripheralState? = { + if DispatchQueue.getSpecific(key: bleQueueKey) != nil { + return peerToPeripheralUUID[recipientPeerID].flatMap { peripherals[$0] } } - } - var centralMaxLen: Int? - do { - let (centrals, mapping) = snapshotSubscribedCentrals() - if let central = centrals.first(where: { mapping[$0.identifier.uuidString] == recipientPeerID }) { - centralMaxLen = central.maximumUpdateValueLength + return bleQueue.sync { + peerToPeripheralUUID[recipientPeerID].flatMap { peripherals[$0] } } - } - if let pm = peripheralMaxLen, data.count > pm { - let overhead = 13 + 8 + 8 + 13 - let chunk = max(64, pm - overhead) + }() + let (centrals, mapping) = snapshotSubscribedCentrals() + let recipientCentral = centrals.first { mapping[$0.identifier.uuidString] == recipientPeerID } + + if let peripheralMaxLen = directPeripheralState?.peripheral.maximumWriteValueLength(for: .withoutResponse), + data.count > peripheralMaxLen { + let chunk = BLEOutboundPacketPolicy.fragmentChunkSize(forLinkLimit: peripheralMaxLen) sendFragmentedPacket(packet, pad: pad, maxChunk: chunk, directedOnlyPeer: recipientPeerID) return } - if let cm = centralMaxLen, data.count > cm { - let overhead = 13 + 8 + 8 + 13 - let chunk = max(64, cm - overhead) + if let centralMaxLen = recipientCentral?.maximumUpdateValueLength, + data.count > centralMaxLen { + let chunk = BLEOutboundPacketPolicy.fragmentChunkSize(forLinkLimit: centralMaxLen) sendFragmentedPacket(packet, pad: pad, maxChunk: chunk, directedOnlyPeer: recipientPeerID) return } // Direct write via peripheral link - if let peripheralUUID = (DispatchQueue.getSpecific(key: bleQueueKey) != nil) ? peerToPeripheralUUID[recipientPeerID] : bleQueue.sync(execute: { peerToPeripheralUUID[recipientPeerID] }), - let state = (DispatchQueue.getSpecific(key: bleQueueKey) != nil) ? peripherals[peripheralUUID] : bleQueue.sync(execute: { peripherals[peripheralUUID] }), + if let state = directPeripheralState, state.isConnected, let characteristic = state.characteristic { writeOrEnqueue(data, to: state.peripheral, characteristic: characteristic, priority: outboundPriority) @@ -958,12 +921,12 @@ final class BLEService: NSObject { } // Notify via central link (dual-role) - if let characteristic = characteristic, !sentEncrypted { - let (centrals, mapping) = snapshotSubscribedCentrals() - for central in centrals where mapping[central.identifier.uuidString] == recipientPeerID { - let success = peripheralManager?.updateValue(data, for: characteristic, onSubscribedCentrals: [central]) ?? false - if success { sentEncrypted = true; break } - enqueuePendingNotification(data: data, centrals: [central], context: "encrypted") + if let characteristic = characteristic, !sentEncrypted, let recipientCentral { + let success = peripheralManager?.updateValue(data, for: characteristic, onSubscribedCentrals: [recipientCentral]) ?? false + if success { + sentEncrypted = true + } else { + enqueuePendingNotification(data: data, centrals: [recipientCentral], context: "encrypted") } } @@ -1006,7 +969,7 @@ final class BLEService: NSObject { private func sendOnAllLinks(packet: BitchatPacket, data: Data, pad: Bool, directedOnlyPeer: PeerID?) { // Determine the last-hop peer/link for this message to avoid echoing back over either BLE role. - let messageID = makeMessageID(for: packet) + let messageID = BLEOutboundPacketPolicy.messageID(for: packet) let ingressRecord = collectionsQueue.sync { ingressLinks.record(for: packet) } let excludedPeerLinks = links(to: ingressRecord?.peerID) let directedPeerHint: PeerID? = { @@ -1016,7 +979,7 @@ final class BLEService: NSObject { } return nil }() - let outboundPriority = priority(for: packet, data: data) + let outboundPriority = BLEOutboundPacketPolicy.priority(for: packet, data: data) let states = snapshotPeripheralStates() var minCentralWriteLen: Int? @@ -1024,35 +987,20 @@ final class BLEService: NSObject { let m = s.peripheral.maximumWriteValueLength(for: .withoutResponse) minCentralWriteLen = minCentralWriteLen.map { min($0, m) } ?? m } - var snapshotCentrals: [CBCentral] = [] - if let _ = characteristic { - let (centrals, _) = snapshotSubscribedCentrals() - snapshotCentrals = centrals - } - var minNotifyLen: Int? - if !snapshotCentrals.isEmpty { - minNotifyLen = snapshotCentrals.map { $0.maximumUpdateValueLength }.min() - } + let subscribedCentrals = characteristic == nil ? [] : snapshotSubscribedCentrals().0 + let minNotifyLen = subscribedCentrals.map { $0.maximumUpdateValueLength }.min() + // Avoid re-fragmenting fragment packets if packet.type != MessageType.fragment.rawValue, let minLen = [minCentralWriteLen, minNotifyLen].compactMap({ $0 }).min(), data.count > minLen { - let overhead = 13 + 8 + 8 + 13 - let chunk = max(64, minLen - overhead) + let chunk = BLEOutboundPacketPolicy.fragmentChunkSize(forLinkLimit: minLen) sendFragmentedPacket(packet, pad: pad, maxChunk: chunk, directedOnlyPeer: directedOnlyPeer) return } // Build link lists and apply K-of-N fanout for broadcasts; always exclude ingress link let connectedPeripheralIDs: [String] = states.filter { $0.isConnected }.map { $0.peripheral.identifier.uuidString } - let subscribedCentrals: [CBCentral] - var centralIDs: [String] = [] - if let _ = characteristic { - let (centrals, _) = snapshotSubscribedCentrals() - subscribedCentrals = centrals - centralIDs = centrals.map { $0.identifier.uuidString } - } else { - subscribedCentrals = [] - } + let centralIDs = subscribedCentrals.map { $0.identifier.uuidString } let selectedLinks = BLEFanoutSelector.selectLinks( peripheralIDs: connectedPeripheralIDs, @@ -1102,7 +1050,7 @@ final class BLEService: NSObject { // MARK: - Directed store-and-forward private func spoolDirectedPacket(_ packet: BitchatPacket, recipientPeerID: PeerID) { - let msgID = makeMessageID(for: packet) + let msgID = BLEOutboundPacketPolicy.messageID(for: packet) collectionsQueue.async(flags: .barrier) { [weak self] in guard let self = self else { return } var byMsg = self.pendingDirectedRelays[recipientPeerID] ?? [:] @@ -1219,9 +1167,9 @@ final class BLEService: NSObject { } // BCH-01-002: Enforce storage quota before saving - enforceIncomingFilesQuota(reservingBytes: filePacket.content.count) + incomingFileStore.enforceQuota(reservingBytes: filePacket.content.count) - guard let destination = saveIncomingFile( + guard let destination = incomingFileStore.save( data: filePacket.content, preferredName: filePacket.fileName, subdirectory: "\(mime.category.mediaDir)/incoming", @@ -1255,18 +1203,20 @@ final class BLEService: NSObject { } func sendFavoriteNotification(to peerID: PeerID, isFavorite: Bool) { - SecureLogger.debug("🔔 sendFavoriteNotification called - peerID: \(peerID), isFavorite: \(isFavorite)", category: .session) + SecureLogger.debug("🔔 sendFavoriteNotification peer=\(peerID.id.prefix(8))… isFavorite=\(isFavorite)", category: .session) // Include Nostr public key in the notification var content = isFavorite ? "[FAVORITED]" : "[UNFAVORITED]" + var includesNostrIdentity = false // Add our Nostr public key if available if let myNostrIdentity = try? idBridge.getCurrentNostrIdentity() { content += ":" + myNostrIdentity.npub - SecureLogger.debug("📝 Sending favorite notification with Nostr npub: \(myNostrIdentity.npub)", category: .session) + includesNostrIdentity = true + SecureLogger.debug("📝 Favorite notification includes Nostr npub=\(myNostrIdentity.npub.prefix(16))…", category: .session) } - SecureLogger.debug("📤 Sending favorite notification to \(peerID): \(content)", category: .session) + SecureLogger.debug("📤 Sending favorite notification to \(peerID.id.prefix(8))… isFavorite=\(isFavorite) includesNostrIdentity=\(includesNostrIdentity)", category: .session) sendPrivateMessage(content, to: peerID, messageID: UUID().uuidString) } @@ -1275,34 +1225,21 @@ final class BLEService: NSObject { } func sendDeliveryAck(for messageID: String, to peerID: PeerID) { - // Create typed payload: [type byte] + [message ID] - var payload = Data([NoisePayloadType.delivered.rawValue]) - payload.append(contentsOf: messageID.utf8) + let payload = BLENoisePayloadFactory.delivered(messageID: messageID) if noiseService.hasEstablishedSession(with: peerID) { do { - let encrypted = try noiseService.encrypt(payload, for: peerID) - let packet = BitchatPacket( - type: MessageType.noiseEncrypted.rawValue, - senderID: myPeerIDData, - recipientID: Data(hexString: peerID.id), - timestamp: UInt64(Date().timeIntervalSince1970 * 1000), - payload: encrypted, - signature: nil, - ttl: messageTTL - ) - broadcastPacket(packet) + broadcastPacket(try makeEncryptedNoisePacket(payload, to: peerID)) } catch { SecureLogger.error("Failed to send delivery ACK: \(error)") } } else { // Queue for after handshake and initiate if needed - collectionsQueue.async(flags: .barrier) { [weak self] in - guard let self = self else { return } - self.pendingNoisePayloadsAfterHandshake[peerID, default: []].append(payload) + collectionsQueue.sync(flags: .barrier) { + pendingNoiseSessionQueues.appendTypedPayload(payload, for: peerID) } if !noiseService.hasSession(with: peerID) { initiateNoiseHandshake(with: peerID) } - SecureLogger.debug("🕒 Queued DELIVERED ack for \(peerID) until handshake completes", category: .session) + SecureLogger.debug("🕒 Queued DELIVERED ack for \(peerID.id.prefix(8))… until handshake completes", category: .session) } } @@ -1324,180 +1261,6 @@ final class BLEService: NSObject { self.deliverTransportEvent(.peerListUpdated(currentPeerIDs)) } } - - // MARK: - Helper Functions - - private func applicationFilesDirectory() throws -> URL { - let base = try FileManager.default.url(for: .applicationSupportDirectory, in: .userDomainMask, appropriateFor: nil, create: true) - let filesDir = base.appendingPathComponent("files", isDirectory: true) - try FileManager.default.createDirectory(at: filesDir, withIntermediateDirectories: true, attributes: nil) - return filesDir - } - - private func sanitizeFileName(_ name: String?, defaultName: String, fallbackExtension: String?) -> String { - var candidate = name ?? "" - - // Security: Remove null bytes (path traversal vector) - candidate = candidate.replacingOccurrences(of: "\0", with: "") - - // Security: Unicode normalization prevents fullwidth character bypass - candidate = candidate.precomposedStringWithCanonicalMapping - - // Security: Remove ALL path separators (not just strip last component) - candidate = candidate.replacingOccurrences(of: "/", with: "_") - candidate = candidate.replacingOccurrences(of: "\\", with: "_") - - // Security: Remove control characters and dangerous filesystem chars - let invalid = CharacterSet(charactersIn: "<>:\"|?*\0").union(.controlCharacters) - candidate = candidate.components(separatedBy: invalid).joined(separator: "_") - - candidate = candidate.trimmed - if candidate.isEmpty { candidate = defaultName } - - // Security: Reject dotfiles (hidden file attacks) - if candidate.hasPrefix(".") { - candidate = "_" + candidate - } - - // Truncate while preserving extension - if candidate.count > 120 { - let ext = (candidate as NSString).pathExtension - let base = (candidate as NSString).deletingPathExtension - if ext.isEmpty { - candidate = String(candidate.prefix(120)) - } else { - let maxBase = max(10, 120 - ext.count - 1) - candidate = String(base.prefix(maxBase)) + "." + ext - } - } - - if let fallbackExtension = fallbackExtension, (candidate as NSString).pathExtension.isEmpty { - candidate += ".\(fallbackExtension)" - } - - if candidate.isEmpty { candidate = defaultName } - return candidate - } - - private func uniqueFileURL(in directory: URL, fileName: String) -> URL { - var candidate = directory.appendingPathComponent(fileName) - - // Security: Validate path doesn't escape directory - if !candidate.path.hasPrefix(directory.path) { - SecureLogger.warning("⚠️ Path traversal blocked: \(fileName)", category: .security) - return directory.appendingPathComponent("blocked_\(UUID().uuidString)") - } - - if !FileManager.default.fileExists(atPath: candidate.path) { - return candidate - } - - let baseName = (fileName as NSString).deletingPathExtension - let ext = (fileName as NSString).pathExtension - var counter = 1 - - // Limit iterations to prevent DoS - while counter < 100 { - let newName = ext.isEmpty ? "\(baseName) (\(counter))" : "\(baseName) (\(counter)).\(ext)" - candidate = directory.appendingPathComponent(newName) - - // Validate each iteration - guard candidate.path.hasPrefix(directory.path) else { - return directory.appendingPathComponent("blocked_\(UUID().uuidString)") - } - - if !FileManager.default.fileExists(atPath: candidate.path) { - return candidate - } - counter += 1 - } - - // Fallback: UUID to guarantee uniqueness - return directory.appendingPathComponent("\(baseName)_\(UUID().uuidString).\(ext.isEmpty ? "dat" : ext)") - } - - private func saveIncomingFile(data: Data, preferredName: String?, subdirectory: String, fallbackExtension: String?, defaultPrefix: String) -> URL? { - do { - let base = try applicationFilesDirectory().appendingPathComponent(subdirectory, isDirectory: true) - try FileManager.default.createDirectory(at: base, withIntermediateDirectories: true, attributes: nil) - let timestamp = mediaDateFormatter.string(from: Date()) - let defaultName = "\(defaultPrefix)_\(timestamp)" - let sanitized = sanitizeFileName(preferredName, defaultName: defaultName, fallbackExtension: fallbackExtension) - let destination = uniqueFileURL(in: base, fileName: sanitized) - try data.write(to: destination, options: .atomic) - return destination - } catch { - SecureLogger.error("❌ Failed to persist incoming media: \(error)", category: .session) - return nil - } - } - - // MARK: - Storage Quota Management (BCH-01-002) - - /// Maximum total storage for incoming files (100 MB) - private static let incomingFilesQuota: Int64 = 100 * 1024 * 1024 - - /// Enforces storage quota for incoming files by deleting oldest files when quota is exceeded. - /// Call before saving a new incoming file. - private func enforceIncomingFilesQuota(reservingBytes: Int) { - do { - let base = try applicationFilesDirectory() - let incomingDirs = [ - base.appendingPathComponent("voicenotes/incoming", isDirectory: true), - base.appendingPathComponent("images/incoming", isDirectory: true), - base.appendingPathComponent("files/incoming", isDirectory: true) - ] - - // Gather all incoming files with their sizes and modification dates - var allFiles: [(url: URL, size: Int64, modified: Date)] = [] - let fileManager = FileManager.default - - for dir in incomingDirs { - guard fileManager.fileExists(atPath: dir.path) else { continue } - guard let contents = try? fileManager.contentsOfDirectory( - at: dir, - includingPropertiesForKeys: [.fileSizeKey, .contentModificationDateKey], - options: [.skipsHiddenFiles] - ) else { continue } - - for fileURL in contents { - guard let attrs = try? fileURL.resourceValues(forKeys: [.fileSizeKey, .contentModificationDateKey]), - let size = attrs.fileSize, - let modified = attrs.contentModificationDate else { continue } - allFiles.append((url: fileURL, size: Int64(size), modified: modified)) - } - } - - // Calculate current usage - let currentUsage = allFiles.reduce(0) { $0 + $1.size } - let targetUsage = Self.incomingFilesQuota - Int64(reservingBytes) - - guard currentUsage > targetUsage else { return } - - // Sort by modification date (oldest first) and delete until under quota - let sortedFiles = allFiles.sorted { $0.modified < $1.modified } - var freedSpace: Int64 = 0 - let needToFree = currentUsage - targetUsage - - for file in sortedFiles { - guard freedSpace < needToFree else { break } - do { - try fileManager.removeItem(at: file.url) - freedSpace += file.size - SecureLogger.debug("🗑️ BCH-01-002: Deleted old incoming file to free space: \(file.url.lastPathComponent)", category: .security) - } catch { - SecureLogger.warning("⚠️ Failed to delete old file for quota: \(error)", category: .security) - } - } - - if freedSpace > 0 { - SecureLogger.info("📊 BCH-01-002: Freed \(ByteCountFormatter.string(fromByteCount: freedSpace, countStyle: .file)) to stay within incoming files quota", category: .security) - } - } catch { - SecureLogger.warning("⚠️ Could not enforce storage quota: \(error)", category: .security) - } - } - private func sendAnnounce(forceSend: Bool = false) { // Throttle announces to prevent flooding let now = Date() @@ -2257,7 +2020,7 @@ extension BLEService: CBPeripheralDelegate { let senderID = PeerID(hexData: packet.senderID) if packet.type != MessageType.announce.rawValue { - SecureLogger.debug("📦 Decoded notification packet type: \(packet.type) from sender: \(senderID)", category: .session) + SecureLogger.debug("📦 Decoded notification packet type: \(packet.type) from sender: \(senderID.id.prefix(8))…", category: .session) } if packet.type == MessageType.announce.rawValue { @@ -2440,7 +2203,7 @@ extension BLEService: CBPeripheralManagerDelegate { func peripheralManager(_ peripheral: CBPeripheralManager, central: CBCentral, didSubscribeTo characteristic: CBCharacteristic) { let centralUUID = central.identifier.uuidString - SecureLogger.debug("📥 Central subscribed: \(centralUUID)", category: .session) + SecureLogger.debug("📥 Central subscribed: \(centralUUID.prefix(8))…", category: .session) subscribedCentrals.append(central) // BCH-01-004: Rate-limit subscription-triggered announces to prevent enumeration attacks @@ -2519,7 +2282,7 @@ extension BLEService: CBPeripheralManagerDelegate { } func peripheralManager(_ peripheral: CBPeripheralManager, central: CBCentral, didUnsubscribeFrom characteristic: CBCharacteristic) { - SecureLogger.debug("📤 Central unsubscribed: \(central.identifier.uuidString)", category: .session) + SecureLogger.debug("📤 Central unsubscribed: \(central.identifier.uuidString.prefix(8))…", category: .session) subscribedCentrals.removeAll { $0.identifier == central.identifier } // Ensure we're still advertising for other devices to find us @@ -2648,7 +2411,7 @@ extension BLEService: CBPeripheralManagerDelegate { case let .oversized(metadata): logAccumulatedCentralWrite(metadata, centralUUID: centralUUID) - SecureLogger.warning("⚠️ Dropping oversized pending write buffer (\(metadata.accumulatedBytes) bytes) for central \(centralUUID)", category: .session) + SecureLogger.warning("⚠️ Dropping oversized pending write buffer (\(metadata.accumulatedBytes) bytes) for central \(centralUUID.prefix(8))…", category: .session) logFailedSingleWriteIfNeeded(hasMultiple: hasMultiple, sortedRequests: sorted) } } @@ -2659,7 +2422,7 @@ extension BLEService: CBPeripheralManagerDelegate { packetType != MessageType.announce.rawValue else { return } SecureLogger.debug( - "📥 Accumulated write from central \(centralUUID): size=\(metadata.accumulatedBytes) (+\(metadata.appendedBytes)) bytes (type=\(packetType)), offsets=\(metadata.offsets)", + "📥 Accumulated write from central \(centralUUID.prefix(8))…: size=\(metadata.accumulatedBytes) (+\(metadata.appendedBytes)) bytes (type=\(packetType)), offsets=\(metadata.offsets)", category: .session ) } @@ -2686,7 +2449,7 @@ extension BLEService: CBPeripheralManagerDelegate { } if packet.type != MessageType.announce.rawValue { - SecureLogger.debug("📦 Decoded (combined) packet type: \(packet.type) from sender: \(claimedSenderID)", category: .session) + SecureLogger.debug("📦 Decoded (combined) packet type: \(packet.type) from sender: \(claimedSenderID.id.prefix(8))…", category: .session) } if !subscribedCentrals.contains(central) { @@ -2936,7 +2699,7 @@ extension BLEService { private func configureNoiseServiceCallbacks(for service: NoiseEncryptionService) { service.onPeerAuthenticated = { [weak self] peerID, fingerprint in - SecureLogger.debug("🔐 Noise session authenticated with \(peerID), fingerprint: \(fingerprint.prefix(16))...") + SecureLogger.debug("🔐 Noise session authenticated with \(peerID.id.prefix(8))…, fingerprint: \(fingerprint.prefix(16))…") self?.messageQueue.async { [weak self] in self?.sendPendingMessagesAfterHandshake(for: peerID) self?.sendPendingNoisePayloadsAfterHandshake(for: peerID) @@ -2961,31 +2724,31 @@ extension BLEService { // No session yet - queue the payload SYNCHRONOUSLY before initiating handshake // to prevent race where fast handshake completion drains empty queue collectionsQueue.sync(flags: .barrier) { - if self.pendingNoisePayloadsAfterHandshake[peerID] == nil { - self.pendingNoisePayloadsAfterHandshake[peerID] = [] - } - self.pendingNoisePayloadsAfterHandshake[peerID]?.append(typedPayload) - SecureLogger.debug("📥 Queued noise payload for \(peerID) pending handshake", category: .session) + self.pendingNoiseSessionQueues.appendTypedPayload(typedPayload, for: peerID) + SecureLogger.debug("📥 Queued noise payload for \(peerID.id.prefix(8))… pending handshake", category: .session) } initiateNoiseHandshake(with: peerID) return } do { - let encrypted = try noiseService.encrypt(typedPayload, for: peerID) - let packet = BitchatPacket( - type: MessageType.noiseEncrypted.rawValue, - senderID: myPeerIDData, - recipientID: Data(hexString: peerID.id), - timestamp: UInt64(Date().timeIntervalSince1970 * 1000), - payload: encrypted, - signature: nil, - ttl: messageTTL - ) - broadcastPacket(packet) + broadcastPacket(try makeEncryptedNoisePacket(typedPayload, to: peerID)) } catch { SecureLogger.error("Failed to send verification payload: \(error)") } } + + private func makeEncryptedNoisePacket(_ typedPayload: Data, to peerID: PeerID) throws -> BitchatPacket { + let encrypted = try noiseService.encrypt(typedPayload, for: peerID) + return BitchatPacket( + type: MessageType.noiseEncrypted.rawValue, + senderID: myPeerIDData, + recipientID: Data(hexString: peerID.id), + timestamp: UInt64(Date().timeIntervalSince1970 * 1000), + payload: encrypted, + signature: nil, + ttl: messageTTL + ) + } // MARK: Link capability snapshots (thread-safe via bleQueue) @@ -3006,31 +2769,6 @@ extension BLEService { // MARK: Helpers: IDs, selection, and write backpressure - private func makeMessageID(for packet: BitchatPacket) -> String { - BLEIngressLinkRegistry.messageID(for: packet) - } - - private func priority(for packet: BitchatPacket, data: Data) -> BLEOutboundWritePriority { - guard let messageType = MessageType(rawValue: packet.type) else { return .low } - switch messageType { - case .fragment: - let total = fragmentTotalCount(from: packet.payload) - return BLEOutboundWritePriority.fragment(totalFragments: total) - case .fileTransfer: - return .fileTransfer - default: - return .high - } - } - - private func fragmentTotalCount(from payload: Data) -> Int { - guard payload.count >= 12 else { return Int(UInt16.max) } - let totalHigh = Int(payload[10]) - let totalLow = Int(payload[11]) - let total = (totalHigh << 8) | totalLow - return max(total, 1) - } - private func writeOrEnqueue(_ data: Data, to peripheral: CBPeripheral, characteristic: CBCharacteristic, priority: BLEOutboundWritePriority) { // BLE operations run on bleQueue; keep queue affinity bleQueue.async { [weak self] in @@ -3139,52 +2877,18 @@ extension BLEService { // MARK: Private Message Handling private func sendPrivateMessage(_ content: String, to recipientID: PeerID, messageID: String) { - SecureLogger.debug("📨 Sending PM to \(recipientID): \(content.prefix(30))...", category: .session) + SecureLogger.debug("📨 Sending PM to \(recipientID.id.prefix(8))… id=\(messageID.prefix(8))… chars=\(content.count) bytes=\(content.utf8.count)", category: .session) // Check if we have an established Noise session if noiseService.hasEstablishedSession(with: recipientID) { // Encrypt and send do { - // Create TLV-encoded private message - let privateMessage = PrivateMessagePacket(messageID: messageID, content: content) - guard let tlvData = privateMessage.encode() else { + guard let messagePayload = BLENoisePayloadFactory.privateMessage(content: content, messageID: messageID) else { SecureLogger.error("Failed to encode private message with TLV") return } - // Create message payload with TLV: [type byte] + [TLV data] - var messagePayload = Data([NoisePayloadType.privateMessage.rawValue]) - messagePayload.append(tlvData) - - let encrypted = try noiseService.encrypt(messagePayload, for: recipientID) - - // Convert recipientID to Data (assuming it's a hex string) - var recipientData = Data() - var tempID = recipientID.id - while tempID.count >= 2 { - let hexByte = String(tempID.prefix(2)) - if let byte = UInt8(hexByte, radix: 16) { - recipientData.append(byte) - } - tempID = String(tempID.dropFirst(2)) - } - if tempID.count == 1 { - if let byte = UInt8(tempID, radix: 16) { - recipientData.append(byte) - } - } - - let packet = BitchatPacket( - type: MessageType.noiseEncrypted.rawValue, - senderID: myPeerIDData, - recipientID: recipientData, - timestamp: UInt64(Date().timeIntervalSince1970 * 1000), - payload: encrypted, - signature: nil, - ttl: messageTTL - ) - - broadcastPacket(packet) + broadcastPacket(try makeEncryptedNoisePacket(messagePayload, to: recipientID)) // Notify delegate that message was sent notifyUI { [weak self] in @@ -3195,14 +2899,11 @@ extension BLEService { } } else { // Queue message for sending after handshake completes - SecureLogger.debug("🤝 No session with \(recipientID), initiating handshake and queueing message", category: .session) + SecureLogger.debug("🤝 No session with \(recipientID.id.prefix(8))…, initiating handshake and queueing message", category: .session) // Queue the message (especially important for favorite notifications) collectionsQueue.sync(flags: .barrier) { - if pendingMessagesAfterHandshake[recipientID] == nil { - pendingMessagesAfterHandshake[recipientID] = [] - } - pendingMessagesAfterHandshake[recipientID]?.append((content, messageID)) + pendingNoiseSessionQueues.appendPrivateMessage(content: content, messageID: messageID, for: recipientID) } initiateNoiseHandshake(with: recipientID) @@ -3239,61 +2940,43 @@ extension BLEService { private func sendPendingMessagesAfterHandshake(for peerID: PeerID) { // Atomically take all pending messages to process (prevents concurrent modification) - let pendingMessages = collectionsQueue.sync(flags: .barrier) { () -> [(content: String, messageID: String)]? in - let messages = pendingMessagesAfterHandshake[peerID] - pendingMessagesAfterHandshake.removeValue(forKey: peerID) - return messages + let pendingMessages = collectionsQueue.sync(flags: .barrier) { () -> [BLEPendingPrivateMessage] in + pendingNoiseSessionQueues.takePrivateMessages(for: peerID) } - guard let messages = pendingMessages, !messages.isEmpty else { return } + guard !pendingMessages.isEmpty else { return } - SecureLogger.debug("📤 Sending \(messages.count) pending messages after handshake to \(peerID)", category: .session) + SecureLogger.debug("📤 Sending \(pendingMessages.count) pending messages after handshake to \(peerID.id.prefix(8))…", category: .session) // Track failed messages for re-queuing - var failedMessages: [(content: String, messageID: String)] = [] + var failedMessages: [BLEPendingPrivateMessage] = [] // Send each pending message directly (we know session is established) - for (content, messageID) in messages { + for message in pendingMessages { do { // Use the same TLV format as normal sends to keep receiver decoding consistent - let privateMessage = PrivateMessagePacket(messageID: messageID, content: content) - guard let tlvData = privateMessage.encode() else { + guard let messagePayload = BLENoisePayloadFactory.privateMessage(content: message.content, messageID: message.messageID) else { SecureLogger.error("Failed to encode pending private message TLV") - failedMessages.append((content, messageID)) + failedMessages.append(message) continue } - var messagePayload = Data([NoisePayloadType.privateMessage.rawValue]) - messagePayload.append(tlvData) - - let encrypted = try noiseService.encrypt(messagePayload, for: peerID) - - let packet = BitchatPacket( - type: MessageType.noiseEncrypted.rawValue, - senderID: myPeerIDData, - recipientID: Data(hexString: peerID.id), - timestamp: UInt64(Date().timeIntervalSince1970 * 1000), - payload: encrypted, - signature: nil, - ttl: messageTTL - ) - // We're already on messageQueue from the callback - broadcastPacket(packet) + broadcastPacket(try makeEncryptedNoisePacket(messagePayload, to: peerID)) // Notify delegate that message was sent notifyUI { [weak self] in - self?.deliverTransportEvent(.messageDeliveryStatusUpdated(messageID: messageID, status: .sent)) + self?.deliverTransportEvent(.messageDeliveryStatusUpdated(messageID: message.messageID, status: .sent)) } - SecureLogger.debug("✅ Sent pending message \(messageID) to \(peerID) after handshake", category: .session) + SecureLogger.debug("✅ Sent pending message id=\(message.messageID.prefix(8))… to \(peerID.id.prefix(8))… after handshake", category: .session) } catch { SecureLogger.error("Failed to send pending message after handshake: \(error)") - failedMessages.append((content, messageID)) + failedMessages.append(message) // Notify delegate of failure notifyUI { [weak self] in - self?.deliverTransportEvent(.messageDeliveryStatusUpdated(messageID: messageID, status: .failed(reason: "Encryption failed"))) + self?.deliverTransportEvent(.messageDeliveryStatusUpdated(messageID: message.messageID, status: .failed(reason: "Encryption failed"))) } } } @@ -3302,12 +2985,9 @@ extension BLEService { if !failedMessages.isEmpty { collectionsQueue.async(flags: .barrier) { [weak self] in guard let self = self else { return } - if self.pendingMessagesAfterHandshake[peerID] == nil { - self.pendingMessagesAfterHandshake[peerID] = [] - } // Prepend failed messages to maintain order - self.pendingMessagesAfterHandshake[peerID]?.insert(contentsOf: failedMessages, at: 0) - SecureLogger.warning("⚠️ Re-queued \(failedMessages.count) failed messages for \(peerID)", category: .session) + self.pendingNoiseSessionQueues.prependPrivateMessages(failedMessages, for: peerID) + SecureLogger.warning("⚠️ Re-queued \(failedMessages.count) failed messages for \(peerID.id.prefix(8))…", category: .session) } } } @@ -3315,68 +2995,49 @@ extension BLEService { // MARK: Fragmentation (Required for messages > BLE MTU) private func sendFragmentedPacket(_ packet: BitchatPacket, pad: Bool, maxChunk: Int? = nil, directedOnlyPeer: PeerID? = nil, transferId: String? = nil) { - let context = PendingFragmentTransfer(packet: packet, pad: pad, maxChunk: maxChunk, directedPeer: directedOnlyPeer, transferId: transferId) - if packet.type == MessageType.fileTransfer.rawValue { - let shouldQueue = collectionsQueue.sync { - self.activeTransfers.count >= TransportConfig.bleMaxConcurrentTransfers - } - if shouldQueue { - queueFragmentTransfer(context, prioritizeFront: false) - return - } + let request = BLEOutboundFragmentTransferRequest( + packet: packet, + pad: pad, + maxChunk: maxChunk, + directedPeer: directedOnlyPeer, + transferId: transferId + ) + + let result = collectionsQueue.sync(flags: .barrier) { + outboundFragmentTransfers.submit(request, maxConcurrentTransfers: TransportConfig.bleMaxConcurrentTransfers) } - startFragmentedPacket(context) + handleFragmentTransferSubmitResult(result) } - private func queueFragmentTransfer(_ context: PendingFragmentTransfer, prioritizeFront: Bool) { - collectionsQueue.async(flags: .barrier) { [weak self] in - guard let self = self else { return } - if prioritizeFront { - self.pendingFragmentTransfers.insert(context, at: 0) + private func handleFragmentTransferSubmitResult(_ result: BLEOutboundFragmentTransferScheduler.SubmitResult) { + switch result { + case let .start(request, reservedTransferId): + startFragmentedPacket(request, reservedTransferId: reservedTransferId) + + case let .queued(_, transferId, _): + if let transferId { + SecureLogger.debug("🚦 Queued media transfer \(transferId.prefix(8))… waiting for slot", category: .session) } else { - self.pendingFragmentTransfers.append(context) + SecureLogger.debug("🚦 Queued fragment transfer waiting for slot", category: .session) } } - if let transferId = context.transferId { - SecureLogger.debug("🚦 Queued media transfer \(transferId.prefix(8))… waiting for slot", category: .session) - } else { - SecureLogger.debug("🚦 Queued fragment transfer waiting for slot", category: .session) - } } - private func startFragmentedPacket(_ context: PendingFragmentTransfer) { - let packet = context.packet - let isFileTransfer = packet.type == MessageType.fileTransfer.rawValue - var reservedTransferId: String? + private func startFragmentedPacket(_ request: BLEOutboundFragmentTransferRequest, reservedTransferId: String?) { + let packet = request.packet - let releaseReservedSlot: (String) -> Void = { id in + let releaseReservedSlot: (String) -> Void = { [weak self] id in + guard let self = self else { return } TransferProgressManager.shared.cancel(id: id) self.collectionsQueue.async(flags: .barrier) { [weak self] in - self?.activeTransfers.removeValue(forKey: id) + _ = self?.outboundFragmentTransfers.releaseReservation(id) } self.messageQueue.async { [weak self] in self?.startNextPendingTransferIfNeeded() } } - if isFileTransfer { - let candidateId = context.transferId ?? packet.payload.sha256Hex() - var didReserve = false - collectionsQueue.sync(flags: .barrier) { - if self.activeTransfers.count < TransportConfig.bleMaxConcurrentTransfers, - self.activeTransfers[candidateId] == nil { - self.activeTransfers[candidateId] = ActiveTransferState(totalFragments: 0, sentFragments: 0, workItems: []) - didReserve = true - } - } - guard didReserve else { - queueFragmentTransfer(context, prioritizeFront: true) - return - } - reservedTransferId = candidateId - } - - guard let fullData = packet.toBinaryData(padding: context.pad) else { + guard let fullData = packet.toBinaryData(padding: request.pad) else { if let id = reservedTransferId { releaseReservedSlot(id) } @@ -3398,7 +3059,7 @@ extension BLEService { calculatedChunk = max(64, bleMaxMTU - overhead) } - let chunk = context.maxChunk ?? calculatedChunk + let chunk = request.maxChunk ?? calculatedChunk let safeChunk = max(64, chunk) let fragments = stride(from: 0, to: fullData.count, by: safeChunk).map { offset in Data(fullData[offset..= state.totalFragments - if isComplete { - self.activeTransfers.removeValue(forKey: transferId) - } else { - self.activeTransfers[transferId] = state + guard let self = self else { return } + + switch self.outboundFragmentTransfers.markFragmentSent(transferId: transferId) { + case .progress, .complete: + TransferProgressManager.shared.recordFragmentSent(id: transferId) + + case .missing: + return } - TransferProgressManager.shared.recordFragmentSent(id: transferId) - if isComplete { + + if !self.outboundFragmentTransfers.isActive(transferId) { self.messageQueue.async { [weak self] in self?.startNextPendingTransferIfNeeded() } @@ -3517,20 +3177,13 @@ extension BLEService { } private func startNextPendingTransferIfNeeded() { - collectionsQueue.async(flags: .barrier) { [weak self] in - guard let self = self else { return } - let limit = TransportConfig.bleMaxConcurrentTransfers - var availableSlots = max(0, limit - self.activeTransfers.count) - guard availableSlots > 0, !self.pendingFragmentTransfers.isEmpty else { return } - var toStart: [PendingFragmentTransfer] = [] - while availableSlots > 0, !self.pendingFragmentTransfers.isEmpty { - toStart.append(self.pendingFragmentTransfers.removeFirst()) - availableSlots -= 1 - } - for context in toStart { - self.messageQueue.async { [weak self] in - self?.startFragmentedPacket(context) - } + let results = collectionsQueue.sync(flags: .barrier) { + outboundFragmentTransfers.reservePendingStarts(maxConcurrentTransfers: TransportConfig.bleMaxConcurrentTransfers) + } + + for result in results { + messageQueue.async { [weak self] in + self?.handleFragmentTransferSubmitResult(result) } } } @@ -3627,7 +3280,7 @@ extension BLEService { // Only log non-announce packets to reduce noise if packet.type != MessageType.announce.rawValue { // Log packet details for debugging - SecureLogger.debug("📦 Handling packet type \(packet.type) from \(senderID), messageID: \(messageID)", category: .session) + SecureLogger.debug("📦 Handling packet type \(packet.type) from \(senderID.id.prefix(8))…, messageID: \(messageID.prefix(24))…", category: .session) } // Efficient deduplication @@ -3639,7 +3292,7 @@ extension BLEService { // Announce packets (type 1) are sent every 10 seconds for peer discovery // It's normal to see these as duplicates - don't log them to reduce noise if packet.type != MessageType.announce.rawValue { - SecureLogger.debug("⚠️ Duplicate packet ignored: \(messageID)", category: .session) + SecureLogger.debug("⚠️ Duplicate packet ignored: \(messageID.prefix(24))…", category: .session) } // In sparse graphs (<=2 neighbors), keep the pending relay to ensure bridging. // In denser graphs, cancel the pending relay to reduce redundant floods. @@ -3744,7 +3397,7 @@ extension BLEService { private func handleAnnounce(_ packet: BitchatPacket, from peerID: PeerID) { guard let announcement = AnnouncementPacket.decode(from: packet.payload) else { - SecureLogger.error("❌ Failed to decode announce packet from \(peerID)", category: .session) + SecureLogger.error("❌ Failed to decode announce packet from \(peerID.id.prefix(8))…", category: .session) return } @@ -3865,7 +3518,7 @@ extension BLEService { lastReconnectLogAt[peerID] = now } } else if existingPeer?.nickname != announcement.nickname { - SecureLogger.debug("🔄 Peer \(peerID) changed nickname: \(existingPeer?.nickname ?? "Unknown") -> \(announcement.nickname)", category: .session) + SecureLogger.debug("🔄 Peer \(peerID.id.prefix(8))… changed nickname: \(existingPeer?.nickname ?? "Unknown") -> \(announcement.nickname)", category: .session) } } } @@ -3929,7 +3582,7 @@ extension BLEService { // Handle REQUEST_SYNC: decode payload and respond with missing packets via sync manager private func handleRequestSync(_ packet: BitchatPacket, from peerID: PeerID) { guard let req = RequestSyncPacket.decode(from: packet.payload) else { - SecureLogger.warning("⚠️ Malformed REQUEST_SYNC from \(peerID)", category: .session) + SecureLogger.warning("⚠️ Malformed REQUEST_SYNC from \(peerID.id.prefix(8))…", category: .session) return } gossipSyncManager?.handleRequestSync(from: peerID, request: req) @@ -4025,7 +3678,7 @@ extension BLEService { let hasDirectLink = directLink.hasPeripheral || directLink.hasCentral let pathTag = hasDirectLink ? "direct" : "mesh" - SecureLogger.debug("💬 [\(senderNickname)] TTL:\(packet.ttl) (\(pathTag)): \(String(content.prefix(50)))\(content.count > 50 ? "..." : "")", category: .session) + SecureLogger.debug("💬 [\(senderNickname)] TTL:\(packet.ttl) (\(pathTag)) chars=\(content.count) bytes=\(packet.payload.count)", category: .session) let ts = Date(timeIntervalSince1970: Double(packet.timestamp) / 1000) var resolvedSelfMessageID: String? = nil @@ -4086,7 +3739,7 @@ extension BLEService { } if recipientID != myPeerID { - SecureLogger.debug("🔐 Encrypted message not for me (for \(recipientID), I am \(myPeerID))", category: .session) + SecureLogger.debug("🔐 Encrypted message not for me (for \(recipientID.id.prefix(8))…, I am \(myPeerID.id.prefix(8))…)", category: .session) return } @@ -4106,7 +3759,7 @@ extension BLEService { return } - SecureLogger.debug("🔐 Decrypted noise payload type \(noisePayloadType.description) from \(peerID)", category: .session) + SecureLogger.debug("🔐 Decrypted noise payload type \(noisePayloadType.description) from \(peerID.id.prefix(8))…", category: .session) switch noisePayloadType { case .privateMessage: @@ -4138,14 +3791,14 @@ extension BLEService { } catch NoiseEncryptionError.sessionNotEstablished { // We received an encrypted message before establishing a session with this peer. // Trigger a handshake so future messages can be decrypted. - SecureLogger.debug("🔑 Encrypted message from \(peerID) without session; initiating handshake") + SecureLogger.debug("🔑 Encrypted message from \(peerID.id.prefix(8))… without session; initiating handshake") if !noiseService.hasSession(with: peerID) { initiateNoiseHandshake(with: peerID) } } catch { // Decryption failed - clear the corrupted session and re-initiate handshake // This handles cases where session state got out of sync (nonce mismatch, etc.) - SecureLogger.error("❌ Failed to decrypt message from \(peerID): \(error) - clearing session and re-initiating handshake") + SecureLogger.error("❌ Failed to decrypt message from \(peerID.id.prefix(8))…: \(error) - clearing session and re-initiating handshake") noiseService.clearSession(for: peerID) initiateNoiseHandshake(with: peerID) } @@ -4155,27 +3808,15 @@ extension BLEService { private func sendPendingNoisePayloadsAfterHandshake(for peerID: PeerID) { let payloads = collectionsQueue.sync(flags: .barrier) { () -> [Data] in - let list = pendingNoisePayloadsAfterHandshake[peerID] ?? [] - pendingNoisePayloadsAfterHandshake.removeValue(forKey: peerID) - return list + pendingNoiseSessionQueues.takeTypedPayloads(for: peerID) } guard !payloads.isEmpty else { return } - SecureLogger.debug("📤 Sending \(payloads.count) pending noise payloads to \(peerID) after handshake", category: .session) + SecureLogger.debug("📤 Sending \(payloads.count) pending noise payloads to \(peerID.id.prefix(8))… after handshake", category: .session) for payload in payloads { do { - let encrypted = try noiseService.encrypt(payload, for: peerID) - let packet = BitchatPacket( - type: MessageType.noiseEncrypted.rawValue, - senderID: myPeerIDData, - recipientID: Data(hexString: peerID.id), - timestamp: UInt64(Date().timeIntervalSince1970 * 1000), - payload: encrypted, - signature: nil, - ttl: messageTTL - ) - broadcastPacket(packet) + broadcastPacket(try makeEncryptedNoisePacket(payload, to: peerID)) } catch { - SecureLogger.error("❌ Failed to send pending noise payload to \(peerID): \(error)") + SecureLogger.error("❌ Failed to send pending noise payload to \(peerID.id.prefix(8))…: \(error)") } } } @@ -4334,7 +3975,7 @@ extension BLEService { // Cleanup: remove peers that are not connected and past reachability retention if !peer.isConnected { if age > retention { - SecureLogger.debug("🗑️ Removing stale peer after reachability window: \(peerID) (\(peer.nickname))", category: .session) + SecureLogger.debug("🗑️ Removing stale peer after reachability window: \(peerID.id.prefix(8))… (\(peer.nickname))", category: .session) // Also remove any stored announcement from sync candidates gossipSyncManager?.removeAnnouncementForPeer(peerID) peers.removeValue(forKey: peerID) diff --git a/bitchat/ViewModels/ChatDeliveryCoordinator.swift b/bitchat/ViewModels/ChatDeliveryCoordinator.swift index 59f3ba74..19f3a333 100644 --- a/bitchat/ViewModels/ChatDeliveryCoordinator.swift +++ b/bitchat/ViewModels/ChatDeliveryCoordinator.swift @@ -44,7 +44,23 @@ final class ChatDeliveryCoordinator { } @MainActor - func updateMessageDeliveryStatus(_ messageID: String, status: DeliveryStatus) { + func deliveryStatus(for messageID: String) -> DeliveryStatus? { + if let message = viewModel.messages.first(where: { $0.id == messageID }) { + return message.deliveryStatus + } + + for messages in viewModel.privateChats.values { + if let message = messages.first(where: { $0.id == messageID }) { + return message.deliveryStatus + } + } + + return nil + } + + @MainActor + @discardableResult + func updateMessageDeliveryStatus(_ messageID: String, status: DeliveryStatus) -> Bool { var didUpdateStatus = false if let index = viewModel.messages.firstIndex(where: { $0.id == messageID }) { @@ -72,6 +88,8 @@ final class ChatDeliveryCoordinator { viewModel.privateChats = privateChats viewModel.objectWillChange.send() } + + return didUpdateStatus } } diff --git a/bitchat/ViewModels/ChatTransportEventCoordinator.swift b/bitchat/ViewModels/ChatTransportEventCoordinator.swift index 028942b2..a671f7b3 100644 --- a/bitchat/ViewModels/ChatTransportEventCoordinator.swift +++ b/bitchat/ViewModels/ChatTransportEventCoordinator.swift @@ -209,34 +209,34 @@ private extension ChatTransportEventCoordinator { viewModel.meshService.sendDeliveryAck(for: packet.messageID, to: peerID) case .delivered: - guard let messageID = String(data: payload, encoding: .utf8), - let name = viewModel.unifiedPeerService.getPeer(by: peerID)?.nickname, - let (foundPeerID, index) = findMessageIndex( - for: messageID, - peerID: peerID, - in: viewModel - ) else { return } + guard let messageID = String(data: payload, encoding: .utf8) else { return } - if case .read = viewModel.privateChats[foundPeerID]?[index].deliveryStatus { return } + let name = deliveryStatusName(for: peerID, in: viewModel) + let didUpdate = viewModel.deliveryCoordinator.updateMessageDeliveryStatus( + messageID, + status: .delivered(to: name, at: Date()) + ) - viewModel.privateChats[foundPeerID]?[index].deliveryStatus = .delivered(to: name, at: Date()) - viewModel.objectWillChange.send() + if !didUpdate { + if case .read? = viewModel.deliveryCoordinator.deliveryStatus(for: messageID) { + SecureLogger.debug("📬 Ignored stale delivered ACK for already-read message id=\(messageID.prefix(8))… from \(peerID.id.prefix(8))…", category: .session) + } else { + SecureLogger.debug("📬 Delivered ACK for unknown message id=\(messageID.prefix(8))… from \(peerID.id.prefix(8))…", category: .session) + } + } case .readReceipt: - guard let messageID = String(data: payload, encoding: .utf8), - let name = viewModel.unifiedPeerService.getPeer(by: peerID)?.nickname, - let (foundPeerID, index) = findMessageIndex( - for: messageID, - peerID: peerID, - in: viewModel - ), - let messages = viewModel.privateChats[foundPeerID], - index < messages.count else { return } + guard let messageID = String(data: payload, encoding: .utf8) else { return } - messages[index].deliveryStatus = .read(by: name, at: Date()) - viewModel.privateChats[foundPeerID] = messages - viewModel.privateChatManager.objectWillChange.send() - viewModel.objectWillChange.send() + let name = deliveryStatusName(for: peerID, in: viewModel) + let didUpdate = viewModel.deliveryCoordinator.updateMessageDeliveryStatus( + messageID, + status: .read(by: name, at: Date()) + ) + + if !didUpdate { + SecureLogger.debug("📖 Read receipt for unknown message id=\(messageID.prefix(8))… from \(peerID.id.prefix(8))…", category: .session) + } case .verifyChallenge: viewModel.verificationCoordinator.handleVerifyChallengePayload(from: peerID, payload: payload) @@ -247,34 +247,7 @@ private extension ChatTransportEventCoordinator { } @MainActor - func findMessageIndex( - for messageID: String, - peerID: PeerID, - in viewModel: ChatViewModel - ) -> (peerID: PeerID, index: Int)? { - if let messages = viewModel.privateChats[peerID], - let index = messages.firstIndex(where: { $0.id == messageID }) { - return (peerID, index) - } - - if peerID.bare.count == 16, - let peer = viewModel.unifiedPeerService.getPeer(by: peerID), - !peer.noisePublicKey.isEmpty { - let longID = PeerID(hexData: peer.noisePublicKey) - if let messages = viewModel.privateChats[longID], - let index = messages.firstIndex(where: { $0.id == messageID }) { - return (longID, index) - } - } - - if peerID.bare.count == 64 { - let shortID = peerID.toShort() - if let messages = viewModel.privateChats[shortID], - let index = messages.firstIndex(where: { $0.id == messageID }) { - return (shortID, index) - } - } - - return nil + func deliveryStatusName(for peerID: PeerID, in viewModel: ChatViewModel) -> String { + viewModel.unifiedPeerService.getPeer(by: peerID)?.nickname ?? viewModel.resolveNickname(for: peerID) } } diff --git a/bitchatTests/ChatViewModelTests.swift b/bitchatTests/ChatViewModelTests.swift index 19737944..304b96d5 100644 --- a/bitchatTests/ChatViewModelTests.swift +++ b/bitchatTests/ChatViewModelTests.swift @@ -516,6 +516,57 @@ struct ChatViewModelNoisePayloadTests { #expect(delivered) } + + @Test @MainActor + func didReceiveNoisePayload_readReceiptUpdatesBeforePeerNicknameIsKnown() async { + let (viewModel, _) = makeTestableViewModel() + let peerID = PeerID(str: "0000000000000005") + + let message = BitchatMessage( + id: "pm-read-before-name", + sender: viewModel.nickname, + content: "Waiting on read receipt", + timestamp: Date(), + isRelay: false, + originalSender: nil, + isPrivate: true, + recipientNickname: "Peer", + senderPeerID: viewModel.meshService.myPeerID, + mentions: nil, + deliveryStatus: .sent + ) + viewModel.privateChats[peerID] = [message] + + viewModel.didReceiveNoisePayload( + from: peerID, + type: .readReceipt, + payload: Data("pm-read-before-name".utf8), + timestamp: Date() + ) + + let privateChatUpdated = await TestHelpers.waitUntil({ + guard let status = viewModel.privateChats[peerID]?.first?.deliveryStatus else { return false } + if case .read = status { + return true + } + return false + }, timeout: TestConstants.defaultTimeout) + + let conversationStoreUpdated = await TestHelpers.waitUntil({ + let messages = viewModel.conversationStore.directMessages( + for: peerID, + identityResolver: viewModel.identityResolver + ) + guard let status = messages.first?.deliveryStatus else { return false } + if case .read = status { + return true + } + return false + }, timeout: TestConstants.defaultTimeout) + + #expect(privateChatUpdated) + #expect(conversationStoreUpdated) + } } // MARK: - Formatting Tests diff --git a/bitchatTests/Features/ImageUtilsTests.swift b/bitchatTests/Features/ImageUtilsTests.swift index 08273244..a130b4ea 100644 --- a/bitchatTests/Features/ImageUtilsTests.swift +++ b/bitchatTests/Features/ImageUtilsTests.swift @@ -11,6 +11,10 @@ private func makeTemporaryFileURL(_ name: String) -> URL { FileManager.default.temporaryDirectory.appendingPathComponent(name) } +private func makeTemporaryDirectoryURL(_ name: String) -> URL { + FileManager.default.temporaryDirectory.appendingPathComponent(name, isDirectory: true) +} + #if os(iOS) private func makePlatformImage(size: CGSize) -> UIImage { UIGraphicsImageRenderer(size: size).image { context in @@ -55,11 +59,14 @@ struct ImageUtilsTests { @Test func processImage_writesCompressedJpeg() throws { let image = makePlatformImage(size: CGSize(width: 1024, height: 768)) - let outputURL = try ImageUtils.processImage(image, maxDimension: 256) - defer { try? FileManager.default.removeItem(at: outputURL) } + let outputDirectory = makeTemporaryDirectoryURL("image-output-\(UUID().uuidString)") + defer { try? FileManager.default.removeItem(at: outputDirectory) } + + let outputURL = try ImageUtils.processImage(image, maxDimension: 256, outputDirectory: outputDirectory) let data = try Data(contentsOf: outputURL) + #expect(outputURL.deletingLastPathComponent() == outputDirectory) #expect(outputURL.pathExtension.lowercased() == "jpg") #expect(data.starts(with: Data([0xFF, 0xD8]))) #expect(data.count > 0) @@ -68,12 +75,11 @@ struct ImageUtilsTests { @Test func processImage_usesUniqueOutputURLs() throws { let image = makePlatformImage(size: CGSize(width: 64, height: 64)) - let firstURL = try ImageUtils.processImage(image, maxDimension: 64) - let secondURL = try ImageUtils.processImage(image, maxDimension: 64) - defer { - try? FileManager.default.removeItem(at: firstURL) - try? FileManager.default.removeItem(at: secondURL) - } + let outputDirectory = makeTemporaryDirectoryURL("image-output-\(UUID().uuidString)") + defer { try? FileManager.default.removeItem(at: outputDirectory) } + + let firstURL = try ImageUtils.processImage(image, maxDimension: 64, outputDirectory: outputDirectory) + let secondURL = try ImageUtils.processImage(image, maxDimension: 64, outputDirectory: outputDirectory) #expect(firstURL != secondURL) #expect(FileManager.default.fileExists(atPath: firstURL.path)) diff --git a/bitchatTests/Nostr/GeoRelayDirectoryTests.swift b/bitchatTests/Nostr/GeoRelayDirectoryTests.swift index b516f708..ddd3b971 100644 --- a/bitchatTests/Nostr/GeoRelayDirectoryTests.swift +++ b/bitchatTests/Nostr/GeoRelayDirectoryTests.swift @@ -10,7 +10,9 @@ final class GeoRelayDirectoryTests: XCTestCase { relay url,lat,lon wss://one.example/,10,20 https://one.example,10,20 + wss://one.example:443/,10,20 http://two.example/,11,21 + wss://two.example:443,11,21 invalid row ws://three.example,not-a-lat,22 """ diff --git a/bitchatTests/Services/BLENoisePayloadFactoryTests.swift b/bitchatTests/Services/BLENoisePayloadFactoryTests.swift new file mode 100644 index 00000000..ab743c9a --- /dev/null +++ b/bitchatTests/Services/BLENoisePayloadFactoryTests.swift @@ -0,0 +1,34 @@ +import Foundation +import Testing +@testable import bitchat + +struct BLENoisePayloadFactoryTests { + @Test + func privateMessagePayloadPrefixesTLVWithNoiseType() throws { + let payload = try #require(BLENoisePayloadFactory.privateMessage(content: "secret", messageID: "pm-1")) + + #expect(payload.first == NoisePayloadType.privateMessage.rawValue) + + let packet = try #require(PrivateMessagePacket.decode(from: Data(payload.dropFirst()))) + #expect(packet.messageID == "pm-1") + #expect(packet.content == "secret") + } + + @Test + func receiptPayloadsUseMessageIDBytes() { + let read = BLENoisePayloadFactory.readReceipt(originalMessageID: "read-id") + let delivered = BLENoisePayloadFactory.delivered(messageID: "delivered-id") + + #expect(read.first == NoisePayloadType.readReceipt.rawValue) + #expect(String(data: Data(read.dropFirst()), encoding: .utf8) == "read-id") + #expect(delivered.first == NoisePayloadType.delivered.rawValue) + #expect(String(data: Data(delivered.dropFirst()), encoding: .utf8) == "delivered-id") + } + + @Test + func typedPayloadKeepsOpaqueDataUnchanged() { + let payload = BLENoisePayloadFactory.typedPayload(.verifyChallenge, payload: Data([0xCA, 0xFE])) + + #expect(payload == Data([NoisePayloadType.verifyChallenge.rawValue, 0xCA, 0xFE])) + } +} diff --git a/bitchatTests/Services/BLENoiseSessionQueuesTests.swift b/bitchatTests/Services/BLENoiseSessionQueuesTests.swift new file mode 100644 index 00000000..33cb0fe7 --- /dev/null +++ b/bitchatTests/Services/BLENoiseSessionQueuesTests.swift @@ -0,0 +1,67 @@ +import BitFoundation +import Foundation +import Testing +@testable import bitchat + +struct BLENoiseSessionQueuesTests { + @Test + func privateMessagesDrainInPeerOrderAndClearOnlyThatPeer() { + let firstPeer = PeerID(str: "aaaaaaaaaaaaaaaa") + let secondPeer = PeerID(str: "bbbbbbbbbbbbbbbb") + var queues = BLENoiseSessionQueues() + + queues.appendPrivateMessage(content: "first", messageID: "m1", for: firstPeer) + queues.appendPrivateMessage(content: "second", messageID: "m2", for: firstPeer) + queues.appendPrivateMessage(content: "other", messageID: "m3", for: secondPeer) + + let drained = queues.takePrivateMessages(for: firstPeer) + + #expect(drained == [ + BLEPendingPrivateMessage(content: "first", messageID: "m1"), + BLEPendingPrivateMessage(content: "second", messageID: "m2") + ]) + #expect(queues.takePrivateMessages(for: firstPeer).isEmpty) + #expect(queues.takePrivateMessages(for: secondPeer) == [ + BLEPendingPrivateMessage(content: "other", messageID: "m3") + ]) + } + + @Test + func prependPrivateMessagesRestoresFailedMessagesAheadOfNewerOnes() { + let peerID = PeerID(str: "aaaaaaaaaaaaaaaa") + var queues = BLENoiseSessionQueues() + + queues.appendPrivateMessage(content: "new", messageID: "m2", for: peerID) + queues.prependPrivateMessages([ + BLEPendingPrivateMessage(content: "retry", messageID: "m1") + ], for: peerID) + + #expect(queues.takePrivateMessages(for: peerID).map(\.messageID) == ["m1", "m2"]) + } + + @Test + func typedPayloadsDrainIndependentlyFromPrivateMessages() { + let peerID = PeerID(str: "aaaaaaaaaaaaaaaa") + var queues = BLENoiseSessionQueues() + + queues.appendPrivateMessage(content: "queued", messageID: "m1", for: peerID) + queues.appendTypedPayload(Data([0x01]), for: peerID) + queues.appendTypedPayload(Data([0x02]), for: peerID) + + #expect(queues.takeTypedPayloads(for: peerID) == [Data([0x01]), Data([0x02])]) + #expect(queues.takeTypedPayloads(for: peerID).isEmpty) + #expect(queues.takePrivateMessages(for: peerID).map(\.messageID) == ["m1"]) + } + + @Test + func removeAllClearsBothQueueTypes() { + let peerID = PeerID(str: "aaaaaaaaaaaaaaaa") + var queues = BLENoiseSessionQueues() + + queues.appendPrivateMessage(content: "queued", messageID: "m1", for: peerID) + queues.appendTypedPayload(Data([0x01]), for: peerID) + queues.removeAll() + + #expect(queues.isEmpty) + } +} diff --git a/bitchatTests/Services/BLEOutboundFragmentTransferSchedulerTests.swift b/bitchatTests/Services/BLEOutboundFragmentTransferSchedulerTests.swift new file mode 100644 index 00000000..91b54399 --- /dev/null +++ b/bitchatTests/Services/BLEOutboundFragmentTransferSchedulerTests.swift @@ -0,0 +1,148 @@ +import BitFoundation +import Foundation +import Testing +@testable import bitchat + +struct BLEOutboundFragmentTransferSchedulerTests { + @Test + func submitStartsPublicMessageWithoutTransferReservation() { + var scheduler = BLEOutboundFragmentTransferScheduler() + let request = makeRequest(type: MessageType.message.rawValue, transferId: nil) + + let result = scheduler.submit(request, maxConcurrentTransfers: 1) + + if case let .start(_, reservedTransferId) = result { + #expect(reservedTransferId == nil) + #expect(scheduler.activeCount == 0) + #expect(scheduler.pendingCount == 0) + } else { + Issue.record("Expected non-file fragments to start without reserving a transfer slot") + } + } + + @Test + func submitQueuesFileTransferWhenSlotsAreFull() { + var scheduler = BLEOutboundFragmentTransferScheduler() + let first = makeRequest(type: MessageType.fileTransfer.rawValue, transferId: "first") + let second = makeRequest(type: MessageType.fileTransfer.rawValue, transferId: "second") + + guard case let .start(_, firstReservation?) = scheduler.submit(first, maxConcurrentTransfers: 1) else { + Issue.record("Expected first file transfer to reserve a slot") + return + } + #expect(firstReservation == "first") + + let result = scheduler.submit(second, maxConcurrentTransfers: 1) + + if case let .queued(_, transferId, position) = result { + #expect(transferId == "second") + #expect(position == .back) + #expect(scheduler.activeCount == 1) + #expect(scheduler.pendingCount == 1) + } else { + Issue.record("Expected second file transfer to queue while slots are full") + } + } + + @Test + func submitQueuesDuplicateActiveTransferAtFront() { + var scheduler = BLEOutboundFragmentTransferScheduler() + let request = makeRequest(type: MessageType.fileTransfer.rawValue, transferId: "same") + + _ = scheduler.submit(request, maxConcurrentTransfers: 2) + let result = scheduler.submit(request, maxConcurrentTransfers: 2) + + if case let .queued(_, transferId, position) = result { + #expect(transferId == "same") + #expect(position == .front) + #expect(scheduler.activeCount == 1) + #expect(scheduler.pendingCount == 1) + } else { + Issue.record("Expected duplicate active transfer to queue at the front") + } + } + + @Test + func cancelActiveTransferReturnsScheduledWorkItems() { + var scheduler = BLEOutboundFragmentTransferScheduler() + let request = makeRequest(type: MessageType.fileTransfer.rawValue, transferId: "active") + _ = scheduler.submit(request, maxConcurrentTransfers: 1) + let workItem = DispatchWorkItem {} + + let didActivate = scheduler.activateReservedTransfer(id: "active", totalFragments: 2, workItems: [workItem]) + #expect(didActivate) + + if case let .active(transferId, workItems) = scheduler.cancelTransfer("active") { + #expect(transferId == "active") + #expect(workItems.count == 1) + #expect(scheduler.activeCount == 0) + } else { + Issue.record("Expected active transfer cancellation to return its work items") + } + } + + @Test + func completedTransferFreesSlotForPendingTransfer() { + var scheduler = BLEOutboundFragmentTransferScheduler() + let first = makeRequest(type: MessageType.fileTransfer.rawValue, transferId: "first") + let second = makeRequest(type: MessageType.fileTransfer.rawValue, transferId: "second") + + _ = scheduler.submit(first, maxConcurrentTransfers: 1) + let didActivate = scheduler.activateReservedTransfer(id: "first", totalFragments: 2, workItems: []) + #expect(didActivate) + _ = scheduler.submit(second, maxConcurrentTransfers: 1) + + #expect(scheduler.markFragmentSent(transferId: "first") == .progress(sentFragments: 1, totalFragments: 2)) + #expect(scheduler.markFragmentSent(transferId: "first") == .complete(sentFragments: 2, totalFragments: 2)) + + let starts = scheduler.reservePendingStarts(maxConcurrentTransfers: 1) + #expect(starts.count == 1) + + if case let .start(_, reservedTransferId?) = starts.first { + #expect(reservedTransferId == "second") + #expect(scheduler.activeCount == 1) + #expect(scheduler.pendingCount == 0) + } else { + Issue.record("Expected pending transfer to reserve the freed slot") + } + } + + @Test + func removeAllReturnsActiveWorkItemsAndDropsPendingTransfers() { + var scheduler = BLEOutboundFragmentTransferScheduler() + let active = makeRequest(type: MessageType.fileTransfer.rawValue, transferId: "active") + let pending = makeRequest(type: MessageType.fileTransfer.rawValue, transferId: "pending") + let workItem = DispatchWorkItem {} + + _ = scheduler.submit(active, maxConcurrentTransfers: 1) + let didActivate = scheduler.activateReservedTransfer(id: "active", totalFragments: 1, workItems: [workItem]) + #expect(didActivate) + _ = scheduler.submit(pending, maxConcurrentTransfers: 1) + + let removed = scheduler.removeAll() + + #expect(removed.count == 1) + #expect(removed.first?.id == "active") + #expect(removed.first?.workItems.count == 1) + #expect(scheduler.activeCount == 0) + #expect(scheduler.pendingCount == 0) + } + + private func makeRequest(type: UInt8, transferId: String?) -> BLEOutboundFragmentTransferRequest { + BLEOutboundFragmentTransferRequest( + packet: BitchatPacket( + type: type, + senderID: Data([0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77]), + recipientID: nil, + timestamp: 0x0102030405, + payload: Data((transferId ?? "payload").utf8), + signature: nil, + ttl: 3 + ), + pad: false, + maxChunk: nil, + directedPeer: nil, + transferId: transferId + ) + } +} diff --git a/bitchatTests/Services/NostrRelayManagerTests.swift b/bitchatTests/Services/NostrRelayManagerTests.swift index ee9fb3d2..a7447980 100644 --- a/bitchatTests/Services/NostrRelayManagerTests.swift +++ b/bitchatTests/Services/NostrRelayManagerTests.swift @@ -208,7 +208,7 @@ final class NostrRelayManagerTests: XCTestCase { let relayTwo = "wss://relay-two.example" let context = makeContext(permission: .denied) - context.manager.ensureConnections(to: [relayOne, relayOne, relayTwo]) + context.manager.ensureConnections(to: [relayOne, "wss://relay-one.example:443/", "WSS://RELAY-TWO.EXAMPLE:443"]) let connected = await waitUntil { Set(context.manager.getRelayStatuses().map(\.url)) == Set([relayOne, relayTwo]) && From ffa0d7aa4f96f4273b99369fc7ae3851258debee Mon Sep 17 00:00:00 2001 From: jack <212554440+jackjackbits@users.noreply.github.com> Date: Sun, 31 May 2026 14:24:09 +0200 Subject: [PATCH 015/216] [codex] Extract BLE link state store (#1310) * Refactor BLE transport event handling * Make image output paths unique * Keep queued Nostr read receipts alive * Refine BLE ingress fanout * Rediscover BLE service after invalidation * Extract BLE notification retry buffer * Extract BLE inbound write buffer * Extract BLE fragment assembly buffer * Tidy secure log handling from device run * Extract BLE outbound fragment scheduler * Harden app CI media tests * Redact BLE message content from logs * Extract BLE Noise session queues * Fix BLE read receipt UI updates * Allow self-authored RSR ingress replies * Harden read receipt queue test timing * Extract BLE outbound policy and incoming file storage * Avoid duplicate BLE link snapshots during send * Canonicalize Nostr relay URLs * Extract BLE link state store * Extract BLE connection scheduler --------- Co-authored-by: jack --- .../Services/BLE/BLEConnectionScheduler.swift | 271 +++++++++ bitchat/Services/BLE/BLELinkStateStore.swift | 196 +++++++ bitchat/Services/BLE/BLEService.swift | 534 ++++++------------ .../BLEConnectionSchedulerTests.swift | 156 +++++ .../Services/BLELinkStateStoreTests.swift | 46 ++ 5 files changed, 835 insertions(+), 368 deletions(-) create mode 100644 bitchat/Services/BLE/BLEConnectionScheduler.swift create mode 100644 bitchat/Services/BLE/BLELinkStateStore.swift create mode 100644 bitchatTests/Services/BLEConnectionSchedulerTests.swift create mode 100644 bitchatTests/Services/BLELinkStateStoreTests.swift diff --git a/bitchat/Services/BLE/BLEConnectionScheduler.swift b/bitchat/Services/BLE/BLEConnectionScheduler.swift new file mode 100644 index 00000000..a799fc8e --- /dev/null +++ b/bitchat/Services/BLE/BLEConnectionScheduler.swift @@ -0,0 +1,271 @@ +import Foundation + +struct BLEConnectionCandidate { + let peripheral: Peripheral + let peripheralID: String + let rssi: Int + let name: String + let isConnectable: Bool + let discoveredAt: Date +} + +struct BLEExistingConnectionState { + let isConnecting: Bool + let isConnected: Bool + let lastConnectionAttempt: Date? +} + +enum BLEPeripheralConnectionState { + case disconnected + case connecting + case connected +} + +enum BLEDiscoveryDecision: Equatable { + case ignore + case queued + case scheduleRetry(after: TimeInterval) + case cancelStaleConnection + case connectNow +} + +enum BLEConnectionQueueDecision { + case none + case retryAfter(TimeInterval) + case connect(BLEConnectionCandidate) +} + +final class BLEConnectionScheduler { + private let maxCentralLinks: Int + private let connectRateLimitInterval: TimeInterval + private let candidateCap: Int + private let weakLinkCooldownSeconds: TimeInterval + private let weakLinkRSSICutoff: Int + private let recentTimeoutWindowSeconds: TimeInterval + private let recentTimeoutCountThreshold: Int + + private var lastGlobalConnectAttempt: Date = .distantPast + private var candidates: [BLEConnectionCandidate] = [] + private var failureCounts: [String: Int] = [:] + private var recentConnectTimeouts: [String: Date] = [:] + private var lastIsolatedAt: Date? + + private let initialDynamicRSSIThreshold: Int + private(set) var dynamicRSSIThreshold: Int + + var candidateCount: Int { + candidates.count + } + + init( + maxCentralLinks: Int = TransportConfig.bleMaxCentralLinks, + connectRateLimitInterval: TimeInterval = TransportConfig.bleConnectRateLimitInterval, + candidateCap: Int = TransportConfig.bleConnectionCandidatesMax, + weakLinkCooldownSeconds: TimeInterval = TransportConfig.bleWeakLinkCooldownSeconds, + weakLinkRSSICutoff: Int = TransportConfig.bleWeakLinkRSSICutoff, + recentTimeoutWindowSeconds: TimeInterval = TransportConfig.bleRecentTimeoutWindowSeconds, + recentTimeoutCountThreshold: Int = TransportConfig.bleRecentTimeoutCountThreshold, + dynamicRSSIThreshold: Int = TransportConfig.bleDynamicRSSIThresholdDefault + ) { + self.maxCentralLinks = maxCentralLinks + self.connectRateLimitInterval = connectRateLimitInterval + self.candidateCap = candidateCap + self.weakLinkCooldownSeconds = weakLinkCooldownSeconds + self.weakLinkRSSICutoff = weakLinkRSSICutoff + self.recentTimeoutWindowSeconds = recentTimeoutWindowSeconds + self.recentTimeoutCountThreshold = recentTimeoutCountThreshold + self.initialDynamicRSSIThreshold = dynamicRSSIThreshold + self.dynamicRSSIThreshold = dynamicRSSIThreshold + } + + func handleDiscovery( + _ candidate: BLEConnectionCandidate, + connectedOrConnectingCount: Int, + existingState: BLEExistingConnectionState?, + peripheralState: BLEPeripheralConnectionState, + now: Date + ) -> BLEDiscoveryDecision { + guard candidate.isConnectable else { return .ignore } + + if candidate.rssi <= dynamicRSSIThreshold { + enqueue(candidate) + return .queued + } + + if connectedOrConnectingCount >= maxCentralLinks { + enqueue(candidate) + return .queued + } + + if let retryDelay = rateLimitRetryDelay(now: now) { + enqueue(candidate) + return .scheduleRetry(after: retryDelay) + } + + if let existingState { + if existingState.isConnected || existingState.isConnecting { + return .ignore + } + + if let lastAttempt = existingState.lastConnectionAttempt, + now.timeIntervalSince(lastAttempt) < 2.0 { + return .ignore + } + } + + if let lastTimeout = recentConnectTimeouts[candidate.peripheralID], + now.timeIntervalSince(lastTimeout) < 15 { + return .ignore + } + + switch peripheralState { + case .disconnected: + return .connectNow + case .connecting, .connected: + return .cancelStaleConnection + } + } + + func enqueue(_ candidate: BLEConnectionCandidate) { + if let existingIndex = candidates.firstIndex(where: { $0.peripheralID == candidate.peripheralID }) { + candidates[existingIndex] = candidate + } else { + candidates.append(candidate) + } + + candidates.sort { + if $0.rssi != $1.rssi { return $0.rssi > $1.rssi } + return $0.discoveredAt < $1.discoveredAt + } + if candidates.count > candidateCap { + candidates.removeLast(candidates.count - candidateCap) + } + } + + func nextCandidate( + connectedOrConnectingCount: Int, + isAlreadyConnectingOrConnected: (String) -> Bool, + now: Date + ) -> BLEConnectionQueueDecision { + guard connectedOrConnectingCount < maxCentralLinks else { return .none } + + if let retryDelay = rateLimitRetryDelay(now: now) { + return .retryAfter(retryDelay) + } + + while !candidates.isEmpty { + candidates.sort { score($0, now: now) > score($1, now: now) } + let candidate = candidates.removeFirst() + guard candidate.isConnectable else { continue } + + if let delay = weakLinkRetryDelay(for: candidate, now: now) { + enqueue(candidate) + return .retryAfter(delay) + } + + if isAlreadyConnectingOrConnected(candidate.peripheralID) { + continue + } + + return .connect(candidate) + } + + return .none + } + + func recordConnectionAttempt(at now: Date) { + lastGlobalConnectAttempt = now + } + + func recordConnectionSuccess(peripheralID: String) { + failureCounts[peripheralID] = 0 + recentConnectTimeouts.removeValue(forKey: peripheralID) + } + + func recordConnectionFailure(peripheralID: String) { + failureCounts[peripheralID, default: 0] += 1 + } + + func recordDisconnectError(peripheralID: String, at now: Date) { + recentConnectTimeouts[peripheralID] = now + } + + func recordConnectionTimeout(peripheralID: String, at now: Date) { + recentConnectTimeouts[peripheralID] = now + recordConnectionFailure(peripheralID: peripheralID) + } + + func pruneConnectionTimeouts(before cutoff: Date) { + recentConnectTimeouts = recentConnectTimeouts.filter { $0.value >= cutoff } + } + + func reset() { + lastGlobalConnectAttempt = .distantPast + candidates.removeAll() + failureCounts.removeAll() + recentConnectTimeouts.removeAll() + lastIsolatedAt = nil + dynamicRSSIThreshold = initialDynamicRSSIThreshold + } + + @discardableResult + func updateRSSIThreshold( + connectedCount: Int, + connectedOrConnectingLinkCount: Int, + now: Date + ) -> Int { + if connectedCount == 0 { + if lastIsolatedAt == nil { lastIsolatedAt = now } + let isolatedAt = lastIsolatedAt ?? now + let elapsed = now.timeIntervalSince(isolatedAt) + dynamicRSSIThreshold = elapsed > TransportConfig.bleIsolationRelaxThresholdSeconds + ? TransportConfig.bleRSSIIsolatedRelaxed + : TransportConfig.bleRSSIIsolatedBase + return dynamicRSSIThreshold + } + + lastIsolatedAt = nil + var threshold = TransportConfig.bleDynamicRSSIThresholdDefault + if connectedOrConnectingLinkCount >= maxCentralLinks || candidates.count >= candidateCap { + threshold = TransportConfig.bleRSSIConnectedThreshold + } + + let recentTimeouts = recentConnectTimeouts.filter { + now.timeIntervalSince($0.value) < recentTimeoutWindowSeconds + }.count + if recentTimeouts >= recentTimeoutCountThreshold { + threshold = max(threshold, TransportConfig.bleRSSIHighTimeoutThreshold) + } + + dynamicRSSIThreshold = threshold + return threshold + } + + private func rateLimitRetryDelay(now: Date) -> TimeInterval? { + let elapsed = now.timeIntervalSince(lastGlobalConnectAttempt) + guard elapsed < connectRateLimitInterval else { return nil } + return connectRateLimitInterval - elapsed + 0.05 + } + + private func weakLinkRetryDelay( + for candidate: BLEConnectionCandidate, + now: Date + ) -> TimeInterval? { + guard let lastTimeout = recentConnectTimeouts[candidate.peripheralID] else { return nil } + let elapsed = now.timeIntervalSince(lastTimeout) + guard elapsed < weakLinkCooldownSeconds && candidate.rssi <= weakLinkRSSICutoff else { return nil } + let remaining = weakLinkCooldownSeconds - elapsed + return min(max(2.0, remaining), 15.0) + } + + private func score(_ candidate: BLEConnectionCandidate, now: Date) -> Int { + let failures = failureCounts[candidate.peripheralID] ?? 0 + let penalty = min(20, 1 << min(4, failures)) + let timeoutBias = recentConnectTimeouts[candidate.peripheralID].map { + now.timeIntervalSince($0) < 60 ? 10 : 0 + } ?? 0 + let base = (candidate.isConnectable ? 1000 : 0) + (candidate.rssi + 100) * 2 + let recency = -Int(now.timeIntervalSince(candidate.discoveredAt) * 10) + return base + recency - penalty - timeoutBias + } +} diff --git a/bitchat/Services/BLE/BLELinkStateStore.swift b/bitchat/Services/BLE/BLELinkStateStore.swift new file mode 100644 index 00000000..b46edaec --- /dev/null +++ b/bitchat/Services/BLE/BLELinkStateStore.swift @@ -0,0 +1,196 @@ +import BitFoundation +import CoreBluetooth +import Foundation + +struct BLEPeripheralLinkState { + let peripheral: CBPeripheral + var characteristic: CBCharacteristic? + var peerID: PeerID? + var isConnecting: Bool + var isConnected: Bool + var lastConnectionAttempt: Date? + var assembler: NotificationStreamAssembler +} + +struct BLEDirectLinkState: Equatable { + let hasPeripheral: Bool + let hasCentral: Bool +} + +struct BLESubscribedCentralSnapshot { + let centrals: [CBCentral] + let peerIDsByCentralUUID: [String: PeerID] + + func central(for peerID: PeerID) -> CBCentral? { + centrals.first { peerIDsByCentralUUID[$0.identifier.uuidString] == peerID } + } +} + +final class BLELinkStateStore { + private(set) var peripherals: [String: BLEPeripheralLinkState] = [:] + private(set) var peerToPeripheralUUID: [PeerID: String] = [:] + private(set) var subscribedCentrals: [CBCentral] = [] + private(set) var centralToPeerID: [String: PeerID] = [:] + + var peripheralStates: [BLEPeripheralLinkState] { + Array(peripherals.values) + } + + var subscribedCentralSnapshot: BLESubscribedCentralSnapshot { + BLESubscribedCentralSnapshot( + centrals: subscribedCentrals, + peerIDsByCentralUUID: centralToPeerID + ) + } + + var subscribedCentralCount: Int { + subscribedCentrals.count + } + + var connectedOrConnectingPeripheralCount: Int { + peripherals.values.filter { $0.isConnected || $0.isConnecting }.count + } + + func state(forPeripheralID peripheralID: String) -> BLEPeripheralLinkState? { + peripherals[peripheralID] + } + + func setPeripheralState(_ state: BLEPeripheralLinkState, for peripheralID: String) { + peripherals[peripheralID] = state + } + + @discardableResult + func updatePeripheral( + _ peripheralID: String, + _ update: (inout BLEPeripheralLinkState) -> Void + ) -> BLEPeripheralLinkState? { + guard var state = peripherals[peripheralID] else { return nil } + update(&state) + peripherals[peripheralID] = state + return state + } + + func beginConnecting(to peripheral: CBPeripheral, at date: Date) { + setPeripheralState( + BLEPeripheralLinkState( + peripheral: peripheral, + characteristic: nil, + peerID: nil, + isConnecting: true, + isConnected: false, + lastConnectionAttempt: date, + assembler: NotificationStreamAssembler() + ), + for: peripheral.identifier.uuidString + ) + } + + func markConnected(_ peripheral: CBPeripheral) { + let peripheralID = peripheral.identifier.uuidString + if updatePeripheral(peripheralID, { + $0.isConnecting = false + $0.isConnected = true + }) == nil { + setPeripheralState( + BLEPeripheralLinkState( + peripheral: peripheral, + characteristic: nil, + peerID: nil, + isConnecting: false, + isConnected: true, + lastConnectionAttempt: nil, + assembler: NotificationStreamAssembler() + ), + for: peripheralID + ) + } + } + + func updateCharacteristic(_ characteristic: CBCharacteristic, forPeripheralID peripheralID: String) { + updatePeripheral(peripheralID) { + $0.characteristic = characteristic + } + } + + func directPeripheralState(for peerID: PeerID) -> BLEPeripheralLinkState? { + peerToPeripheralUUID[peerID].flatMap { peripherals[$0] } + } + + func directLinkState(for peerID: PeerID) -> BLEDirectLinkState { + let peripheralUUID = peerToPeripheralUUID[peerID] + let hasPeripheral = peripheralUUID.flatMap { peripherals[$0]?.isConnected } ?? false + let hasCentral = centralToPeerID.values.contains(peerID) + return BLEDirectLinkState(hasPeripheral: hasPeripheral, hasCentral: hasCentral) + } + + func links(to peerID: PeerID?) -> Set { + guard let peerID else { return [] } + + var links: Set = [] + if let peripheralUUID = peerToPeripheralUUID[peerID] { + links.insert(.peripheral(peripheralUUID)) + } + for (centralUUID, mappedPeerID) in centralToPeerID where mappedPeerID == peerID { + links.insert(.central(centralUUID)) + } + return links + } + + func peerID(forPeripheralID peripheralID: String) -> PeerID? { + peripherals[peripheralID]?.peerID + } + + func peerID(forCentralUUID centralUUID: String) -> PeerID? { + centralToPeerID[centralUUID] + } + + func addSubscribedCentral(_ central: CBCentral) { + guard !subscribedCentrals.contains(central) else { return } + subscribedCentrals.append(central) + } + + func removeSubscribedCentral(_ central: CBCentral) -> PeerID? { + let centralUUID = central.identifier.uuidString + subscribedCentrals.removeAll { $0.identifier == central.identifier } + return centralToPeerID.removeValue(forKey: centralUUID) + } + + func bindCentral(_ centralUUID: String, to peerID: PeerID) { + centralToPeerID[centralUUID] = peerID + } + + func bindPeripheral(_ peripheralUUID: String, to peerID: PeerID) { + if updatePeripheral(peripheralUUID, { $0.peerID = peerID }) != nil { + peerToPeripheralUUID[peerID] = peripheralUUID + } + } + + func removePeripheral(_ peripheralID: String) -> PeerID? { + let peerID = peripherals.removeValue(forKey: peripheralID)?.peerID + if let peerID { + peerToPeripheralUUID.removeValue(forKey: peerID) + } + return peerID + } + + func clearPeripherals() -> [PeerID] { + let peerIDs = peripherals.compactMap { $0.value.peerID } + peripherals.removeAll() + peerToPeripheralUUID.removeAll() + return peerIDs + } + + func clearCentrals() -> [PeerID] { + let peerIDs = Array(centralToPeerID.values) + subscribedCentrals.removeAll() + centralToPeerID.removeAll() + return peerIDs + } + + func clearAll() { + peripherals.removeAll() + peerToPeripheralUUID.removeAll() + subscribedCentrals.removeAll() + centralToPeerID.removeAll() + } +} diff --git a/bitchat/Services/BLE/BLEService.swift b/bitchat/Services/BLE/BLEService.swift index c10bcf02..5460a63d 100644 --- a/bitchat/Services/BLE/BLEService.swift +++ b/bitchat/Services/BLE/BLEService.swift @@ -34,23 +34,9 @@ final class BLEService: NSObject { private let highDegreeThreshold = TransportConfig.bleHighDegreeThreshold // for adaptive TTL/probabilistic relays // MARK: - Core State (5 Essential Collections) - - // 1. Consolidated Peripheral Tracking - private struct PeripheralState { - let peripheral: CBPeripheral - var characteristic: CBCharacteristic? - var peerID: PeerID? - var isConnecting: Bool = false - var isConnected: Bool = false - var lastConnectionAttempt: Date? = nil - var assembler = NotificationStreamAssembler() - } - private var peripherals: [String: PeripheralState] = [:] // UUID -> PeripheralState - private var peerToPeripheralUUID: [PeerID: String] = [:] // PeerID -> Peripheral UUID - - // 2. BLE Centrals (when acting as peripheral) - private var subscribedCentrals: [CBCentral] = [] - private var centralToPeerID: [String: PeerID] = [:] // Central UUID -> Peer ID mapping + + // 1. Consolidated BLE link tracking for both central and peripheral roles. + private var linkStateStore = BLELinkStateStore() // BCH-01-004: Rate-limiting for subscription-triggered announces // Tracks subscription attempts per central to prevent enumeration attacks @@ -85,8 +71,6 @@ final class BLEService: NSObject { private var fragmentAssemblyBuffer = BLEFragmentAssemblyBuffer() private var outboundFragmentTransfers = BLEOutboundFragmentTransferScheduler() private let incomingFileStore = BLEIncomingFileStore() - // Backoff for peripherals that recently timed out connecting - private var recentConnectTimeouts: [String: Date] = [:] // Peripheral UUID -> last timeout // Simple announce throttling private var lastAnnounceSent = Date.distantPast @@ -156,20 +140,7 @@ final class BLEService: NSObject { private var maintenanceCounter = 0 // Track maintenance cycles // MARK: - Connection budget & scheduling (central role) - private let maxCentralLinks = TransportConfig.bleMaxCentralLinks - private let connectRateLimitInterval: TimeInterval = TransportConfig.bleConnectRateLimitInterval - private var lastGlobalConnectAttempt: Date = .distantPast - private struct ConnectionCandidate { - let peripheral: CBPeripheral - let rssi: Int - let name: String - let isConnectable: Bool - let discoveredAt: Date - } - private var connectionCandidates: [ConnectionCandidate] = [] - private var failureCounts: [String: Int] = [:] // Peripheral UUID -> failures - private var lastIsolatedAt: Date? = nil - private var dynamicRSSIThreshold: Int = TransportConfig.bleDynamicRSSIThresholdDefault + private var connectionScheduler = BLEConnectionScheduler() // MARK: - Adaptive scanning duty-cycle private var scanDutyTimer: DispatchSourceTimer? @@ -348,7 +319,7 @@ final class BLEService: NSObject { bleQueue.sync { pendingWriteBuffers.removeAll() - recentConnectTimeouts.removeAll() + connectionScheduler.reset() } recentDisconnectNotifies.removeAll() @@ -506,7 +477,7 @@ final class BLEService: NSObject { // Snapshot BLE state under bleQueue to avoid races with delegate callbacks let (peripheralStates, centralsCount, char) = bleQueue.sync { - (Array(peripherals.values), subscribedCentrals.count, characteristic) + (linkStateStore.peripheralStates, linkStateStore.subscribedCentralCount, characteristic) } // Send to peripherals we're connected to as central @@ -543,7 +514,7 @@ final class BLEService: NSObject { peripheralManager?.stopAdvertising() // Disconnect all peripherals (synchronized access) - let peripheralsToDisconnect = bleQueue.sync { Array(peripherals.values) } + let peripheralsToDisconnect = bleQueue.sync { linkStateStore.peripheralStates } for state in peripheralsToDisconnect { centralManager?.cancelPeripheralConnection(state.peripheral) } @@ -573,10 +544,8 @@ final class BLEService: NSObject { // Clear peripheral references (synchronized access to avoid races with BLE callbacks) bleQueue.sync { - peripherals.removeAll() - peerToPeripheralUUID.removeAll() - subscribedCentrals.removeAll() - centralToPeerID.removeAll() + linkStateStore.clearAll() + connectionScheduler.reset() centralSubscriptionRateLimits.removeAll() } meshTopology.reset() @@ -888,16 +857,8 @@ final class BLEService: NSObject { let outboundPriority = BLEOutboundPacketPolicy.priority(for: packet, data: data) // Per-link limits for the specific peer - let directPeripheralState: PeripheralState? = { - if DispatchQueue.getSpecific(key: bleQueueKey) != nil { - return peerToPeripheralUUID[recipientPeerID].flatMap { peripherals[$0] } - } - return bleQueue.sync { - peerToPeripheralUUID[recipientPeerID].flatMap { peripherals[$0] } - } - }() - let (centrals, mapping) = snapshotSubscribedCentrals() - let recipientCentral = centrals.first { mapping[$0.identifier.uuidString] == recipientPeerID } + let directPeripheralState = snapshotDirectPeripheralState(for: recipientPeerID) + let recipientCentral = snapshotSubscribedCentrals().central(for: recipientPeerID) if let peripheralMaxLen = directPeripheralState?.peripheral.maximumWriteValueLength(for: .withoutResponse), data.count > peripheralMaxLen { @@ -987,7 +948,7 @@ final class BLEService: NSObject { let m = s.peripheral.maximumWriteValueLength(for: .withoutResponse) minCentralWriteLen = minCentralWriteLen.map { min($0, m) } ?? m } - let subscribedCentrals = characteristic == nil ? [] : snapshotSubscribedCentrals().0 + let subscribedCentrals = characteristic == nil ? [] : snapshotSubscribedCentrals().centrals let minNotifyLen = subscribedCentrals.map { $0.maximumUpdateValueLength }.min() // Avoid re-fragmenting fragment packets @@ -1378,14 +1339,14 @@ extension BLEService: CBCentralManagerDelegate { for peripheral in restoredPeripherals { let identifier = peripheral.identifier.uuidString peripheral.delegate = self - let existing = peripherals[identifier] + let existing = linkStateStore.state(forPeripheralID: identifier) let assembler = existing?.assembler ?? NotificationStreamAssembler() let characteristic = existing?.characteristic let peerID = existing?.peerID let wasConnecting = existing?.isConnecting ?? false let wasConnected = existing?.isConnected ?? false - let restoredState = PeripheralState( + let restoredState = BLEPeripheralLinkState( peripheral: peripheral, characteristic: characteristic, peerID: peerID, @@ -1394,7 +1355,7 @@ extension BLEService: CBCentralManagerDelegate { lastConnectionAttempt: existing?.lastConnectionAttempt, assembler: assembler ) - peripherals[identifier] = restoredState + linkStateStore.setPeripheralState(restoredState, for: identifier) } captureBluetoothStatus(context: "central-restore") @@ -1418,12 +1379,12 @@ extension BLEService: CBCentralManagerDelegate { SecureLogger.info("📴 Bluetooth powered off - cleaning up central state", category: .session) central.stopScan() // Mark all peripheral connections as disconnected (they are now invalid) - let peerIDs: [PeerID] = peripherals.compactMap { $0.value.peerID } - for state in peripherals.values { + let peripheralStates = linkStateStore.peripheralStates + let peerIDs: [PeerID] = peripheralStates.compactMap(\.peerID) + for state in peripheralStates { central.cancelPeripheralConnection(state.peripheral) } - peripherals.removeAll() - peerToPeripheralUUID.removeAll() + _ = linkStateStore.clearPeripherals() // Notify UI of disconnections for peerID in peerIDs { notifyUI { [weak self] in @@ -1435,8 +1396,7 @@ extension BLEService: CBCentralManagerDelegate { // User denied Bluetooth permission SecureLogger.warning("🚫 Bluetooth unauthorized - user denied permission", category: .session) central.stopScan() - peripherals.removeAll() - peerToPeripheralUUID.removeAll() + _ = linkStateStore.clearPeripherals() case .unsupported: // Device doesn't support BLE @@ -1481,160 +1441,47 @@ extension BLEService: CBCentralManagerDelegate { let advertisedName = advertisementData[CBAdvertisementDataLocalNameKey] as? String ?? (peripheralID.prefix(6) + "…") let isConnectable = (advertisementData[CBAdvertisementDataIsConnectable] as? NSNumber)?.boolValue ?? true let rssiValue = RSSI.intValue - - // Skip if peripheral is not connectable (per advertisement data) - guard isConnectable else { return } - // Skip immediate connect if signal too weak for current conditions; enqueue instead - if rssiValue <= dynamicRSSIThreshold { - connectionCandidates.append(ConnectionCandidate(peripheral: peripheral, rssi: rssiValue, name: String(advertisedName), isConnectable: isConnectable, discoveredAt: Date())) - // Keep list tidy - connectionCandidates.sort { (a, b) in - if a.rssi != b.rssi { return a.rssi > b.rssi } - return a.discoveredAt < b.discoveredAt - } - if connectionCandidates.count > TransportConfig.bleConnectionCandidatesMax { - connectionCandidates.removeLast(connectionCandidates.count - TransportConfig.bleConnectionCandidatesMax) - } - return - } - - // Budget: limit simultaneous central links (connected + connecting) - let currentCentralLinks = peripherals.values.filter { $0.isConnected || $0.isConnecting }.count - if currentCentralLinks >= maxCentralLinks { - // Enqueue as candidate; we'll attempt later as slots open - connectionCandidates.append(ConnectionCandidate(peripheral: peripheral, rssi: rssiValue, name: String(advertisedName), isConnectable: isConnectable, discoveredAt: Date())) - // Keep candidate list tidy: prefer stronger RSSI, then recency; cap list - connectionCandidates.sort { (a, b) in - if a.rssi != b.rssi { return a.rssi > b.rssi } - return a.discoveredAt < b.discoveredAt - } - if connectionCandidates.count > TransportConfig.bleConnectionCandidatesMax { - connectionCandidates.removeLast(connectionCandidates.count - TransportConfig.bleConnectionCandidatesMax) - } - return - } + let candidate = BLEConnectionCandidate( + peripheral: peripheral, + peripheralID: peripheralID, + rssi: rssiValue, + name: String(advertisedName), + isConnectable: isConnectable, + discoveredAt: Date() + ) + let existingState = linkStateStore.state(forPeripheralID: peripheralID).map(BLEExistingConnectionState.init) - // Rate limit global connect attempts - let sinceLast = Date().timeIntervalSince(lastGlobalConnectAttempt) - if sinceLast < connectRateLimitInterval { - connectionCandidates.append(ConnectionCandidate(peripheral: peripheral, rssi: rssiValue, name: String(advertisedName), isConnectable: isConnectable, discoveredAt: Date())) - connectionCandidates.sort { (a, b) in - if a.rssi != b.rssi { return a.rssi > b.rssi } - return a.discoveredAt < b.discoveredAt - } - // Schedule a deferred attempt after rate-limit interval - let delay = connectRateLimitInterval - sinceLast + 0.05 + switch connectionScheduler.handleDiscovery( + candidate, + connectedOrConnectingCount: linkStateStore.connectedOrConnectingPeripheralCount, + existingState: existingState, + peripheralState: peripheral.state.connectionSchedulerState, + now: candidate.discoveredAt + ) { + case .ignore, .queued: + return + case .scheduleRetry(let delay): bleQueue.asyncAfter(deadline: .now() + delay) { [weak self] in self?.tryConnectFromQueue() } return - } - - // Check if we already have this peripheral - if let state = peripherals[peripheralID] { - if state.isConnected || state.isConnecting { - return // Already connected or connecting - } - - // Add backoff for reconnection attempts - if let lastAttempt = state.lastConnectionAttempt { - let timeSinceLastAttempt = Date().timeIntervalSince(lastAttempt) - if timeSinceLastAttempt < 2.0 { - return // Wait at least 2 seconds between connection attempts - } - } - } - - // Backoff if this peripheral recently timed out connection within the last 15 seconds - if let lastTimeout = recentConnectTimeouts[peripheralID], Date().timeIntervalSince(lastTimeout) < 15 { - return - } - - // Check peripheral state - but cancel if stale - if peripheral.state == .connecting || peripheral.state == .connected { - // iOS might have stale state - force disconnect and retry + case .cancelStaleConnection: central.cancelPeripheralConnection(peripheral) - // Will retry on next discovery return - } - - // Only log when we're actually attempting connection - // Discovered BLE peripheral - - // Store the peripheral and mark as connecting - peripherals[peripheralID] = PeripheralState( - peripheral: peripheral, - characteristic: nil, - peerID: nil, - isConnecting: true, - isConnected: false, - lastConnectionAttempt: Date(), - assembler: NotificationStreamAssembler() - ) - peripheral.delegate = self - - // Connect to the peripheral with options for faster connection - SecureLogger.debug("📱 Connect: \(advertisedName) [RSSI:\(rssiValue)]", category: .session) - - // Use connection options for faster reconnection - let options: [String: Any] = [ - CBConnectPeripheralOptionNotifyOnConnectionKey: true, - CBConnectPeripheralOptionNotifyOnDisconnectionKey: true, - CBConnectPeripheralOptionNotifyOnNotificationKey: true - ] - central.connect(peripheral, options: options) - lastGlobalConnectAttempt = Date() - - // Set a timeout for the connection attempt (slightly longer for reliability) - // Use BLE queue to mutate BLE-related state consistently - bleQueue.asyncAfter(deadline: .now() + TransportConfig.bleConnectTimeoutSeconds) { [weak self] in - guard let self = self, - let state = self.peripherals[peripheralID], - state.isConnecting && !state.isConnected else { return } - - // Double-check actual CBPeripheral state to avoid canceling a just-connected peripheral - // This prevents a race where connection completes just as timeout fires - guard peripheral.state != .connected else { - SecureLogger.debug("⏱️ Timeout fired but peripheral already connected: \(advertisedName)", category: .session) - return - } - - // Connection timed out - cancel it - SecureLogger.debug("⏱️ Timeout: \(advertisedName)", category: .session) - central.cancelPeripheralConnection(peripheral) - self.peripherals[peripheralID] = nil - self.recentConnectTimeouts[peripheralID] = Date() - self.failureCounts[peripheralID, default: 0] += 1 - // Try next candidate if any - self.tryConnectFromQueue() + case .connectNow: + beginCentralConnection(candidate, using: central, logPrefix: "📱 Connect") } } -func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) { + func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) { let peripheralID = peripheral.identifier.uuidString // Update state to connected - if var state = peripherals[peripheralID] { - state.isConnecting = false - state.isConnected = true - peripherals[peripheralID] = state - } else { - // Create new state if not found - peripherals[peripheralID] = PeripheralState( - peripheral: peripheral, - characteristic: nil, - peerID: nil, - isConnecting: false, - isConnected: true, - lastConnectionAttempt: nil, - assembler: NotificationStreamAssembler() - ) - } + linkStateStore.markConnected(peripheral) // Reset backoff state on success - failureCounts[peripheralID] = 0 - recentConnectTimeouts.removeValue(forKey: peripheralID) + connectionScheduler.recordConnectionSuccess(peripheralID: peripheralID) SecureLogger.debug("✅ Connected: \(peripheral.name ?? "Unknown") [\(peripheralID)]", category: .session) @@ -1646,22 +1493,18 @@ func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeriph let peripheralID = peripheral.identifier.uuidString // Find the peer ID if we have it - let peerID = peripherals[peripheralID]?.peerID + let peerID = linkStateStore.peerID(forPeripheralID: peripheralID) SecureLogger.debug("📱 Disconnect: \(peerID?.id ?? peripheralID)\(error != nil ? " (\(error!.localizedDescription))" : "")", category: .session) // If disconnect carried an error (often timeout), apply short backoff to avoid thrash if error != nil { - recentConnectTimeouts[peripheralID] = Date() + connectionScheduler.recordDisconnectError(peripheralID: peripheralID, at: Date()) } - // Clean up references - peripherals.removeValue(forKey: peripheralID) - - // Clean up peer mappings + // Clean up references and peer mappings + _ = linkStateStore.removePeripheral(peripheralID) if let peerID { - peerToPeripheralUUID.removeValue(forKey: peerID) - // Do not remove peer; mark as not connected but retain for reachability collectionsQueue.sync(flags: .barrier) { if var info = peers[peerID] { @@ -1703,74 +1546,72 @@ func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeriph let peripheralID = peripheral.identifier.uuidString // Clean up the references - peripherals.removeValue(forKey: peripheralID) + _ = linkStateStore.removePeripheral(peripheralID) SecureLogger.error("❌ Failed to connect to peripheral: \(peripheral.name ?? "Unknown") [\(peripheralID)] - Error: \(error?.localizedDescription ?? "Unknown")", category: .session) - failureCounts[peripheralID, default: 0] += 1 + connectionScheduler.recordConnectionFailure(peripheralID: peripheralID) // Try next candidate bleQueue.async { [weak self] in self?.tryConnectFromQueue() } } } // MARK: - Connection scheduling helpers +private extension BLEExistingConnectionState { + init(_ state: BLEPeripheralLinkState) { + self.init( + isConnecting: state.isConnecting, + isConnected: state.isConnected, + lastConnectionAttempt: state.lastConnectionAttempt + ) + } +} + +private extension CBPeripheralState { + var connectionSchedulerState: BLEPeripheralConnectionState { + switch self { + case .connected: + return .connected + case .connecting: + return .connecting + case .disconnected, .disconnecting: + return .disconnected + @unknown default: + return .disconnected + } + } +} + extension BLEService { private func tryConnectFromQueue() { guard let central = centralManager, central.state == .poweredOn else { return } - // Check budget and rate limit - let current = peripherals.values.filter { $0.isConnected || $0.isConnecting }.count - guard current < maxCentralLinks else { return } - let delta = Date().timeIntervalSince(lastGlobalConnectAttempt) - guard delta >= connectRateLimitInterval else { - let delay = connectRateLimitInterval - delta + 0.05 - bleQueue.asyncAfter(deadline: .now() + delay) { [weak self] in self?.tryConnectFromQueue() } - return - } - // Pull best candidate by composite score - guard !connectionCandidates.isEmpty else { return } - // compute score: connectable> RSSI > recency, with backoff penalty - func score(_ c: ConnectionCandidate) -> Int { - let uuid = c.peripheral.identifier.uuidString - // Penalty if recently timed out (exponential) - let fails = failureCounts[uuid] ?? 0 - let penalty = min(20, (1 << min(4, fails))) // 1,2,4,8,16 cap 16-20 - let timeoutRecent = recentConnectTimeouts[uuid] - let timeoutBias = (timeoutRecent != nil && Date().timeIntervalSince(timeoutRecent!) < 60) ? 10 : 0 - let base = (c.isConnectable ? 1000 : 0) + (c.rssi + 100) * 2 - let rec = -Int(Date().timeIntervalSince(c.discoveredAt) * 10) - return base + rec - penalty - timeoutBias - } - connectionCandidates.sort { score($0) > score($1) } - let candidate = connectionCandidates.removeFirst() - guard candidate.isConnectable else { return } - let peripheral = candidate.peripheral - let peripheralID = peripheral.identifier.uuidString - // Weak-link cooldown: if we recently timed out and RSSI is very weak, delay retries - if let lastTO = recentConnectTimeouts[peripheralID] { - let elapsed = Date().timeIntervalSince(lastTO) - if elapsed < TransportConfig.bleWeakLinkCooldownSeconds && candidate.rssi <= TransportConfig.bleWeakLinkRSSICutoff { - // Requeue the candidate and try again later - connectionCandidates.append(candidate) - let remaining = TransportConfig.bleWeakLinkCooldownSeconds - elapsed - let delay = min(max(2.0, remaining), 15.0) - bleQueue.asyncAfter(deadline: .now() + delay) { [weak self] in self?.tryConnectFromQueue() } - return - } - } - if peripherals[peripheralID]?.isConnected == true || peripherals[peripheralID]?.isConnecting == true { - // Already in progress; skip - bleQueue.async { [weak self] in self?.tryConnectFromQueue() } - return - } - // Initiate connection - peripherals[peripheralID] = PeripheralState( - peripheral: peripheral, - characteristic: nil, - peerID: nil, - isConnecting: true, - isConnected: false, - lastConnectionAttempt: Date(), - assembler: NotificationStreamAssembler() + + let decision = connectionScheduler.nextCandidate( + connectedOrConnectingCount: linkStateStore.connectedOrConnectingPeripheralCount, + isAlreadyConnectingOrConnected: { [linkStateStore] peripheralID in + let state = linkStateStore.state(forPeripheralID: peripheralID) + return state?.isConnected == true || state?.isConnecting == true + }, + now: Date() ) + + switch decision { + case .none: + return + case .retryAfter(let delay): + bleQueue.asyncAfter(deadline: .now() + delay) { [weak self] in self?.tryConnectFromQueue() } + case .connect(let candidate): + beginCentralConnection(candidate, using: central, logPrefix: "⏩ Queue connect") + } + } + + private func beginCentralConnection( + _ candidate: BLEConnectionCandidate, + using central: CBCentralManager, + logPrefix: String + ) { + let peripheral = candidate.peripheral + let peripheralID = candidate.peripheralID + linkStateStore.beginConnecting(to: peripheral, at: Date()) peripheral.delegate = self let options: [String: Any] = [ CBConnectPeripheralOptionNotifyOnConnectionKey: true, @@ -1778,8 +1619,25 @@ extension BLEService { CBConnectPeripheralOptionNotifyOnNotificationKey: true ] central.connect(peripheral, options: options) - lastGlobalConnectAttempt = Date() - SecureLogger.debug("⏩ Queue connect: \(candidate.name) [RSSI:\(candidate.rssi)]", category: .session) + connectionScheduler.recordConnectionAttempt(at: Date()) + SecureLogger.debug("\(logPrefix): \(candidate.name) [RSSI:\(candidate.rssi)]", category: .session) + + bleQueue.asyncAfter(deadline: .now() + TransportConfig.bleConnectTimeoutSeconds) { [weak self] in + guard let self = self, + let state = self.linkStateStore.state(forPeripheralID: peripheralID), + state.isConnecting && !state.isConnected else { return } + + guard peripheral.state != .connected else { + SecureLogger.debug("⏱️ Timeout fired but peripheral already connected: \(candidate.name)", category: .session) + return + } + + SecureLogger.debug("⏱️ Timeout: \(candidate.name)", category: .session) + central.cancelPeripheralConnection(peripheral) + _ = self.linkStateStore.removePeripheral(peripheralID) + self.connectionScheduler.recordConnectionTimeout(peripheralID: peripheralID, at: Date()) + self.tryConnectFromQueue() + } } } @@ -1906,10 +1764,7 @@ extension BLEService: CBPeripheralDelegate { // Store characteristic in our consolidated structure let peripheralID = peripheral.identifier.uuidString - if var state = peripherals[peripheralID] { - state.characteristic = characteristic - peripherals[peripheralID] = state - } + linkStateStore.updateCharacteristic(characteristic, forPeripheralID: peripheralID) // Subscribe for notifications if characteristic.properties.contains(.notify) { @@ -1944,7 +1799,7 @@ extension BLEService: CBPeripheralDelegate { private func bufferNotificationChunk(_ chunk: Data, from peripheral: CBPeripheral) { let peripheralUUID = peripheral.identifier.uuidString - var state = peripherals[peripheralUUID] ?? PeripheralState( + var state = linkStateStore.state(forPeripheralID: peripheralUUID) ?? BLEPeripheralLinkState( peripheral: peripheral, characteristic: nil, peerID: nil, @@ -1957,7 +1812,7 @@ extension BLEService: CBPeripheralDelegate { var assembler = state.assembler let result = assembler.append(chunk) state.assembler = assembler - peripherals[peripheralUUID] = state + linkStateStore.setPeripheralState(state, for: peripheralUUID) for byte in result.droppedPrefixes { SecureLogger.warning("⚠️ Dropping byte from BLE stream (unexpected prefix \(String(format: "%02x", byte)))", category: .session) @@ -1969,7 +1824,7 @@ extension BLEService: CBPeripheralDelegate { // Codex review identified TOCTOU in this patch. // Enforce per-link sender binding immediately within the same notification batch. - // NOTE: `processNotificationPacket` may bind `peripherals[peripheralUUID].peerID` when an announce + // NOTE: `processNotificationPacket` may bind the stored peer ID when an announce // is processed, but `state` above is a snapshot. Track a local binding that we update as soon as // we see a binding-eligible announce so subsequent frames can't spoof a different sender. var boundPeerID: PeerID? = state.peerID @@ -2001,7 +1856,7 @@ extension BLEService: CBPeripheralDelegate { packet.ttl == messageTTL { boundPeerID = claimedSenderID state.peerID = claimedSenderID - peripherals[peripheralUUID] = state + linkStateStore.bindPeripheral(peripheralUUID, to: claimedSenderID) } if !recordIngressIfNew(packet, link: .peripheral(peripheralUUID), peerID: context.receivedFromPeerID) { @@ -2025,11 +1880,7 @@ extension BLEService: CBPeripheralDelegate { if packet.type == MessageType.announce.rawValue { if packet.ttl == messageTTL { - if var state = peripherals[peripheralUUID] { - state.peerID = senderID - peripherals[peripheralUUID] = state - } - peerToPeripheralUUID[senderID] = peripheralUUID + linkStateStore.bindPeripheral(peripheralUUID, to: senderID) refreshLocalTopology() } @@ -2065,10 +1916,9 @@ extension BLEService: CBPeripheralDelegate { guard shouldRediscover else { return } let peripheralID = peripheral.identifier.uuidString - if var state = peripherals[peripheralID] { - state.characteristic = nil - state.assembler = NotificationStreamAssembler() - peripherals[peripheralID] = state + linkStateStore.updatePeripheral(peripheralID) { + $0.characteristic = nil + $0.assembler = NotificationStreamAssembler() } SecureLogger.debug("🔄 BitChat service changed for \(peripheral.name ?? peripheral.identifier.uuidString), rediscovering", category: .session) @@ -2123,9 +1973,7 @@ extension BLEService: CBPeripheralManagerDelegate { SecureLogger.info("📴 Bluetooth powered off - cleaning up peripheral state", category: .session) peripheral.stopAdvertising() // Clear subscribed centrals (they are now invalid) - let centralPeerIDs = centralToPeerID.values.map { $0 } - subscribedCentrals.removeAll() - centralToPeerID.removeAll() + let centralPeerIDs = linkStateStore.clearCentrals() centralSubscriptionRateLimits.removeAll() characteristic = nil // Notify UI of disconnections @@ -2139,8 +1987,7 @@ extension BLEService: CBPeripheralManagerDelegate { // User denied Bluetooth permission SecureLogger.warning("🚫 Bluetooth unauthorized for peripheral role", category: .session) peripheral.stopAdvertising() - subscribedCentrals.removeAll() - centralToPeerID.removeAll() + _ = linkStateStore.clearCentrals() centralSubscriptionRateLimits.removeAll() characteristic = nil @@ -2204,7 +2051,7 @@ extension BLEService: CBPeripheralManagerDelegate { func peripheralManager(_ peripheral: CBPeripheralManager, central: CBCentral, didSubscribeTo characteristic: CBCharacteristic) { let centralUUID = central.identifier.uuidString SecureLogger.debug("📥 Central subscribed: \(centralUUID.prefix(8))…", category: .session) - subscribedCentrals.append(central) + linkStateStore.addSubscribedCentral(central) // BCH-01-004: Rate-limit subscription-triggered announces to prevent enumeration attacks let now = Date() @@ -2283,7 +2130,7 @@ extension BLEService: CBPeripheralManagerDelegate { func peripheralManager(_ peripheral: CBPeripheralManager, central: CBCentral, didUnsubscribeFrom characteristic: CBCharacteristic) { SecureLogger.debug("📤 Central unsubscribed: \(central.identifier.uuidString.prefix(8))…", category: .session) - subscribedCentrals.removeAll { $0.identifier == central.identifier } + let removedPeerID = linkStateStore.removeSubscribedCentral(central) // Ensure we're still advertising for other devices to find us if peripheral.isAdvertising == false { @@ -2292,8 +2139,7 @@ extension BLEService: CBPeripheralManagerDelegate { } // Find and disconnect the peer associated with this central - let centralUUID = central.identifier.uuidString - if let peerID = centralToPeerID[centralUUID] { + if let peerID = removedPeerID { // Mark peer as not connected; retain for reachability collectionsQueue.sync(flags: .barrier) { if var info = peers[peerID] { @@ -2302,8 +2148,6 @@ extension BLEService: CBPeripheralManagerDelegate { } } - // Clean up mappings - centralToPeerID.removeValue(forKey: centralUUID) refreshLocalTopology() // Update UI immediately @@ -2439,7 +2283,7 @@ extension BLEService: CBPeripheralManagerDelegate { let context = makeIngressPacketContext( for: packet, claimedSenderID: claimedSenderID, - boundPeerID: centralToPeerID[centralUUID], + boundPeerID: linkStateStore.peerID(forCentralUUID: centralUUID), linkDescription: "Central \(centralUUID.prefix(8))…" ) guard let context else { return } @@ -2452,13 +2296,11 @@ extension BLEService: CBPeripheralManagerDelegate { SecureLogger.debug("📦 Decoded (combined) packet type: \(packet.type) from sender: \(claimedSenderID.id.prefix(8))…", category: .session) } - if !subscribedCentrals.contains(central) { - subscribedCentrals.append(central) - } + linkStateStore.addSubscribedCentral(central) if packet.type == MessageType.announce.rawValue, packet.ttl == messageTTL { - centralToPeerID[centralUUID] = claimedSenderID + linkStateStore.bindCentral(centralUUID, to: claimedSenderID) refreshLocalTopology() } @@ -2537,7 +2379,7 @@ extension BLEService { ( connected: peers.values.filter { $0.isConnected }.count, known: peers.count, - candidates: connectionCandidates.count + candidates: connectionScheduler.candidateCount ) } @@ -2662,39 +2504,12 @@ extension BLEService { /// Safely fetch the current direct-link state for a peer using the BLE queue. private func linkState(for peerID: PeerID) -> (hasPeripheral: Bool, hasCentral: Bool) { - let computeState = { () -> (Bool, Bool) in - let peripheralUUID = self.peerToPeripheralUUID[peerID] - let hasPeripheral = peripheralUUID.flatMap { self.peripherals[$0]?.isConnected } ?? false - let hasCentral = self.centralToPeerID.values.contains(peerID) - return (hasPeripheral, hasCentral) - } - - if DispatchQueue.getSpecific(key: bleQueueKey) != nil { - return computeState() - } else { - return bleQueue.sync { computeState() } - } + let state = readLinkState { $0.directLinkState(for: peerID) } + return (state.hasPeripheral, state.hasCentral) } private func links(to peerID: PeerID?) -> Set { - guard let peerID else { return [] } - - let computeLinks = { () -> Set in - var links: Set = [] - if let peripheralUUID = self.peerToPeripheralUUID[peerID] { - links.insert(.peripheral(peripheralUUID)) - } - for (centralUUID, mappedPeerID) in self.centralToPeerID where mappedPeerID == peerID { - links.insert(.central(centralUUID)) - } - return links - } - - if DispatchQueue.getSpecific(key: bleQueueKey) != nil { - return computeLinks() - } else { - return bleQueue.sync { computeLinks() } - } + readLinkState { $0.links(to: peerID) } } private func configureNoiseServiceCallbacks(for service: NoiseEncryptionService) { @@ -2751,20 +2566,25 @@ extension BLEService { } // MARK: Link capability snapshots (thread-safe via bleQueue) - - private func snapshotPeripheralStates() -> [PeripheralState] { + + private func readLinkState(_ body: (BLELinkStateStore) -> T) -> T { if DispatchQueue.getSpecific(key: bleQueueKey) != nil { - return Array(peripherals.values) + return body(linkStateStore) } else { - return bleQueue.sync { Array(peripherals.values) } + return bleQueue.sync { body(linkStateStore) } } } - private func snapshotSubscribedCentrals() -> ([CBCentral], [String: PeerID]) { - if DispatchQueue.getSpecific(key: bleQueueKey) != nil { - return (self.subscribedCentrals, self.centralToPeerID) - } else { - return bleQueue.sync { (self.subscribedCentrals, self.centralToPeerID) } - } + + private func snapshotDirectPeripheralState(for peerID: PeerID) -> BLEPeripheralLinkState? { + readLinkState { $0.directPeripheralState(for: peerID) } + } + + private func snapshotPeripheralStates() -> [BLEPeripheralLinkState] { + readLinkState(\.peripheralStates) + } + + private func snapshotSubscribedCentrals() -> BLESubscribedCentralSnapshot { + readLinkState(\.subscribedCentralSnapshot) } // MARK: Helpers: IDs, selection, and write backpressure @@ -2802,7 +2622,7 @@ extension BLEService { let uuid = peripheral.identifier.uuidString bleQueue.async { [weak self] in guard let self = self else { return } - guard let state = self.peripherals[uuid], let ch = state.characteristic else { return } + guard let state = self.linkStateStore.state(forPeripheralID: uuid), let ch = state.characteristic else { return } // Atomically take all pending items from the queue to avoid race conditions // where new items could be enqueued between read and update @@ -2841,7 +2661,7 @@ extension BLEService { private func drainAllPendingWrites() { let uuids = collectionsQueue.sync { pendingPeripheralWrites.peripheralIDs } for uuid in uuids { - guard let state = peripherals[uuid], state.isConnected else { continue } + guard let state = linkStateStore.state(forPeripheralID: uuid), state.isConnected else { continue } drainPendingWrites(for: state.peripheral) } } @@ -4022,7 +3842,7 @@ extension BLEService { // Clean old connection timeout backoff entries (> window) let timeoutCutoff = now.addingTimeInterval(-TransportConfig.bleConnectTimeoutBackoffWindowSeconds) - recentConnectTimeouts = recentConnectTimeouts.filter { $0.value >= timeoutCutoff } + connectionScheduler.pruneConnectionTimeouts(before: timeoutCutoff) // Clean up stale scheduled relays that somehow persisted (> 2s) collectionsQueue.async(flags: .barrier) { [weak self] in @@ -4117,32 +3937,10 @@ extension BLEService { } private func updateRSSIThreshold(connectedCount: Int) { - // Adjust RSSI threshold based on connectivity, candidate pressure, and failures - if connectedCount == 0 { - // Isolated: relax floor slowly to hunt for distant nodes - if lastIsolatedAt == nil { lastIsolatedAt = Date() } - let iso = lastIsolatedAt ?? Date() - let elapsed = Date().timeIntervalSince(iso) - if elapsed > TransportConfig.bleIsolationRelaxThresholdSeconds { - dynamicRSSIThreshold = TransportConfig.bleRSSIIsolatedRelaxed - } else { - dynamicRSSIThreshold = TransportConfig.bleRSSIIsolatedBase - } - return - } - lastIsolatedAt = nil - // Base threshold when connected - var threshold = TransportConfig.bleDynamicRSSIThresholdDefault - // If we're at budget or queue is large, prefer closer peers - let linkCount = peripherals.values.filter { $0.isConnected || $0.isConnecting }.count - if linkCount >= maxCentralLinks || connectionCandidates.count > TransportConfig.bleConnectionCandidatesMax { - threshold = TransportConfig.bleRSSIConnectedThreshold - } - // If we have many recent timeouts, raise further - let recentTimeouts = recentConnectTimeouts.filter { Date().timeIntervalSince($0.value) < TransportConfig.bleRecentTimeoutWindowSeconds }.count - if recentTimeouts >= TransportConfig.bleRecentTimeoutCountThreshold { - threshold = max(threshold, TransportConfig.bleRSSIHighTimeoutThreshold) - } - dynamicRSSIThreshold = threshold + connectionScheduler.updateRSSIThreshold( + connectedCount: connectedCount, + connectedOrConnectingLinkCount: linkStateStore.connectedOrConnectingPeripheralCount, + now: Date() + ) } } diff --git a/bitchatTests/Services/BLEConnectionSchedulerTests.swift b/bitchatTests/Services/BLEConnectionSchedulerTests.swift new file mode 100644 index 00000000..f88588f5 --- /dev/null +++ b/bitchatTests/Services/BLEConnectionSchedulerTests.swift @@ -0,0 +1,156 @@ +import Foundation +import Testing +@testable import bitchat + +struct BLEConnectionSchedulerTests { + @Test + func discoveryQueuesWeakSignalCandidates() { + let scheduler = BLEConnectionScheduler(dynamicRSSIThreshold: -80) + let now = Date() + let candidate = makeCandidate(id: "p1", rssi: -85, now: now) + + let decision = scheduler.handleDiscovery( + candidate, + connectedOrConnectingCount: 0, + existingState: nil, + peripheralState: .disconnected, + now: now + ) + + #expect(decision == .queued) + #expect(scheduler.candidateCount == 1) + } + + @Test + func discoveryQueuesAndSchedulesRetryWhenRateLimited() { + let scheduler = BLEConnectionScheduler(connectRateLimitInterval: 1.0) + let now = Date() + scheduler.recordConnectionAttempt(at: now) + + let decision = scheduler.handleDiscovery( + makeCandidate(id: "p1", rssi: -50, now: now), + connectedOrConnectingCount: 0, + existingState: nil, + peripheralState: .disconnected, + now: now.addingTimeInterval(0.25) + ) + + guard case .scheduleRetry(let delay) = decision else { + Issue.record("Expected scheduleRetry, got \(decision)") + return + } + #expect(delay > 0) + #expect(scheduler.candidateCount == 1) + } + + @Test + func nextCandidateSelectsBestScoredCandidate() { + let scheduler = BLEConnectionScheduler() + let now = Date() + scheduler.enqueue(makeCandidate(id: "weak", rssi: -88, now: now)) + scheduler.enqueue(makeCandidate(id: "strong", rssi: -60, now: now.addingTimeInterval(1))) + + let decision = scheduler.nextCandidate( + connectedOrConnectingCount: 0, + isAlreadyConnectingOrConnected: { _ in false }, + now: now.addingTimeInterval(2) + ) + + guard case .connect(let candidate) = decision else { + Issue.record("Expected connect decision") + return + } + #expect(candidate.peripheralID == "strong") + } + + @Test + func enqueueReplacesExistingPeripheralCandidate() { + let scheduler = BLEConnectionScheduler() + let now = Date() + scheduler.enqueue(makeCandidate(id: "same", rssi: -90, now: now)) + scheduler.enqueue(makeCandidate(id: "same", rssi: -55, now: now.addingTimeInterval(1))) + + let decision = scheduler.nextCandidate( + connectedOrConnectingCount: 0, + isAlreadyConnectingOrConnected: { _ in false }, + now: now.addingTimeInterval(2) + ) + + guard case .connect(let candidate) = decision else { + Issue.record("Expected connect decision") + return + } + #expect(scheduler.candidateCount == 0) + #expect(candidate.peripheralID == "same") + #expect(candidate.rssi == -55) + } + + @Test + func weakTimedOutCandidateIsRequeuedWithRetryDelay() { + let scheduler = BLEConnectionScheduler( + weakLinkCooldownSeconds: 30, + weakLinkRSSICutoff: -90 + ) + let now = Date() + scheduler.recordConnectionTimeout(peripheralID: "weak", at: now) + scheduler.enqueue(makeCandidate(id: "weak", rssi: -95, now: now)) + + let decision = scheduler.nextCandidate( + connectedOrConnectingCount: 0, + isAlreadyConnectingOrConnected: { _ in false }, + now: now.addingTimeInterval(5) + ) + + guard case .retryAfter(let delay) = decision else { + Issue.record("Expected retryAfter decision") + return + } + #expect(delay == 15) + #expect(scheduler.candidateCount == 1) + } + + @Test + func rssiThresholdTightensAfterRepeatedRecentTimeouts() { + let scheduler = BLEConnectionScheduler() + let now = Date() + scheduler.recordConnectionTimeout(peripheralID: "p1", at: now) + scheduler.recordConnectionTimeout(peripheralID: "p2", at: now) + scheduler.recordConnectionTimeout(peripheralID: "p3", at: now) + + let threshold = scheduler.updateRSSIThreshold( + connectedCount: 1, + connectedOrConnectingLinkCount: 1, + now: now.addingTimeInterval(1) + ) + + #expect(threshold == TransportConfig.bleRSSIHighTimeoutThreshold) + #expect(scheduler.dynamicRSSIThreshold == TransportConfig.bleRSSIHighTimeoutThreshold) + } + + @Test + func rssiThresholdTightensWhenCandidateQueueIsFull() { + let scheduler = BLEConnectionScheduler(candidateCap: 2) + let now = Date() + scheduler.enqueue(makeCandidate(id: "p1", rssi: -65, now: now)) + scheduler.enqueue(makeCandidate(id: "p2", rssi: -66, now: now)) + + let threshold = scheduler.updateRSSIThreshold( + connectedCount: 1, + connectedOrConnectingLinkCount: 1, + now: now + ) + + #expect(threshold == TransportConfig.bleRSSIConnectedThreshold) + } +} + +private func makeCandidate(id: String, rssi: Int, now: Date) -> BLEConnectionCandidate { + BLEConnectionCandidate( + peripheral: id, + peripheralID: id, + rssi: rssi, + name: id, + isConnectable: true, + discoveredAt: now + ) +} diff --git a/bitchatTests/Services/BLELinkStateStoreTests.swift b/bitchatTests/Services/BLELinkStateStoreTests.swift new file mode 100644 index 00000000..9a5179df --- /dev/null +++ b/bitchatTests/Services/BLELinkStateStoreTests.swift @@ -0,0 +1,46 @@ +import BitFoundation +import Testing +@testable import bitchat + +struct BLELinkStateStoreTests { + @Test + func centralBindingExposesDirectLinkStateAndLinks() { + let store = BLELinkStateStore() + let peerID = PeerID(str: "1122334455667788") + + store.bindCentral("central-a", to: peerID) + + #expect(store.peerID(forCentralUUID: "central-a") == peerID) + #expect(store.directLinkState(for: peerID) == BLEDirectLinkState(hasPeripheral: false, hasCentral: true)) + #expect(store.links(to: peerID) == [.central("central-a")]) + } + + @Test + func linksReturnsAllCentralBindingsForPeer() { + let store = BLELinkStateStore() + let peerID = PeerID(str: "1122334455667788") + let otherPeerID = PeerID(str: "8899aabbccddeeff") + + store.bindCentral("central-a", to: peerID) + store.bindCentral("central-b", to: peerID) + store.bindCentral("central-c", to: otherPeerID) + + #expect(store.links(to: peerID) == [.central("central-a"), .central("central-b")]) + } + + @Test + func clearCentralsReturnsPreviouslyBoundPeerIDsAndClearsLookups() { + let store = BLELinkStateStore() + let firstPeerID = PeerID(str: "1122334455667788") + let secondPeerID = PeerID(str: "8899aabbccddeeff") + + store.bindCentral("central-a", to: firstPeerID) + store.bindCentral("central-b", to: secondPeerID) + + let removedPeerIDs = Set(store.clearCentrals()) + + #expect(removedPeerIDs == Set([firstPeerID, secondPeerID])) + #expect(store.peerID(forCentralUUID: "central-a") == nil) + #expect(store.links(to: firstPeerID).isEmpty) + } +} From 193cfdc06ac08686058b93fe83da5a184251764d Mon Sep 17 00:00:00 2001 From: jack <212554440+jackjackbits@users.noreply.github.com> Date: Mon, 1 Jun 2026 14:16:44 +0200 Subject: [PATCH 016/216] [codex] Extract BLE service policy helpers (#1321) * Extract BLE service policy helpers * Stabilize image media transfer test --------- Co-authored-by: jack --- .../Services/BLE/BLEIngressPacketGuard.swift | 76 ++ bitchat/Services/BLE/BLELogRateLimiter.swift | 33 + .../BLE/BLEOutboundFragmentPlanner.swift | 137 ++++ bitchat/Services/BLE/BLEPeerRegistry.swift | 211 ++++++ .../BLE/BLEPeerSenderDisplayName.swift | 60 ++ bitchat/Services/BLE/BLEReceivePipeline.swift | 84 +++ bitchat/Services/BLE/BLEService.swift | 702 ++++++------------ .../BLE/BLESubscriptionAnnounceLimiter.swift | 71 ++ .../ChatViewModelExtensionsTests.swift | 2 +- .../Services/BLEIngressPacketGuardTests.swift | 148 ++++ .../Services/BLELogRateLimiterTests.swift | 36 + .../BLEOutboundFragmentPlannerTests.swift | 136 ++++ .../Services/BLEPeerRegistryTests.swift | 111 +++ .../BLEPeerSenderDisplayNameTests.swift | 78 ++ .../Services/BLEReceivePipelineTests.swift | 105 +++ .../BLESubscriptionAnnounceLimiterTests.swift | 61 ++ 16 files changed, 1565 insertions(+), 486 deletions(-) create mode 100644 bitchat/Services/BLE/BLEIngressPacketGuard.swift create mode 100644 bitchat/Services/BLE/BLELogRateLimiter.swift create mode 100644 bitchat/Services/BLE/BLEOutboundFragmentPlanner.swift create mode 100644 bitchat/Services/BLE/BLEPeerRegistry.swift create mode 100644 bitchat/Services/BLE/BLEPeerSenderDisplayName.swift create mode 100644 bitchat/Services/BLE/BLEReceivePipeline.swift create mode 100644 bitchat/Services/BLE/BLESubscriptionAnnounceLimiter.swift create mode 100644 bitchatTests/Services/BLEIngressPacketGuardTests.swift create mode 100644 bitchatTests/Services/BLELogRateLimiterTests.swift create mode 100644 bitchatTests/Services/BLEOutboundFragmentPlannerTests.swift create mode 100644 bitchatTests/Services/BLEPeerRegistryTests.swift create mode 100644 bitchatTests/Services/BLEPeerSenderDisplayNameTests.swift create mode 100644 bitchatTests/Services/BLEReceivePipelineTests.swift create mode 100644 bitchatTests/Services/BLESubscriptionAnnounceLimiterTests.swift diff --git a/bitchat/Services/BLE/BLEIngressPacketGuard.swift b/bitchat/Services/BLE/BLEIngressPacketGuard.swift new file mode 100644 index 00000000..4e4345f2 --- /dev/null +++ b/bitchat/Services/BLE/BLEIngressPacketGuard.swift @@ -0,0 +1,76 @@ +import BitFoundation +import Foundation + +enum BLEIngressPacketGuard { + enum Rejection: Error, Equatable { + case selfLoopback(packetType: UInt8) + case directSenderMismatch(boundPeerID: PeerID, claimedSenderID: PeerID) + case invalidRSR(peerID: PeerID) + case timestampSkew(peerID: PeerID, skewMs: UInt64, maxSkewMs: UInt64) + } + + static func evaluate( + packet: BitchatPacket, + claimedSenderID: PeerID, + boundPeerID: PeerID?, + localPeerID: PeerID, + directAnnounceTTL: UInt8, + nowMs: UInt64 = UInt64(Date().timeIntervalSince1970 * 1000), + maxTimestampSkewMs: UInt64 = 120_000, + isValidSyncResponse: (PeerID) -> Bool + ) -> Result { + let contextResult = BLEIngressLinkRegistry.packetContext( + for: packet, + claimedSenderID: claimedSenderID, + boundPeerID: boundPeerID, + localPeerID: localPeerID, + directAnnounceTTL: directAnnounceTTL + ) + + let context: BLEIngressPacketContext + switch contextResult { + case .success(let acceptedContext): + context = acceptedContext + case .failure(.selfLoopback(let packetType)): + return .failure(.selfLoopback(packetType: packetType)) + case .failure(.directSenderMismatch(let boundPeerID, let claimedSenderID)): + return .failure(.directSenderMismatch(boundPeerID: boundPeerID, claimedSenderID: claimedSenderID)) + } + + switch validatePayload( + packet, + from: context.validationPeerID, + nowMs: nowMs, + maxTimestampSkewMs: maxTimestampSkewMs, + isValidSyncResponse: isValidSyncResponse + ) { + case .success: + return .success(context) + case .failure(let rejection): + return .failure(rejection) + } + } + + static func validatePayload( + _ packet: BitchatPacket, + from peerID: PeerID, + nowMs: UInt64 = UInt64(Date().timeIntervalSince1970 * 1000), + maxTimestampSkewMs: UInt64 = 120_000, + isValidSyncResponse: (PeerID) -> Bool + ) -> Result { + if packet.isRSR { + guard isValidSyncResponse(peerID) else { + return .failure(.invalidRSR(peerID: peerID)) + } + return .success(()) + } + + let packetTime = packet.timestamp + let skew = packetTime > nowMs ? packetTime - nowMs : nowMs - packetTime + guard skew <= maxTimestampSkewMs else { + return .failure(.timestampSkew(peerID: peerID, skewMs: skew, maxSkewMs: maxTimestampSkewMs)) + } + + return .success(()) + } +} diff --git a/bitchat/Services/BLE/BLELogRateLimiter.swift b/bitchat/Services/BLE/BLELogRateLimiter.swift new file mode 100644 index 00000000..65892970 --- /dev/null +++ b/bitchat/Services/BLE/BLELogRateLimiter.swift @@ -0,0 +1,33 @@ +import Foundation + +final class BLELogRateLimiter { + private let defaultMinimumInterval: TimeInterval + private let queue = DispatchQueue(label: "chat.bitchat.ble.log-rate-limiter") + private var lastLogTimeByKey: [String: Date] = [:] + + init(defaultMinimumInterval: TimeInterval) { + self.defaultMinimumInterval = defaultMinimumInterval + } + + func shouldLog( + key: String, + now: Date = Date(), + minimumInterval: TimeInterval? = nil + ) -> Bool { + queue.sync { + let interval = minimumInterval ?? defaultMinimumInterval + if let lastLogTime = lastLogTimeByKey[key], + now.timeIntervalSince(lastLogTime) < interval { + return false + } + lastLogTimeByKey[key] = now + return true + } + } + + func removeAll() { + queue.sync { + lastLogTimeByKey.removeAll() + } + } +} diff --git a/bitchat/Services/BLE/BLEOutboundFragmentPlanner.swift b/bitchat/Services/BLE/BLEOutboundFragmentPlanner.swift new file mode 100644 index 00000000..9623c204 --- /dev/null +++ b/bitchat/Services/BLE/BLEOutboundFragmentPlanner.swift @@ -0,0 +1,137 @@ +import BitFoundation +import Foundation + +struct BLEOutboundFragmentPlan { + let fragmentPackets: [BitchatPacket] + let fragmentVersion: UInt8 + let chunkSize: Int + let spacingMs: Int + + var totalFragments: Int { + fragmentPackets.count + } + + var shouldPauseScanning: Bool { + totalFragments > 4 + } +} + +enum BLEOutboundFragmentPlanner { + private static let minimumChunkSize = 64 + private static let fragmentIDLength = 8 + + static func makePlan( + for request: BLEOutboundFragmentTransferRequest, + defaultChunkSize: Int, + bleMaxMTU: Int, + fragmentID: Data = randomFragmentID() + ) -> BLEOutboundFragmentPlan? { + guard fragmentID.count == fragmentIDLength, + let fullData = request.packet.toBinaryData(padding: request.pad) else { + return nil + } + + let sizing = sizingPolicy( + for: request.packet, + requestedMaxChunk: request.maxChunk, + defaultChunkSize: defaultChunkSize, + bleMaxMTU: bleMaxMTU + ) + + let chunks = stride(from: 0, to: fullData.count, by: sizing.chunkSize).map { offset in + Data(fullData[offset.. (fragmentVersion: UInt8, chunkSize: Int) { + var fragmentVersion: UInt8 = 1 + var calculatedChunk = defaultChunkSize + + if let route = packet.route, !route.isEmpty { + fragmentVersion = 2 + let routeSize = 1 + (route.count * 8) + let overhead = 16 + 8 + 8 + routeSize + 13 + 16 + calculatedChunk = max(minimumChunkSize, bleMaxMTU - overhead) + } + + return ( + fragmentVersion: fragmentVersion, + chunkSize: max(minimumChunkSize, requestedMaxChunk ?? calculatedChunk) + ) + } + + private static func makeFragmentPacket( + original packet: BitchatPacket, + fragmentID: Data, + index: Int, + total: Int, + fragmentData: Data, + fragmentRecipient: Data?, + fragmentVersion: UInt8 + ) -> BitchatPacket { + var payload = Data() + payload.append(fragmentID) + payload.append(contentsOf: withUnsafeBytes(of: UInt16(index).bigEndian) { Data($0) }) + payload.append(contentsOf: withUnsafeBytes(of: UInt16(total).bigEndian) { Data($0) }) + payload.append(packet.type) + payload.append(fragmentData) + + return BitchatPacket( + type: MessageType.fragment.rawValue, + senderID: packet.senderID, + recipientID: fragmentRecipient, + timestamp: packet.timestamp, + payload: payload, + signature: nil, + ttl: packet.ttl, + version: fragmentVersion, + route: packet.route, + isRSR: packet.isRSR + ) + } + + private static func spacingMs(for request: BLEOutboundFragmentTransferRequest) -> Int { + if request.directedPeer != nil || request.packet.recipientID != nil { + return TransportConfig.bleFragmentSpacingDirectedMs + } + + return TransportConfig.bleFragmentSpacingMs + } + + private static func randomFragmentID() -> Data { + Data((0.. BLEPeerInfo? { + peers[peerID] + } + + mutating func upsert(_ info: BLEPeerInfo) { + peers[info.peerID] = info + } + + @discardableResult + mutating func remove(_ peerID: PeerID) -> BLEPeerInfo? { + peers.removeValue(forKey: peerID) + } + + func isConnected(_ peerID: PeerID) -> Bool { + peers[peerID.toShort()]?.isConnected ?? false + } + + func isReachable(_ peerID: PeerID, now: Date) -> Bool { + let shortID = peerID.toShort() + let meshAttached = connectedCount > 0 + guard let info = peers[shortID] else { return false } + if info.isConnected { return true } + guard meshAttached else { return false } + + let retention: TimeInterval = info.isVerifiedNickname + ? TransportConfig.bleReachabilityRetentionVerifiedSeconds + : TransportConfig.bleReachabilityRetentionUnverifiedSeconds + return now.timeIntervalSince(info.lastSeen) <= retention + } + + func nickname(for peerID: PeerID, connectedOnly: Bool) -> String? { + guard let peer = peers[peerID] else { return nil } + if connectedOnly && !peer.isConnected { return nil } + return peer.nickname + } + + func fingerprint(for peerID: PeerID) -> String? { + peers[peerID]?.noisePublicKey?.sha256Fingerprint() + } + + func displayNicknames(selfNickname: String) -> [PeerID: String] { + let connected = peers.filter { $0.value.isConnected } + let tuples = connected.map { ($0.key, $0.value.nickname, true) } + return PeerDisplayNameResolver.resolve(tuples, selfNickname: selfNickname) + } + + func transportSnapshots(selfNickname: String) -> [TransportPeerSnapshot] { + let snapshot = Array(peers.values) + let resolvedNames = PeerDisplayNameResolver.resolve( + snapshot.map { ($0.peerID, $0.nickname, $0.isConnected) }, + selfNickname: selfNickname + ) + return snapshot.map { info in + TransportPeerSnapshot( + peerID: info.peerID, + nickname: resolvedNames[info.peerID] ?? info.nickname, + isConnected: info.isConnected, + noisePublicKey: info.noisePublicKey, + lastSeen: info.lastSeen + ) + } + } + + func collisionResolvedNickname(for peerID: PeerID, selfNickname: String) -> String? { + guard let info = peers[peerID], info.isVerifiedNickname else { return nil } + let hasCollision = peers.values.contains { + $0.isConnected && $0.nickname == info.nickname && $0.peerID != peerID + } || selfNickname == info.nickname + return hasCollision ? info.nickname + "#" + String(peerID.id.prefix(4)) : info.nickname + } + + mutating func markDisconnected(_ peerID: PeerID) { + guard var info = peers[peerID] else { return } + info.isConnected = false + peers[peerID] = info + } + + mutating func updateLastSeen(_ peerID: PeerID, at date: Date) { + guard var peer = peers[peerID] else { return } + peer.lastSeen = date + peers[peerID] = peer + } + + mutating func upsertVerifiedAnnounce( + peerID: PeerID, + nickname: String, + noisePublicKey: Data, + signingPublicKey: Data?, + isConnected: Bool, + now: Date + ) -> BLEPeerAnnounceUpdate { + let existing = peers[peerID] + let update = BLEPeerAnnounceUpdate( + isNewPeer: existing == nil, + wasDisconnected: existing?.isConnected == false, + previousNickname: existing?.nickname + ) + + peers[peerID] = BLEPeerInfo( + peerID: existing?.peerID ?? peerID, + nickname: nickname, + isConnected: isConnected, + noisePublicKey: noisePublicKey, + signingPublicKey: signingPublicKey, + isVerifiedNickname: true, + lastSeen: now + ) + + return update + } + + mutating func reconcileConnectivity( + now: Date, + linkStates: [PeerID: BLEPeerLinkPresence] + ) -> BLEPeerConnectivityChanges { + var changes = BLEPeerConnectivityChanges() + + for (peerID, peer) in Array(peers) { + let age = now.timeIntervalSince(peer.lastSeen) + let retention: TimeInterval = peer.isVerifiedNickname + ? TransportConfig.bleReachabilityRetentionVerifiedSeconds + : TransportConfig.bleReachabilityRetentionUnverifiedSeconds + + if peer.isConnected && age > TransportConfig.blePeerInactivityTimeoutSeconds { + let state = linkStates[peerID] ?? BLEPeerLinkPresence(hasPeripheral: false, hasCentral: false) + if !state.hasPeripheral && !state.hasCentral { + var updated = peer + updated.isConnected = false + peers[peerID] = updated + changes.disconnectedPeerIDs.append(peerID) + } + } + + if !peer.isConnected && age > retention { + peers.removeValue(forKey: peerID) + changes.removedPeers.append(BLERemovedPeer(peerID: peerID, nickname: peer.nickname)) + } + } + + return changes + } +} diff --git a/bitchat/Services/BLE/BLEPeerSenderDisplayName.swift b/bitchat/Services/BLE/BLEPeerSenderDisplayName.swift new file mode 100644 index 00000000..c17d8d7e --- /dev/null +++ b/bitchat/Services/BLE/BLEPeerSenderDisplayName.swift @@ -0,0 +1,60 @@ +import BitFoundation +import Foundation + +enum BLEPeerSenderDisplayName { + static func resolveKnownPeer( + peerID: PeerID, + localPeerID: PeerID, + localNickname: String, + peers: [PeerID: BLEPeerInfo], + allowConnectedUnverified: Bool + ) -> String? { + if peerID == localPeerID { + return localNickname + } + + guard let info = peers[peerID] else { return nil } + + if info.isVerifiedNickname { + return collisionResolvedName( + displayName: info.nickname, + collisionNickname: info.nickname, + peerID: peerID, + localNickname: localNickname, + peers: peers + ) + } + + if allowConnectedUnverified, info.isConnected { + let displayName = info.nickname.isEmpty ? anonymousNickname(for: peerID) : info.nickname + return collisionResolvedName( + displayName: displayName, + collisionNickname: info.nickname, + peerID: peerID, + localNickname: localNickname, + peers: peers + ) + } + + return nil + } + + static func anonymousNickname(for peerID: PeerID) -> String { + "anon" + String(peerID.id.prefix(4)) + } + + private static func collisionResolvedName( + displayName: String, + collisionNickname: String, + peerID: PeerID, + localNickname: String, + peers: [PeerID: BLEPeerInfo] + ) -> String { + let hasCollision = peers.values.contains { + $0.isConnected && $0.nickname == collisionNickname && $0.peerID != peerID + } || localNickname == collisionNickname + + guard hasCollision else { return displayName } + return displayName + "#" + String(peerID.id.prefix(4)) + } +} diff --git a/bitchat/Services/BLE/BLEReceivePipeline.swift b/bitchat/Services/BLE/BLEReceivePipeline.swift new file mode 100644 index 00000000..d8b46119 --- /dev/null +++ b/bitchat/Services/BLE/BLEReceivePipeline.swift @@ -0,0 +1,84 @@ +import BitFoundation +import Foundation + +struct BLEReceivedPacketContext: Equatable { + let senderID: PeerID + let messageID: String + let messageType: MessageType? + let shouldDeduplicate: Bool + let logsHandlingDetails: Bool +} + +struct BLEReceivePipeline { + static func context(for packet: BitchatPacket, localPeerID: PeerID) -> BLEReceivedPacketContext { + let senderID = PeerID(hexData: packet.senderID) + let messageID = "\(senderID)-\(packet.timestamp)-\(packet.type)" + let messageType = MessageType(rawValue: packet.type) + let allowSelfSyncReplay = packet.ttl == 0 && senderID == localPeerID + let shouldDeduplicate = messageType != .fragment && !allowSelfSyncReplay + + return BLEReceivedPacketContext( + senderID: senderID, + messageID: messageID, + messageType: messageType, + shouldDeduplicate: shouldDeduplicate, + logsHandlingDetails: messageType != .announce + ) + } + + static func shouldCancelScheduledRelayForDuplicate(connectedPeerCount: Int) -> Bool { + connectedPeerCount > 2 + } + + static func relayDecision( + for packet: BitchatPacket, + senderID: PeerID, + localPeerID: PeerID, + degree: Int, + highDegreeThreshold: Int + ) -> RelayDecision { + RelayController.decide( + ttl: packet.ttl, + senderIsSelf: senderID == localPeerID, + recipientIsSelf: PeerID(hexData: packet.recipientID) == localPeerID, + isEncrypted: packet.type == MessageType.noiseEncrypted.rawValue, + isDirectedEncrypted: packet.type == MessageType.noiseEncrypted.rawValue && packet.recipientID != nil, + isFragment: packet.type == MessageType.fragment.rawValue, + isDirectedFragment: packet.type == MessageType.fragment.rawValue && packet.recipientID != nil, + isHandshake: packet.type == MessageType.noiseHandshake.rawValue, + isAnnounce: packet.type == MessageType.announce.rawValue, + degree: degree, + highDegreeThreshold: highDegreeThreshold + ) + } +} + +struct BLERecentTrafficTracker: Equatable { + private var packetTimestamps: [Date] = [] + + var count: Int { + packetTimestamps.count + } + + mutating func removeAll() { + packetTimestamps.removeAll() + } + + mutating func recordPacket(at now: Date) { + packetTimestamps.append(now) + prune(at: now) + } + + func hasTraffic(within seconds: TimeInterval, now: Date) -> Bool { + let cutoff = now.addingTimeInterval(-seconds) + return packetTimestamps.contains { $0 >= cutoff } + } + + private mutating func prune(at now: Date) { + let cutoff = now.addingTimeInterval(-TransportConfig.bleRecentPacketWindowSeconds) + if packetTimestamps.count > TransportConfig.bleRecentPacketWindowMaxCount { + packetTimestamps.removeFirst(packetTimestamps.count - TransportConfig.bleRecentPacketWindowMaxCount) + } + packetTimestamps.removeAll { $0 < cutoff } + } +} diff --git a/bitchat/Services/BLE/BLEService.swift b/bitchat/Services/BLE/BLEService.swift index 5460a63d..5c79448a 100644 --- a/bitchat/Services/BLE/BLEService.swift +++ b/bitchat/Services/BLE/BLEService.swift @@ -38,29 +38,11 @@ final class BLEService: NSObject { // 1. Consolidated BLE link tracking for both central and peripheral roles. private var linkStateStore = BLELinkStateStore() - // BCH-01-004: Rate-limiting for subscription-triggered announces - // Tracks subscription attempts per central to prevent enumeration attacks - private struct SubscriptionRateLimitState { - var lastAnnounceTime: Date - var attemptCount: Int - var currentBackoffSeconds: TimeInterval - } - private var centralSubscriptionRateLimits: [String: SubscriptionRateLimitState] = [:] // Central UUID -> rate limit state + // BCH-01-004: Rate-limiting for subscription-triggered announces. + private var subscriptionAnnounceLimiter = BLESubscriptionAnnounceLimiter() // 3. Peer Information (single source of truth) - private struct PeerInfo { - let peerID: PeerID - var nickname: String - var isConnected: Bool - var noisePublicKey: Data? - var signingPublicKey: Data? - var isVerifiedNickname: Bool - var lastSeen: Date - } - private var peers: [PeerID: PeerInfo] = [:] - private var currentPeerIDs: [PeerID] { - Array(peers.keys) - } + private var peerRegistry = BLEPeerRegistry() // 4. Efficient Message Deduplication private let messageDeduplicator = MessageDeduplicator() @@ -116,10 +98,11 @@ final class BLEService: NSObject { // Relay jitter scheduling to reduce redundant floods private var scheduledRelays: [String: DispatchWorkItem] = [:] // Track short-lived traffic bursts to adapt announces/scanning under load - private var recentPacketTimestamps: [Date] = [] + private var recentTrafficTracker = BLERecentTrafficTracker() // Ingress link tracking for duplicate and last-hop suppression private var ingressLinks = BLEIngressLinkRegistry() + private let logRateLimiter = BLELogRateLimiter(defaultMinimumInterval: 5) private var pendingPeripheralWrites = BLEOutboundWriteBuffer() // Debounce duplicate disconnect notifies @@ -306,7 +289,7 @@ final class BLEService: NSObject { fragmentAssemblyBuffer.removeAll() pendingDirectedRelays.removeAll() ingressLinks.removeAll() - recentPacketTimestamps.removeAll() + recentTrafficTracker.removeAll() scheduledRelays.values.forEach { $0.cancel() } scheduledRelays.removeAll() return transfers @@ -409,20 +392,7 @@ final class BLEService: NSObject { func currentPeerSnapshots() -> [TransportPeerSnapshot] { collectionsQueue.sync { - let snapshot = Array(peers.values) - let resolvedNames = PeerDisplayNameResolver.resolve( - snapshot.map { ($0.peerID, $0.nickname, $0.isConnected) }, - selfNickname: myNickname - ) - return snapshot.map { info in - TransportPeerSnapshot( - peerID: info.peerID, - nickname: resolvedNames[info.peerID] ?? info.nickname, - isConnected: info.isConnected, - noisePublicKey: info.noisePublicKey, - lastSeen: info.lastSeen - ) - } + peerRegistry.transportSnapshots(selfNickname: myNickname) } } @@ -526,7 +496,7 @@ final class BLEService: NSObject { // Clear all sessions and peers let cancelledTransfers: [(id: String, items: [DispatchWorkItem])] = collectionsQueue.sync(flags: .barrier) { let entries = outboundFragmentTransfers.removeAll().map { ($0.id, $0.workItems) } - peers.removeAll() + peerRegistry.removeAll() fragmentAssemblyBuffer.removeAll() // Also clear pending message queues to avoid stale state across sessions pendingNoiseSessionQueues.removeAll() @@ -546,7 +516,7 @@ final class BLEService: NSObject { bleQueue.sync { linkStateStore.clearAll() connectionScheduler.reset() - centralSubscriptionRateLimits.removeAll() + subscriptionAnnounceLimiter.removeAll() } meshTopology.reset() } @@ -555,38 +525,25 @@ final class BLEService: NSObject { func isPeerConnected(_ peerID: PeerID) -> Bool { // Accept both 16-hex short IDs and 64-hex Noise keys - let shortID = peerID.toShort() - return collectionsQueue.sync { peers[shortID]?.isConnected ?? false } + return collectionsQueue.sync { peerRegistry.isConnected(peerID) } } func isPeerReachable(_ peerID: PeerID) -> Bool { // Accept both 16-hex short IDs and 64-hex Noise keys - let shortID = peerID.toShort() return collectionsQueue.sync { - // Must be mesh-attached: at least one live direct link to the mesh - let meshAttached = peers.values.contains { $0.isConnected } - guard let info = peers[shortID] else { return false } - if info.isConnected { return true } - guard meshAttached else { return false } - // Apply reachability retention window - let isVerified = info.isVerifiedNickname - let retention: TimeInterval = isVerified ? TransportConfig.bleReachabilityRetentionVerifiedSeconds : TransportConfig.bleReachabilityRetentionUnverifiedSeconds - return Date().timeIntervalSince(info.lastSeen) <= retention + peerRegistry.isReachable(peerID, now: Date()) } } func peerNickname(peerID: PeerID) -> String? { collectionsQueue.sync { - guard let peer = peers[peerID], peer.isConnected else { return nil } - return peer.nickname + peerRegistry.nickname(for: peerID, connectedOnly: true) } } func getPeerNicknames() -> [PeerID: String] { return collectionsQueue.sync { - let connected = peers.filter { $0.value.isConnected } - let tuples = connected.map { ($0.key, $0.value.nickname, true) } - return PeerDisplayNameResolver.resolve(tuples, selfNickname: myNickname) + peerRegistry.displayNicknames(selfNickname: myNickname) } } @@ -594,7 +551,7 @@ final class BLEService: NSObject { func getFingerprint(for peerID: PeerID) -> String? { return collectionsQueue.sync { - return peers[peerID]?.noisePublicKey?.sha256Fingerprint() + peerRegistry.fingerprint(for: peerID) } } @@ -751,64 +708,77 @@ final class BLEService: NSObject { } } - private enum ConnectionSource { - case peripheral(String) - case central(String) - case unknown - } - - private func makeIngressPacketContext( + private func acceptedIngressContext( for packet: BitchatPacket, claimedSenderID: PeerID, boundPeerID: PeerID?, linkDescription: String ) -> BLEIngressPacketContext? { - switch BLEIngressLinkRegistry.packetContext( - for: packet, + switch BLEIngressPacketGuard.evaluate( + packet: packet, claimedSenderID: claimedSenderID, boundPeerID: boundPeerID, localPeerID: myPeerID, - directAnnounceTTL: messageTTL + directAnnounceTTL: messageTTL, + isValidSyncResponse: { [requestSyncManager] peerID in + requestSyncManager.isValidResponse(from: peerID, isRSR: true) + } ) { case .success(let context): + if packet.isRSR { + logValidRSR(from: context.validationPeerID) + } return context case .failure(.selfLoopback): - SecureLogger.debug("↩️ Dropping BLE self-loopback packet type \(packet.type) from \(linkDescription)", category: .session) + logSelfLoopback(packetType: packet.type, linkDescription: linkDescription) return nil case .failure(.directSenderMismatch(let boundPeerID, let claimedSenderID)): SecureLogger.warning("🚫 SECURITY: Sender ID spoofing attempt detected! \(linkDescription) claimed to be \(claimedSenderID.id.prefix(8))… but is bound to \(boundPeerID.id.prefix(8))…", category: .security) return nil + case .failure(.invalidRSR(let peerID)): + SecureLogger.warning("Invalid or unsolicited RSR packet from \(peerID.id.prefix(8))… - rejecting", category: .security) + return nil + case .failure(.timestampSkew(let peerID, let skewMs, let maxSkewMs)): + SecureLogger.warning("Packet timestamp skewed by \(skewMs)ms (max \(maxSkewMs)ms) from \(peerID.id.prefix(8))…", category: .security) + return nil } } - private func validatePacket(_ packet: BitchatPacket, from peerID: PeerID, connectionSource: ConnectionSource = .unknown) -> Bool { - let currentTime = UInt64(Date().timeIntervalSince1970 * 1000) - - let isRSR = packet.isRSR - var skipTimestampCheck = false - - if isRSR { - if requestSyncManager.isValidResponse(from: peerID, isRSR: true) { - SecureLogger.debug("Valid RSR packet from \(peerID.id.prefix(8))… - skipping timestamp check", category: .security) - skipTimestampCheck = true - } else { - SecureLogger.warning("Invalid or unsolicited RSR packet from \(peerID.id.prefix(8))… - rejecting", category: .security) - return false + private func isAcceptedIngressPayload(_ packet: BitchatPacket, from peerID: PeerID) -> Bool { + switch BLEIngressPacketGuard.validatePayload( + packet, + from: peerID, + isValidSyncResponse: { [requestSyncManager] peerID in + requestSyncManager.isValidResponse(from: peerID, isRSR: true) } - } - - if !skipTimestampCheck { - let maxSkew: UInt64 = 120_000 - let packetTime = packet.timestamp - let skew = (packetTime > currentTime) ? (packetTime - currentTime) : (currentTime - packetTime) - - if skew > maxSkew { - SecureLogger.warning("Packet timestamp skewed by \(skew)ms (max \(maxSkew)ms) from \(peerID.id.prefix(8))…", category: .security) - return false + ) { + case .success: + if packet.isRSR { + logValidRSR(from: peerID) } + return true + case .failure(.invalidRSR(let peerID)): + SecureLogger.warning("Invalid or unsolicited RSR packet from \(peerID.id.prefix(8))… - rejecting", category: .security) + return false + case .failure(.timestampSkew(let peerID, let skewMs, let maxSkewMs)): + SecureLogger.warning("Packet timestamp skewed by \(skewMs)ms (max \(maxSkewMs)ms) from \(peerID.id.prefix(8))…", category: .security) + return false + case .failure(.selfLoopback), .failure(.directSenderMismatch): + return false } + } - return true + private func logValidRSR(from peerID: PeerID) { + guard logRateLimiter.shouldLog(key: "valid-rsr:\(peerID.id)") else { return } + SecureLogger.debug("Valid RSR packet from \(peerID.id.prefix(8))… - skipping timestamp check", category: .security) + } + + private func logSelfLoopback(packetType: UInt8, linkDescription: String) { + guard logRateLimiter.shouldLog( + key: "self-loopback:\(packetType)", + minimumInterval: 30 + ) else { return } + SecureLogger.debug("↩️ Dropping BLE self-loopback packet type \(packetType) from \(linkDescription)", category: .session) } private func recordIngressIfNew(_ packet: BitchatPacket, link: BLEIngressLinkID, peerID: PeerID) -> Bool { @@ -1045,48 +1015,40 @@ final class BLEService: NSObject { } } + private func signedSenderDisplayName(for packet: BitchatPacket, from peerID: PeerID) -> String? { + guard let signature = packet.signature, + let packetData = packet.toBinaryDataForSigning() else { + return nil + } + + let candidates = identityManager.getCryptoIdentitiesByPeerIDPrefix(peerID) + for candidate in candidates { + guard let signingKey = candidate.signingPublicKey, + noiseService.verifySignature(signature, for: packetData, publicKey: signingKey) else { + continue + } + + if let social = identityManager.getSocialIdentity(for: candidate.fingerprint) { + return social.localPetname ?? social.claimedNickname + } + + return BLEPeerSenderDisplayName.anonymousNickname(for: peerID) + } + + return nil + } + private func handleFileTransfer(_ packet: BitchatPacket, from peerID: PeerID) { if peerID == myPeerID && packet.ttl != 0 { return } - var accepted = false - var senderNickname = "" - - let peersSnapshot = collectionsQueue.sync { peers } - - if peerID == myPeerID { - accepted = true - senderNickname = myNickname - } else if let info = peersSnapshot[peerID], info.isVerifiedNickname { - accepted = true - senderNickname = info.nickname - let hasCollision = peersSnapshot.values.contains { $0.isConnected && $0.nickname == info.nickname && $0.peerID != peerID } || (myNickname == info.nickname) - if hasCollision { - senderNickname += "#" + String(peerID.id.prefix(4)) - } - } else if let info = peersSnapshot[peerID], info.isConnected { - accepted = true - senderNickname = info.nickname.isEmpty ? "anon" + String(peerID.id.prefix(4)) : info.nickname - let hasCollision = peersSnapshot.values.contains { $0.isConnected && $0.nickname == info.nickname && $0.peerID != peerID } || (myNickname == info.nickname) - if hasCollision { - senderNickname += "#" + String(peerID.id.prefix(4)) - } - } else if let signature = packet.signature, let packetData = packet.toBinaryDataForSigning() { - let candidates = identityManager.getCryptoIdentitiesByPeerIDPrefix(peerID) - for candidate in candidates { - if let signingKey = candidate.signingPublicKey, - noiseService.verifySignature(signature, for: packetData, publicKey: signingKey) { - accepted = true - if let social = identityManager.getSocialIdentity(for: candidate.fingerprint) { - senderNickname = social.localPetname ?? social.claimedNickname - } else { - senderNickname = "anon" + String(peerID.id.prefix(4)) - } - break - } - } - } - - guard accepted else { + let peersSnapshot = collectionsQueue.sync { peerRegistry.snapshotByID } + guard let senderNickname = BLEPeerSenderDisplayName.resolveKnownPeer( + peerID: peerID, + localPeerID: myPeerID, + localNickname: myNickname, + peers: peersSnapshot, + allowConnectedUnverified: true + ) ?? signedSenderDisplayName(for: packet, from: peerID) else { SecureLogger.warning("🚫 Dropping file transfer from unverified or unknown peer \(peerID.id.prefix(8))…", category: .security) return } @@ -1207,7 +1169,7 @@ final class BLEService: NSObject { private func handleLeave(_ packet: BitchatPacket, from peerID: PeerID) { _ = collectionsQueue.sync(flags: .barrier) { // Remove the peer when they leave - peers.removeValue(forKey: peerID) + peerRegistry.remove(peerID) } // Remove any stored announcement for sync purposes gossipSyncManager?.removeAnnouncementForPeer(peerID) @@ -1216,7 +1178,7 @@ final class BLEService: NSObject { guard let self = self else { return } // Get current peer list (after removal) - let currentPeerIDs = self.collectionsQueue.sync { Array(self.peers.keys) } + let currentPeerIDs = self.collectionsQueue.sync { self.peerRegistry.peerIDs } self.deliverTransportEvent(.peerDisconnected(peerID)) self.deliverTransportEvent(.peerListUpdated(currentPeerIDs)) @@ -1243,7 +1205,7 @@ final class BLEService: NSObject { let signingPub = noiseService.getSigningPublicKeyData() // For signature verification let connectedPeerIDs: [Data] = collectionsQueue.sync { - peers.values.filter { $0.isConnected }.compactMap { $0.peerID.routingData } + peerRegistry.connectedRoutingData } let announcement = AnnouncementPacket( @@ -1316,7 +1278,7 @@ extension BLEService: GossipSyncManager.Delegate { func getConnectedPeers() -> [PeerID] { return collectionsQueue.sync { - peers.values.compactMap { $0.isConnected ? $0.peerID : nil } + peerRegistry.connectedPeerIDs } } } @@ -1507,10 +1469,7 @@ extension BLEService: CBCentralManagerDelegate { if let peerID { // Do not remove peer; mark as not connected but retain for reachability collectionsQueue.sync(flags: .barrier) { - if var info = peers[peerID] { - info.isConnected = false - peers[peerID] = info - } + peerRegistry.markDisconnected(peerID) } refreshLocalTopology() } @@ -1532,7 +1491,7 @@ extension BLEService: CBCentralManagerDelegate { guard let self = self else { return } // Get current peer list (after removal) - let currentPeerIDs = self.collectionsQueue.sync { self.currentPeerIDs } + let currentPeerIDs = self.collectionsQueue.sync { self.peerRegistry.peerIDs } if let peerID { self.notifyPeerDisconnectedDebounced(peerID) @@ -1658,8 +1617,13 @@ extension BLEService { // Ensure the synthetic peer is known and marked verified for public-message tests let normalizedID = PeerID(hexData: packet.senderID) collectionsQueue.sync(flags: .barrier) { - if peers[normalizedID] == nil { - peers[normalizedID] = PeerInfo( + if var existing = peerRegistry.info(for: normalizedID) { + existing.isConnected = true + existing.isVerifiedNickname = true + existing.lastSeen = Date() + peerRegistry.upsert(existing) + } else { + peerRegistry.upsert(BLEPeerInfo( peerID: normalizedID, nickname: "TestPeer_\(fromPeerID.id.prefix(4))", isConnected: true, @@ -1667,13 +1631,7 @@ extension BLEService { signingPublicKey: nil, isVerifiedNickname: true, lastSeen: Date() - ) - } else { - var p = peers[normalizedID]! - p.isConnected = true - p.isVerifiedNickname = true - p.lastSeen = Date() - peers[normalizedID] = p + )) } } } @@ -1682,12 +1640,16 @@ extension BLEService { func _test_acceptsIngress(packet: BitchatPacket, boundPeerID: PeerID?) -> Bool { let claimedSenderID = PeerID(hexData: packet.senderID) - return makeIngressPacketContext( + guard case .success = BLEIngressLinkRegistry.packetContext( for: packet, claimedSenderID: claimedSenderID, boundPeerID: boundPeerID, - linkDescription: "TestLink" - ) != nil + localPeerID: myPeerID, + directAnnounceTTL: messageTTL + ) else { + return false + } + return true } func _test_recordIngressIfNew(packet: BitchatPacket, linkID: String) -> Bool { @@ -1837,7 +1799,7 @@ extension BLEService: CBPeripheralDelegate { } let claimedSenderID = PeerID(hexData: packet.senderID) - let context = makeIngressPacketContext( + let context = acceptedIngressContext( for: packet, claimedSenderID: claimedSenderID, boundPeerID: boundPeerID, @@ -1846,10 +1808,6 @@ extension BLEService: CBPeripheralDelegate { guard let context else { continue } - if !validatePacket(packet, from: context.validationPeerID, connectionSource: .peripheral(peripheralUUID)) { - continue - } - // If this is a direct-link announce, bind immediately for the remainder of this batch. if boundPeerID == nil, packet.type == MessageType.announce.rawValue, @@ -1901,7 +1859,9 @@ extension BLEService: CBPeripheralDelegate { func peripheralIsReady(toSendWriteWithoutResponse peripheral: CBPeripheral) { // Resume queued writes for this peripheral - called when canSendWriteWithoutResponse becomes true again - SecureLogger.debug("📤 Peripheral \(peripheral.name ?? peripheral.identifier.uuidString.prefix(8).description) ready for more writes", category: .session) + if logRateLimiter.shouldLog(key: "peripheral-ready:\(peripheral.identifier.uuidString)") { + SecureLogger.debug("📤 Peripheral \(peripheral.name ?? peripheral.identifier.uuidString.prefix(8).description) ready for more writes", category: .session) + } drainPendingWrites(for: peripheral) } @@ -1974,7 +1934,7 @@ extension BLEService: CBPeripheralManagerDelegate { peripheral.stopAdvertising() // Clear subscribed centrals (they are now invalid) let centralPeerIDs = linkStateStore.clearCentrals() - centralSubscriptionRateLimits.removeAll() + subscriptionAnnounceLimiter.removeAll() characteristic = nil // Notify UI of disconnections for peerID in centralPeerIDs { @@ -1988,7 +1948,7 @@ extension BLEService: CBPeripheralManagerDelegate { SecureLogger.warning("🚫 Bluetooth unauthorized for peripheral role", category: .session) peripheral.stopAdvertising() _ = linkStateStore.clearCentrals() - centralSubscriptionRateLimits.removeAll() + subscriptionAnnounceLimiter.removeAll() characteristic = nil case .unsupported: @@ -2055,61 +2015,22 @@ extension BLEService: CBPeripheralManagerDelegate { // BCH-01-004: Rate-limit subscription-triggered announces to prevent enumeration attacks let now = Date() - var state = centralSubscriptionRateLimits[centralUUID] - - // Clean up stale entries periodically - cleanupStaleSubscriptionRateLimits() - - // Check if this central is rate-limited - if let existingState = state { - let timeSinceLastAnnounce = now.timeIntervalSince(existingState.lastAnnounceTime) - - // If within backoff period, skip the announce - if timeSinceLastAnnounce < existingState.currentBackoffSeconds { - SecureLogger.warning("🛡️ BCH-01-004: Rate-limited announce for central \(centralUUID.prefix(8))... (backoff: \(Int(existingState.currentBackoffSeconds))s, attempts: \(existingState.attemptCount))", category: .security) - - // Increment attempt count and increase backoff - // Update lastAnnounceTime to 'now' so each blocked attempt extends the suppression window - // This prevents attackers from waiting out the backoff while spamming attempts - let newAttemptCount = existingState.attemptCount + 1 - let newBackoff = min( - existingState.currentBackoffSeconds * TransportConfig.bleSubscriptionRateLimitBackoffFactor, - TransportConfig.bleSubscriptionRateLimitMaxBackoffSeconds - ) - centralSubscriptionRateLimits[centralUUID] = SubscriptionRateLimitState( - lastAnnounceTime: now, // Reset timer on each blocked attempt - attemptCount: newAttemptCount, - currentBackoffSeconds: newBackoff - ) - - // If too many rapid attempts, this is likely an enumeration attack - don't respond - if newAttemptCount >= TransportConfig.bleSubscriptionRateLimitMaxAttempts { - SecureLogger.warning("🚨 BCH-01-004: Possible enumeration attack from central \(centralUUID.prefix(8))... - suppressing announce", category: .security) - return - } - - // Still flush directed packets for legitimate mesh operation - messageQueue.asyncAfter(deadline: .now() + TransportConfig.blePostAnnounceDelaySeconds) { [weak self] in - self?.flushDirectedSpool() - } + switch subscriptionAnnounceLimiter.decision(for: centralUUID, now: now) { + case .allowed: + break + case let .rateLimited(backoffSeconds, attemptCount, suppressAnnounce): + SecureLogger.warning("🛡️ BCH-01-004: Rate-limited announce for central \(centralUUID.prefix(8))... (backoff: \(Int(backoffSeconds))s, attempts: \(attemptCount))", category: .security) + if suppressAnnounce { + SecureLogger.warning("🚨 BCH-01-004: Possible enumeration attack from central \(centralUUID.prefix(8))... - suppressing announce", category: .security) return } - // Outside backoff period - allow announce but track it - state = SubscriptionRateLimitState( - lastAnnounceTime: now, - attemptCount: 1, - currentBackoffSeconds: TransportConfig.bleSubscriptionRateLimitMinSeconds - ) - } else { - // First subscription from this central - track it - state = SubscriptionRateLimitState( - lastAnnounceTime: now, - attemptCount: 1, - currentBackoffSeconds: TransportConfig.bleSubscriptionRateLimitMinSeconds - ) + // Still flush directed packets for legitimate mesh operation + messageQueue.asyncAfter(deadline: .now() + TransportConfig.blePostAnnounceDelaySeconds) { [weak self] in + self?.flushDirectedSpool() + } + return } - centralSubscriptionRateLimits[centralUUID] = state // Send announce to the newly subscribed central after a small delay messageQueue.asyncAfter(deadline: .now() + TransportConfig.blePostAnnounceDelaySeconds) { [weak self] in @@ -2118,15 +2039,6 @@ extension BLEService: CBPeripheralManagerDelegate { self?.flushDirectedSpool() } } - - /// BCH-01-004: Clean up stale rate-limit entries to prevent memory growth - private func cleanupStaleSubscriptionRateLimits() { - let now = Date() - let windowSeconds = TransportConfig.bleSubscriptionRateLimitWindowSeconds - centralSubscriptionRateLimits = centralSubscriptionRateLimits.filter { _, state in - now.timeIntervalSince(state.lastAnnounceTime) < windowSeconds - } - } func peripheralManager(_ peripheral: CBPeripheralManager, central: CBCentral, didUnsubscribeFrom characteristic: CBCharacteristic) { SecureLogger.debug("📤 Central unsubscribed: \(central.identifier.uuidString.prefix(8))…", category: .session) @@ -2142,10 +2054,7 @@ extension BLEService: CBPeripheralManagerDelegate { if let peerID = removedPeerID { // Mark peer as not connected; retain for reachability collectionsQueue.sync(flags: .barrier) { - if var info = peers[peerID] { - info.isConnected = false - peers[peerID] = info - } + peerRegistry.markDisconnected(peerID) } refreshLocalTopology() @@ -2155,7 +2064,7 @@ extension BLEService: CBPeripheralManagerDelegate { guard let self = self else { return } // Get current peer list (after removal) - let currentPeerIDs = self.collectionsQueue.sync { self.currentPeerIDs } + let currentPeerIDs = self.collectionsQueue.sync { self.peerRegistry.peerIDs } self.notifyPeerDisconnectedDebounced(peerID) // Publish snapshots so UnifiedPeerService can refresh icons promptly @@ -2280,7 +2189,7 @@ extension BLEService: CBPeripheralManagerDelegate { private func processDecodedCentralWrite(_ packet: BitchatPacket, centralUUID: String, central: CBCentral) { let claimedSenderID = PeerID(hexData: packet.senderID) - let context = makeIngressPacketContext( + let context = acceptedIngressContext( for: packet, claimedSenderID: claimedSenderID, boundPeerID: linkStateStore.peerID(forCentralUUID: centralUUID), @@ -2288,10 +2197,6 @@ extension BLEService: CBPeripheralManagerDelegate { ) guard let context else { return } - guard validatePacket(packet, from: context.validationPeerID, connectionSource: .central(centralUUID)) else { - return - } - if packet.type != MessageType.announce.rawValue { SecureLogger.debug("📦 Decoded (combined) packet type: \(packet.type) from sender: \(claimedSenderID.id.prefix(8))…", category: .session) } @@ -2377,8 +2282,8 @@ extension BLEService { let peerSummary = collectionsQueue.sync { ( - connected: peers.values.filter { $0.isConnected }.count, - known: peers.count, + connected: peerRegistry.connectedCount, + known: peerRegistry.count, candidates: connectionScheduler.candidateCount ) } @@ -2412,7 +2317,7 @@ extension BLEService { private func refreshLocalTopology() { let neighbors: [Data] = collectionsQueue.sync { - peers.values.filter { $0.isConnected }.compactMap { $0.peerID.routingData } + peerRegistry.connectedRoutingData } meshTopology.updateNeighbors(for: myPeerIDData, neighbors: neighbors) } @@ -2844,8 +2749,6 @@ extension BLEService { } private func startFragmentedPacket(_ request: BLEOutboundFragmentTransferRequest, reservedTransferId: String?) { - let packet = request.packet - let releaseReservedSlot: (String) -> Void = { [weak self] id in guard let self = self else { return } TransferProgressManager.shared.cancel(id: id) @@ -2857,34 +2760,11 @@ extension BLEService { } } - guard let fullData = packet.toBinaryData(padding: request.pad) else { - if let id = reservedTransferId { - releaseReservedSlot(id) - } - return - } - // Fragment the unpadded frame; each fragment will be encoded independently - let fragmentID = Data((0..<8).map { _ in UInt8.random(in: 0...255) }) - // Dynamic Fragment Sizing (Source Routing v2) - // See docs/SOURCE_ROUTING.md Section 5.1 - var fragmentVersion: UInt8 = 1 - var calculatedChunk = defaultFragmentSize - - if let route = packet.route, !route.isEmpty { - fragmentVersion = 2 - // RouteSize = 1 + (Hops * 8) - let routeSize = 1 + (route.count * 8) - // Overhead = HeaderV2(16) + SenderID(8) + RecipientID(8) + RouteSize + FragmentHeader(13) + PaddingBuffer(16) - let overhead = 16 + 8 + 8 + routeSize + 13 + 16 - calculatedChunk = max(64, bleMaxMTU - overhead) - } - - let chunk = request.maxChunk ?? calculatedChunk - let safeChunk = max(64, chunk) - let fragments = stride(from: 0, to: fullData.count, by: safeChunk).map { offset in - Data(fullData[offset.. 4 { + if plan.shouldPauseScanning { bleQueue.async { [weak self] in guard let self = self, let c = self.centralManager, c.state == .poweredOn else { return } if c.isScanning { c.stopScan() } + let totalFragments = plan.totalFragments let expectedMs = min(TransportConfig.bleExpectedWriteMaxMs, totalFragments * TransportConfig.bleExpectedWritePerFragmentMs) self.bleQueue.asyncAfter(deadline: .now() + .milliseconds(expectedMs)) { [weak self] in self?.startScanning() } } } - let perFragMs = (request.directedPeer != nil || packet.recipientID != nil) ? TransportConfig.bleFragmentSpacingDirectedMs : TransportConfig.bleFragmentSpacingMs let transferIdentifier: String? = { guard let id = reservedTransferId else { return nil } collectionsQueue.sync(flags: .barrier) { - _ = self.outboundFragmentTransfers.activateReservedTransfer(id: id, totalFragments: totalFragments, workItems: []) + _ = self.outboundFragmentTransfers.activateReservedTransfer(id: id, totalFragments: plan.totalFragments, workItems: []) } - TransferProgressManager.shared.start(id: id, totalFragments: totalFragments) + TransferProgressManager.shared.start(id: id, totalFragments: plan.totalFragments) return id }() var scheduledItems: [(item: DispatchWorkItem, index: Int)] = [] - for (index, fragment) in fragments.enumerated() { - var payload = Data() - payload.append(fragmentID) - payload.append(contentsOf: withUnsafeBytes(of: UInt16(index).bigEndian) { Data($0) }) - payload.append(contentsOf: withUnsafeBytes(of: UInt16(fragments.count).bigEndian) { Data($0) }) - payload.append(packet.type) - payload.append(fragment) - - let fragmentRecipient: Data? = { - if let only = request.directedPeer { return Data(hexString: only.id) } - return packet.recipientID - }() - - let fragmentPacket = BitchatPacket( - type: MessageType.fragment.rawValue, - senderID: packet.senderID, - recipientID: fragmentRecipient, - timestamp: packet.timestamp, - payload: payload, - signature: nil, - ttl: packet.ttl, - version: fragmentVersion, - route: packet.route, - isRSR: packet.isRSR - ) - + for (index, fragmentPacket) in plan.fragmentPackets.enumerated() { let workItem = DispatchWorkItem { [weak self] in guard let self = self else { return } if let transferId = transferIdentifier { let isActive = self.collectionsQueue.sync { self.outboundFragmentTransfers.isActive(transferId) } guard isActive else { return } } - if fragmentRecipient == nil || fragmentRecipient?.allSatisfy({ $0 == 0xFF }) == true { + if fragmentPacket.recipientID == nil || fragmentPacket.recipientID?.allSatisfy({ $0 == 0xFF }) == true { self.gossipSyncManager?.onPublicPacketSeen(fragmentPacket) } self.broadcastPacket(fragmentPacket) @@ -2969,7 +2823,7 @@ extension BLEService { } for (workItem, index) in scheduledItems { - let delayMs = index * perFragMs + let delayMs = index * plan.spacingMs messageQueue.asyncAfter(deadline: .now() + .milliseconds(delayMs), execute: workItem) } } @@ -3043,7 +2897,7 @@ extension BLEService { // Reassembled packet validation let innerSender = PeerID(hexData: originalPacket.senderID) - if !validatePacket(originalPacket, from: innerSender) { + if !isAcceptedIngressPayload(originalPacket, from: innerSender) { // Cleanup below } else { SecureLogger.debug("✅ Reassembled packet id=\(completedHeader.idLogString) type=\(originalPacket.type) bytes=\(reassembled.count)", category: .session) @@ -3091,33 +2945,26 @@ extension BLEService { return } - - // Deduplication (thread-safe) - let senderID = PeerID(hexData: packet.senderID) - // Include packet type in message ID to prevent collisions between different packet types - let messageID = "\(senderID)-\(packet.timestamp)-\(packet.type)" + let context = BLEReceivePipeline.context(for: packet, localPeerID: myPeerID) + let senderID = context.senderID + let messageID = context.messageID // Only log non-announce packets to reduce noise - if packet.type != MessageType.announce.rawValue { + if context.logsHandlingDetails { // Log packet details for debugging SecureLogger.debug("📦 Handling packet type \(packet.type) from \(senderID.id.prefix(8))…, messageID: \(messageID.prefix(24))…", category: .session) } - // Efficient deduplication - // Important: do not dedup fragment packets globally (each piece must pass) - // Special case: allow our own packets recovered via sync (TTL==0) to pass - // through even if we've marked them as seen at send time. - let allowSelfSyncReplay = (packet.ttl == 0) && (senderID == myPeerID) - if packet.type != MessageType.fragment.rawValue && !allowSelfSyncReplay && messageDeduplicator.isDuplicate(messageID) { + if context.shouldDeduplicate && messageDeduplicator.isDuplicate(messageID) { // Announce packets (type 1) are sent every 10 seconds for peer discovery // It's normal to see these as duplicates - don't log them to reduce noise - if packet.type != MessageType.announce.rawValue { + if context.logsHandlingDetails { SecureLogger.debug("⚠️ Duplicate packet ignored: \(messageID.prefix(24))…", category: .session) } // In sparse graphs (<=2 neighbors), keep the pending relay to ensure bridging. // In denser graphs, cancel the pending relay to reduce redundant floods. - let connectedCount = collectionsQueue.sync { peers.values.filter { $0.isConnected }.count } - if connectedCount > 2 { + let connectedCount = collectionsQueue.sync { peerRegistry.connectedCount } + if BLEReceivePipeline.shouldCancelScheduledRelayForDuplicate(connectedPeerCount: connectedCount) { collectionsQueue.async(flags: .barrier) { [weak self] in if let task = self?.scheduledRelays.removeValue(forKey: messageID) { task.cancel() @@ -3133,19 +2980,12 @@ extension BLEService { // Track recent traffic timestamps for adaptive behavior collectionsQueue.async(flags: .barrier) { [weak self] in guard let self = self else { return } - let now = Date() - self.recentPacketTimestamps.append(now) - // keep last N timestamps within window - let cutoff = now.addingTimeInterval(-TransportConfig.bleRecentPacketWindowSeconds) - if self.recentPacketTimestamps.count > TransportConfig.bleRecentPacketWindowMaxCount { - self.recentPacketTimestamps.removeFirst(self.recentPacketTimestamps.count - TransportConfig.bleRecentPacketWindowMaxCount) - } - self.recentPacketTimestamps.removeAll { $0 < cutoff } + self.recentTrafficTracker.recordPacket(at: Date()) } // Process by type - switch MessageType(rawValue: packet.type) { + switch context.messageType { case .announce: handleAnnounce(packet, from: senderID) @@ -3182,17 +3022,11 @@ extension BLEService { // Relay if TTL > 1 and we're not the original sender // Relay decision and scheduling (extracted via RelayController) do { - let degree = collectionsQueue.sync { peers.values.filter { $0.isConnected }.count } - let decision = RelayController.decide( - ttl: packet.ttl, - senderIsSelf: senderID == myPeerID, - recipientIsSelf: PeerID(hexData: packet.recipientID) == myPeerID, - isEncrypted: packet.type == MessageType.noiseEncrypted.rawValue, - isDirectedEncrypted: (packet.type == MessageType.noiseEncrypted.rawValue) && (packet.recipientID != nil), - isFragment: packet.type == MessageType.fragment.rawValue, - isDirectedFragment: packet.type == MessageType.fragment.rawValue && packet.recipientID != nil, - isHandshake: packet.type == MessageType.noiseHandshake.rawValue, - isAnnounce: packet.type == MessageType.announce.rawValue, + let degree = collectionsQueue.sync { peerRegistry.connectedCount } + let decision = BLEReceivePipeline.relayDecision( + for: packet, + senderID: senderID, + localPeerID: myPeerID, degree: degree, highDegreeThreshold: highDegreeThreshold ) @@ -3250,7 +3084,7 @@ extension BLEService { // Suppress announce logs to reduce noise // Precompute signature verification outside barrier to reduce contention - let existingPeerForVerify = collectionsQueue.sync { peers[peerID] } + let existingPeerForVerify = collectionsQueue.sync { peerRegistry.info(for: peerID) } var verifiedAnnounce = false if packet.signature != nil { verifiedAnnounce = noiseService.verifyPacketSignature(packet, publicKey: announcement.signingPublicKey) @@ -3263,35 +3097,17 @@ extension BLEService { verifiedAnnounce = false } - // Track if this is a new or reconnected peer var isNewPeer = false var isReconnectedPeer = false let directLinkState = linkState(for: peerID) collectionsQueue.sync(flags: .barrier) { - // Check if we have an actual BLE connection to this peer let hasPeripheralConnection = directLinkState.hasPeripheral - - // Check if this peer is subscribed to us as a central - // Note: We can't identify which specific central is which peer without additional mapping let hasCentralSubscription = directLinkState.hasCentral - - // Direct announces arrive with full TTL (no prior hop) let isDirectAnnounce = (packet.ttl == messageTTL) - - // Check if we already have this peer (might be reconnecting) - let existingPeer = peers[peerID] - let wasDisconnected = existingPeer?.isConnected == false - - // Set flags for use outside the sync block - isNewPeer = (existingPeer == nil) - isReconnectedPeer = wasDisconnected - - // Use precomputed verification result - let verified = verifiedAnnounce // Require verified announce; ignore otherwise (no backward compatibility) - if !verified { + if !verifiedAnnounce { SecureLogger.warning("❌ Ignoring unverified announce from \(peerID.id.prefix(8))…", category: .security) // Reset flags to prevent post-barrier code from acting on unverified announces isNewPeer = false @@ -3299,37 +3115,23 @@ extension BLEService { return } - // Update or create peer info - if let existing = existingPeer, existing.isConnected { - // Update lastSeen and identity info - peers[peerID] = PeerInfo( - peerID: existing.peerID, - nickname: announcement.nickname, - isConnected: isDirectAnnounce || hasPeripheralConnection || hasCentralSubscription, - noisePublicKey: announcement.noisePublicKey, - signingPublicKey: announcement.signingPublicKey, - isVerifiedNickname: true, - lastSeen: Date() - ) - } else { - // New peer or reconnecting peer - peers[peerID] = PeerInfo( - peerID: peerID, - nickname: announcement.nickname, - isConnected: isDirectAnnounce || hasPeripheralConnection || hasCentralSubscription, - noisePublicKey: announcement.noisePublicKey, - signingPublicKey: announcement.signingPublicKey, - isVerifiedNickname: true, - lastSeen: Date() - ) - } + let update = peerRegistry.upsertVerifiedAnnounce( + peerID: peerID, + nickname: announcement.nickname, + noisePublicKey: announcement.noisePublicKey, + signingPublicKey: announcement.signingPublicKey, + isConnected: isDirectAnnounce || hasPeripheralConnection || hasCentralSubscription, + now: Date() + ) + isNewPeer = update.isNewPeer + isReconnectedPeer = update.wasDisconnected // Log connection status only for direct connectivity changes; debounce to reduce spam if isDirectAnnounce || hasPeripheralConnection || hasCentralSubscription { let now = Date() - if existingPeer == nil { + if update.isNewPeer { SecureLogger.debug("🆕 New peer: \(announcement.nickname)", category: .session) - } else if wasDisconnected { + } else if update.wasDisconnected { // Debounce 'reconnected' logs within short window if let last = lastReconnectLogAt[peerID], now.timeIntervalSince(last) < TransportConfig.bleReconnectLogDebounceSeconds { // Skip duplicate log @@ -3337,8 +3139,8 @@ extension BLEService { SecureLogger.debug("🔄 Peer \(announcement.nickname) reconnected", category: .session) lastReconnectLogAt[peerID] = now } - } else if existingPeer?.nickname != announcement.nickname { - SecureLogger.debug("🔄 Peer \(peerID.id.prefix(8))… changed nickname: \(existingPeer?.nickname ?? "Unknown") -> \(announcement.nickname)", category: .session) + } else if let previousNickname = update.previousNickname, previousNickname != announcement.nickname { + SecureLogger.debug("🔄 Peer \(peerID.id.prefix(8))… changed nickname: \(previousNickname) -> \(announcement.nickname)", category: .session) } } } @@ -3361,7 +3163,7 @@ extension BLEService { guard let self = self else { return } // Get current peer list (after addition) - let currentPeerIDs = self.collectionsQueue.sync { self.currentPeerIDs } + let currentPeerIDs = self.collectionsQueue.sync { self.peerRegistry.peerIDs } // Only notify of connection for new or reconnected peers when it is a direct announce if (packet.ttl == self.messageTTL) && (isNewPeer || isReconnectedPeer) { @@ -3436,47 +3238,16 @@ extension BLEService { } } - var accepted = false - var senderNickname: String = "" // Snapshot peers to avoid concurrent mutation while iterating during nickname collision checks. - let peersSnapshot = collectionsQueue.sync { peers } + let peersSnapshot = collectionsQueue.sync { peerRegistry.snapshotByID } - // If the packet is from ourselves (e.g., recovered via sync TTL==0), accept immediately - if peerID == myPeerID { - accepted = true - senderNickname = myNickname - } - else if let info = peersSnapshot[peerID], info.isVerifiedNickname { - // Known verified peer path - accepted = true - senderNickname = info.nickname - // Handle nickname collisions - let hasCollision = peersSnapshot.values.contains { $0.isConnected && $0.nickname == info.nickname && $0.peerID != peerID } || (myNickname == info.nickname) - if hasCollision { - senderNickname += "#" + String(peerID.id.prefix(4)) - } - } else { - // Fallback: verify signature using persisted signing key for this peerID's fingerprint prefix - if let signature = packet.signature, let packetData = packet.toBinaryDataForSigning() { - // Find candidate identities by peerID prefix (16 hex) - let candidates = identityManager.getCryptoIdentitiesByPeerIDPrefix(peerID) - for candidate in candidates { - if let signingKey = candidate.signingPublicKey, - noiseService.verifySignature(signature, for: packetData, publicKey: signingKey) { - accepted = true - // Prefer persisted social petname or claimed nickname - if let social = identityManager.getSocialIdentity(for: candidate.fingerprint) { - senderNickname = social.localPetname ?? social.claimedNickname - } else { - senderNickname = "anon" + String(peerID.id.prefix(4)) - } - break - } - } - } - } - - guard accepted else { + guard let senderNickname = BLEPeerSenderDisplayName.resolveKnownPeer( + peerID: peerID, + localPeerID: myPeerID, + localNickname: myNickname, + peers: peersSnapshot, + allowConnectedUnverified: false + ) ?? signedSenderDisplayName(for: packet, from: peerID) else { SecureLogger.warning("🚫 Dropping public message from unverified or unknown peer \(peerID.id.prefix(8))…", category: .security) return } @@ -3644,10 +3415,7 @@ extension BLEService { private func updatePeerLastSeen(_ peerID: PeerID) { // Use async to avoid deadlock - we don't need immediate consistency for last seen updates collectionsQueue.async(flags: .barrier) { - if var peer = self.peers[peerID] { - peer.lastSeen = Date() - self.peers[peerID] = peer - } + self.peerRegistry.updateLastSeen(peerID, at: Date()) } } @@ -3667,24 +3435,7 @@ extension BLEService { // NEW: Publish peer snapshots to subscribers and notify Transport delegates private func publishFullPeerData() { let transportPeers: [TransportPeerSnapshot] = collectionsQueue.sync { - // Compute nickname collision counts for connected peers - let connected = peers.values.filter { $0.isConnected } - var counts: [String: Int] = [:] - for p in connected { counts[p.nickname, default: 0] += 1 } - counts[myNickname, default: 0] += 1 - return peers.values.map { info in - var display = info.nickname - if info.isConnected, (counts[info.nickname] ?? 0) > 1 { - display += "#" + String(info.peerID.id.prefix(4)) - } - return TransportPeerSnapshot( - peerID: info.peerID, - nickname: display, - isConnected: info.isConnected, - noisePublicKey: info.noisePublicKey, - lastSeen: info.lastSeen - ) - } + peerRegistry.transportSnapshots(selfNickname: myNickname) } // Notify non-UI listeners peerSnapshotSubject.send(transportPeers) @@ -3701,7 +3452,7 @@ extension BLEService { // Adaptive announce: reduce frequency when we have connected peers let now = Date() - let connectedCount = collectionsQueue.sync { peers.values.filter { $0.isConnected }.count } + let connectedCount = collectionsQueue.sync { peerRegistry.connectedCount } let elapsed = now.timeIntervalSince(lastAnnounceSent) if connectedCount == 0 { // Discovery mode: keep frequent announces @@ -3719,15 +3470,15 @@ extension BLEService { // Activity-driven quick-announce: if we've seen any packet in last 5s and it has // been >=10s since the last announce, send a presence nudge. let recentSeen = collectionsQueue.sync { () -> Bool in - let cutoff = now.addingTimeInterval(-5.0) - return recentPacketTimestamps.contains(where: { $0 >= cutoff }) + recentTrafficTracker.hasTraffic(within: 5.0, now: now) } if recentSeen && elapsed >= 10.0 { sendAnnounce(forceSend: true) } // If we have no peers, ensure we're scanning and advertising - if peers.isEmpty { + let hasNoPeers = collectionsQueue.sync { peerRegistry.isEmpty } + if hasNoPeers { // Ensure we're advertising as peripheral if let pm = peripheralManager, pm.state == .poweredOn && !pm.isAdvertising { pm.startAdvertising(buildAdvertisementData()) @@ -3766,54 +3517,33 @@ extension BLEService { private func checkPeerConnectivity() { let now = Date() - var disconnectedPeers: [PeerID] = [] - let peerIDsForLinkState: [PeerID] = collectionsQueue.sync { Array(peers.keys) } - var cachedLinkStates: [PeerID: (hasPeripheral: Bool, hasCentral: Bool)] = [:] + let peerIDsForLinkState: [PeerID] = collectionsQueue.sync { peerRegistry.peerIDs } + var cachedLinkStates: [PeerID: BLEPeerLinkPresence] = [:] for peerID in peerIDsForLinkState { - cachedLinkStates[peerID] = linkState(for: peerID) + let state = linkState(for: peerID) + cachedLinkStates[peerID] = BLEPeerLinkPresence( + hasPeripheral: state.hasPeripheral, + hasCentral: state.hasCentral + ) } - var removedOfflineCount = 0 - collectionsQueue.sync(flags: .barrier) { - for (peerID, peer) in peers { - let age = now.timeIntervalSince(peer.lastSeen) - let retention: TimeInterval = peer.isVerifiedNickname ? TransportConfig.bleReachabilityRetentionVerifiedSeconds : TransportConfig.bleReachabilityRetentionUnverifiedSeconds - if peer.isConnected && age > TransportConfig.blePeerInactivityTimeoutSeconds { - // Check if we still have an active BLE connection to this peer - let state = cachedLinkStates[peerID] ?? (hasPeripheral: false, hasCentral: false) - let hasPeripheralConnection = state.hasPeripheral - let hasCentralConnection = state.hasCentral - - // If direct link is gone, mark as not connected (retain entry for reachability) - if !hasPeripheralConnection && !hasCentralConnection { - var updated = peer - updated.isConnected = false - peers[peerID] = updated - disconnectedPeers.append(peerID) - } - } - // Cleanup: remove peers that are not connected and past reachability retention - if !peer.isConnected { - if age > retention { - SecureLogger.debug("🗑️ Removing stale peer after reachability window: \(peerID.id.prefix(8))… (\(peer.nickname))", category: .session) - // Also remove any stored announcement from sync candidates - gossipSyncManager?.removeAnnouncementForPeer(peerID) - peers.removeValue(forKey: peerID) - removedOfflineCount += 1 - } - } - } + let changes = collectionsQueue.sync(flags: .barrier) { + peerRegistry.reconcileConnectivity(now: now, linkStates: cachedLinkStates) + } + for removedPeer in changes.removedPeers { + SecureLogger.debug("🗑️ Removing stale peer after reachability window: \(removedPeer.peerID.id.prefix(8))… (\(removedPeer.nickname))", category: .session) + gossipSyncManager?.removeAnnouncementForPeer(removedPeer.peerID) } // Update UI if there were direct disconnections or offline removals - if !disconnectedPeers.isEmpty || removedOfflineCount > 0 { + if !changes.disconnectedPeerIDs.isEmpty || !changes.removedPeers.isEmpty { notifyUI { [weak self] in guard let self else { return } // Get current peer list (after removal) - let currentPeerIDs = self.collectionsQueue.sync { self.currentPeerIDs } + let currentPeerIDs = self.collectionsQueue.sync { self.peerRegistry.peerIDs } - for peerID in disconnectedPeers { + for peerID in changes.disconnectedPeerIDs { self.deliverTransportEvent(.peerDisconnected(peerID)) } // Publish snapshots so UnifiedPeerService updates connection/reachability icons @@ -3891,8 +3621,10 @@ extension BLEService { #endif // Force full-time scanning if we have very few neighbors or very recent traffic let hasRecentTraffic: Bool = collectionsQueue.sync { - let cutoff = Date().addingTimeInterval(-TransportConfig.bleRecentTrafficForceScanSeconds) - return recentPacketTimestamps.contains(where: { $0 >= cutoff }) + recentTrafficTracker.hasTraffic( + within: TransportConfig.bleRecentTrafficForceScanSeconds, + now: Date() + ) } let forceScanOn = (connectedCount <= 2) || hasRecentTraffic let shouldDuty = dutyEnabled && active && connectedCount > 0 && !forceScanOn diff --git a/bitchat/Services/BLE/BLESubscriptionAnnounceLimiter.swift b/bitchat/Services/BLE/BLESubscriptionAnnounceLimiter.swift new file mode 100644 index 00000000..9846e22b --- /dev/null +++ b/bitchat/Services/BLE/BLESubscriptionAnnounceLimiter.swift @@ -0,0 +1,71 @@ +import Foundation + +enum BLESubscriptionAnnounceDecision: Equatable { + case allowed + case rateLimited(backoffSeconds: TimeInterval, attemptCount: Int, suppressAnnounce: Bool) +} + +struct BLESubscriptionAnnounceLimiter { + private struct State { + var lastAnnounceTime: Date + var attemptCount: Int + var currentBackoffSeconds: TimeInterval + } + + private var states: [String: State] = [:] + + var trackedCentralCount: Int { + states.count + } + + mutating func removeAll() { + states.removeAll() + } + + mutating func decision(for centralID: String, now: Date) -> BLESubscriptionAnnounceDecision { + pruneStaleEntries(now: now) + + guard let existing = states[centralID] else { + recordAllowedAttempt(for: centralID, now: now) + return .allowed + } + + let timeSinceLastAnnounce = now.timeIntervalSince(existing.lastAnnounceTime) + guard timeSinceLastAnnounce < existing.currentBackoffSeconds else { + recordAllowedAttempt(for: centralID, now: now) + return .allowed + } + + let newAttemptCount = existing.attemptCount + 1 + let newBackoff = min( + existing.currentBackoffSeconds * TransportConfig.bleSubscriptionRateLimitBackoffFactor, + TransportConfig.bleSubscriptionRateLimitMaxBackoffSeconds + ) + states[centralID] = State( + lastAnnounceTime: now, + attemptCount: newAttemptCount, + currentBackoffSeconds: newBackoff + ) + + return .rateLimited( + backoffSeconds: existing.currentBackoffSeconds, + attemptCount: existing.attemptCount, + suppressAnnounce: newAttemptCount >= TransportConfig.bleSubscriptionRateLimitMaxAttempts + ) + } + + private mutating func recordAllowedAttempt(for centralID: String, now: Date) { + states[centralID] = State( + lastAnnounceTime: now, + attemptCount: 1, + currentBackoffSeconds: TransportConfig.bleSubscriptionRateLimitMinSeconds + ) + } + + private mutating func pruneStaleEntries(now: Date) { + let windowSeconds = TransportConfig.bleSubscriptionRateLimitWindowSeconds + states = states.filter { _, state in + now.timeIntervalSince(state.lastAnnounceTime) < windowSeconds + } + } +} diff --git a/bitchatTests/ChatViewModelExtensionsTests.swift b/bitchatTests/ChatViewModelExtensionsTests.swift index 13934872..d5f95b8f 100644 --- a/bitchatTests/ChatViewModelExtensionsTests.swift +++ b/bitchatTests/ChatViewModelExtensionsTests.swift @@ -910,7 +910,7 @@ struct ChatViewModelMediaTransferTests { viewModel.selectedPrivateChatPeer = peerID viewModel.sendImage(from: sourceURL) - let didSend = await TestHelpers.waitUntil({ transport.sentPrivateFiles.count == 1 }, timeout: 1.0) + let didSend = await TestHelpers.waitUntil({ transport.sentPrivateFiles.count == 1 }, timeout: 5.0) #expect(didSend) #expect(transport.sentPrivateFiles.first?.peerID == peerID) #expect(transport.sentPrivateFiles.first?.packet.mimeType == "image/jpeg") diff --git a/bitchatTests/Services/BLEIngressPacketGuardTests.swift b/bitchatTests/Services/BLEIngressPacketGuardTests.swift new file mode 100644 index 00000000..754bc585 --- /dev/null +++ b/bitchatTests/Services/BLEIngressPacketGuardTests.swift @@ -0,0 +1,148 @@ +import BitFoundation +import Foundation +import Testing +@testable import bitchat + +@Suite("BLE ingress packet guard tests") +struct BLEIngressPacketGuardTests { + @Test("valid packets return the received and validation peer context") + func validPacketsReturnContext() throws { + let local = PeerID(str: "0011223344556677") + let bound = PeerID(str: "1122334455667788") + let sender = PeerID(str: "8899aabbccddeeff") + let packet = makePacket(sender: sender, timestamp: 1_000) + + let context = try #require(success(BLEIngressPacketGuard.evaluate( + packet: packet, + claimedSenderID: sender, + boundPeerID: bound, + localPeerID: local, + directAnnounceTTL: 7, + nowMs: 1_000, + isValidSyncResponse: { _ in false } + ))) + + #expect(context.receivedFromPeerID == bound) + #expect(context.validationPeerID == sender) + } + + @Test("self loopback and direct announce spoofing are rejected before timestamp checks") + func linkBindingRejectionsWinBeforeTimestampChecks() { + let local = PeerID(str: "0011223344556677") + let bound = PeerID(str: "1122334455667788") + let claimed = PeerID(str: "8899aabbccddeeff") + let selfPacket = makePacket(sender: local, timestamp: 0) + let spoofedAnnounce = makePacket(type: .announce, sender: claimed, timestamp: 0, ttl: 7) + + let selfResult = BLEIngressPacketGuard.evaluate( + packet: selfPacket, + claimedSenderID: local, + boundPeerID: bound, + localPeerID: local, + directAnnounceTTL: 7, + nowMs: 1_000_000, + isValidSyncResponse: { _ in false } + ) + let spoofResult = BLEIngressPacketGuard.evaluate( + packet: spoofedAnnounce, + claimedSenderID: claimed, + boundPeerID: bound, + localPeerID: local, + directAnnounceTTL: 7, + nowMs: 1_000_000, + isValidSyncResponse: { _ in false } + ) + + #expect(selfResult == .failure(.selfLoopback(packetType: MessageType.message.rawValue))) + #expect(spoofResult == .failure(.directSenderMismatch(boundPeerID: bound, claimedSenderID: claimed))) + } + + @Test("timestamp skew outside the window is rejected") + func timestampSkewIsRejected() { + let local = PeerID(str: "0011223344556677") + let sender = PeerID(str: "1122334455667788") + let packet = makePacket(sender: sender, timestamp: 1_000) + + let result = BLEIngressPacketGuard.evaluate( + packet: packet, + claimedSenderID: sender, + boundPeerID: nil, + localPeerID: local, + directAnnounceTTL: 7, + nowMs: 200_000, + maxTimestampSkewMs: 120_000, + isValidSyncResponse: { _ in false } + ) + + #expect(result == .failure(.timestampSkew( + peerID: sender, + skewMs: 199_000, + maxSkewMs: 120_000 + ))) + } + + @Test("valid RSR packets use bound peer validation and bypass timestamp skew") + func validRSRUsesBoundPeerAndBypassesTimestamp() throws { + let local = PeerID(str: "0011223344556677") + let bound = PeerID(str: "1122334455667788") + let sender = PeerID(str: "8899aabbccddeeff") + var packet = makePacket(sender: sender, timestamp: 1) + packet.isRSR = true + + let context = try #require(success(BLEIngressPacketGuard.evaluate( + packet: packet, + claimedSenderID: sender, + boundPeerID: bound, + localPeerID: local, + directAnnounceTTL: 7, + nowMs: 1_000_000, + isValidSyncResponse: { $0 == bound } + ))) + + #expect(context.receivedFromPeerID == bound) + #expect(context.validationPeerID == bound) + } + + @Test("invalid RSR packets are rejected") + func invalidRSRIsRejected() { + let local = PeerID(str: "0011223344556677") + let bound = PeerID(str: "1122334455667788") + let sender = PeerID(str: "8899aabbccddeeff") + var packet = makePacket(sender: sender, timestamp: 1) + packet.isRSR = true + + let result = BLEIngressPacketGuard.evaluate( + packet: packet, + claimedSenderID: sender, + boundPeerID: bound, + localPeerID: local, + directAnnounceTTL: 7, + nowMs: 1_000_000, + isValidSyncResponse: { _ in false } + ) + + #expect(result == .failure(.invalidRSR(peerID: bound))) + } + + private func makePacket( + type: MessageType = .message, + sender: PeerID, + timestamp: UInt64, + ttl: UInt8 = 3 + ) -> BitchatPacket { + BitchatPacket( + type: type.rawValue, + senderID: Data(hexString: sender.id) ?? Data(), + recipientID: nil, + timestamp: timestamp, + payload: Data([0x01, 0x02, 0x03]), + signature: nil, + ttl: ttl + ) + } + + private func success(_ result: Result) -> BLEIngressPacketContext? { + guard case .success(let context) = result else { return nil } + return context + } +} diff --git a/bitchatTests/Services/BLELogRateLimiterTests.swift b/bitchatTests/Services/BLELogRateLimiterTests.swift new file mode 100644 index 00000000..9185b7d0 --- /dev/null +++ b/bitchatTests/Services/BLELogRateLimiterTests.swift @@ -0,0 +1,36 @@ +import Foundation +import Testing +@testable import bitchat + +@Suite("BLE log rate limiter tests") +struct BLELogRateLimiterTests { + @Test("repeated log keys are suppressed until the default interval elapses") + func suppressesRepeatedKeysUntilIntervalElapses() { + let limiter = BLELogRateLimiter(defaultMinimumInterval: 5) + let now = Date(timeIntervalSince1970: 100) + + #expect(limiter.shouldLog(key: "ready:peer-a", now: now)) + #expect(!limiter.shouldLog(key: "ready:peer-a", now: now.addingTimeInterval(4.9))) + #expect(limiter.shouldLog(key: "ready:peer-a", now: now.addingTimeInterval(5))) + } + + @Test("different log keys are tracked independently") + func tracksKeysIndependently() { + let limiter = BLELogRateLimiter(defaultMinimumInterval: 5) + let now = Date(timeIntervalSince1970: 100) + + #expect(limiter.shouldLog(key: "ready:peer-a", now: now)) + #expect(limiter.shouldLog(key: "ready:peer-b", now: now)) + #expect(!limiter.shouldLog(key: "ready:peer-a", now: now.addingTimeInterval(1))) + } + + @Test("call sites can override the default interval") + func supportsPerCallIntervals() { + let limiter = BLELogRateLimiter(defaultMinimumInterval: 5) + let now = Date(timeIntervalSince1970: 100) + + #expect(limiter.shouldLog(key: "self-loopback", now: now, minimumInterval: 30)) + #expect(!limiter.shouldLog(key: "self-loopback", now: now.addingTimeInterval(29), minimumInterval: 30)) + #expect(limiter.shouldLog(key: "self-loopback", now: now.addingTimeInterval(30), minimumInterval: 30)) + } +} diff --git a/bitchatTests/Services/BLEOutboundFragmentPlannerTests.swift b/bitchatTests/Services/BLEOutboundFragmentPlannerTests.swift new file mode 100644 index 00000000..d89260ed --- /dev/null +++ b/bitchatTests/Services/BLEOutboundFragmentPlannerTests.swift @@ -0,0 +1,136 @@ +import BitFoundation +import Foundation +import Testing +@testable import bitchat + +@Suite("BLE outbound fragment planner tests") +struct BLEOutboundFragmentPlannerTests { + @Test("planner splits packets and preserves reassembled payload") + func plannerSplitsAndReassemblesPacket() throws { + let packet = makePacket(payload: makePayload(count: 384)) + let request = BLEOutboundFragmentTransferRequest( + packet: packet, + pad: false, + maxChunk: 128, + directedPeer: nil, + transferId: nil + ) + + let plan = try #require(BLEOutboundFragmentPlanner.makePlan( + for: request, + defaultChunkSize: 256, + bleMaxMTU: 512, + fragmentID: Data(repeating: 0xA1, count: 8) + )) + let headers = try plan.fragmentPackets.map { try #require(BLEFragmentHeader(packet: $0)) } + let reassembled = headers.reduce(into: Data()) { data, header in + data.append(header.fragmentData) + } + let decoded = try #require(BinaryProtocol.decode(reassembled)) + + #expect(plan.fragmentVersion == 1) + #expect(plan.chunkSize == 128) + #expect(plan.spacingMs == TransportConfig.bleFragmentSpacingMs) + #expect(headers.map(\.index) == Array(0.. BitchatPacket { + BitchatPacket( + type: MessageType.message.rawValue, + senderID: Data([0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77]), + recipientID: nil, + timestamp: 0x0102030405, + payload: payload, + signature: nil, + ttl: 3, + route: route, + isRSR: isRSR + ) + } + + private func makePayload(count: Int, seed: UInt64 = 0xABCD_1234) -> Data { + var state = seed + return Data((0..> 32) + }) + } +} diff --git a/bitchatTests/Services/BLEPeerRegistryTests.swift b/bitchatTests/Services/BLEPeerRegistryTests.swift new file mode 100644 index 00000000..01b69eae --- /dev/null +++ b/bitchatTests/Services/BLEPeerRegistryTests.swift @@ -0,0 +1,111 @@ +import BitFoundation +import Foundation +import Testing +@testable import bitchat + +@Suite("BLE peer registry tests") +struct BLEPeerRegistryTests { + @Test("upserted announces track new, reconnect, and rename transitions") + func upsertVerifiedAnnounceTracksTransitions() { + var registry = BLEPeerRegistry() + let peerID = PeerID(str: "1122334455667788") + let firstSeen = Date(timeIntervalSince1970: 100) + + let first = registry.upsertVerifiedAnnounce( + peerID: peerID, + nickname: "alice", + noisePublicKey: Data([1, 2, 3]), + signingPublicKey: Data([4, 5, 6]), + isConnected: true, + now: firstSeen + ) + + #expect(first.isNewPeer) + #expect(!first.wasDisconnected) + #expect(first.previousNickname == nil) + #expect(registry.connectedPeerIDs == [peerID]) + #expect(registry.nickname(for: peerID, connectedOnly: true) == "alice") + + registry.markDisconnected(peerID) + let reconnect = registry.upsertVerifiedAnnounce( + peerID: peerID, + nickname: "alice-renamed", + noisePublicKey: Data([1, 2, 3]), + signingPublicKey: Data([4, 5, 6]), + isConnected: true, + now: firstSeen.addingTimeInterval(1) + ) + + #expect(!reconnect.isNewPeer) + #expect(reconnect.wasDisconnected) + #expect(reconnect.previousNickname == "alice") + #expect(registry.info(for: peerID)?.nickname == "alice-renamed") + } + + @Test("reachability keeps recent verified offline peers only when mesh is attached") + func reachabilityRequiresMeshAttachmentForOfflinePeers() { + let offlinePeer = PeerID(str: "1122334455667788") + let connectedPeer = PeerID(str: "8877665544332211") + let now = Date() + + var isolatedRegistry = BLEPeerRegistry() + isolatedRegistry.upsert(BLEPeerInfo( + peerID: offlinePeer, + nickname: "offline", + isConnected: false, + noisePublicKey: nil, + signingPublicKey: nil, + isVerifiedNickname: true, + lastSeen: now + )) + + #expect(!isolatedRegistry.isReachable(offlinePeer, now: now)) + + var attachedRegistry = isolatedRegistry + attachedRegistry.upsert(BLEPeerInfo( + peerID: connectedPeer, + nickname: "connected", + isConnected: true, + noisePublicKey: nil, + signingPublicKey: nil, + isVerifiedNickname: true, + lastSeen: now + )) + + #expect(attachedRegistry.isReachable(offlinePeer, now: now)) + } + + @Test("connectivity reconciliation disconnects inactive peers and prunes expired offline peers") + func reconcileConnectivityUpdatesAndPrunesPeerState() { + var registry = BLEPeerRegistry() + let inactiveConnectedPeer = PeerID(str: "1122334455667788") + let expiredOfflinePeer = PeerID(str: "8877665544332211") + let now = Date() + + registry.upsert(BLEPeerInfo( + peerID: inactiveConnectedPeer, + nickname: "inactive", + isConnected: true, + noisePublicKey: nil, + signingPublicKey: nil, + isVerifiedNickname: true, + lastSeen: now.addingTimeInterval(-TransportConfig.blePeerInactivityTimeoutSeconds - 1) + )) + registry.upsert(BLEPeerInfo( + peerID: expiredOfflinePeer, + nickname: "expired", + isConnected: false, + noisePublicKey: nil, + signingPublicKey: nil, + isVerifiedNickname: true, + lastSeen: .distantPast + )) + + let changes = registry.reconcileConnectivity(now: now, linkStates: [:]) + + #expect(changes.disconnectedPeerIDs == [inactiveConnectedPeer]) + #expect(changes.removedPeers.map(\.peerID) == [expiredOfflinePeer]) + #expect(registry.info(for: inactiveConnectedPeer)?.isConnected == false) + #expect(registry.info(for: expiredOfflinePeer) == nil) + } +} diff --git a/bitchatTests/Services/BLEPeerSenderDisplayNameTests.swift b/bitchatTests/Services/BLEPeerSenderDisplayNameTests.swift new file mode 100644 index 00000000..9bbf0c51 --- /dev/null +++ b/bitchatTests/Services/BLEPeerSenderDisplayNameTests.swift @@ -0,0 +1,78 @@ +import BitFoundation +import Foundation +import Testing +@testable import bitchat + +@Suite("BLE peer sender display name tests") +struct BLEPeerSenderDisplayNameTests { + @Test("local peer resolves to local nickname") + func localPeerUsesLocalNickname() { + let local = PeerID(str: "1122334455667788") + + #expect(BLEPeerSenderDisplayName.resolveKnownPeer( + peerID: local, + localPeerID: local, + localNickname: "me", + peers: [:], + allowConnectedUnverified: false + ) == "me") + } + + @Test("verified nickname collisions add peer suffix") + func verifiedCollisionAddsSuffix() { + let local = PeerID(str: "1122334455667788") + let peer = PeerID(str: "8877665544332211") + let peers = [ + peer: makeInfo(peerID: peer, nickname: "sam", isConnected: false, isVerifiedNickname: true) + ] + + #expect(BLEPeerSenderDisplayName.resolveKnownPeer( + peerID: peer, + localPeerID: local, + localNickname: "sam", + peers: peers, + allowConnectedUnverified: false + ) == "sam#8877") + } + + @Test("connected unverified fallback is opt in") + func connectedUnverifiedFallbackIsOptIn() { + let local = PeerID(str: "1122334455667788") + let peer = PeerID(str: "8877665544332211") + let peers = [ + peer: makeInfo(peerID: peer, nickname: "", isConnected: true, isVerifiedNickname: false) + ] + + #expect(BLEPeerSenderDisplayName.resolveKnownPeer( + peerID: peer, + localPeerID: local, + localNickname: "me", + peers: peers, + allowConnectedUnverified: false + ) == nil) + #expect(BLEPeerSenderDisplayName.resolveKnownPeer( + peerID: peer, + localPeerID: local, + localNickname: "me", + peers: peers, + allowConnectedUnverified: true + ) == "anon8877") + } + + private func makeInfo( + peerID: PeerID, + nickname: String, + isConnected: Bool, + isVerifiedNickname: Bool + ) -> BLEPeerInfo { + BLEPeerInfo( + peerID: peerID, + nickname: nickname, + isConnected: isConnected, + noisePublicKey: nil, + signingPublicKey: nil, + isVerifiedNickname: isVerifiedNickname, + lastSeen: Date(timeIntervalSince1970: 0) + ) + } +} diff --git a/bitchatTests/Services/BLEReceivePipelineTests.swift b/bitchatTests/Services/BLEReceivePipelineTests.swift new file mode 100644 index 00000000..91a63efd --- /dev/null +++ b/bitchatTests/Services/BLEReceivePipelineTests.swift @@ -0,0 +1,105 @@ +import BitFoundation +import Foundation +import Testing +@testable import bitchat + +@Suite("BLE receive pipeline tests") +struct BLEReceivePipelineTests { + @Test("context includes sender, type-scoped message ID, and logging policy") + func contextBuildsTypeScopedMessageID() { + let sender = PeerID(str: "1122334455667788") + let local = PeerID(str: "8877665544332211") + let packet = makePacket(type: .message, sender: sender, timestamp: 1234) + + let context = BLEReceivePipeline.context(for: packet, localPeerID: local) + + #expect(context.senderID == sender) + #expect(context.messageID == "\(sender)-1234-\(MessageType.message.rawValue)") + #expect(context.messageType == .message) + #expect(context.shouldDeduplicate) + #expect(context.logsHandlingDetails) + } + + @Test("fragments and self sync replays bypass global deduplication") + func contextBypassesDeduplicationForFragmentsAndSelfSyncReplay() { + let local = PeerID(str: "1122334455667788") + let remote = PeerID(str: "8877665544332211") + + let fragment = BLEReceivePipeline.context( + for: makePacket(type: .fragment, sender: remote), + localPeerID: local + ) + let selfReplay = BLEReceivePipeline.context( + for: makePacket(type: .message, sender: local, ttl: 0), + localPeerID: local + ) + + #expect(!fragment.shouldDeduplicate) + #expect(!selfReplay.shouldDeduplicate) + } + + @Test("dense duplicate traffic cancels pending relays but sparse traffic does not") + func duplicateRelayCancellationUsesGraphDensity() { + #expect(!BLEReceivePipeline.shouldCancelScheduledRelayForDuplicate(connectedPeerCount: 2)) + #expect(BLEReceivePipeline.shouldCancelScheduledRelayForDuplicate(connectedPeerCount: 3)) + } + + @Test("relay decision maps packet context and suppresses local recipient traffic") + func relayDecisionSuppressesLocalRecipientTraffic() { + let sender = PeerID(str: "1122334455667788") + let local = PeerID(str: "8877665544332211") + let packet = makePacket( + type: .noiseEncrypted, + sender: sender, + recipient: local, + ttl: 7 + ) + + let decision = BLEReceivePipeline.relayDecision( + for: packet, + senderID: sender, + localPeerID: local, + degree: 3, + highDegreeThreshold: TransportConfig.bleHighDegreeThreshold + ) + + #expect(!decision.shouldRelay) + } + + @Test("recent traffic tracker prunes by count and time window") + func recentTrafficTrackerPrunesByCountAndWindow() { + var tracker = BLERecentTrafficTracker() + let now = Date(timeIntervalSince1970: 1_000) + + tracker.recordPacket(at: now.addingTimeInterval(-TransportConfig.bleRecentPacketWindowSeconds - 1)) + #expect(!tracker.hasTraffic(within: TransportConfig.bleRecentPacketWindowSeconds, now: now)) + + for index in 0...TransportConfig.bleRecentPacketWindowMaxCount { + tracker.recordPacket(at: now.addingTimeInterval(Double(index) * 0.001)) + } + + #expect(tracker.count == TransportConfig.bleRecentPacketWindowMaxCount) + #expect(tracker.hasTraffic(within: 1.0, now: now.addingTimeInterval(0.1))) + + tracker.removeAll() + #expect(tracker.count == 0) + } + + private func makePacket( + type: MessageType, + sender: PeerID, + recipient: PeerID? = nil, + timestamp: UInt64 = 1, + ttl: UInt8 = 7 + ) -> BitchatPacket { + BitchatPacket( + type: type.rawValue, + senderID: Data(hexString: sender.id) ?? Data(), + recipientID: recipient.flatMap { Data(hexString: $0.id) }, + timestamp: timestamp, + payload: Data([0x01, 0x02]), + signature: nil, + ttl: ttl + ) + } +} diff --git a/bitchatTests/Services/BLESubscriptionAnnounceLimiterTests.swift b/bitchatTests/Services/BLESubscriptionAnnounceLimiterTests.swift new file mode 100644 index 00000000..4f6966c3 --- /dev/null +++ b/bitchatTests/Services/BLESubscriptionAnnounceLimiterTests.swift @@ -0,0 +1,61 @@ +import Foundation +import Testing +@testable import bitchat + +@Suite("BLE subscription announce limiter tests") +struct BLESubscriptionAnnounceLimiterTests { + @Test("first subscription is allowed and repeated subscriptions are rate limited") + func repeatedSubscriptionsAreRateLimited() { + var limiter = BLESubscriptionAnnounceLimiter() + let centralID = "central-a" + let now = Date(timeIntervalSince1970: 100) + + #expect(limiter.decision(for: centralID, now: now) == .allowed) + #expect(limiter.trackedCentralCount == 1) + + let second = limiter.decision(for: centralID, now: now.addingTimeInterval(0.1)) + #expect(second == .rateLimited( + backoffSeconds: TransportConfig.bleSubscriptionRateLimitMinSeconds, + attemptCount: 1, + suppressAnnounce: false + )) + } + + @Test("rapid subscription attempts eventually suppress announces") + func rapidAttemptsSuppressAnnouncesAtThreshold() { + var limiter = BLESubscriptionAnnounceLimiter() + let centralID = "central-a" + let now = Date(timeIntervalSince1970: 100) + + #expect(limiter.decision(for: centralID, now: now) == .allowed) + + var decision = BLESubscriptionAnnounceDecision.allowed + for attempt in 2...TransportConfig.bleSubscriptionRateLimitMaxAttempts { + decision = limiter.decision( + for: centralID, + now: now.addingTimeInterval(Double(attempt) * 0.01) + ) + } + + if case let .rateLimited(_, _, suppressAnnounce) = decision { + #expect(suppressAnnounce) + } else { + Issue.record("Expected rate-limited decision at suppression threshold") + } + } + + @Test("stale limiter entries are pruned on the next decision") + func staleEntriesArePruned() { + var limiter = BLESubscriptionAnnounceLimiter() + let staleCentralID = "central-a" + let freshCentralID = "central-b" + let now = Date(timeIntervalSince1970: 100) + + #expect(limiter.decision(for: staleCentralID, now: now) == .allowed) + #expect(limiter.trackedCentralCount == 1) + + let afterWindow = now.addingTimeInterval(TransportConfig.bleSubscriptionRateLimitWindowSeconds + 1) + #expect(limiter.decision(for: freshCentralID, now: afterWindow) == .allowed) + #expect(limiter.trackedCentralCount == 1) + } +} From 3eb4f2bd72cf793ed2aba151b3619ebc3d7381e9 Mon Sep 17 00:00:00 2001 From: jack <212554440+jackjackbits@users.noreply.github.com> Date: Tue, 2 Jun 2026 09:01:59 +0200 Subject: [PATCH 017/216] Extract BLE and chat architecture policies (#1324) Co-authored-by: jack --- bitchat/Features/media/ImageUtils.swift | 27 +- bitchat/Nostr/Base64URLCoding.swift | 22 + bitchat/Nostr/NostrProtocol.swift | 21 +- .../BLE/BLEAnnounceHandlingPolicy.swift | 116 ++++ .../Services/BLE/BLEAnnounceThrottle.swift | 31 + .../Services/BLE/BLEDirectedRelaySpool.swift | 71 ++ .../Services/BLE/BLEFileTransferPolicy.swift | 71 ++ .../Services/BLE/BLEMaintenancePolicy.swift | 62 ++ .../Services/BLE/BLEOutboundLinkPlanner.swift | 87 +++ .../BLE/BLEPacketFreshnessPolicy.swift | 27 + .../Services/BLE/BLEPeerEventDebouncer.swift | 25 + .../BLE/BLEPeerPublishCoalescer.swift | 43 ++ .../Services/BLE/BLEPublicMessagePolicy.swift | 42 ++ .../BLE/BLERouteForwardingPolicy.swift | 93 +++ bitchat/Services/BLE/BLEScanDutyPolicy.swift | 35 + .../Services/BLE/BLEScheduledRelayStore.swift | 43 ++ .../BLE/BLESelfBroadcastTracker.swift | 40 ++ bitchat/Services/BLE/BLEService.swift | 643 +++++++----------- .../ViewModels/ChatBluetoothAlertPolicy.swift | 35 + .../ViewModels/ChatFavoriteTogglePolicy.swift | 67 ++ bitchat/ViewModels/ChatMediaPreparation.swift | 57 ++ .../ChatMediaTransferCoordinator.swift | 74 +- bitchat/ViewModels/ChatNostrCoordinator.swift | 2 +- .../ChatPeerIdentityCoordinator.swift | 84 +++ .../ViewModels/ChatUnreadStateResolver.swift | 43 ++ bitchat/ViewModels/ChatViewModel.swift | 436 +++--------- .../ChatBluetoothAlertPolicyTests.swift | 40 ++ .../ChatFavoriteTogglePolicyTests.swift | 70 ++ bitchatTests/ChatMediaPreparationTests.swift | 92 +++ .../ChatUnreadStateResolverTests.swift | 115 ++++ .../ChatViewModelExtensionsTests.swift | 3 +- bitchatTests/Nostr/Base64URLCodingTests.swift | 30 + .../BLEAnnounceHandlingPolicyTests.swift | 233 +++++++ .../Services/BLEAnnounceThrottleTests.swift | 52 ++ .../Services/BLEDirectedRelaySpoolTests.swift | 94 +++ .../Services/BLEFileTransferPolicyTests.swift | 143 ++++ .../Services/BLEMaintenancePolicyTests.swift | 113 +++ .../BLEOutboundLinkPlannerTests.swift | 138 ++++ .../BLEPacketFreshnessPolicyTests.swift | 44 ++ .../Services/BLEPeerEventDebouncerTests.swift | 52 ++ .../BLEPeerPublishCoalescerTests.swift | 64 ++ .../BLEPublicMessagePolicyTests.swift | 125 ++++ .../BLERouteForwardingPolicyTests.swift | 154 +++++ .../Services/BLEScanDutyPolicyTests.swift | 75 ++ .../BLEScheduledRelayStoreTests.swift | 68 ++ .../BLESelfBroadcastTrackerTests.swift | 70 ++ 46 files changed, 3286 insertions(+), 786 deletions(-) create mode 100644 bitchat/Nostr/Base64URLCoding.swift create mode 100644 bitchat/Services/BLE/BLEAnnounceHandlingPolicy.swift create mode 100644 bitchat/Services/BLE/BLEAnnounceThrottle.swift create mode 100644 bitchat/Services/BLE/BLEDirectedRelaySpool.swift create mode 100644 bitchat/Services/BLE/BLEFileTransferPolicy.swift create mode 100644 bitchat/Services/BLE/BLEMaintenancePolicy.swift create mode 100644 bitchat/Services/BLE/BLEOutboundLinkPlanner.swift create mode 100644 bitchat/Services/BLE/BLEPacketFreshnessPolicy.swift create mode 100644 bitchat/Services/BLE/BLEPeerEventDebouncer.swift create mode 100644 bitchat/Services/BLE/BLEPeerPublishCoalescer.swift create mode 100644 bitchat/Services/BLE/BLEPublicMessagePolicy.swift create mode 100644 bitchat/Services/BLE/BLERouteForwardingPolicy.swift create mode 100644 bitchat/Services/BLE/BLEScanDutyPolicy.swift create mode 100644 bitchat/Services/BLE/BLEScheduledRelayStore.swift create mode 100644 bitchat/Services/BLE/BLESelfBroadcastTracker.swift create mode 100644 bitchat/ViewModels/ChatBluetoothAlertPolicy.swift create mode 100644 bitchat/ViewModels/ChatFavoriteTogglePolicy.swift create mode 100644 bitchat/ViewModels/ChatMediaPreparation.swift create mode 100644 bitchat/ViewModels/ChatUnreadStateResolver.swift create mode 100644 bitchatTests/ChatBluetoothAlertPolicyTests.swift create mode 100644 bitchatTests/ChatFavoriteTogglePolicyTests.swift create mode 100644 bitchatTests/ChatMediaPreparationTests.swift create mode 100644 bitchatTests/ChatUnreadStateResolverTests.swift create mode 100644 bitchatTests/Nostr/Base64URLCodingTests.swift create mode 100644 bitchatTests/Services/BLEAnnounceHandlingPolicyTests.swift create mode 100644 bitchatTests/Services/BLEAnnounceThrottleTests.swift create mode 100644 bitchatTests/Services/BLEDirectedRelaySpoolTests.swift create mode 100644 bitchatTests/Services/BLEFileTransferPolicyTests.swift create mode 100644 bitchatTests/Services/BLEMaintenancePolicyTests.swift create mode 100644 bitchatTests/Services/BLEOutboundLinkPlannerTests.swift create mode 100644 bitchatTests/Services/BLEPacketFreshnessPolicyTests.swift create mode 100644 bitchatTests/Services/BLEPeerEventDebouncerTests.swift create mode 100644 bitchatTests/Services/BLEPeerPublishCoalescerTests.swift create mode 100644 bitchatTests/Services/BLEPublicMessagePolicyTests.swift create mode 100644 bitchatTests/Services/BLERouteForwardingPolicyTests.swift create mode 100644 bitchatTests/Services/BLEScanDutyPolicyTests.swift create mode 100644 bitchatTests/Services/BLEScheduledRelayStoreTests.swift create mode 100644 bitchatTests/Services/BLESelfBroadcastTrackerTests.swift diff --git a/bitchat/Features/media/ImageUtils.swift b/bitchat/Features/media/ImageUtils.swift index a75cc6db..b49f92ca 100644 --- a/bitchat/Features/media/ImageUtils.swift +++ b/bitchat/Features/media/ImageUtils.swift @@ -15,17 +15,10 @@ enum ImageUtilsError: Error { enum ImageUtils { private static let compressionQuality: CGFloat = 0.82 private static let targetImageBytes: Int = 45_000 + private static let maxSourceImageBytes: Int = 10 * 1024 * 1024 static func processImage(at url: URL, maxDimension: CGFloat = 448, outputDirectory: URL? = nil) throws -> URL { - // Security H1: Check file size BEFORE reading into memory - let attrs = try FileManager.default.attributesOfItem(atPath: url.path) - guard let fileSize = attrs[.size] as? Int else { - throw ImageUtilsError.invalidImage - } - // Allow up to 10MB source images (will be scaled down) - guard fileSize <= 10 * 1024 * 1024 else { - throw ImageUtilsError.invalidImage - } + try validateImageSource(at: url) let data = try Data(contentsOf: url) #if os(iOS) @@ -37,6 +30,22 @@ enum ImageUtils { #endif } + static func validateImageSource(at url: URL) throws { + // Security H1: Check file size BEFORE reading into memory. + let attrs = try FileManager.default.attributesOfItem(atPath: url.path) + guard let fileSize = attrs[.size] as? Int, + fileSize > 0, + fileSize <= maxSourceImageBytes else { + throw ImageUtilsError.invalidImage + } + + let options = [kCGImageSourceShouldCache: false] as CFDictionary + guard let source = CGImageSourceCreateWithURL(url as CFURL, options), + CGImageSourceGetType(source) != nil else { + throw ImageUtilsError.invalidImage + } + } + #if os(iOS) static func processImage(_ image: UIImage, maxDimension: CGFloat = 448, outputDirectory: URL? = nil) throws -> URL { return try autoreleasepool { diff --git a/bitchat/Nostr/Base64URLCoding.swift b/bitchat/Nostr/Base64URLCoding.swift new file mode 100644 index 00000000..bbc04ea6 --- /dev/null +++ b/bitchat/Nostr/Base64URLCoding.swift @@ -0,0 +1,22 @@ +import Foundation + +enum Base64URLCoding { + static func encode(_ data: Data) -> String { + data.base64EncodedString() + .replacingOccurrences(of: "+", with: "-") + .replacingOccurrences(of: "/", with: "_") + .replacingOccurrences(of: "=", with: "") + } + + static func decode(_ string: String) -> Data? { + var base64 = string + let padding = (4 - (base64.count % 4)) % 4 + if padding > 0 { + base64 += String(repeating: "=", count: padding) + } + base64 = base64 + .replacingOccurrences(of: "-", with: "+") + .replacingOccurrences(of: "_", with: "/") + return Data(base64Encoded: base64) + } +} diff --git a/bitchat/Nostr/NostrProtocol.swift b/bitchat/Nostr/NostrProtocol.swift index 4a05eaf7..4b15bb58 100644 --- a/bitchat/Nostr/NostrProtocol.swift +++ b/bitchat/Nostr/NostrProtocol.swift @@ -303,7 +303,7 @@ struct NostrProtocol { combined.append(nonce24) combined.append(sealed.ciphertext) combined.append(sealed.tag) - return "v2:" + base64URLEncode(combined) + return "v2:" + Base64URLCoding.encode(combined) } private static func decrypt( @@ -314,7 +314,7 @@ struct NostrProtocol { // Expect NIP-44 v2 format guard ciphertext.hasPrefix("v2:") else { throw NostrError.invalidCiphertext } let encoded = String(ciphertext.dropFirst(3)) - guard let data = base64URLDecode(encoded), + guard let data = Base64URLCoding.decode(encoded), data.count > (24 + 16), let senderPubkeyData = Data(hexString: senderPubkey) else { throw NostrError.invalidCiphertext @@ -580,24 +580,9 @@ enum NostrError: Error { case encryptionFailed } -// MARK: - NIP-44 v2 helpers (XChaCha20-Poly1305 + base64url) +// MARK: - NIP-44 v2 helpers (XChaCha20-Poly1305) private extension NostrProtocol { - static func base64URLEncode(_ data: Data) -> String { - return data.base64EncodedString() - .replacingOccurrences(of: "+", with: "-") - .replacingOccurrences(of: "/", with: "_") - .replacingOccurrences(of: "=", with: "") - } - - static func base64URLDecode(_ s: String) -> Data? { - var str = s - let pad = (4 - (str.count % 4)) % 4 - if pad > 0 { str += String(repeating: "=", count: pad) } - str = str.replacingOccurrences(of: "-", with: "+").replacingOccurrences(of: "_", with: "/") - return Data(base64Encoded: str) - } - static func deriveNIP44V2Key(from sharedSecretData: Data) throws -> Data { let derivedKey = HKDF.deriveKey( inputKeyMaterial: SymmetricKey(data: sharedSecretData), diff --git a/bitchat/Services/BLE/BLEAnnounceHandlingPolicy.swift b/bitchat/Services/BLE/BLEAnnounceHandlingPolicy.swift new file mode 100644 index 00000000..9e81d9ce --- /dev/null +++ b/bitchat/Services/BLE/BLEAnnounceHandlingPolicy.swift @@ -0,0 +1,116 @@ +import BitFoundation +import Foundation + +struct BLEAnnouncePreflightAcceptance { + let announcement: AnnouncementPacket + let derivedPeerID: PeerID +} + +enum BLEAnnouncePreflightRejection: Equatable { + case malformed + case senderMismatch(derivedPeerID: PeerID) + case selfAnnounce + case stale(ageSeconds: Double) +} + +enum BLEAnnouncePreflightDecision { + case accept(BLEAnnouncePreflightAcceptance) + case reject(BLEAnnouncePreflightRejection) +} + +enum BLEAnnouncePreflightPolicy { + static func evaluate( + packet: BitchatPacket, + from peerID: PeerID, + localPeerID: PeerID, + now: Date + ) -> BLEAnnouncePreflightDecision { + guard let announcement = AnnouncementPacket.decode(from: packet.payload) else { + return .reject(.malformed) + } + + let derivedPeerID = PeerID(publicKey: announcement.noisePublicKey) + guard derivedPeerID == peerID else { + return .reject(.senderMismatch(derivedPeerID: derivedPeerID)) + } + + guard peerID != localPeerID else { + return .reject(.selfAnnounce) + } + + guard !BLEPacketFreshnessPolicy.isStale(timestampMilliseconds: packet.timestamp, now: now) else { + return .reject(.stale(ageSeconds: BLEPacketFreshnessPolicy.ageSeconds( + timestampMilliseconds: packet.timestamp, + now: now + ))) + } + + return .accept(BLEAnnouncePreflightAcceptance( + announcement: announcement, + derivedPeerID: derivedPeerID + )) + } +} + +enum BLEAnnounceTrustRejection: Equatable { + case missingSignature + case invalidSignature + case keyMismatch +} + +enum BLEAnnounceTrustDecision: Equatable { + case verified + case reject(BLEAnnounceTrustRejection) + + var isVerified: Bool { + self == .verified + } +} + +enum BLEAnnounceTrustPolicy { + static func evaluate( + hasSignature: Bool, + signatureValid: Bool, + existingNoisePublicKey: Data?, + announcedNoisePublicKey: Data + ) -> BLEAnnounceTrustDecision { + if let existingNoisePublicKey, existingNoisePublicKey != announcedNoisePublicKey { + return .reject(.keyMismatch) + } + + guard hasSignature else { + return .reject(.missingSignature) + } + + guard signatureValid else { + return .reject(.invalidSignature) + } + + return .verified + } +} + +struct BLEAnnounceResponsePlan: Equatable { + let shouldNotifyPeerConnected: Bool + let shouldScheduleInitialSync: Bool + let shouldSendAnnounceBack: Bool + let shouldScheduleAfterglow: Bool +} + +enum BLEAnnounceResponsePolicy { + static func plan( + isDirectAnnounce: Bool, + isNewPeer: Bool, + isReconnectedPeer: Bool, + shouldSendAnnounceBack: Bool + ) -> BLEAnnounceResponsePlan { + let shouldNotifyPeerConnected = isDirectAnnounce && (isNewPeer || isReconnectedPeer) + + return BLEAnnounceResponsePlan( + shouldNotifyPeerConnected: shouldNotifyPeerConnected, + shouldScheduleInitialSync: shouldNotifyPeerConnected, + shouldSendAnnounceBack: shouldSendAnnounceBack, + shouldScheduleAfterglow: isNewPeer + ) + } +} diff --git a/bitchat/Services/BLE/BLEAnnounceThrottle.swift b/bitchat/Services/BLE/BLEAnnounceThrottle.swift new file mode 100644 index 00000000..6bd214b3 --- /dev/null +++ b/bitchat/Services/BLE/BLEAnnounceThrottle.swift @@ -0,0 +1,31 @@ +import Foundation + +struct BLEAnnounceThrottle { + private var lastSent: Date + private let normalMinimumInterval: TimeInterval + private let forcedMinimumInterval: TimeInterval + + init( + lastSent: Date = .distantPast, + normalMinimumInterval: TimeInterval = TransportConfig.bleAnnounceMinInterval, + forcedMinimumInterval: TimeInterval = TransportConfig.bleForceAnnounceMinIntervalSeconds + ) { + self.lastSent = lastSent + self.normalMinimumInterval = normalMinimumInterval + self.forcedMinimumInterval = forcedMinimumInterval + } + + func elapsed(since now: Date) -> TimeInterval { + now.timeIntervalSince(lastSent) + } + + mutating func shouldSend(force: Bool, now: Date) -> Bool { + let minimumInterval = force ? forcedMinimumInterval : normalMinimumInterval + guard elapsed(since: now) >= minimumInterval else { + return false + } + + lastSent = now + return true + } +} diff --git a/bitchat/Services/BLE/BLEDirectedRelaySpool.swift b/bitchat/Services/BLE/BLEDirectedRelaySpool.swift new file mode 100644 index 00000000..9f890eb6 --- /dev/null +++ b/bitchat/Services/BLE/BLEDirectedRelaySpool.swift @@ -0,0 +1,71 @@ +import BitFoundation +import Foundation + +struct BLEDirectedRelaySpoolEntry { + let recipient: PeerID + let packet: BitchatPacket +} + +struct BLEDirectedRelaySpool { + private struct StoredPacket { + let packet: BitchatPacket + let enqueuedAt: Date + } + + private var packetsByRecipient: [PeerID: [String: StoredPacket]] = [:] + + var isEmpty: Bool { + packetsByRecipient.isEmpty + } + + var count: Int { + packetsByRecipient.values.reduce(0) { $0 + $1.count } + } + + @discardableResult + mutating func enqueue( + packet: BitchatPacket, + recipient: PeerID, + messageID: String, + enqueuedAt: Date + ) -> Bool { + var packets = packetsByRecipient[recipient] ?? [:] + guard packets[messageID] == nil else { + return false + } + + packets[messageID] = StoredPacket(packet: packet, enqueuedAt: enqueuedAt) + packetsByRecipient[recipient] = packets + return true + } + + mutating func drainUnexpired(now: Date, window: TimeInterval) -> [BLEDirectedRelaySpoolEntry] { + var entries: [BLEDirectedRelaySpoolEntry] = [] + + for (recipient, packets) in packetsByRecipient { + for stored in packets.values where now.timeIntervalSince(stored.enqueuedAt) <= window { + entries.append(BLEDirectedRelaySpoolEntry(recipient: recipient, packet: stored.packet)) + } + } + + packetsByRecipient.removeAll() + return entries + } + + mutating func pruneExpired(now: Date, window: TimeInterval) { + guard !packetsByRecipient.isEmpty else { return } + + var pruned: [PeerID: [String: StoredPacket]] = [:] + for (recipient, packets) in packetsByRecipient { + let freshPackets = packets.filter { now.timeIntervalSince($0.value.enqueuedAt) <= window } + if !freshPackets.isEmpty { + pruned[recipient] = freshPackets + } + } + packetsByRecipient = pruned + } + + mutating func removeAll() { + packetsByRecipient.removeAll() + } +} diff --git a/bitchat/Services/BLE/BLEFileTransferPolicy.swift b/bitchat/Services/BLE/BLEFileTransferPolicy.swift new file mode 100644 index 00000000..0eedc429 --- /dev/null +++ b/bitchat/Services/BLE/BLEFileTransferPolicy.swift @@ -0,0 +1,71 @@ +import BitFoundation +import Foundation + +struct BLEFileTransferDeliveryPlan: Equatable { + let isPrivateMessage: Bool + let shouldTrackForSync: Bool +} + +enum BLEFileTransferPolicy { + static func isSelfEcho(packet: BitchatPacket, from peerID: PeerID, localPeerID: PeerID) -> Bool { + peerID == localPeerID && packet.ttl != 0 + } + + static func deliveryPlan(packet: BitchatPacket, localPeerID: PeerID) -> BLEFileTransferDeliveryPlan? { + guard let recipientID = packet.recipientID else { + return BLEFileTransferDeliveryPlan(isPrivateMessage: false, shouldTrackForSync: true) + } + + let isBroadcast = recipientID.allSatisfy { $0 == 0xFF } + if isBroadcast { + return BLEFileTransferDeliveryPlan(isPrivateMessage: false, shouldTrackForSync: true) + } + + guard PeerID(hexData: recipientID) == localPeerID else { + return nil + } + + return BLEFileTransferDeliveryPlan(isPrivateMessage: true, shouldTrackForSync: false) + } +} + +struct BLEIncomingFileAcceptance { + let filePacket: BitchatFilePacket + let mime: MimeType +} + +enum BLEIncomingFileRejection: Error, Equatable { + case malformedPayload + case payloadTooLarge(bytes: Int) + case unsupportedMime(mimeType: String?, bytes: Int) + case magicMismatch(mime: MimeType, bytes: Int, prefixHex: String) +} + +enum BLEIncomingFileValidator { + static func validate(payload: Data) -> Result { + guard let filePacket = BitchatFilePacket.decode(payload) else { + return .failure(.malformedPayload) + } + + guard FileTransferLimits.isValidPayload(filePacket.content.count) else { + return .failure(.payloadTooLarge(bytes: filePacket.content.count)) + } + + guard let mime = MimeType(filePacket.mimeType), mime.isAllowed else { + return .failure(.unsupportedMime( + mimeType: filePacket.mimeType, + bytes: filePacket.content.count + )) + } + + guard mime.matches(data: filePacket.content) else { + return .failure(.magicMismatch( + mime: mime, + bytes: filePacket.content.count, + prefixHex: filePacket.content.prefix(20).map { String(format: "%02x", $0) }.joined(separator: " ") + )) + } + + return .success(BLEIncomingFileAcceptance(filePacket: filePacket, mime: mime)) + } +} diff --git a/bitchat/Services/BLE/BLEMaintenancePolicy.swift b/bitchat/Services/BLE/BLEMaintenancePolicy.swift new file mode 100644 index 00000000..2f062b2d --- /dev/null +++ b/bitchat/Services/BLE/BLEMaintenancePolicy.swift @@ -0,0 +1,62 @@ +import Foundation + +struct BLEMaintenancePlan: Equatable { + let shouldSendAnnounce: Bool + let shouldEnsureAdvertising: Bool + let shouldRunCleanup: Bool + let shouldFlushDirectedSpool: Bool + let shouldResetCounter: Bool +} + +enum BLEMaintenancePolicy { + static func plan( + cycle: Int, + connectedCount: Int, + peerRegistryIsEmpty: Bool, + elapsedSinceLastAnnounce: TimeInterval, + hasRecentTraffic: Bool, + connectedAnnounceJitterOffset: TimeInterval? = nil, + highDegreeThreshold: Int = TransportConfig.bleHighDegreeThreshold + ) -> BLEMaintenancePlan { + BLEMaintenancePlan( + shouldSendAnnounce: shouldSendAnnounce( + connectedCount: connectedCount, + elapsedSinceLastAnnounce: elapsedSinceLastAnnounce, + hasRecentTraffic: hasRecentTraffic, + connectedAnnounceJitterOffset: connectedAnnounceJitterOffset, + highDegreeThreshold: highDegreeThreshold + ), + shouldEnsureAdvertising: peerRegistryIsEmpty, + shouldRunCleanup: cycle.isMultiple(of: 3), + shouldFlushDirectedSpool: !cycle.isMultiple(of: 2), + shouldResetCounter: cycle >= 6 + ) + } + + static func shouldSendAnnounce( + connectedCount: Int, + elapsedSinceLastAnnounce: TimeInterval, + hasRecentTraffic: Bool, + connectedAnnounceJitterOffset: TimeInterval? = nil, + highDegreeThreshold: Int = TransportConfig.bleHighDegreeThreshold + ) -> Bool { + if hasRecentTraffic && elapsedSinceLastAnnounce >= 10.0 { + return true + } + + guard connectedCount > 0 else { + return elapsedSinceLastAnnounce >= TransportConfig.bleAnnounceIntervalSeconds + } + + let highDegree = connectedCount >= highDegreeThreshold + let base = highDegree ? + TransportConfig.bleConnectedAnnounceBaseSecondsDense : + TransportConfig.bleConnectedAnnounceBaseSecondsSparse + let jitter = highDegree ? + TransportConfig.bleConnectedAnnounceJitterDense : + TransportConfig.bleConnectedAnnounceJitterSparse + let jitterOffset = connectedAnnounceJitterOffset ?? Double.random(in: -jitter...jitter) + + return elapsedSinceLastAnnounce >= base + jitterOffset + } +} diff --git a/bitchat/Services/BLE/BLEOutboundLinkPlanner.swift b/bitchat/Services/BLE/BLEOutboundLinkPlanner.swift new file mode 100644 index 00000000..3924d149 --- /dev/null +++ b/bitchat/Services/BLE/BLEOutboundLinkPlanner.swift @@ -0,0 +1,87 @@ +import BitFoundation +import Foundation + +struct BLEOutboundLinkPlan: Equatable { + let directedPeerHint: PeerID? + let fragmentChunkSize: Int? + let selectedLinks: BLEFanoutSelection + let shouldSpoolDirectedPacket: Bool +} + +enum BLEOutboundLinkPlanner { + static func plan( + packet: BitchatPacket, + dataCount: Int, + peripheralIDs: [String], + peripheralWriteLimits: [Int], + centralIDs: [String], + centralNotifyLimits: [Int], + ingressRecord: BLEIngressLinkRecord?, + excludedLinks: Set, + directedOnlyPeer: PeerID? + ) -> BLEOutboundLinkPlan { + if let minLimit = minimumLinkLimit( + peripheralWriteLimits: peripheralWriteLimits, + centralNotifyLimits: centralNotifyLimits + ), packet.type != MessageType.fragment.rawValue, + dataCount > minLimit { + return BLEOutboundLinkPlan( + directedPeerHint: directedPeerHint(for: packet, explicitPeer: directedOnlyPeer), + fragmentChunkSize: BLEOutboundPacketPolicy.fragmentChunkSize(forLinkLimit: minLimit), + selectedLinks: BLEFanoutSelection(peripheralIDs: [], centralIDs: []), + shouldSpoolDirectedPacket: false + ) + } + + let directedPeerHint = directedPeerHint(for: packet, explicitPeer: directedOnlyPeer) + let selectedLinks = BLEFanoutSelector.selectLinks( + peripheralIDs: peripheralIDs, + centralIDs: centralIDs, + ingressLink: ingressRecord?.link, + excludedLinks: excludedLinks, + directedPeerHint: directedPeerHint, + packetType: packet.type, + messageID: BLEOutboundPacketPolicy.messageID(for: packet) + ) + + return BLEOutboundLinkPlan( + directedPeerHint: directedPeerHint, + fragmentChunkSize: nil, + selectedLinks: selectedLinks, + shouldSpoolDirectedPacket: shouldSpoolDirectedPacket( + directedPeerHint: directedPeerHint, + selectedLinks: selectedLinks, + packetType: packet.type + ) + ) + } + + static func directedPeerHint(for packet: BitchatPacket, explicitPeer: PeerID?) -> PeerID? { + if let explicitPeer { return explicitPeer } + if let recipient = PeerID(str: packet.recipientID?.hexEncodedString()), !recipient.isEmpty { + return recipient + } + return nil + } + + static func minimumLinkLimit(peripheralWriteLimits: [Int], centralNotifyLimits: [Int]) -> Int? { + [peripheralWriteLimits.min(), centralNotifyLimits.min()] + .compactMap { $0 } + .min() + } + + static func shouldSpoolDirectedPacket( + directedPeerHint: PeerID?, + selectedLinks: BLEFanoutSelection, + packetType: UInt8 + ) -> Bool { + guard directedPeerHint != nil, + selectedLinks.peripheralIDs.isEmpty, + selectedLinks.centralIDs.isEmpty else { + return false + } + + return packetType == MessageType.noiseEncrypted.rawValue || + packetType == MessageType.noiseHandshake.rawValue + } +} diff --git a/bitchat/Services/BLE/BLEPacketFreshnessPolicy.swift b/bitchat/Services/BLE/BLEPacketFreshnessPolicy.swift new file mode 100644 index 00000000..2559d855 --- /dev/null +++ b/bitchat/Services/BLE/BLEPacketFreshnessPolicy.swift @@ -0,0 +1,27 @@ +import Foundation + +enum BLEPacketFreshnessPolicy { + static let defaultMaxAgeSeconds: TimeInterval = 900 + + static func isBroadcastRecipient(_ recipientID: Data?) -> Bool { + guard let recipientID else { return true } + return recipientID.count == 8 && recipientID.allSatisfy { $0 == 0xFF } + } + + static func isStale( + timestampMilliseconds: UInt64, + now: Date, + maxAgeSeconds: TimeInterval = defaultMaxAgeSeconds + ) -> Bool { + let nowMilliseconds = UInt64(now.timeIntervalSince1970 * 1000) + let maxAgeMilliseconds = UInt64(maxAgeSeconds * 1000) + guard nowMilliseconds >= maxAgeMilliseconds else { return false } + return timestampMilliseconds < nowMilliseconds - maxAgeMilliseconds + } + + static func ageSeconds(timestampMilliseconds: UInt64, now: Date) -> Double { + let nowMilliseconds = UInt64(now.timeIntervalSince1970 * 1000) + guard nowMilliseconds >= timestampMilliseconds else { return 0 } + return Double(nowMilliseconds - timestampMilliseconds) / 1000.0 + } +} diff --git a/bitchat/Services/BLE/BLEPeerEventDebouncer.swift b/bitchat/Services/BLE/BLEPeerEventDebouncer.swift new file mode 100644 index 00000000..9b3ac4f3 --- /dev/null +++ b/bitchat/Services/BLE/BLEPeerEventDebouncer.swift @@ -0,0 +1,25 @@ +import BitFoundation +import Foundation + +struct BLEPeerEventDebouncer { + private var lastEmitByPeer: [PeerID: Date] = [:] + + var count: Int { + lastEmitByPeer.count + } + + @discardableResult + mutating func shouldEmit(peerID: PeerID, now: Date, minimumInterval: TimeInterval) -> Bool { + if let lastEmit = lastEmitByPeer[peerID], + now.timeIntervalSince(lastEmit) < minimumInterval { + return false + } + + lastEmitByPeer[peerID] = now + return true + } + + mutating func removeAll() { + lastEmitByPeer.removeAll() + } +} diff --git a/bitchat/Services/BLE/BLEPeerPublishCoalescer.swift b/bitchat/Services/BLE/BLEPeerPublishCoalescer.swift new file mode 100644 index 00000000..b3290baa --- /dev/null +++ b/bitchat/Services/BLE/BLEPeerPublishCoalescer.swift @@ -0,0 +1,43 @@ +import Foundation + +enum BLEPeerPublishDecision: Equatable { + case publishNow + case schedule(delay: TimeInterval) + case skip +} + +struct BLEPeerPublishCoalescer { + private var lastPublishAt: Date + private var publishPending: Bool + private let minimumInterval: TimeInterval + + init( + lastPublishAt: Date = .distantPast, + publishPending: Bool = false, + minimumInterval: TimeInterval = 0.1 + ) { + self.lastPublishAt = lastPublishAt + self.publishPending = publishPending + self.minimumInterval = minimumInterval + } + + mutating func requestPublish(now: Date) -> BLEPeerPublishDecision { + let elapsed = now.timeIntervalSince(lastPublishAt) + if elapsed >= minimumInterval { + lastPublishAt = now + return .publishNow + } + + guard !publishPending else { + return .skip + } + + publishPending = true + return .schedule(delay: minimumInterval - elapsed) + } + + mutating func scheduledPublishFired(now: Date) { + lastPublishAt = now + publishPending = false + } +} diff --git a/bitchat/Services/BLE/BLEPublicMessagePolicy.swift b/bitchat/Services/BLE/BLEPublicMessagePolicy.swift new file mode 100644 index 00000000..e81ddec4 --- /dev/null +++ b/bitchat/Services/BLE/BLEPublicMessagePolicy.swift @@ -0,0 +1,42 @@ +import BitFoundation +import Foundation + +struct BLEPublicMessageAcceptance: Equatable { + let shouldTrackForSync: Bool +} + +enum BLEPublicMessageRejection: Equatable { + case selfEcho + case staleBroadcast(ageSeconds: Double) +} + +enum BLEPublicMessageDecision: Equatable { + case accept(BLEPublicMessageAcceptance) + case reject(BLEPublicMessageRejection) +} + +enum BLEPublicMessagePolicy { + static func evaluate( + packet: BitchatPacket, + from peerID: PeerID, + localPeerID: PeerID, + now: Date + ) -> BLEPublicMessageDecision { + if peerID == localPeerID && packet.ttl != 0 { + return .reject(.selfEcho) + } + + let isBroadcast = BLEPacketFreshnessPolicy.isBroadcastRecipient(packet.recipientID) + if isBroadcast, + BLEPacketFreshnessPolicy.isStale(timestampMilliseconds: packet.timestamp, now: now) { + return .reject(.staleBroadcast(ageSeconds: BLEPacketFreshnessPolicy.ageSeconds( + timestampMilliseconds: packet.timestamp, + now: now + ))) + } + + return .accept(BLEPublicMessageAcceptance( + shouldTrackForSync: isBroadcast && packet.type == MessageType.message.rawValue + )) + } +} diff --git a/bitchat/Services/BLE/BLERouteForwardingPolicy.swift b/bitchat/Services/BLE/BLERouteForwardingPolicy.swift new file mode 100644 index 00000000..8c43e0c3 --- /dev/null +++ b/bitchat/Services/BLE/BLERouteForwardingPolicy.swift @@ -0,0 +1,93 @@ +import BitFoundation +import Foundation + +struct BLERouteForwardingPlan { + let shouldSuppressFloodRelay: Bool + let forwardPacket: BitchatPacket? + let nextHop: PeerID? + + static let allowFloodRelay = BLERouteForwardingPlan( + shouldSuppressFloodRelay: false, + forwardPacket: nil, + nextHop: nil + ) + + static let suppressFloodRelay = BLERouteForwardingPlan( + shouldSuppressFloodRelay: true, + forwardPacket: nil, + nextHop: nil + ) + + static func forward(_ packet: BitchatPacket, to nextHop: PeerID) -> BLERouteForwardingPlan { + BLERouteForwardingPlan( + shouldSuppressFloodRelay: true, + forwardPacket: packet, + nextHop: nextHop + ) + } +} + +struct BLERouteForwardingPolicy { + static func plan( + for packet: BitchatPacket, + localPeerID: PeerID, + localRoutingData: Data?, + routingPeer: (Data) -> PeerID?, + isPeerConnected: (PeerID) -> Bool + ) -> BLERouteForwardingPlan { + if PeerID(hexData: packet.recipientID) == localPeerID { + return .suppressFloodRelay + } + + guard let route = packet.route, !route.isEmpty else { + return .allowFloodRelay + } + + guard packet.ttl > 1 else { + return .suppressFloodRelay + } + + guard let localRoutingData else { + return .allowFloodRelay + } + + guard let localIndex = route.firstIndex(of: localRoutingData) else { + return forward(packet, toRouteData: route[0], routingPeer: routingPeer, isPeerConnected: isPeerConnected) + } + + if localIndex == route.count - 1 { + guard let destinationPeer = PeerID(hexData: packet.recipientID), + isPeerConnected(destinationPeer) else { + return .allowFloodRelay + } + return .forward(relayed(packet), to: destinationPeer) + } + + return forward( + packet, + toRouteData: route[localIndex + 1], + routingPeer: routingPeer, + isPeerConnected: isPeerConnected + ) + } + + private static func forward( + _ packet: BitchatPacket, + toRouteData routeData: Data, + routingPeer: (Data) -> PeerID?, + isPeerConnected: (PeerID) -> Bool + ) -> BLERouteForwardingPlan { + guard let nextPeer = routingPeer(routeData), + isPeerConnected(nextPeer) else { + return .allowFloodRelay + } + + return .forward(relayed(packet), to: nextPeer) + } + + private static func relayed(_ packet: BitchatPacket) -> BitchatPacket { + var relayPacket = packet + relayPacket.ttl = packet.ttl - 1 + return relayPacket + } +} diff --git a/bitchat/Services/BLE/BLEScanDutyPolicy.swift b/bitchat/Services/BLE/BLEScanDutyPolicy.swift new file mode 100644 index 00000000..5d85ae59 --- /dev/null +++ b/bitchat/Services/BLE/BLEScanDutyPolicy.swift @@ -0,0 +1,35 @@ +import Foundation + +enum BLEScanDutyPlan: Equatable { + case continuous + case dutyCycle(onDuration: TimeInterval, offDuration: TimeInterval) +} + +enum BLEScanDutyPolicy { + static func plan( + dutyEnabled: Bool, + appIsActive: Bool, + connectedCount: Int, + hasRecentTraffic: Bool, + highDegreeThreshold: Int = TransportConfig.bleHighDegreeThreshold + ) -> BLEScanDutyPlan { + let forceContinuousScan = connectedCount <= 2 || hasRecentTraffic + let shouldDutyCycle = dutyEnabled && appIsActive && connectedCount > 0 && !forceContinuousScan + + guard shouldDutyCycle else { + return .continuous + } + + if connectedCount >= highDegreeThreshold { + return .dutyCycle( + onDuration: TransportConfig.bleDutyOnDurationDense, + offDuration: TransportConfig.bleDutyOffDurationDense + ) + } + + return .dutyCycle( + onDuration: TransportConfig.bleDutyOnDuration, + offDuration: TransportConfig.bleDutyOffDuration + ) + } +} diff --git a/bitchat/Services/BLE/BLEScheduledRelayStore.swift b/bitchat/Services/BLE/BLEScheduledRelayStore.swift new file mode 100644 index 00000000..1aa66882 --- /dev/null +++ b/bitchat/Services/BLE/BLEScheduledRelayStore.swift @@ -0,0 +1,43 @@ +import Foundation + +struct BLEScheduledRelayStore { + private var relays: [String: DispatchWorkItem] = [:] + + var count: Int { + relays.count + } + + var isEmpty: Bool { + relays.isEmpty + } + + mutating func schedule(_ workItem: DispatchWorkItem, messageID: String) { + relays[messageID] = workItem + } + + @discardableResult + mutating func remove(messageID: String) -> DispatchWorkItem? { + relays.removeValue(forKey: messageID) + } + + @discardableResult + mutating func cancel(messageID: String) -> Bool { + guard let workItem = relays.removeValue(forKey: messageID) else { + return false + } + + workItem.cancel() + return true + } + + mutating func cancelAll() { + relays.values.forEach { $0.cancel() } + relays.removeAll() + } + + mutating func removeAllIfOverCapacity(_ maxCount: Int) { + if relays.count > maxCount { + relays.removeAll() + } + } +} diff --git a/bitchat/Services/BLE/BLESelfBroadcastTracker.swift b/bitchat/Services/BLE/BLESelfBroadcastTracker.swift new file mode 100644 index 00000000..83756cfe --- /dev/null +++ b/bitchat/Services/BLE/BLESelfBroadcastTracker.swift @@ -0,0 +1,40 @@ +import BitFoundation +import Foundation + +struct BLESelfBroadcastTracker { + private struct Entry { + let messageID: String + let sentAt: Date + } + + private var entriesByDedupID: [String: Entry] = [:] + + var isEmpty: Bool { + entriesByDedupID.isEmpty + } + + var count: Int { + entriesByDedupID.count + } + + mutating func record(messageID: String, packet: BitchatPacket, sentAt: Date) { + entriesByDedupID[Self.dedupID(for: packet)] = Entry(messageID: messageID, sentAt: sentAt) + } + + mutating func takeMessageID(for packet: BitchatPacket) -> String? { + entriesByDedupID.removeValue(forKey: Self.dedupID(for: packet))?.messageID + } + + mutating func prune(before cutoff: Date) { + guard !entriesByDedupID.isEmpty else { return } + entriesByDedupID = entriesByDedupID.filter { cutoff <= $0.value.sentAt } + } + + mutating func removeAll() { + entriesByDedupID.removeAll() + } + + static func dedupID(for packet: BitchatPacket) -> String { + "\(packet.senderID.hexEncodedString())-\(packet.timestamp)-\(packet.type)" + } +} diff --git a/bitchat/Services/BLE/BLEService.swift b/bitchat/Services/BLE/BLEService.swift index 5c79448a..13cd420e 100644 --- a/bitchat/Services/BLE/BLEService.swift +++ b/bitchat/Services/BLE/BLEService.swift @@ -46,7 +46,7 @@ final class BLEService: NSObject { // 4. Efficient Message Deduplication private let messageDeduplicator = MessageDeduplicator() - private var selfBroadcastMessageIDs: [String: (id: String, timestamp: Date)] = [:] + private var selfBroadcastTracker = BLESelfBroadcastTracker() private let meshTopology = MeshTopologyTracker() // 5. Fragment Reassembly (necessary for messages > MTU) @@ -55,8 +55,7 @@ final class BLEService: NSObject { private let incomingFileStore = BLEIncomingFileStore() // Simple announce throttling - private var lastAnnounceSent = Date.distantPast - private let announceMinInterval: TimeInterval = TransportConfig.bleAnnounceMinInterval + private var announceThrottle = BLEAnnounceThrottle() // Application state tracking (thread-safe) #if os(iOS) @@ -96,7 +95,7 @@ final class BLEService: NSObject { // Accumulate long write chunks per central until a full frame decodes private var pendingWriteBuffers = BLEInboundWriteBuffer() // Relay jitter scheduling to reduce redundant floods - private var scheduledRelays: [String: DispatchWorkItem] = [:] + private var scheduledRelays = BLEScheduledRelayStore() // Track short-lived traffic bursts to adapt announces/scanning under load private var recentTrafficTracker = BLERecentTrafficTracker() @@ -106,12 +105,11 @@ final class BLEService: NSObject { private var pendingPeripheralWrites = BLEOutboundWriteBuffer() // Debounce duplicate disconnect notifies - private var recentDisconnectNotifies: [PeerID: Date] = [:] + private var disconnectNotifyDebouncer = BLEPeerEventDebouncer() // Store-and-forward for directed messages when we have no links - // Keyed by recipient short peerID -> messageID -> (packet, enqueuedAt) - private var pendingDirectedRelays: [PeerID: [String: (packet: BitchatPacket, enqueuedAt: Date)]] = [:] + private var pendingDirectedRelays = BLEDirectedRelaySpool() // Debounce for 'reconnected' logs - private var lastReconnectLogAt: [PeerID: Date] = [:] + private var reconnectLogDebouncer = BLEPeerEventDebouncer() // MARK: - Gossip Sync private var gossipSyncManager: GossipSyncManager? @@ -133,24 +131,19 @@ final class BLEService: NSObject { private var dutyActive: Bool = false // Debounced publish to coalesce rapid changes - private var lastPeerPublishAt: Date = .distantPast - private var peerPublishPending: Bool = false - private let peerPublishMinInterval: TimeInterval = 0.1 + private var peerPublishCoalescer = BLEPeerPublishCoalescer() private func requestPeerDataPublish() { - let now = Date() - let elapsed = now.timeIntervalSince(lastPeerPublishAt) - if elapsed >= peerPublishMinInterval { - lastPeerPublishAt = now + switch peerPublishCoalescer.requestPublish(now: Date()) { + case .publishNow: publishFullPeerData() - } else if !peerPublishPending { - peerPublishPending = true - let delay = peerPublishMinInterval - elapsed + case .schedule(let delay): messageQueue.asyncAfter(deadline: .now() + delay) { [weak self] in guard let self = self else { return } - self.lastPeerPublishAt = Date() - self.peerPublishPending = false + self.peerPublishCoalescer.scheduledPublishFired(now: Date()) self.publishFullPeerData() } + case .skip: + break } } @@ -290,8 +283,7 @@ final class BLEService: NSObject { pendingDirectedRelays.removeAll() ingressLinks.removeAll() recentTrafficTracker.removeAll() - scheduledRelays.values.forEach { $0.cancel() } - scheduledRelays.removeAll() + scheduledRelays.cancelAll() return transfers } @@ -304,7 +296,7 @@ final class BLEService: NSObject { pendingWriteBuffers.removeAll() connectionScheduler.reset() } - recentDisconnectNotifies.removeAll() + disconnectNotifyDebouncer.removeAll() noiseService.clearEphemeralStateForPanic() noiseService.clearPersistentIdentity() @@ -319,7 +311,7 @@ final class BLEService: NSObject { messageDeduplicator.reset() messageQueue.async(flags: .barrier) { [weak self] in - self?.selfBroadcastMessageIDs.removeAll() + self?.selfBroadcastTracker.removeAll() } requestPeerDataPublish() startServices() @@ -363,11 +355,10 @@ final class BLEService: NSObject { return } // Pre-mark our own broadcast as processed to avoid handling relayed self copy - let senderHex = signedPacket.senderID.hexEncodedString() - let dedupID = "\(senderHex)-\(signedPacket.timestamp)-\(signedPacket.type)" + let dedupID = BLESelfBroadcastTracker.dedupID(for: signedPacket) messageDeduplicator.markProcessed(dedupID) if let messageID { - selfBroadcastMessageIDs[dedupID] = (id: messageID, timestamp: sendDate) + selfBroadcastTracker.record(messageID: messageID, packet: signedPacket, sentAt: sendDate) } // Call synchronously since we're already on background queue broadcastPacket(signedPacket) @@ -899,68 +890,49 @@ final class BLEService: NSObject { } private func sendOnAllLinks(packet: BitchatPacket, data: Data, pad: Bool, directedOnlyPeer: PeerID?) { - // Determine the last-hop peer/link for this message to avoid echoing back over either BLE role. - let messageID = BLEOutboundPacketPolicy.messageID(for: packet) let ingressRecord = collectionsQueue.sync { ingressLinks.record(for: packet) } let excludedPeerLinks = links(to: ingressRecord?.peerID) - let directedPeerHint: PeerID? = { - if let explicit = directedOnlyPeer { return explicit } - if let recipient = PeerID(str: packet.recipientID?.hexEncodedString()), !recipient.isEmpty { - return recipient - } - return nil - }() let outboundPriority = BLEOutboundPacketPolicy.priority(for: packet, data: data) let states = snapshotPeripheralStates() - var minCentralWriteLen: Int? - for s in states where s.isConnected { - let m = s.peripheral.maximumWriteValueLength(for: .withoutResponse) - minCentralWriteLen = minCentralWriteLen.map { min($0, m) } ?? m - } + let connectedStates = states.filter { $0.isConnected } let subscribedCentrals = characteristic == nil ? [] : snapshotSubscribedCentrals().centrals - let minNotifyLen = subscribedCentrals.map { $0.maximumUpdateValueLength }.min() + let connectedPeripheralIDs = connectedStates.map { $0.peripheral.identifier.uuidString } + let centralIDs = subscribedCentrals.map { $0.identifier.uuidString } + let plan = BLEOutboundLinkPlanner.plan( + packet: packet, + dataCount: data.count, + peripheralIDs: connectedPeripheralIDs, + peripheralWriteLimits: connectedStates.map { $0.peripheral.maximumWriteValueLength(for: .withoutResponse) }, + centralIDs: centralIDs, + centralNotifyLimits: subscribedCentrals.map { $0.maximumUpdateValueLength }, + ingressRecord: ingressRecord, + excludedLinks: excludedPeerLinks, + directedOnlyPeer: directedOnlyPeer + ) - // Avoid re-fragmenting fragment packets - if packet.type != MessageType.fragment.rawValue, - let minLen = [minCentralWriteLen, minNotifyLen].compactMap({ $0 }).min(), - data.count > minLen { - let chunk = BLEOutboundPacketPolicy.fragmentChunkSize(forLinkLimit: minLen) + if let chunk = plan.fragmentChunkSize { sendFragmentedPacket(packet, pad: pad, maxChunk: chunk, directedOnlyPeer: directedOnlyPeer) return } - // Build link lists and apply K-of-N fanout for broadcasts; always exclude ingress link - let connectedPeripheralIDs: [String] = states.filter { $0.isConnected }.map { $0.peripheral.identifier.uuidString } - let centralIDs = subscribedCentrals.map { $0.identifier.uuidString } - - let selectedLinks = BLEFanoutSelector.selectLinks( - peripheralIDs: connectedPeripheralIDs, - centralIDs: centralIDs, - ingressLink: ingressRecord?.link, - excludedLinks: excludedPeerLinks, - directedPeerHint: directedPeerHint, - packetType: packet.type, - messageID: messageID - ) // If directed and we currently have no links to forward on, spool for a short window - if let only = directedPeerHint, - selectedLinks.peripheralIDs.isEmpty && selectedLinks.centralIDs.isEmpty, - (packet.type == MessageType.noiseEncrypted.rawValue || packet.type == MessageType.noiseHandshake.rawValue) { + if let only = plan.directedPeerHint, + plan.shouldSpoolDirectedPacket { spoolDirectedPacket(packet, recipientPeerID: only) } // Writes to selected connected peripherals - for s in states where s.isConnected { + for s in connectedStates { let pid = s.peripheral.identifier.uuidString - guard selectedLinks.peripheralIDs.contains(pid) else { continue } + guard plan.selectedLinks.peripheralIDs.contains(pid) else { continue } if let ch = s.characteristic { writeOrEnqueue(data, to: s.peripheral, characteristic: ch, priority: outboundPriority) } } // Notify selected subscribed centrals if let ch = characteristic { - let targets = subscribedCentrals.filter { selectedLinks.centralIDs.contains($0.identifier.uuidString) } + let targets = subscribedCentrals.filter { plan.selectedLinks.centralIDs.contains($0.identifier.uuidString) } if !targets.isEmpty { let success = peripheralManager?.updateValue(data, for: ch, onSubscribedCentrals: targets) ?? false if !success { @@ -984,10 +956,12 @@ final class BLEService: NSObject { let msgID = BLEOutboundPacketPolicy.messageID(for: packet) collectionsQueue.async(flags: .barrier) { [weak self] in guard let self = self else { return } - var byMsg = self.pendingDirectedRelays[recipientPeerID] ?? [:] - if byMsg[msgID] == nil { - byMsg[msgID] = (packet: packet, enqueuedAt: Date()) - self.pendingDirectedRelays[recipientPeerID] = byMsg + if self.pendingDirectedRelays.enqueue( + packet: packet, + recipient: recipientPeerID, + messageID: msgID, + enqueuedAt: Date() + ) { SecureLogger.debug("🧳 Spooling directed packet for \(recipientPeerID) mid=\(msgID.prefix(8))…", category: .session) } } @@ -995,23 +969,15 @@ final class BLEService: NSObject { private func flushDirectedSpool() { // Move items out and attempt broadcast; if still no links, they'll be re-spooled - let toSend: [(String, BitchatPacket)] = collectionsQueue.sync(flags: .barrier) { - var out: [(String, BitchatPacket)] = [] - let now = Date() - for (recipient, dict) in pendingDirectedRelays { - for (_, entry) in dict { - if now.timeIntervalSince(entry.enqueuedAt) <= TransportConfig.bleDirectedSpoolWindowSeconds { - out.append((recipient.id, entry.packet)) - } - } - // Clear recipient bucket; items will be re-spooled if still no links - pendingDirectedRelays.removeValue(forKey: recipient) - } - return out + let toSend = collectionsQueue.sync(flags: .barrier) { + pendingDirectedRelays.drainUnexpired( + now: Date(), + window: TransportConfig.bleDirectedSpoolWindowSeconds + ) } guard !toSend.isEmpty else { return } - for (_, packet) in toSend { - messageQueue.async { [weak self] in self?.broadcastPacket(packet) } + for entry in toSend { + messageQueue.async { [weak self] in self?.broadcastPacket(entry.packet) } } } @@ -1039,7 +1005,7 @@ final class BLEService: NSObject { } private func handleFileTransfer(_ packet: BitchatPacket, from peerID: PeerID) { - if peerID == myPeerID && packet.ttl != 0 { return } + if BLEFileTransferPolicy.isSelfEcho(packet: packet, from: peerID, localPeerID: myPeerID) { return } let peersSnapshot = collectionsQueue.sync { peerRegistry.snapshotByID } guard let senderNickname = BLEPeerSenderDisplayName.resolveKnownPeer( @@ -1053,39 +1019,30 @@ final class BLEService: NSObject { return } - // Skip directed packets that are not intended for us - if let recipient = packet.recipientID { - if PeerID(hexData: recipient) != myPeerID && !recipient.allSatisfy({ $0 == 0xFF }) { - return - } + guard let deliveryPlan = BLEFileTransferPolicy.deliveryPlan(packet: packet, localPeerID: myPeerID) else { + return } - - if let recipient = packet.recipientID, - recipient.allSatisfy({ $0 == 0xFF }) { - gossipSyncManager?.onPublicPacketSeen(packet) - } else if packet.recipientID == nil { + if deliveryPlan.shouldTrackForSync { gossipSyncManager?.onPublicPacketSeen(packet) } - guard let filePacket = BitchatFilePacket.decode(packet.payload) else { + let filePacket: BitchatFilePacket + let mime: MimeType + switch BLEIncomingFileValidator.validate(payload: packet.payload) { + case .success(let acceptance): + filePacket = acceptance.filePacket + mime = acceptance.mime + case .failure(.malformedPayload): SecureLogger.error("❌ Failed to decode file transfer payload", category: .session) return - } - - guard FileTransferLimits.isValidPayload(filePacket.content.count) else { - SecureLogger.warning("🚫 Dropping file transfer exceeding size cap (\(filePacket.content.count) bytes)", category: .security) + case .failure(.payloadTooLarge(let bytes)): + SecureLogger.warning("🚫 Dropping file transfer exceeding size cap (\(bytes) bytes)", category: .security) return - } - - guard let mime = MimeType(filePacket.mimeType), mime.isAllowed else { - SecureLogger.warning("🚫 MIME REJECT: '\(filePacket.mimeType ?? "")' not supported. Size=\(filePacket.content.count)b from \(peerID.id.prefix(8))...", category: .security) + case .failure(.unsupportedMime(let mimeType, let bytes)): + SecureLogger.warning("🚫 MIME REJECT: '\(mimeType ?? "")' not supported. Size=\(bytes)b from \(peerID.id.prefix(8))...", category: .security) return - } - - // Validate content matches declared MIME type (magic byte check) - guard mime.matches(data: filePacket.content) else { - let prefix = filePacket.content.prefix(20).map { String(format: "%02x", $0) }.joined(separator: " ") - SecureLogger.warning("🚫 MAGIC REJECT: MIME='\(mime)' size=\(filePacket.content.count)b prefix=[\(prefix)] from \(peerID.id.prefix(8))...", category: .security) + case .failure(.magicMismatch(let mime, let bytes, let prefixHex)): + SecureLogger.warning("🚫 MAGIC REJECT: MIME='\(mime)' size=\(bytes)b prefix=[\(prefixHex)] from \(peerID.id.prefix(8))...", category: .security) return } @@ -1102,9 +1059,7 @@ final class BLEService: NSObject { return } - let isPrivateMessage = PeerID(hexData: packet.recipientID) == myPeerID - - if isPrivateMessage { + if deliveryPlan.isPrivateMessage { updatePeerLastSeen(peerID) } @@ -1115,7 +1070,7 @@ final class BLEService: NSObject { timestamp: ts, isRelay: false, originalSender: nil, - isPrivate: isPrivateMessage, + isPrivate: deliveryPlan.isPrivateMessage, recipientNickname: nil, senderPeerID: peerID ) @@ -1186,18 +1141,10 @@ final class BLEService: NSObject { } private func sendAnnounce(forceSend: Bool = false) { // Throttle announces to prevent flooding - let now = Date() - let timeSinceLastAnnounce = now.timeIntervalSince(lastAnnounceSent) - - // Even forced sends should respect a minimum interval to avoid overwhelming BLE - let minInterval = forceSend ? TransportConfig.bleForceAnnounceMinIntervalSeconds : announceMinInterval - - if timeSinceLastAnnounce < minInterval { - // Skipping announce (rate limited) + if !announceThrottle.shouldSend(force: forceSend, now: Date()) { return } - lastAnnounceSent = now - + // Reduced logging - only log errors, not every announce // Create announce payload with both noise and signing public keys @@ -2355,56 +2302,20 @@ extension BLEService { } private func forwardAlongRouteIfNeeded(_ packet: BitchatPacket) -> Bool { - if PeerID(hexData: packet.recipientID) == myPeerID { - return true - } - - guard let route = packet.route, !route.isEmpty else { return false } let myRoutingData = routingData(for: myPeerID) ?? (myPeerIDData.isEmpty ? nil : myPeerIDData) - guard let selfData = myRoutingData else { return false } - - // Route contains only intermediate hops (start and end excluded) - // If we're not in the route, we're the sender - forward to first hop - guard let index = route.firstIndex(of: selfData) else { - // We're the sender, forward to first intermediate hop - guard packet.ttl > 1 else { return true } - let firstHopData = route[0] - guard let nextPeer = routingPeer(from: firstHopData), - isPeerConnected(nextPeer) else { - return false - } - var relayPacket = packet - relayPacket.ttl = packet.ttl - 1 - sendPacketDirected(relayPacket, to: nextPeer) - return true + let plan = BLERouteForwardingPolicy.plan( + for: packet, + localPeerID: myPeerID, + localRoutingData: myRoutingData, + routingPeer: routingPeer(from:), + isPeerConnected: isPeerConnected(_:) + ) + + if let forwardPacket = plan.forwardPacket, let nextHop = plan.nextHop { + sendPacketDirected(forwardPacket, to: nextHop) } - // We're an intermediate node in the route - // If we're the last intermediate hop, forward to destination - if index == route.count - 1 { - guard packet.ttl > 1 else { return true } - guard let destinationPeer = PeerID(hexData: packet.recipientID), - isPeerConnected(destinationPeer) else { - return false - } - var relayPacket = packet - relayPacket.ttl = packet.ttl - 1 - sendPacketDirected(relayPacket, to: destinationPeer) - return true - } - - // Forward to next intermediate hop - guard packet.ttl > 1 else { return true } - let nextHopData = route[index + 1] - guard let nextPeer = routingPeer(from: nextHopData), - isPeerConnected(nextPeer) else { - return false - } - - var relayPacket = packet - relayPacket.ttl = packet.ttl - 1 - sendPacketDirected(relayPacket, to: nextPeer) - return true + return plan.shouldSuppressFloodRelay } /// Safely fetch the current direct-link state for a peer using the BLE queue. @@ -2955,24 +2866,7 @@ extension BLEService { SecureLogger.debug("📦 Handling packet type \(packet.type) from \(senderID.id.prefix(8))…, messageID: \(messageID.prefix(24))…", category: .session) } - if context.shouldDeduplicate && messageDeduplicator.isDuplicate(messageID) { - // Announce packets (type 1) are sent every 10 seconds for peer discovery - // It's normal to see these as duplicates - don't log them to reduce noise - if context.logsHandlingDetails { - SecureLogger.debug("⚠️ Duplicate packet ignored: \(messageID.prefix(24))…", category: .session) - } - // In sparse graphs (<=2 neighbors), keep the pending relay to ensure bridging. - // In denser graphs, cancel the pending relay to reduce redundant floods. - let connectedCount = collectionsQueue.sync { peerRegistry.connectedCount } - if BLEReceivePipeline.shouldCancelScheduledRelayForDuplicate(connectedPeerCount: connectedCount) { - collectionsQueue.async(flags: .barrier) { [weak self] in - if let task = self?.scheduledRelays.removeValue(forKey: messageID) { - task.cancel() - } - } - } - return // Duplicate ignored - } + if dropDuplicatePacketIfNeeded(context: context, messageID: messageID) { return } // Update peer info without verbose logging - update the peer we received from, not the original sender updatePeerLastSeen(peerID) @@ -3019,92 +2913,114 @@ extension BLEService { return } - // Relay if TTL > 1 and we're not the original sender - // Relay decision and scheduling (extracted via RelayController) - do { - let degree = collectionsQueue.sync { peerRegistry.connectedCount } - let decision = BLEReceivePipeline.relayDecision( - for: packet, - senderID: senderID, - localPeerID: myPeerID, - degree: degree, - highDegreeThreshold: highDegreeThreshold - ) - guard decision.shouldRelay else { return } - let work = DispatchWorkItem { [weak self] in - guard let self = self else { return } - // Remove scheduled task before executing - self.collectionsQueue.async(flags: .barrier) { [weak self] in - _ = self?.scheduledRelays.removeValue(forKey: messageID) - } - var relayPacket = packet - relayPacket.ttl = decision.newTTL - self.broadcastPacket(relayPacket) - } - // Track the scheduled relay so duplicates can cancel it - collectionsQueue.async(flags: .barrier) { [weak self] in - self?.scheduledRelays[messageID] = work - } - messageQueue.asyncAfter(deadline: .now() + .milliseconds(decision.delayMs), execute: work) + scheduleRelayIfNeeded(packet, senderID: senderID, messageID: messageID) + } + + private func dropDuplicatePacketIfNeeded(context: BLEReceivedPacketContext, messageID: String) -> Bool { + guard context.shouldDeduplicate, messageDeduplicator.isDuplicate(messageID) else { + return false } + + if context.logsHandlingDetails { + SecureLogger.debug("⚠️ Duplicate packet ignored: \(messageID.prefix(24))…", category: .session) + } + + let connectedCount = collectionsQueue.sync { peerRegistry.connectedCount } + if BLEReceivePipeline.shouldCancelScheduledRelayForDuplicate(connectedPeerCount: connectedCount) { + collectionsQueue.async(flags: .barrier) { [weak self] in + self?.scheduledRelays.cancel(messageID: messageID) + } + } + + return true + } + + private func scheduleRelayIfNeeded(_ packet: BitchatPacket, senderID: PeerID, messageID: String) { + let degree = collectionsQueue.sync { peerRegistry.connectedCount } + let decision = BLEReceivePipeline.relayDecision( + for: packet, + senderID: senderID, + localPeerID: myPeerID, + degree: degree, + highDegreeThreshold: highDegreeThreshold + ) + guard decision.shouldRelay else { return } + + let work = DispatchWorkItem { [weak self] in + guard let self = self else { return } + self.collectionsQueue.async(flags: .barrier) { [weak self] in + self?.scheduledRelays.remove(messageID: messageID) + } + var relayPacket = packet + relayPacket.ttl = decision.newTTL + self.broadcastPacket(relayPacket) + } + + collectionsQueue.async(flags: .barrier) { [weak self] in + self?.scheduledRelays.schedule(work, messageID: messageID) + } + messageQueue.asyncAfter(deadline: .now() + .milliseconds(decision.delayMs), execute: work) } private func handleAnnounce(_ packet: BitchatPacket, from peerID: PeerID) { - guard let announcement = AnnouncementPacket.decode(from: packet.payload) else { + let now = Date() + let preflight = BLEAnnouncePreflightPolicy.evaluate( + packet: packet, + from: peerID, + localPeerID: myPeerID, + now: now + ) + + let announcement: AnnouncementPacket + switch preflight { + case .accept(let acceptance): + announcement = acceptance.announcement + case .reject(.malformed): SecureLogger.error("❌ Failed to decode announce packet from \(peerID.id.prefix(8))…", category: .session) return - } - - // Verify that the sender's derived ID from the announced noise public key matches the packet senderID - // This helps detect relayed or spoofed announces. Only warn in release; assert in debug. - let derivedFromKey = PeerID(publicKey: announcement.noisePublicKey) - if derivedFromKey != peerID { + case .reject(.senderMismatch(let derivedFromKey)): SecureLogger.warning("⚠️ Announce sender mismatch: derived \(derivedFromKey.id.prefix(8))… vs packet \(peerID.id.prefix(8))…", category: .security) return - } - - // Don't add ourselves as a peer - if peerID == myPeerID { + case .reject(.selfAnnounce): + return + case .reject(.stale(let ageSeconds)): + SecureLogger.debug("⏰ Ignoring stale announce from \(peerID.id.prefix(8))… (age: \(ageSeconds)s)", category: .session) return - } - - // Reject stale announces to prevent ghost peers from appearing - // Use same 15-minute window as gossip sync (900 seconds) - let maxAnnounceAgeSeconds: TimeInterval = 900 - let nowMs = UInt64(Date().timeIntervalSince1970 * 1000) - let ageThresholdMs = UInt64(maxAnnounceAgeSeconds * 1000) - if nowMs >= ageThresholdMs { - let cutoffMs = nowMs - ageThresholdMs - if packet.timestamp < cutoffMs { - SecureLogger.debug("⏰ Ignoring stale announce from \(peerID.id.prefix(8))… (age: \(Double(nowMs - packet.timestamp) / 1000.0)s)", category: .session) - return - } } // Suppress announce logs to reduce noise // Precompute signature verification outside barrier to reduce contention let existingPeerForVerify = collectionsQueue.sync { peerRegistry.info(for: peerID) } - var verifiedAnnounce = false - if packet.signature != nil { - verifiedAnnounce = noiseService.verifyPacketSignature(packet, publicKey: announcement.signingPublicKey) - if !verifiedAnnounce { + let hasSignature = packet.signature != nil + let signatureValid: Bool + if hasSignature { + signatureValid = noiseService.verifyPacketSignature(packet, publicKey: announcement.signingPublicKey) + if !signatureValid { SecureLogger.warning("⚠️ Signature verification for announce failed \(peerID.id.prefix(8))", category: .security) } + } else { + signatureValid = false } - if let existingKey = existingPeerForVerify?.noisePublicKey, existingKey != announcement.noisePublicKey { + let trustDecision = BLEAnnounceTrustPolicy.evaluate( + hasSignature: hasSignature, + signatureValid: signatureValid, + existingNoisePublicKey: existingPeerForVerify?.noisePublicKey, + announcedNoisePublicKey: announcement.noisePublicKey + ) + if case .reject(.keyMismatch) = trustDecision { SecureLogger.warning("⚠️ Announce key mismatch for \(peerID.id.prefix(8))… — keeping unverified", category: .security) - verifiedAnnounce = false } + let verifiedAnnounce = trustDecision.isVerified var isNewPeer = false var isReconnectedPeer = false let directLinkState = linkState(for: peerID) + let isDirectAnnounce = packet.ttl == messageTTL collectionsQueue.sync(flags: .barrier) { let hasPeripheralConnection = directLinkState.hasPeripheral let hasCentralSubscription = directLinkState.hasCentral - let isDirectAnnounce = (packet.ttl == messageTTL) // Require verified announce; ignore otherwise (no backward compatibility) if !verifiedAnnounce { @@ -3121,7 +3037,7 @@ extension BLEService { noisePublicKey: announcement.noisePublicKey, signingPublicKey: announcement.signingPublicKey, isConnected: isDirectAnnounce || hasPeripheralConnection || hasCentralSubscription, - now: Date() + now: now ) isNewPeer = update.isNewPeer isReconnectedPeer = update.wasDisconnected @@ -3132,12 +3048,12 @@ extension BLEService { if update.isNewPeer { SecureLogger.debug("🆕 New peer: \(announcement.nickname)", category: .session) } else if update.wasDisconnected { - // Debounce 'reconnected' logs within short window - if let last = lastReconnectLogAt[peerID], now.timeIntervalSince(last) < TransportConfig.bleReconnectLogDebounceSeconds { - // Skip duplicate log - } else { + if reconnectLogDebouncer.shouldEmit( + peerID: peerID, + now: now, + minimumInterval: TransportConfig.bleReconnectLogDebounceSeconds + ) { SecureLogger.debug("🔄 Peer \(announcement.nickname) reconnected", category: .session) - lastReconnectLogAt[peerID] = now } } else if let previousNickname = update.previousNickname, previousNickname != announcement.nickname { SecureLogger.debug("🔄 Peer \(peerID.id.prefix(8))… changed nickname: \(previousNickname) -> \(announcement.nickname)", category: .session) @@ -3158,6 +3074,18 @@ extension BLEService { claimedNickname: announcement.nickname ) + let announceBackID = "announce-back-\(peerID)" + let shouldSendBack = !messageDeduplicator.contains(announceBackID) + if shouldSendBack { + messageDeduplicator.markProcessed(announceBackID) + } + let responsePlan = BLEAnnounceResponsePolicy.plan( + isDirectAnnounce: isDirectAnnounce, + isNewPeer: isNewPeer, + isReconnectedPeer: isReconnectedPeer, + shouldSendAnnounceBack: shouldSendBack + ) + // Notify UI on main thread notifyUI { [weak self] in guard let self = self else { return } @@ -3166,10 +3094,12 @@ extension BLEService { let currentPeerIDs = self.collectionsQueue.sync { self.peerRegistry.peerIDs } // Only notify of connection for new or reconnected peers when it is a direct announce - if (packet.ttl == self.messageTTL) && (isNewPeer || isReconnectedPeer) { + if responsePlan.shouldNotifyPeerConnected { self.deliverTransportEvent(.peerConnected(peerID)) // Schedule initial unicast sync to this peer - self.gossipSyncManager?.scheduleInitialSyncToPeer(peerID, delaySeconds: 1.0) + if responsePlan.shouldScheduleInitialSync { + self.gossipSyncManager?.scheduleInitialSyncToPeer(peerID, delaySeconds: 1.0) + } } self.requestPeerDataPublish() @@ -3178,22 +3108,15 @@ extension BLEService { // Track for sync (include our own and others' announces) gossipSyncManager?.onPublicPacketSeen(packet) - - // Send announce back for bidirectional discovery (only once per peer) - let announceBackID = "announce-back-\(peerID)" - let shouldSendBack = !messageDeduplicator.contains(announceBackID) - if shouldSendBack { - messageDeduplicator.markProcessed(announceBackID) - } - if shouldSendBack { + if responsePlan.shouldSendAnnounceBack { // Reciprocate announce for bidirectional discovery // Force send to ensure the peer receives our announce sendAnnounce(forceSend: true) } // Afterglow: on first-seen peers, schedule a short re-announce to push presence one more hop - if isNewPeer { + if responsePlan.shouldScheduleAfterglow { let delay = Double.random(in: 0.3...0.6) messageQueue.asyncAfter(deadline: .now() + delay) { [weak self] in self?.sendAnnounce(forceSend: true) @@ -3213,29 +3136,23 @@ extension BLEService { // Mention parsing moved to ChatViewModel private func handleMessage(_ packet: BitchatPacket, from peerID: PeerID) { - // Ignore self-origin public messages except when returned via sync (TTL==0). - // This allows our own messages to be surfaced when they come back via - // the sync path without re-processing regular relayed copies. - if peerID == myPeerID && packet.ttl != 0 { return } + let now = Date() + let messageDecision = BLEPublicMessagePolicy.evaluate( + packet: packet, + from: peerID, + localPeerID: myPeerID, + now: now + ) - // Reject stale broadcast messages to prevent old messages from appearing - // Use same 15-minute window as gossip sync (900 seconds) - // Check if this is a broadcast message (recipient is all 0xFF or nil) - let isBroadcast: Bool = { - guard let r = packet.recipientID else { return true } - return r.count == 8 && r.allSatisfy { $0 == 0xFF } - }() - if isBroadcast { - let maxMessageAgeSeconds: TimeInterval = 900 - let nowMs = UInt64(Date().timeIntervalSince1970 * 1000) - let ageThresholdMs = UInt64(maxMessageAgeSeconds * 1000) - if nowMs >= ageThresholdMs { - let cutoffMs = nowMs - ageThresholdMs - if packet.timestamp < cutoffMs { - SecureLogger.debug("⏰ Ignoring stale broadcast message from \(peerID.id.prefix(8))… (age: \(Double(nowMs - packet.timestamp) / 1000.0)s)", category: .session) - return - } - } + let messagePolicy: BLEPublicMessageAcceptance + switch messageDecision { + case .accept(let acceptance): + messagePolicy = acceptance + case .reject(.selfEcho): + return + case .reject(.staleBroadcast(let ageSeconds)): + SecureLogger.debug("⏰ Ignoring stale broadcast message from \(peerID.id.prefix(8))… (age: \(ageSeconds)s)", category: .session) + return } // Snapshot peers to avoid concurrent mutation while iterating during nickname collision checks. @@ -3252,11 +3169,7 @@ extension BLEService { return } - let isBroadcastRecipient: Bool = { - guard let r = packet.recipientID else { return true } - return r.count == 8 && r.allSatisfy { $0 == 0xFF } - }() - if isBroadcastRecipient && packet.type == MessageType.message.rawValue { + if messagePolicy.shouldTrackForSync { gossipSyncManager?.onPublicPacketSeen(packet) } @@ -3274,9 +3187,7 @@ extension BLEService { let ts = Date(timeIntervalSince1970: Double(packet.timestamp) / 1000) var resolvedSelfMessageID: String? = nil if peerID == myPeerID { - let senderHex = packet.senderID.hexEncodedString() - let dedupID = "\(senderHex)-\(packet.timestamp)-\(packet.type)" - resolvedSelfMessageID = selfBroadcastMessageIDs.removeValue(forKey: dedupID)?.id + resolvedSelfMessageID = selfBroadcastTracker.takeMessageID(for: packet) } notifyUI { [weak self] in self?.deliverTransportEvent( @@ -3352,32 +3263,14 @@ extension BLEService { SecureLogger.debug("🔐 Decrypted noise payload type \(noisePayloadType.description) from \(peerID.id.prefix(8))…", category: .session) - switch noisePayloadType { - case .privateMessage: - let ts = Date(timeIntervalSince1970: Double(packet.timestamp) / 1000) - notifyUI { [weak self] in - self?.deliverTransportEvent(.noisePayloadReceived(peerID: peerID, type: .privateMessage, payload: Data(payloadData), timestamp: ts)) - } - case .delivered: - let ts = Date(timeIntervalSince1970: Double(packet.timestamp) / 1000) - notifyUI { [weak self] in - self?.deliverTransportEvent(.noisePayloadReceived(peerID: peerID, type: .delivered, payload: Data(payloadData), timestamp: ts)) - } - case .readReceipt: - let ts = Date(timeIntervalSince1970: Double(packet.timestamp) / 1000) - notifyUI { [weak self] in - self?.deliverTransportEvent(.noisePayloadReceived(peerID: peerID, type: .readReceipt, payload: Data(payloadData), timestamp: ts)) - } - case .verifyChallenge: - let ts = Date(timeIntervalSince1970: Double(packet.timestamp) / 1000) - notifyUI { [weak self] in - self?.deliverTransportEvent(.noisePayloadReceived(peerID: peerID, type: .verifyChallenge, payload: Data(payloadData), timestamp: ts)) - } - case .verifyResponse: - let ts = Date(timeIntervalSince1970: Double(packet.timestamp) / 1000) - notifyUI { [weak self] in - self?.deliverTransportEvent(.noisePayloadReceived(peerID: peerID, type: .verifyResponse, payload: Data(payloadData), timestamp: ts)) - } + let ts = Date(timeIntervalSince1970: Double(packet.timestamp) / 1000) + notifyUI { [weak self] in + self?.deliverTransportEvent(.noisePayloadReceived( + peerID: peerID, + type: noisePayloadType, + payload: Data(payloadData), + timestamp: ts + )) } } catch NoiseEncryptionError.sessionNotEstablished { // We received an encrypted message before establishing a session with this peer. @@ -3422,13 +3315,12 @@ extension BLEService { // Debounced disconnect notifier to avoid duplicate disconnect callbacks within a short window @MainActor private func notifyPeerDisconnectedDebounced(_ peerID: PeerID) { - let now = Date() - let last = recentDisconnectNotifies[peerID] - if last == nil || now.timeIntervalSince(last!) >= TransportConfig.bleDisconnectNotifyDebounceSeconds { + if disconnectNotifyDebouncer.shouldEmit( + peerID: peerID, + now: Date(), + minimumInterval: TransportConfig.bleDisconnectNotifyDebounceSeconds + ) { deliverTransportEvent(.peerDisconnected(peerID)) - recentDisconnectNotifies[peerID] = now - } else { - // Suppressed duplicate disconnect notification } } @@ -3449,36 +3341,27 @@ extension BLEService { private func performMaintenance() { maintenanceCounter += 1 - - // Adaptive announce: reduce frequency when we have connected peers + let now = Date() let connectedCount = collectionsQueue.sync { peerRegistry.connectedCount } - let elapsed = now.timeIntervalSince(lastAnnounceSent) - if connectedCount == 0 { - // Discovery mode: keep frequent announces - if elapsed >= TransportConfig.bleAnnounceIntervalSeconds { sendAnnounce(forceSend: true) } - } else { - // Connected mode: announce less often; much less in dense networks - let base = connectedCount >= TransportConfig.bleHighDegreeThreshold ? - TransportConfig.bleConnectedAnnounceBaseSecondsDense : TransportConfig.bleConnectedAnnounceBaseSecondsSparse - let jitter = connectedCount >= TransportConfig.bleHighDegreeThreshold ? - TransportConfig.bleConnectedAnnounceJitterDense : TransportConfig.bleConnectedAnnounceJitterSparse - let target = base + Double.random(in: -jitter...jitter) - if elapsed >= target { sendAnnounce(forceSend: true) } - } - - // Activity-driven quick-announce: if we've seen any packet in last 5s and it has - // been >=10s since the last announce, send a presence nudge. + let elapsed = announceThrottle.elapsed(since: now) let recentSeen = collectionsQueue.sync { () -> Bool in recentTrafficTracker.hasTraffic(within: 5.0, now: now) } - if recentSeen && elapsed >= 10.0 { + let hasNoPeers = collectionsQueue.sync { peerRegistry.isEmpty } + let plan = BLEMaintenancePolicy.plan( + cycle: maintenanceCounter, + connectedCount: connectedCount, + peerRegistryIsEmpty: hasNoPeers, + elapsedSinceLastAnnounce: elapsed, + hasRecentTraffic: recentSeen + ) + + if plan.shouldSendAnnounce { sendAnnounce(forceSend: true) } - - // If we have no peers, ensure we're scanning and advertising - let hasNoPeers = collectionsQueue.sync { peerRegistry.isEmpty } - if hasNoPeers { + + if plan.shouldEnsureAdvertising { // Ensure we're advertising as peripheral if let pm = peripheralManager, pm.state == .poweredOn && !pm.isAdvertising { pm.startAdvertising(buildAdvertisementData()) @@ -3493,12 +3376,12 @@ extension BLEService { checkPeerConnectivity() // Every 30 seconds (3 cycles): Cleanup - if maintenanceCounter % 3 == 0 { + if plan.shouldRunCleanup { performCleanup() } // Attempt to flush any spooled directed messages periodically (~every 5 seconds) - if maintenanceCounter % 2 == 1 { + if plan.shouldFlushDirectedSpool { flushDirectedSpool() } @@ -3510,7 +3393,7 @@ extension BLEService { // No rotating alias: nothing to refresh // Reset counter to prevent overflow (every 60 seconds) - if maintenanceCounter >= 6 { + if plan.shouldResetCounter { maintenanceCounter = 0 } } @@ -3577,12 +3460,8 @@ extension BLEService { // Clean up stale scheduled relays that somehow persisted (> 2s) collectionsQueue.async(flags: .barrier) { [weak self] in guard let self = self else { return } - if !self.scheduledRelays.isEmpty { - // Nothing to compare times to; just cap the size defensively - if self.scheduledRelays.count > 512 { - self.scheduledRelays.removeAll() - } - } + // Nothing to compare times to; just cap the size defensively + self.scheduledRelays.removeAllIfOverCapacity(512) } // Clean ingress link records older than configured seconds @@ -3593,21 +3472,17 @@ extension BLEService { self.ingressLinks.prune(before: cutoff) } // Clean expired directed spooled items - if !self.pendingDirectedRelays.isEmpty { - var cleaned: [PeerID: [String: (packet: BitchatPacket, enqueuedAt: Date)]] = [:] - for (recipient, dict) in self.pendingDirectedRelays { - let pruned = dict.filter { now.timeIntervalSince($0.value.enqueuedAt) <= TransportConfig.bleDirectedSpoolWindowSeconds } - if !pruned.isEmpty { cleaned[recipient] = pruned } - } - self.pendingDirectedRelays = cleaned - } + self.pendingDirectedRelays.pruneExpired( + now: now, + window: TransportConfig.bleDirectedSpoolWindowSeconds + ) } messageQueue.async(flags: .barrier) { [weak self] in guard let self = self else { return } - guard !self.selfBroadcastMessageIDs.isEmpty else { return } + guard !self.selfBroadcastTracker.isEmpty else { return } let cutoff = now.addingTimeInterval(-TransportConfig.messageDedupMaxAgeSeconds) - self.selfBroadcastMessageIDs = self.selfBroadcastMessageIDs.filter { cutoff <= $0.value.timestamp } + self.selfBroadcastTracker.prune(before: cutoff) } } @@ -3626,23 +3501,25 @@ extension BLEService { now: Date() ) } - let forceScanOn = (connectedCount <= 2) || hasRecentTraffic - let shouldDuty = dutyEnabled && active && connectedCount > 0 && !forceScanOn - if shouldDuty { + let scanPlan = BLEScanDutyPolicy.plan( + dutyEnabled: dutyEnabled, + appIsActive: active, + connectedCount: connectedCount, + hasRecentTraffic: hasRecentTraffic + ) + + switch scanPlan { + case .dutyCycle(let onDuration, let offDuration): + let durationsChanged = dutyOnDuration != onDuration || dutyOffDuration != offDuration + dutyOnDuration = onDuration + dutyOffDuration = offDuration + if scanDutyTimer == nil { // Start timer to toggle scanning on/off let t = DispatchSource.makeTimerSource(queue: bleQueue) // Start with scanning ON; we'll turn OFF after onDuration if !central.isScanning { startScanning() } dutyActive = true - // Adjust duty cycle under dense networks to save battery - if connectedCount >= TransportConfig.bleHighDegreeThreshold { - dutyOnDuration = TransportConfig.bleDutyOnDurationDense - dutyOffDuration = TransportConfig.bleDutyOffDurationDense - } else { - dutyOnDuration = TransportConfig.bleDutyOnDuration - dutyOffDuration = TransportConfig.bleDutyOffDuration - } t.schedule(deadline: .now() + dutyOnDuration, repeating: dutyOnDuration + dutyOffDuration) t.setEventHandler { [weak self] in guard let self = self, let c = self.centralManager else { return } @@ -3659,8 +3536,12 @@ extension BLEService { } t.resume() scanDutyTimer = t + } else if durationsChanged { + scanDutyTimer?.schedule(deadline: .now() + dutyOnDuration, repeating: dutyOnDuration + dutyOffDuration) + if !central.isScanning { startScanning() } + dutyActive = true } - } else { + case .continuous: // Cancel duty cycle and ensure scanning is ON for discovery scanDutyTimer?.cancel() scanDutyTimer = nil diff --git a/bitchat/ViewModels/ChatBluetoothAlertPolicy.swift b/bitchat/ViewModels/ChatBluetoothAlertPolicy.swift new file mode 100644 index 00000000..0e7168e4 --- /dev/null +++ b/bitchat/ViewModels/ChatBluetoothAlertPolicy.swift @@ -0,0 +1,35 @@ +import CoreBluetooth +import Foundation + +struct ChatBluetoothAlertUpdate: Equatable { + let isPresented: Bool + let message: String? +} + +enum ChatBluetoothAlertPolicy { + static func update(for state: CBManagerState) -> ChatBluetoothAlertUpdate { + switch state { + case .poweredOff: + ChatBluetoothAlertUpdate( + isPresented: true, + message: String(localized: "content.alert.bluetooth_required.off", comment: "Message shown when Bluetooth is turned off") + ) + case .unauthorized: + ChatBluetoothAlertUpdate( + isPresented: true, + message: String(localized: "content.alert.bluetooth_required.permission", comment: "Message shown when Bluetooth permission is missing") + ) + case .unsupported: + ChatBluetoothAlertUpdate( + isPresented: true, + message: String(localized: "content.alert.bluetooth_required.unsupported", comment: "Message shown when the device lacks Bluetooth support") + ) + case .poweredOn: + ChatBluetoothAlertUpdate(isPresented: false, message: "") + case .unknown, .resetting: + ChatBluetoothAlertUpdate(isPresented: false, message: nil) + @unknown default: + ChatBluetoothAlertUpdate(isPresented: false, message: nil) + } + } +} diff --git a/bitchat/ViewModels/ChatFavoriteTogglePolicy.swift b/bitchat/ViewModels/ChatFavoriteTogglePolicy.swift new file mode 100644 index 00000000..2cded1f2 --- /dev/null +++ b/bitchat/ViewModels/ChatFavoriteTogglePolicy.swift @@ -0,0 +1,67 @@ +import Foundation + +struct ChatFavoriteStatusSnapshot: Equatable { + let peerNickname: String + let peerNostrPublicKey: String? + let isFavorite: Bool + let theyFavoritedUs: Bool + + init( + peerNickname: String, + peerNostrPublicKey: String?, + isFavorite: Bool, + theyFavoritedUs: Bool + ) { + self.peerNickname = peerNickname + self.peerNostrPublicKey = peerNostrPublicKey + self.isFavorite = isFavorite + self.theyFavoritedUs = theyFavoritedUs + } + + init(_ relationship: FavoritesPersistenceService.FavoriteRelationship) { + self.peerNickname = relationship.peerNickname + self.peerNostrPublicKey = relationship.peerNostrPublicKey + self.isFavorite = relationship.isFavorite + self.theyFavoritedUs = relationship.theyFavoritedUs + } +} + +enum ChatFavoritePersistenceAction: Equatable { + case add(nickname: String, nostrKey: String?) + case remove +} + +enum ChatFavoriteNotificationDecision: Equatable { + case none + case send(isFavorite: Bool) +} + +struct ChatFavoriteTogglePlan: Equatable { + let persistenceAction: ChatFavoritePersistenceAction + let notification: ChatFavoriteNotificationDecision +} + +enum ChatFavoriteTogglePolicy { + static func plan( + currentStatus: ChatFavoriteStatusSnapshot?, + fallbackNickname: String?, + bridgedNostrKey: String? + ) -> ChatFavoriteTogglePlan { + let wasFavorite = currentStatus?.isFavorite ?? false + + if wasFavorite { + return ChatFavoriteTogglePlan( + persistenceAction: .remove, + notification: .send(isFavorite: false) + ) + } + + return ChatFavoriteTogglePlan( + persistenceAction: .add( + nickname: currentStatus?.peerNickname ?? fallbackNickname ?? "Unknown", + nostrKey: currentStatus?.peerNostrPublicKey ?? bridgedNostrKey + ), + notification: currentStatus?.theyFavoritedUs == true ? .send(isFavorite: true) : .none + ) + } +} diff --git a/bitchat/ViewModels/ChatMediaPreparation.swift b/bitchat/ViewModels/ChatMediaPreparation.swift new file mode 100644 index 00000000..6852d397 --- /dev/null +++ b/bitchat/ViewModels/ChatMediaPreparation.swift @@ -0,0 +1,57 @@ +import BitFoundation +import Foundation + +enum ChatMediaPreparationError: Error, Equatable { + case encodingFailed + case voiceNoteTooLarge(bytes: Int) + case imageTooLarge(bytes: Int) +} + +struct ChatPreparedImage { + let outputURL: URL + let packet: BitchatFilePacket +} + +enum ChatMediaPreparation { + static func prepareVoiceNotePacket(at url: URL) throws -> BitchatFilePacket { + let attributes = try FileManager.default.attributesOfItem(atPath: url.path) + guard let fileSize = attributes[.size] as? Int else { + throw ChatMediaPreparationError.voiceNoteTooLarge(bytes: 0) + } + guard fileSize <= FileTransferLimits.maxVoiceNoteBytes else { + throw ChatMediaPreparationError.voiceNoteTooLarge(bytes: fileSize) + } + + let data = try Data(contentsOf: url) + let packet = BitchatFilePacket( + fileName: url.lastPathComponent, + fileSize: UInt64(data.count), + mimeType: "audio/mp4", + content: data + ) + guard packet.encode() != nil else { throw ChatMediaPreparationError.encodingFailed } + return packet + } + + static func prepareImagePacket(from sourceURL: URL) throws -> ChatPreparedImage { + let outputURL = try ImageUtils.processImage(at: sourceURL) + do { + let data = try Data(contentsOf: outputURL) + guard data.count <= FileTransferLimits.maxImageBytes else { + throw ChatMediaPreparationError.imageTooLarge(bytes: data.count) + } + + let packet = BitchatFilePacket( + fileName: outputURL.lastPathComponent, + fileSize: UInt64(data.count), + mimeType: "image/jpeg", + content: data + ) + guard packet.encode() != nil else { throw ChatMediaPreparationError.encodingFailed } + return ChatPreparedImage(outputURL: outputURL, packet: packet) + } catch { + try? FileManager.default.removeItem(at: outputURL) + throw error + } + } +} diff --git a/bitchat/ViewModels/ChatMediaTransferCoordinator.swift b/bitchat/ViewModels/ChatMediaTransferCoordinator.swift index 9a608052..ec15a4ab 100644 --- a/bitchat/ViewModels/ChatMediaTransferCoordinator.swift +++ b/bitchat/ViewModels/ChatMediaTransferCoordinator.swift @@ -8,10 +8,6 @@ import UIKit @MainActor final class ChatMediaTransferCoordinator { - private enum MediaSendError: Error { - case encodingFailed - } - private unowned let viewModel: ChatViewModel private(set) var transferIdToMessageIDs: [String: [String]] = [:] @@ -40,26 +36,7 @@ final class ChatMediaTransferCoordinator { Task.detached(priority: .userInitiated) { [weak self] in guard let self else { return } do { - let attributes = try FileManager.default.attributesOfItem(atPath: url.path) - guard let fileSize = attributes[.size] as? Int, - fileSize <= FileTransferLimits.maxVoiceNoteBytes else { - let size = (attributes[.size] as? Int) ?? 0 - SecureLogger.warning("Voice note exceeds size limit (\(size) bytes)", category: .session) - try? FileManager.default.removeItem(at: url) - await MainActor.run { - self.handleMediaSendFailure(messageID: messageID, reason: "Voice note too large") - } - return - } - - let data = try Data(contentsOf: url) - let packet = BitchatFilePacket( - fileName: url.lastPathComponent, - fileSize: UInt64(data.count), - mimeType: "audio/mp4", - content: data - ) - guard packet.encode() != nil else { throw MediaSendError.encodingFailed } + let packet = try ChatMediaPreparation.prepareVoiceNotePacket(at: url) await MainActor.run { self.registerTransfer(transferId: transferId, messageID: messageID) @@ -69,6 +46,12 @@ final class ChatMediaTransferCoordinator { self.viewModel.meshService.sendFileBroadcast(packet, transferId: transferId) } } + } catch ChatMediaPreparationError.voiceNoteTooLarge(let size) { + SecureLogger.warning("Voice note exceeds size limit (\(size) bytes)", category: .session) + try? FileManager.default.removeItem(at: url) + await MainActor.run { + self.handleMediaSendFailure(messageID: messageID, reason: "Voice note too large") + } } catch { SecureLogger.error("Voice note send failed: \(error)", category: .session) await MainActor.run { @@ -120,52 +103,43 @@ final class ChatMediaTransferCoordinator { let targetPeer = viewModel.selectedPrivateChatPeer + do { + try ImageUtils.validateImageSource(at: sourceURL) + } catch { + SecureLogger.error("Image send preparation failed: \(error)", category: .session) + viewModel.addSystemMessage("Failed to prepare image for sending.") + return + } + Task.detached(priority: .userInitiated) { [weak self] in guard let self else { return } - var processedURL: URL? do { - let outputURL = try ImageUtils.processImage(at: sourceURL) - processedURL = outputURL - let data = try Data(contentsOf: outputURL) - guard data.count <= FileTransferLimits.maxImageBytes else { - SecureLogger.warning("Processed image exceeds size limit (\(data.count) bytes)", category: .session) - await MainActor.run { - self.viewModel.addSystemMessage("Image is too large to send.") - } - try? FileManager.default.removeItem(at: outputURL) - return - } - - let packet = BitchatFilePacket( - fileName: outputURL.lastPathComponent, - fileSize: UInt64(data.count), - mimeType: "image/jpeg", - content: data - ) - guard packet.encode() != nil else { throw MediaSendError.encodingFailed } + let prepared = try ChatMediaPreparation.prepareImagePacket(from: sourceURL) await MainActor.run { let message = self.enqueueMediaMessage( - content: "\(MimeType.Category.image.messagePrefix)\(outputURL.lastPathComponent)", + content: "\(MimeType.Category.image.messagePrefix)\(prepared.outputURL.lastPathComponent)", targetPeer: targetPeer ) let messageID = message.id let transferId = self.makeTransferID(messageID: messageID) self.registerTransfer(transferId: transferId, messageID: messageID) if let peerID = targetPeer { - self.viewModel.meshService.sendFilePrivate(packet, to: peerID, transferId: transferId) + self.viewModel.meshService.sendFilePrivate(prepared.packet, to: peerID, transferId: transferId) } else { - self.viewModel.meshService.sendFileBroadcast(packet, transferId: transferId) + self.viewModel.meshService.sendFileBroadcast(prepared.packet, transferId: transferId) } } + } catch ChatMediaPreparationError.imageTooLarge(let size) { + SecureLogger.warning("Processed image exceeds size limit (\(size) bytes)", category: .session) + await MainActor.run { + self.viewModel.addSystemMessage("Image is too large to send.") + } } catch { SecureLogger.error("Image send preparation failed: \(error)", category: .session) await MainActor.run { self.viewModel.addSystemMessage("Failed to prepare image for sending.") } - if let processedURL { - try? FileManager.default.removeItem(at: processedURL) - } } } } diff --git a/bitchat/ViewModels/ChatNostrCoordinator.swift b/bitchat/ViewModels/ChatNostrCoordinator.swift index 091f7c87..d282a6f5 100644 --- a/bitchat/ViewModels/ChatNostrCoordinator.swift +++ b/bitchat/ViewModels/ChatNostrCoordinator.swift @@ -848,7 +848,7 @@ private extension ChatNostrCoordinator { let maxBytes = FileTransferLimits.maxFramedFileBytes let maxEncoded = ((maxBytes + 2) / 3) * 4 guard encoded.count <= maxEncoded else { return nil } - guard let packetData = ChatViewModel.base64URLDecode(encoded), + guard let packetData = Base64URLCoding.decode(encoded), packetData.count <= maxBytes else { return nil diff --git a/bitchat/ViewModels/ChatPeerIdentityCoordinator.swift b/bitchat/ViewModels/ChatPeerIdentityCoordinator.swift index 4bb4585d..6a3047cb 100644 --- a/bitchat/ViewModels/ChatPeerIdentityCoordinator.swift +++ b/bitchat/ViewModels/ChatPeerIdentityCoordinator.swift @@ -33,6 +33,52 @@ final class ChatPeerIdentityCoordinator { viewModel.unifiedPeerService.isBlocked(peerID) } + @MainActor + func hasUnreadMessages(for peerID: PeerID) -> Bool { + var noiseKeyPeerID: PeerID? + var nostrPeerID: PeerID? + + if let peer = viewModel.unifiedPeerService.getPeer(by: peerID) { + noiseKeyPeerID = PeerID(hexData: peer.noisePublicKey) + if let nostrHex = peer.nostrPublicKey { + nostrPeerID = PeerID(nostr_: nostrHex) + } + } + + let context = ChatUnreadPeerContext( + peerID: peerID, + noiseKeyPeerID: noiseKeyPeerID, + nostrPeerID: nostrPeerID, + nickname: viewModel.meshService.peerNickname(peerID: peerID) + ) + + return ChatUnreadStateResolver.hasUnreadMessages( + for: context, + unreadPrivateMessages: viewModel.unreadPrivateMessages, + privateChats: viewModel.privateChats + ) + } + + @MainActor + func toggleFavorite(peerID: PeerID) { + if let noisePublicKey = peerID.noiseKey { + toggleFavoriteForNoiseKey(noisePublicKey, peerID: peerID) + return + } + + viewModel.unifiedPeerService.toggleFavorite(peerID) + viewModel.objectWillChange.send() + } + + @MainActor + func isFavorite(peerID: PeerID) -> Bool { + if let noisePublicKey = peerID.noiseKey { + return FavoritesPersistenceService.shared.getFavoriteStatus(for: noisePublicKey)?.isFavorite ?? false + } + + return viewModel.unifiedPeerService.getPeer(by: peerID)?.isFavorite ?? false + } + @MainActor func updatePrivateChatPeerIfNeeded() { guard let chatFingerprint = viewModel.selectedPrivateChatFingerprint, @@ -376,4 +422,42 @@ private extension ChatPeerIdentityCoordinator { } return .noiseSecured } + + @MainActor + func toggleFavoriteForNoiseKey(_ noisePublicKey: Data, peerID: PeerID) { + if let ephemeralID = viewModel.unifiedPeerService.peers.first(where: { $0.noisePublicKey == noisePublicKey })?.peerID { + viewModel.unifiedPeerService.toggleFavorite(ephemeralID) + viewModel.objectWillChange.send() + return + } + + let currentStatus = FavoritesPersistenceService.shared.getFavoriteStatus(for: noisePublicKey) + let fallbackNickname = viewModel.privateChats[peerID]?.first { $0.senderPeerID == peerID }?.sender + let plan = ChatFavoriteTogglePolicy.plan( + currentStatus: currentStatus.map(ChatFavoriteStatusSnapshot.init), + fallbackNickname: fallbackNickname, + bridgedNostrKey: viewModel.idBridge.getNostrPublicKey(for: noisePublicKey) + ) + + switch plan.persistenceAction { + case .add(let nickname, let nostrKey): + FavoritesPersistenceService.shared.addFavorite( + peerNoisePublicKey: noisePublicKey, + peerNostrPublicKey: nostrKey, + peerNickname: nickname + ) + + case .remove: + FavoritesPersistenceService.shared.removeFavorite(peerNoisePublicKey: noisePublicKey) + } + + viewModel.objectWillChange.send() + + if case .send(let isFavorite) = plan.notification { + viewModel.sendFavoriteNotificationViaNostr( + noisePublicKey: noisePublicKey, + isFavorite: isFavorite + ) + } + } } diff --git a/bitchat/ViewModels/ChatUnreadStateResolver.swift b/bitchat/ViewModels/ChatUnreadStateResolver.swift new file mode 100644 index 00000000..378f6f2f --- /dev/null +++ b/bitchat/ViewModels/ChatUnreadStateResolver.swift @@ -0,0 +1,43 @@ +import BitFoundation +import Foundation + +struct ChatUnreadPeerContext { + let peerID: PeerID + let noiseKeyPeerID: PeerID? + let nostrPeerID: PeerID? + let nickname: String? +} + +enum ChatUnreadStateResolver { + static func hasUnreadMessages( + for context: ChatUnreadPeerContext, + unreadPrivateMessages: Set, + privateChats: [PeerID: [BitchatMessage]] + ) -> Bool { + if unreadPrivateMessages.contains(context.peerID) { + return true + } + + if let noiseKeyPeerID = context.noiseKeyPeerID, + unreadPrivateMessages.contains(noiseKeyPeerID) { + return true + } + + if let nostrPeerID = context.nostrPeerID, + unreadPrivateMessages.contains(nostrPeerID) { + return true + } + + guard let peerNickname = context.nickname?.lowercased(), !peerNickname.isEmpty else { + return false + } + + return unreadPrivateMessages.contains { unreadPeerID in + guard unreadPeerID.isGeoDM, + let firstMessage = privateChats[unreadPeerID]?.first else { + return false + } + return firstMessage.sender.lowercased() == peerNickname + } + } +} diff --git a/bitchat/ViewModels/ChatViewModel.swift b/bitchat/ViewModels/ChatViewModel.swift index 10662a19..c37362b1 100644 --- a/bitchat/ViewModels/ChatViewModel.swift +++ b/bitchat/ViewModels/ChatViewModel.swift @@ -118,7 +118,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele ) // MARK: - Published Properties - + @Published var messages: [BitchatMessage] = [] @Published var currentColorScheme: ColorScheme = .light private let maxMessages = TransportConfig.meshTimelineCap // Maximum messages before oldest are removed @@ -137,7 +137,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele } } } - + // MARK: - Service Delegates let commandProcessor: CommandProcessor @@ -159,7 +159,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele lazy var nostrCoordinator = ChatNostrCoordinator(viewModel: self) lazy var mediaTransferCoordinator = ChatMediaTransferCoordinator(viewModel: self) lazy var verificationCoordinator = ChatVerificationCoordinator(viewModel: self) - + // Computed properties for compatibility @MainActor var connectedPeers: Set { unifiedPeerService.connectedPeerIDs } @@ -173,7 +173,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele } var selectedPrivateChatPeer: PeerID? { get { privateChatManager.selectedPeer } - set { + set { if let peerID = newValue { privateChatManager.startChat(with: peerID) } else { @@ -190,7 +190,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele synchronizePrivateConversationStore() } } - + /// Check if there are any unread messages (including from temporary Nostr peer IDs) var hasAnyUnreadMessages: Bool { !unreadPrivateMessages.isEmpty @@ -202,7 +202,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele func openMostRelevantPrivateChat() { peerIdentityCoordinator.openMostRelevantPrivateChat() } - + // var peerIDToPublicKeyFingerprint: [PeerID: String] { get { peerIdentityStore.peerFingerprintsByPeerID } @@ -257,16 +257,16 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele } var peerIndex: [PeerID: BitchatPeer] = [:] - + // MARK: - Autocomplete Properties - + @Published var autocompleteSuggestions: [String] = [] @Published var showAutocomplete: Bool = false @Published var autocompleteRange: NSRange? = nil @Published var selectedAutocompleteIndex: Int = 0 - + // MARK: - Services and Storage - + let meshService: Transport let idBridge: NostrIdentityBridge let identityManager: SecureIdentityStateManagerProtocol @@ -275,7 +275,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele let peerIdentityStore: PeerIdentityStore let locationPresenceStore: LocationPresenceStore let locationManager: LocationChannelManager - + var nostrRelayManager: NostrRelayManager? private let userDefaults = UserDefaults.standard let keychain: KeychainManagerProtocol @@ -311,18 +311,18 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele // Ensure we set up DM subscription only once per app session var nostrHandlersSetup: Bool = false var geoChannelCoordinator: GeoChannelCoordinator? - + // MARK: - Caches - + // MARK: - Social Features (Delegated to PeerStateManager) - + @MainActor var favoritePeers: Set { unifiedPeerService.favoritePeers } @MainActor var blockedUsers: Set { unifiedPeerService.blockedUsers } - + // MARK: - Encryption and Security - + // Noise Protocol encryption status var peerEncryptionStatus: [PeerID: EncryptionStatus] { get { peerIdentityStore.encryptionStatuses } @@ -332,7 +332,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele get { peerIdentityStore.verifiedFingerprints } set { peerIdentityStore.setVerifiedFingerprints(newValue) } } // Set of verified fingerprints - + // Bluetooth state management @Published var showBluetoothAlert = false @Published var bluetoothAlertMessage = "" @@ -368,10 +368,9 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele // Sampling subscriptions for multiple geohashes (when channel sheet is open) var geoSamplingSubs: [String: String] = [:] // subID -> geohash var lastGeoNotificationAt: [String: Date] = [:] // geohash -> last notify time - - + // MARK: - Message Delivery Tracking - + var cancellables = Set() var transferIdToMessageIDs: [String: [String]] { @@ -385,14 +384,14 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele // MARK: - Public message batching (UI perf) let publicMessagePipeline: PublicMessagePipeline @Published var isBatchingPublic: Bool = false - + // Track sent read receipts to avoid duplicates (persisted across launches) // Note: Persistence happens automatically in didSet, no lifecycle observers needed var sentReadReceipts: Set = [] { // messageID set didSet { // Only persist if there are changes guard oldValue != sentReadReceipts else { return } - + // Persist to UserDefaults whenever it changes (no manual synchronize/verify re-read) if let data = try? JSONEncoder().encode(Array(sentReadReceipts)) { UserDefaults.standard.set(data, forKey: "sentReadReceipts") @@ -404,15 +403,15 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele // Track which GeoDM messages we've already sent a delivery ACK for (by messageID) var sentGeoDeliveryAcks: Set = [] - + // Track app startup phase to prevent marking old messages as unread var isStartupPhase = true // Announce Tor initial readiness once per launch to avoid duplicates var torInitialReadyAnnounced: Bool = false - + // Track Nostr pubkey mappings for unknown senders var nostrKeyMapping: [PeerID: String] = [:] // senderPeerID -> nostrPubkey - + // MARK: - Initialization @MainActor @@ -487,21 +486,15 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele ChatViewModelBootstrapper(viewModel: self).configure() initializeConversationStore() } - + // MARK: - Deinitialization - + deinit { // No need to force UserDefaults synchronization } - - - - - - // MARK: - Nickname Management - + func loadNickname() { if let savedNickname = userDefaults.string(forKey: nicknameKey) { nickname = savedNickname.trimmed @@ -510,163 +503,53 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele saveNickname() } } - + func saveNickname() { userDefaults.set(nickname, forKey: nicknameKey) // Persist nickname; no need to force synchronize - + // Send announce with new nickname to all peers meshService.sendBroadcastAnnounce() } - + func validateAndSaveNickname() { nickname = nickname.trimmedOrNilIfEmpty ?? "anon\(Int.random(in: 1000...9999))" saveNickname() } // MARK: - Blocked Users Management (Delegated to PeerStateManager) - - + /// Check if a peer has unread messages, including messages stored under stable Noise keys and temporary Nostr peer IDs @MainActor func hasUnreadMessages(for peerID: PeerID) -> Bool { - // First check direct unread messages - if unreadPrivateMessages.contains(peerID) { - return true - } - - // Check if messages are stored under the stable Noise key hex - if let peer = unifiedPeerService.getPeer(by: peerID) { - let noiseKeyHex = PeerID(hexData: peer.noisePublicKey) - if unreadPrivateMessages.contains(noiseKeyHex) { - return true - } - // Also check for geohash (Nostr) DM conv key if this peer has a known Nostr pubkey - if let nostrHex = peer.nostrPublicKey { - let convKey = PeerID(nostr_: nostrHex) - if unreadPrivateMessages.contains(convKey) { - return true - } - } - } - - // Get the peer's nickname to check for temporary Nostr peer IDs - let peerNickname = meshService.peerNickname(peerID: peerID)?.lowercased() ?? "" - - // Check if any temporary Nostr peer IDs have unread messages from this nickname - for unreadPeerID in unreadPrivateMessages { - if unreadPeerID.isGeoDM { - // Check if messages from this temporary peer match the nickname - if let messages = privateChats[unreadPeerID], - let firstMessage = messages.first, - firstMessage.sender.lowercased() == peerNickname { - return true - } - } - } - - return false + peerIdentityCoordinator.hasUnreadMessages(for: peerID) } - + @MainActor func toggleFavorite(peerID: PeerID) { - // Distinguish between ephemeral peer IDs (16 hex chars) and Noise public keys (64 hex chars) - // Ephemeral peer IDs are 8 bytes = 16 hex characters - // Noise public keys are 32 bytes = 64 hex characters - - if let noisePublicKey = peerID.noiseKey { - // This is a stable Noise key hex (used in private chats) - // Find the ephemeral peer ID for this Noise key - let ephemeralPeerID = unifiedPeerService.peers.first { peer in - peer.noisePublicKey == noisePublicKey - }?.peerID - - if let ephemeralID = ephemeralPeerID { - // Found the ephemeral peer, use normal toggle - unifiedPeerService.toggleFavorite(ephemeralID) - // Also trigger UI update - objectWillChange.send() - } else { - // No ephemeral peer found, directly toggle via FavoritesPersistenceService - let currentStatus = FavoritesPersistenceService.shared.getFavoriteStatus(for: noisePublicKey) - let wasFavorite = currentStatus?.isFavorite ?? false - - if wasFavorite { - // Remove favorite - FavoritesPersistenceService.shared.removeFavorite(peerNoisePublicKey: noisePublicKey) - } else { - // Add favorite - get nickname from current status or from private chat messages - var nickname = currentStatus?.peerNickname - - // If no nickname in status, try to get from private chat messages - if nickname == nil, let messages = privateChats[peerID], !messages.isEmpty { - // Get the nickname from the first message where this peer was the sender - nickname = messages.first { $0.senderPeerID == peerID }?.sender - } - - let finalNickname = nickname ?? "Unknown" - let nostrKey = currentStatus?.peerNostrPublicKey ?? idBridge.getNostrPublicKey(for: noisePublicKey) - - FavoritesPersistenceService.shared.addFavorite( - peerNoisePublicKey: noisePublicKey, - peerNostrPublicKey: nostrKey, - peerNickname: finalNickname - ) - } - - // Trigger UI update - objectWillChange.send() - - // Send favorite notification via Nostr if we're mutual favorites - if !wasFavorite && currentStatus?.theyFavoritedUs == true { - // We just favorited them and they already favorite us - send via Nostr - sendFavoriteNotificationViaNostr(noisePublicKey: noisePublicKey, isFavorite: true) - } else if wasFavorite { - // We're unfavoriting - send via Nostr if they still favorite us - sendFavoriteNotificationViaNostr(noisePublicKey: noisePublicKey, isFavorite: false) - } - } - } else { - // This is an ephemeral peer ID (16 hex chars), use normal toggle - unifiedPeerService.toggleFavorite(peerID) - // Trigger UI update - objectWillChange.send() - } + peerIdentityCoordinator.toggleFavorite(peerID: peerID) } - + @MainActor func isFavorite(peerID: PeerID) -> Bool { - // Distinguish between ephemeral peer IDs (16 hex chars) and Noise public keys (64 hex chars) - if let noisePublicKey = peerID.noiseKey { - // This is a Noise public key - if let status = FavoritesPersistenceService.shared.getFavoriteStatus(for: noisePublicKey) { - return status.isFavorite - } - } else { - // This is an ephemeral peer ID - check with UnifiedPeerService - if let peer = unifiedPeerService.getPeer(by: peerID) { - return peer.isFavorite - } - } - - return false + peerIdentityCoordinator.isFavorite(peerID: peerID) } - + // MARK: - Public Key and Identity Management - + @MainActor func isPeerBlocked(_ peerID: PeerID) -> Bool { peerIdentityCoordinator.isPeerBlocked(peerID) } - + // Helper method to update selectedPrivateChatPeer if fingerprint matches @MainActor func updatePrivateChatPeerIfNeeded() { peerIdentityCoordinator.updatePrivateChatPeerIfNeeded() } - + // MARK: - Message Sending - + /// Sends a message through the BitChat network. /// - Parameter content: The message content to send /// - Note: Automatically handles command processing if content starts with '/' @@ -675,14 +558,6 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele func sendMessage(_ content: String) { outgoingCoordinator.sendMessage(content) } - - - - - - - - // MARK: - Geohash Participants @@ -762,14 +637,10 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele ) } - - func displayNameForNostrPubkey(_ pubkeyHex: String) -> String { publicConversationCoordinator.displayNameForNostrPubkey(pubkeyHex) } - - // MARK: - Media Transfers private enum MediaSendError: Error { @@ -778,13 +649,6 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele case copyFailed } - - - - - - - func currentPublicSender() -> (name: String, peerID: PeerID) { publicConversationCoordinator.currentPublicSender() } @@ -794,14 +658,11 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele peerIdentityCoordinator.nicknameForPeer(peerID) } - - @MainActor func removeMessage(withID messageID: String, cleanupFile: Bool = false) { publicConversationCoordinator.removeMessage(withID: messageID, cleanupFile: cleanupFile) } - /// Add a local system message to a private chat (no network send) @MainActor func addLocalPrivateSystemMessage(_ content: String, to peerID: PeerID) { @@ -819,37 +680,21 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele privateChats[peerID]?.append(systemMessage) objectWillChange.send() } - + // MARK: - Bluetooth State Management - + /// Updates the Bluetooth state and shows appropriate alerts /// - Parameter state: The current Bluetooth manager state @MainActor func updateBluetoothState(_ state: CBManagerState) { bluetoothState = state - - switch state { - case .poweredOff: - bluetoothAlertMessage = String(localized: "content.alert.bluetooth_required.off", comment: "Message shown when Bluetooth is turned off") - showBluetoothAlert = true - case .unauthorized: - bluetoothAlertMessage = String(localized: "content.alert.bluetooth_required.permission", comment: "Message shown when Bluetooth permission is missing") - showBluetoothAlert = true - case .unsupported: - bluetoothAlertMessage = String(localized: "content.alert.bluetooth_required.unsupported", comment: "Message shown when the device lacks Bluetooth support") - showBluetoothAlert = true - case .poweredOn: - // Hide alert when Bluetooth is powered on - showBluetoothAlert = false - bluetoothAlertMessage = "" - case .unknown, .resetting: - // Don't show alerts for transient states - showBluetoothAlert = false - @unknown default: - showBluetoothAlert = false + let alertUpdate = ChatBluetoothAlertPolicy.update(for: state) + showBluetoothAlert = alertUpdate.isPresented + if let message = alertUpdate.message { + bluetoothAlertMessage = message } } - + // MARK: - Private Chat Management /// Initiates a private chat session with a peer. @@ -859,33 +704,33 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele func startPrivateChat(with peerID: PeerID) { peerIdentityCoordinator.startPrivateChat(with: peerID) } - + @MainActor func endPrivateChat() { peerIdentityCoordinator.endPrivateChat() } - + @MainActor @objc func handlePeerStatusUpdate(_ notification: Notification) { peerIdentityCoordinator.handlePeerStatusUpdate() } - + @objc func handleFavoriteStatusChanged(_ notification: Notification) { peerIdentityCoordinator.handleFavoriteStatusChanged(notification) } - + // MARK: - App Lifecycle - + @MainActor func handleDidBecomeActive() { lifecycleCoordinator.handleDidBecomeActive() } - + @MainActor func handleScreenshotCaptured() { lifecycleCoordinator.handleScreenshotCaptured() } - + /// Save identity state without stopping services (for backgrounding) func saveIdentityState() { lifecycleCoordinator.saveIdentityState() @@ -894,38 +739,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele @objc func applicationWillTerminate() { lifecycleCoordinator.applicationWillTerminate() } - - @MainActor - private func sendReadReceipt(_ receipt: ReadReceipt, to peerID: PeerID, originalTransport: String? = nil) { - // First, try to resolve the current peer ID in case they reconnected with a new ID - var actualPeerID = peerID - - // Check if this peer ID exists in current nicknames - if meshService.peerNickname(peerID: peerID) == nil { - // Peer not found with this ID, try to find by fingerprint or nickname - if let oldNoiseKey = Data(hexString: peerID.id), - let favoriteStatus = FavoritesPersistenceService.shared.getFavoriteStatus(for: oldNoiseKey) { - let peerNickname = favoriteStatus.peerNickname - - // Search for the current peer ID with the same nickname - for (currentPeerID, currentNickname) in meshService.getPeerNicknames() { - if currentNickname == peerNickname { - SecureLogger.info("📖 Resolved updated peer ID for read receipt: \(peerID) -> \(currentPeerID)", category: .session) - actualPeerID = currentPeerID - break - } - } - } - } - - // If this originated over Nostr, skip (handled by Nostr code paths) - if originalTransport == "nostr" { - return - } - // Use router to decide (mesh if reachable, else Nostr if available) - messageRouter.sendReadReceipt(receipt, to: actualPeerID) - } - + @MainActor func markPrivateMessagesAsRead(from peerID: PeerID) { lifecycleCoordinator.markPrivateMessagesAsRead(from: peerID) @@ -939,20 +753,19 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele func getPrivateChatMessages(for peerID: PeerID) -> [BitchatMessage] { lifecycleCoordinator.getPrivateChatMessages(for: peerID) } - + @MainActor func getPeerIDForNickname(_ nickname: String) -> PeerID? { peerIdentityCoordinator.getPeerIDForNickname(nickname) } - - + // MARK: - Emergency Functions - + // PANIC: Emergency data clearing for activist safety @MainActor func panicClearAllData() { // Messages are processed immediately - nothing to flush - + // Clear all messages messages.removeAll() timelineStore = PublicTimelineStore( @@ -961,38 +774,38 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele ) privateChatManager.privateChats.removeAll() privateChatManager.unreadMessages.removeAll() - + // Delete all keychain data (including Noise and Nostr keys) _ = keychain.deleteAllKeychainData() - + // Clear UserDefaults identity data userDefaults.removeObject(forKey: "bitchat.noiseIdentityKey") userDefaults.removeObject(forKey: "bitchat.messageRetentionKey") - + // Reset nickname to anonymous nickname = "anon\(Int.random(in: 1000...9999))" saveNickname() - + // Clear favorites and peer mappings // Clear through SecureIdentityStateManager instead of directly identityManager.clearAllIdentityData() peerIdentityStore.clearAll() locationPresenceStore.reset() - + // Clear persistent favorites from keychain FavoritesPersistenceService.shared.clearAllFavorites() - + // Identity manager has cleared persisted identity data above - + // Clear autocomplete state autocompleteSuggestions.removeAll() showAutocomplete = false autocompleteRange = nil selectedAutocompleteIndex = 0 - + // Clear selected private chat selectedPrivateChatPeer = nil - + // Clear read receipt tracking sentReadReceipts.removeAll() deduplicationService.clearAll() @@ -1001,10 +814,10 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele // Disconnect from Nostr relays and clear subscriptions nostrRelayManager?.disconnect() nostrRelayManager = nil - + // Clear Nostr identity associations idBridge.clearAllAssociations() - + // Disconnect from all peers and clear persistent identity // This will force creation of a new identity (new fingerprint) on next launch meshService.emergencyDisconnectAll() @@ -1015,19 +828,19 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele initializeConversationStore() // No need to force UserDefaults synchronization - + // Reinitialize Nostr with new identity // This will generate new Nostr keys derived from new Noise keys Task { @MainActor in // Small delay to ensure cleanup completes try? await Task.sleep(nanoseconds: TransportConfig.uiAsyncShortSleepNs) // 0.1 seconds - + // Reinitialize Nostr relay manager with new identity nostrRelayManager = NostrRelayManager() setupNostrMessageHandling() nostrRelayManager?.connect() } - + // Delete ALL media files (incoming and outgoing) in background Task.detached(priority: .utility) { do { @@ -1088,17 +901,17 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele #endif // MARK: - Autocomplete - + func updateAutocomplete(for text: String, cursorPosition: Int) { composerCoordinator.updateAutocomplete(for: text, cursorPosition: cursorPosition) } - + func completeNickname(_ nickname: String, in text: inout String) -> Int { composerCoordinator.completeNickname(nickname, in: &text) } - + // MARK: - Message Formatting - + @MainActor func formatMessageAsText(_ message: BitchatMessage, colorScheme: ColorScheme) -> AttributedString { messageFormatter.formatMessageAsText(message, colorScheme: colorScheme) @@ -1110,29 +923,28 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele } // MARK: - Noise Protocol Support - + @MainActor func updateEncryptionStatusForPeers() { peerIdentityCoordinator.updateEncryptionStatusForPeers() } - + @MainActor func updateEncryptionStatus(for peerID: PeerID) { peerIdentityCoordinator.updateEncryptionStatus(for: peerID) } - + @MainActor func getEncryptionStatus(for peerID: PeerID) -> EncryptionStatus { peerIdentityCoordinator.getEncryptionStatus(for: peerID) } - + // Clear caches when data changes @MainActor func invalidateEncryptionCache(for peerID: PeerID? = nil) { peerIdentityCoordinator.invalidateEncryptionCache(for: peerID) } - - + // MARK: - Message Handling @MainActor @@ -1222,38 +1034,38 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele func clearCurrentPublicTimeline() { publicConversationCoordinator.clearCurrentPublicTimeline() } - + // MARK: - Message Management - + private func addMessage(_ message: BitchatMessage) { // Check for duplicates guard !messages.contains(where: { $0.id == message.id }) else { return } messages.append(message) trimMessagesIfNeeded() } - + // MARK: - Peer Lookup Helpers - + func getPeer(byID peerID: PeerID) -> BitchatPeer? { return peerIndex[peerID] } - + @MainActor func getFingerprint(for peerID: PeerID) -> String? { peerIdentityCoordinator.getFingerprint(for: peerID) } - + /// Helper to resolve nickname for a peer ID through various sources @MainActor func resolveNickname(for peerID: PeerID) -> String { peerIdentityCoordinator.resolveNickname(for: peerID) } - + @MainActor func getMyFingerprint() -> String { peerIdentityCoordinator.getMyFingerprint() } - + @MainActor func verifyFingerprint(for peerID: PeerID) { verificationCoordinator.verifyFingerprint(for: peerID) @@ -1263,27 +1075,27 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele func unverifyFingerprint(for peerID: PeerID) { verificationCoordinator.unverifyFingerprint(for: peerID) } - + @MainActor func loadVerifiedFingerprints() { verificationCoordinator.loadVerifiedFingerprints() } - + func setupNoiseCallbacks() { verificationCoordinator.setupNoiseCallbacks() } - + // MARK: - BitchatDelegate Methods - + // MARK: - Command Handling - + /// Processes IRC-style commands starting with '/'. /// - Parameter command: The full command string including the leading slash /// - Note: Supports commands like /nick, /msg, /who, /slap, /clear, /help @MainActor func handleCommand(_ command: String) { let result = commandProcessor.process(command) - + switch result { case .success(let message): if let msg = message { @@ -1296,14 +1108,14 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele break } } - + // MARK: - Message Reception @MainActor func didReceiveTransportEvent(_ event: TransportEvent) { receiveTransportEvent(event) } - + func didReceiveMessage(_ message: BitchatMessage) { transportEventCoordinator.didReceiveMessage(message) } @@ -1348,48 +1160,48 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele func didConnectToPeer(_ peerID: PeerID) { transportEventCoordinator.didConnectToPeer(peerID) } - + func didDisconnectFromPeer(_ peerID: PeerID) { transportEventCoordinator.didDisconnectFromPeer(peerID) } - + func didUpdatePeerList(_ peers: [PeerID]) { peerListCoordinator.didUpdatePeerList(peers) } - + @MainActor func cleanupOldReadReceipts() { deliveryCoordinator.cleanupOldReadReceipts() } - + func parseMentions(from content: String) -> [String] { composerCoordinator.parseMentions(from: content) } - + func isFavorite(fingerprint: String) -> Bool { return identityManager.isFavorite(fingerprint: fingerprint) } - + // MARK: - Delivery Tracking - + func didReceiveReadReceipt(_ receipt: ReadReceipt) { performDeliveryUpdate { coordinator in coordinator.didReceiveReadReceipt(receipt) } } - + func didUpdateMessageDeliveryStatus(_ messageID: String, status: DeliveryStatus) { performDeliveryUpdate { coordinator in coordinator.didUpdateMessageDeliveryStatus(messageID, status: status) } } - + func updateMessageDeliveryStatus(_ messageID: String, status: DeliveryStatus) { performDeliveryUpdate { coordinator in coordinator.updateMessageDeliveryStatus(messageID, status: status) } } - + // MARK: - Helper for System Messages func addSystemMessage(_ content: String, timestamp: Date = Date()) { publicConversationCoordinator.addSystemMessage(content, timestamp: timestamp) @@ -1420,41 +1232,13 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele func sendPublicRaw(_ content: String) { publicConversationCoordinator.sendPublicRaw(content) } - - - - - - - // MARK: - Base64URL utils - static func base64URLDecode(_ s: String) -> Data? { - var str = s.replacingOccurrences(of: "-", with: "+") - .replacingOccurrences(of: "_", with: "/") - // Add padding if needed - let rem = str.count % 4 - if rem > 0 { str.append(String(repeating: "=", count: 4 - rem)) } - return Data(base64Encoded: str) - } - - // - - - - - - - - - - - /// Handle incoming public message @MainActor func handlePublicMessage(_ message: BitchatMessage) { publicConversationCoordinator.handlePublicMessage(message) } - + /// Check for mentions and send notifications func checkForMentions(_ message: BitchatMessage) { publicConversationCoordinator.checkForMentions(message) diff --git a/bitchatTests/ChatBluetoothAlertPolicyTests.swift b/bitchatTests/ChatBluetoothAlertPolicyTests.swift new file mode 100644 index 00000000..8d368988 --- /dev/null +++ b/bitchatTests/ChatBluetoothAlertPolicyTests.swift @@ -0,0 +1,40 @@ +import CoreBluetooth +import Testing +@testable import bitchat + +struct ChatBluetoothAlertPolicyTests { + @Test + func poweredOffShowsAlertMessage() { + let update = ChatBluetoothAlertPolicy.update(for: .poweredOff) + + #expect(update.isPresented) + #expect(update.message?.isEmpty == false) + } + + @Test + func unauthorizedShowsAlertMessage() { + let update = ChatBluetoothAlertPolicy.update(for: .unauthorized) + + #expect(update.isPresented) + #expect(update.message?.isEmpty == false) + } + + @Test + func poweredOnHidesAndClearsAlertMessage() { + let update = ChatBluetoothAlertPolicy.update(for: .poweredOn) + + #expect(!update.isPresented) + #expect(update.message == "") + } + + @Test + func transientStatesHideWithoutChangingAlertMessage() { + let unknown = ChatBluetoothAlertPolicy.update(for: .unknown) + let resetting = ChatBluetoothAlertPolicy.update(for: .resetting) + + #expect(!unknown.isPresented) + #expect(unknown.message == nil) + #expect(!resetting.isPresented) + #expect(resetting.message == nil) + } +} diff --git a/bitchatTests/ChatFavoriteTogglePolicyTests.swift b/bitchatTests/ChatFavoriteTogglePolicyTests.swift new file mode 100644 index 00000000..39e3c420 --- /dev/null +++ b/bitchatTests/ChatFavoriteTogglePolicyTests.swift @@ -0,0 +1,70 @@ +import Testing +@testable import bitchat + +struct ChatFavoriteTogglePolicyTests { + @Test + func addingWithoutExistingStatusUsesFallbackNicknameAndBridgeKey() { + let plan = ChatFavoriteTogglePolicy.plan( + currentStatus: nil, + fallbackNickname: "alice", + bridgedNostrKey: "npub-alice" + ) + + #expect(plan == ChatFavoriteTogglePlan( + persistenceAction: .add(nickname: "alice", nostrKey: "npub-alice"), + notification: .none + )) + } + + @Test + func addingMutualFavoriteSendsPositiveNotification() { + let plan = ChatFavoriteTogglePolicy.plan( + currentStatus: ChatFavoriteStatusSnapshot( + peerNickname: "alice", + peerNostrPublicKey: "npub-current", + isFavorite: false, + theyFavoritedUs: true + ), + fallbackNickname: "fallback", + bridgedNostrKey: "npub-bridge" + ) + + #expect(plan == ChatFavoriteTogglePlan( + persistenceAction: .add(nickname: "alice", nostrKey: "npub-current"), + notification: .send(isFavorite: true) + )) + } + + @Test + func addingWithoutAnyNicknameUsesUnknown() { + let plan = ChatFavoriteTogglePolicy.plan( + currentStatus: nil, + fallbackNickname: nil, + bridgedNostrKey: nil + ) + + #expect(plan == ChatFavoriteTogglePlan( + persistenceAction: .add(nickname: "Unknown", nostrKey: nil), + notification: .none + )) + } + + @Test + func removingFavoriteSendsNegativeNotification() { + let plan = ChatFavoriteTogglePolicy.plan( + currentStatus: ChatFavoriteStatusSnapshot( + peerNickname: "alice", + peerNostrPublicKey: "npub-current", + isFavorite: true, + theyFavoritedUs: false + ), + fallbackNickname: nil, + bridgedNostrKey: nil + ) + + #expect(plan == ChatFavoriteTogglePlan( + persistenceAction: .remove, + notification: .send(isFavorite: false) + )) + } +} diff --git a/bitchatTests/ChatMediaPreparationTests.swift b/bitchatTests/ChatMediaPreparationTests.swift new file mode 100644 index 00000000..ee47f7ed --- /dev/null +++ b/bitchatTests/ChatMediaPreparationTests.swift @@ -0,0 +1,92 @@ +import BitFoundation +import Foundation +import Testing +#if os(iOS) +import UIKit +#else +import AppKit +#endif +@testable import bitchat + +struct ChatMediaPreparationTests { + @Test + func prepareVoiceNotePacket_buildsEncodedAudioPacket() throws { + let url = FileManager.default.temporaryDirectory.appendingPathComponent("voice-\(UUID().uuidString).m4a") + try Data("voice".utf8).write(to: url, options: .atomic) + defer { try? FileManager.default.removeItem(at: url) } + + let packet = try ChatMediaPreparation.prepareVoiceNotePacket(at: url) + + #expect(packet.fileName == url.lastPathComponent) + #expect(packet.mimeType == "audio/mp4") + #expect(packet.fileSize == 5) + #expect(packet.encode() != nil) + } + + @Test + func prepareVoiceNotePacket_rejectsOversizedAudio() throws { + let url = FileManager.default.temporaryDirectory.appendingPathComponent("voice-too-large-\(UUID().uuidString).m4a") + try Data(repeating: 0x55, count: FileTransferLimits.maxVoiceNoteBytes + 1).write(to: url, options: .atomic) + defer { try? FileManager.default.removeItem(at: url) } + + #expect(throws: ChatMediaPreparationError.voiceNoteTooLarge(bytes: FileTransferLimits.maxVoiceNoteBytes + 1)) { + try ChatMediaPreparation.prepareVoiceNotePacket(at: url) + } + } + + @Test + func prepareImagePacket_rejectsInvalidImage() throws { + let url = FileManager.default.temporaryDirectory.appendingPathComponent("invalid-\(UUID().uuidString).jpg") + try Data("not-an-image".utf8).write(to: url, options: .atomic) + defer { try? FileManager.default.removeItem(at: url) } + + #expect(throws: ImageUtilsError.invalidImage) { + try ChatMediaPreparation.prepareImagePacket(from: url) + } + } + + @Test + func prepareImagePacket_buildsEncodedJpegPacket() throws { + let sourceURL = try makeTemporaryImageURL() + defer { try? FileManager.default.removeItem(at: sourceURL) } + + let prepared = try ChatMediaPreparation.prepareImagePacket(from: sourceURL) + defer { try? FileManager.default.removeItem(at: prepared.outputURL) } + + #expect(prepared.packet.fileName == prepared.outputURL.lastPathComponent) + #expect(prepared.packet.mimeType == "image/jpeg") + #expect(prepared.packet.fileSize == UInt64(prepared.packet.content.count)) + #expect(prepared.packet.encode() != nil) + } +} + +private func makeTemporaryImageURL() throws -> URL { + let url = FileManager.default.temporaryDirectory.appendingPathComponent("image-\(UUID().uuidString).png") + #if os(iOS) + let renderer = UIGraphicsImageRenderer(size: CGSize(width: 64, height: 64)) + let image = renderer.image { context in + UIColor.systemTeal.setFill() + context.fill(CGRect(x: 0, y: 0, width: 64, height: 64)) + } + guard let data = image.pngData() else { + throw ChatMediaPreparationTestError.imageEncodingFailed + } + #else + let image = NSImage(size: NSSize(width: 64, height: 64)) + image.lockFocus() + NSColor.systemTeal.setFill() + NSRect(x: 0, y: 0, width: 64, height: 64).fill() + image.unlockFocus() + guard let tiff = image.tiffRepresentation, + let bitmap = NSBitmapImageRep(data: tiff), + let data = bitmap.representation(using: .png, properties: [:]) else { + throw ChatMediaPreparationTestError.imageEncodingFailed + } + #endif + try data.write(to: url, options: .atomic) + return url +} + +private enum ChatMediaPreparationTestError: Error { + case imageEncodingFailed +} diff --git a/bitchatTests/ChatUnreadStateResolverTests.swift b/bitchatTests/ChatUnreadStateResolverTests.swift new file mode 100644 index 00000000..37b80b57 --- /dev/null +++ b/bitchatTests/ChatUnreadStateResolverTests.swift @@ -0,0 +1,115 @@ +import BitFoundation +import Foundation +import Testing +@testable import bitchat + +struct ChatUnreadStateResolverTests { + @Test + func directUnreadPeerReturnsTrue() { + let peerID = PeerID(str: "peer-a") + let context = ChatUnreadPeerContext( + peerID: peerID, + noiseKeyPeerID: nil, + nostrPeerID: nil, + nickname: nil + ) + + #expect(ChatUnreadStateResolver.hasUnreadMessages( + for: context, + unreadPrivateMessages: [peerID], + privateChats: [:] + )) + } + + @Test + func stableNoiseKeyUnreadReturnsTrue() { + let peerID = PeerID(str: "ephemeral") + let stableID = PeerID(str: "stable") + let context = ChatUnreadPeerContext( + peerID: peerID, + noiseKeyPeerID: stableID, + nostrPeerID: nil, + nickname: nil + ) + + #expect(ChatUnreadStateResolver.hasUnreadMessages( + for: context, + unreadPrivateMessages: [stableID], + privateChats: [:] + )) + } + + @Test + func nostrConversationUnreadReturnsTrue() { + let peerID = PeerID(str: "ephemeral") + let nostrID = PeerID(nostr_: "abcdef") + let context = ChatUnreadPeerContext( + peerID: peerID, + noiseKeyPeerID: nil, + nostrPeerID: nostrID, + nickname: nil + ) + + #expect(ChatUnreadStateResolver.hasUnreadMessages( + for: context, + unreadPrivateMessages: [nostrID], + privateChats: [:] + )) + } + + @Test + func temporaryGeoDMWithMatchingNicknameReturnsTrue() { + let peerID = PeerID(str: "mesh-peer") + let geoDM = PeerID(nostr_: "0123456789abcdef") + let context = ChatUnreadPeerContext( + peerID: peerID, + noiseKeyPeerID: nil, + nostrPeerID: nil, + nickname: "Alice" + ) + let message = BitchatMessage( + sender: "alice", + content: "hi", + timestamp: Date(timeIntervalSince1970: 1), + isRelay: false, + originalSender: nil, + isPrivate: true, + recipientNickname: "me", + senderPeerID: geoDM + ) + + #expect(ChatUnreadStateResolver.hasUnreadMessages( + for: context, + unreadPrivateMessages: [geoDM], + privateChats: [geoDM: [message]] + )) + } + + @Test + func unmatchedUnreadStateReturnsFalse() { + let peerID = PeerID(str: "mesh-peer") + let geoDM = PeerID(nostr_: "0123456789abcdef") + let context = ChatUnreadPeerContext( + peerID: peerID, + noiseKeyPeerID: nil, + nostrPeerID: nil, + nickname: "Alice" + ) + let message = BitchatMessage( + sender: "bob", + content: "hi", + timestamp: Date(timeIntervalSince1970: 1), + isRelay: false, + originalSender: nil, + isPrivate: true, + recipientNickname: "me", + senderPeerID: geoDM + ) + + #expect(!ChatUnreadStateResolver.hasUnreadMessages( + for: context, + unreadPrivateMessages: [geoDM], + privateChats: [geoDM: [message]] + )) + } +} diff --git a/bitchatTests/ChatViewModelExtensionsTests.swift b/bitchatTests/ChatViewModelExtensionsTests.swift index d5f95b8f..7e8f0b9a 100644 --- a/bitchatTests/ChatViewModelExtensionsTests.swift +++ b/bitchatTests/ChatViewModelExtensionsTests.swift @@ -797,6 +797,7 @@ struct ChatViewModelGeoDMTests { } } +@Suite(.serialized) struct ChatViewModelMediaTransferTests { @Test @MainActor @@ -931,7 +932,7 @@ struct ChatViewModelMediaTransferTests { let didNotify = await TestHelpers.waitUntil({ viewModel.messages.contains(where: { $0.sender == "system" && $0.content.contains("Failed to prepare image") }) - }, timeout: 2.0) + }, timeout: 5.0) #expect(didNotify) #expect(transport.sentPrivateFiles.isEmpty) #expect(viewModel.privateChats[peerID]?.isEmpty != false) diff --git a/bitchatTests/Nostr/Base64URLCodingTests.swift b/bitchatTests/Nostr/Base64URLCodingTests.swift new file mode 100644 index 00000000..2203addf --- /dev/null +++ b/bitchatTests/Nostr/Base64URLCodingTests.swift @@ -0,0 +1,30 @@ +import Foundation +import Testing +@testable import bitchat + +struct Base64URLCodingTests { + @Test + func encodesWithoutPaddingOrURLUnsafeCharacters() { + let encoded = Base64URLCoding.encode(Data([0xff, 0xee, 0xdd, 0xcc])) + + #expect(!encoded.contains("=")) + #expect(!encoded.contains("+")) + #expect(!encoded.contains("/")) + } + + @Test + func decodesUnpaddedValue() throws { + let data = try #require(Base64URLCoding.decode("_-7dzA")) + + #expect(data == Data([0xff, 0xee, 0xdd, 0xcc])) + } + + @Test + func roundTripsData() throws { + let original = Data("hello bitchat".utf8) + + let decoded = try #require(Base64URLCoding.decode(Base64URLCoding.encode(original))) + + #expect(decoded == original) + } +} diff --git a/bitchatTests/Services/BLEAnnounceHandlingPolicyTests.swift b/bitchatTests/Services/BLEAnnounceHandlingPolicyTests.swift new file mode 100644 index 00000000..c0226b81 --- /dev/null +++ b/bitchatTests/Services/BLEAnnounceHandlingPolicyTests.swift @@ -0,0 +1,233 @@ +import BitFoundation +import Foundation +import Testing +@testable import bitchat + +struct BLEAnnounceHandlingPolicyTests { + @Test + func preflightAcceptsMatchingFreshAnnounce() throws { + let now = Date(timeIntervalSince1970: 1_000) + let noiseKey = Data(repeating: 0x11, count: 32) + let peerID = PeerID(publicKey: noiseKey) + let packet = try makeAnnouncePacket(noisePublicKey: noiseKey, peerID: peerID, timestamp: timestamp(now)) + + let decision = BLEAnnouncePreflightPolicy.evaluate( + packet: packet, + from: peerID, + localPeerID: PeerID(str: "0102030405060708"), + now: now + ) + + guard case .accept(let accepted) = decision else { + Issue.record("Expected announce preflight acceptance") + return + } + #expect(accepted.announcement.nickname == "Alice") + #expect(accepted.derivedPeerID == peerID) + } + + @Test + func preflightRejectsMalformedPayload() { + let now = Date(timeIntervalSince1970: 1_000) + let peerID = PeerID(str: "1122334455667788") + let packet = BitchatPacket( + type: MessageType.announce.rawValue, + senderID: Data(hexString: peerID.id) ?? Data(), + recipientID: nil, + timestamp: timestamp(now), + payload: Data([0x01, 0x20]), + signature: nil, + ttl: TransportConfig.messageTTLDefault + ) + + let decision = BLEAnnouncePreflightPolicy.evaluate( + packet: packet, + from: peerID, + localPeerID: PeerID(str: "0102030405060708"), + now: now + ) + + guard case .reject(.malformed) = decision else { + Issue.record("Expected malformed announce rejection") + return + } + } + + @Test + func preflightRejectsSenderMismatchWithDerivedPeerID() throws { + let now = Date(timeIntervalSince1970: 1_000) + let noiseKey = Data(repeating: 0x22, count: 32) + let derivedPeerID = PeerID(publicKey: noiseKey) + let claimedPeerID = PeerID(str: "1122334455667788") + let packet = try makeAnnouncePacket(noisePublicKey: noiseKey, peerID: claimedPeerID, timestamp: timestamp(now)) + + let decision = BLEAnnouncePreflightPolicy.evaluate( + packet: packet, + from: claimedPeerID, + localPeerID: PeerID(str: "0102030405060708"), + now: now + ) + + guard case .reject(.senderMismatch(let rejectedDerivedPeerID)) = decision else { + Issue.record("Expected sender mismatch rejection") + return + } + #expect(rejectedDerivedPeerID == derivedPeerID) + } + + @Test + func preflightRejectsSelfAnnounceAfterSenderMatches() throws { + let now = Date(timeIntervalSince1970: 1_000) + let noiseKey = Data(repeating: 0x33, count: 32) + let peerID = PeerID(publicKey: noiseKey) + let packet = try makeAnnouncePacket(noisePublicKey: noiseKey, peerID: peerID, timestamp: timestamp(now)) + + let decision = BLEAnnouncePreflightPolicy.evaluate( + packet: packet, + from: peerID, + localPeerID: peerID, + now: now + ) + + guard case .reject(.selfAnnounce) = decision else { + Issue.record("Expected self announce rejection") + return + } + } + + @Test + func preflightRejectsStaleAnnounceWithAge() throws { + let now = Date(timeIntervalSince1970: 1_000) + let noiseKey = Data(repeating: 0x44, count: 32) + let peerID = PeerID(publicKey: noiseKey) + let oldTimestamp = UInt64((now.timeIntervalSince1970 - 901) * 1000) + let packet = try makeAnnouncePacket(noisePublicKey: noiseKey, peerID: peerID, timestamp: oldTimestamp) + + let decision = BLEAnnouncePreflightPolicy.evaluate( + packet: packet, + from: peerID, + localPeerID: PeerID(str: "0102030405060708"), + now: now + ) + + guard case .reject(.stale(let ageSeconds)) = decision else { + Issue.record("Expected stale announce rejection") + return + } + #expect(abs(ageSeconds - 901) < 0.001) + } + + @Test + func trustPolicyRequiresSignature() { + let decision = BLEAnnounceTrustPolicy.evaluate( + hasSignature: false, + signatureValid: false, + existingNoisePublicKey: nil, + announcedNoisePublicKey: Data(repeating: 0x11, count: 32) + ) + + #expect(decision == .reject(.missingSignature)) + #expect(!decision.isVerified) + } + + @Test + func trustPolicyRejectsInvalidSignature() { + let decision = BLEAnnounceTrustPolicy.evaluate( + hasSignature: true, + signatureValid: false, + existingNoisePublicKey: nil, + announcedNoisePublicKey: Data(repeating: 0x11, count: 32) + ) + + #expect(decision == .reject(.invalidSignature)) + } + + @Test + func trustPolicyRejectsExistingKeyMismatch() { + let decision = BLEAnnounceTrustPolicy.evaluate( + hasSignature: true, + signatureValid: true, + existingNoisePublicKey: Data(repeating: 0xAA, count: 32), + announcedNoisePublicKey: Data(repeating: 0xBB, count: 32) + ) + + #expect(decision == .reject(.keyMismatch)) + } + + @Test + func trustPolicyAcceptsValidSignatureWithMatchingExistingKey() { + let noiseKey = Data(repeating: 0xCC, count: 32) + + let decision = BLEAnnounceTrustPolicy.evaluate( + hasSignature: true, + signatureValid: true, + existingNoisePublicKey: noiseKey, + announcedNoisePublicKey: noiseKey + ) + + #expect(decision == .verified) + #expect(decision.isVerified) + } + + @Test + func responsePolicyConnectsOnlyForDirectNewOrReconnectedPeers() { + let directNew = BLEAnnounceResponsePolicy.plan( + isDirectAnnounce: true, + isNewPeer: true, + isReconnectedPeer: false, + shouldSendAnnounceBack: false + ) + #expect(directNew.shouldNotifyPeerConnected) + #expect(directNew.shouldScheduleInitialSync) + #expect(directNew.shouldScheduleAfterglow) + + let relayedNew = BLEAnnounceResponsePolicy.plan( + isDirectAnnounce: false, + isNewPeer: true, + isReconnectedPeer: false, + shouldSendAnnounceBack: true + ) + #expect(!relayedNew.shouldNotifyPeerConnected) + #expect(!relayedNew.shouldScheduleInitialSync) + #expect(relayedNew.shouldSendAnnounceBack) + #expect(relayedNew.shouldScheduleAfterglow) + + let directExisting = BLEAnnounceResponsePolicy.plan( + isDirectAnnounce: true, + isNewPeer: false, + isReconnectedPeer: false, + shouldSendAnnounceBack: false + ) + #expect(!directExisting.shouldNotifyPeerConnected) + #expect(!directExisting.shouldScheduleInitialSync) + #expect(!directExisting.shouldScheduleAfterglow) + } + + private func makeAnnouncePacket( + noisePublicKey: Data, + peerID: PeerID, + timestamp: UInt64 + ) throws -> BitchatPacket { + let announcement = AnnouncementPacket( + nickname: "Alice", + noisePublicKey: noisePublicKey, + signingPublicKey: Data(repeating: 0x99, count: 32), + directNeighbors: nil + ) + let payload = try #require(announcement.encode()) + + return BitchatPacket( + type: MessageType.announce.rawValue, + senderID: Data(hexString: peerID.id) ?? Data(), + recipientID: nil, + timestamp: timestamp, + payload: payload, + signature: nil, + ttl: TransportConfig.messageTTLDefault + ) + } + + private func timestamp(_ date: Date) -> UInt64 { + UInt64(date.timeIntervalSince1970 * 1000) + } +} diff --git a/bitchatTests/Services/BLEAnnounceThrottleTests.swift b/bitchatTests/Services/BLEAnnounceThrottleTests.swift new file mode 100644 index 00000000..3ca46203 --- /dev/null +++ b/bitchatTests/Services/BLEAnnounceThrottleTests.swift @@ -0,0 +1,52 @@ +import Foundation +import Testing +@testable import bitchat + +struct BLEAnnounceThrottleTests { + @Test + func firstAnnounceIsAllowed() { + var throttle = BLEAnnounceThrottle(normalMinimumInterval: 10, forcedMinimumInterval: 2) + + let shouldSend = throttle.shouldSend(force: false, now: Date(timeIntervalSince1970: 100)) + + #expect(shouldSend) + } + + @Test + func regularAnnounceUsesNormalMinimumInterval() { + let now = Date(timeIntervalSince1970: 100) + var throttle = BLEAnnounceThrottle(normalMinimumInterval: 10, forcedMinimumInterval: 2) + + let first = throttle.shouldSend(force: false, now: now) + let suppressed = throttle.shouldSend(force: false, now: now.addingTimeInterval(9.9)) + let afterInterval = throttle.shouldSend(force: false, now: now.addingTimeInterval(10)) + + #expect(first) + #expect(!suppressed) + #expect(afterInterval) + } + + @Test + func forcedAnnounceUsesShorterMinimumInterval() { + let now = Date(timeIntervalSince1970: 100) + var throttle = BLEAnnounceThrottle(normalMinimumInterval: 10, forcedMinimumInterval: 2) + + let first = throttle.shouldSend(force: false, now: now) + let suppressed = throttle.shouldSend(force: true, now: now.addingTimeInterval(1.9)) + let afterInterval = throttle.shouldSend(force: true, now: now.addingTimeInterval(2)) + + #expect(first) + #expect(!suppressed) + #expect(afterInterval) + } + + @Test + func elapsedReportsTimeSinceAcceptedSend() { + let now = Date(timeIntervalSince1970: 100) + var throttle = BLEAnnounceThrottle(normalMinimumInterval: 10, forcedMinimumInterval: 2) + + throttle.shouldSend(force: false, now: now) + + #expect(throttle.elapsed(since: now.addingTimeInterval(3)) == 3) + } +} diff --git a/bitchatTests/Services/BLEDirectedRelaySpoolTests.swift b/bitchatTests/Services/BLEDirectedRelaySpoolTests.swift new file mode 100644 index 00000000..a8fa6fb5 --- /dev/null +++ b/bitchatTests/Services/BLEDirectedRelaySpoolTests.swift @@ -0,0 +1,94 @@ +import BitFoundation +import Foundation +import Testing +@testable import bitchat + +struct BLEDirectedRelaySpoolTests { + @Test + func enqueueDeduplicatesByRecipientAndMessageID() { + let recipient = PeerID(str: "1122334455667788") + let now = Date() + var spool = BLEDirectedRelaySpool() + + let inserted = spool.enqueue( + packet: makePacket(payload: [0x01]), + recipient: recipient, + messageID: "message-1", + enqueuedAt: now + ) + let duplicate = spool.enqueue( + packet: makePacket(payload: [0x02]), + recipient: recipient, + messageID: "message-1", + enqueuedAt: now + ) + + #expect(inserted) + #expect(!duplicate) + #expect(spool.count == 1) + } + + @Test + func drainUnexpiredReturnsFreshPacketsAndClearsSpool() { + let recipient = PeerID(str: "1122334455667788") + let now = Date() + var spool = BLEDirectedRelaySpool() + let freshPacket = makePacket(payload: [0x01]) + let expiredPacket = makePacket(payload: [0x02]) + + spool.enqueue(packet: freshPacket, recipient: recipient, messageID: "fresh", enqueuedAt: now.addingTimeInterval(-1)) + spool.enqueue(packet: expiredPacket, recipient: recipient, messageID: "old", enqueuedAt: now.addingTimeInterval(-20)) + + let drained = spool.drainUnexpired(now: now, window: 5) + + #expect(drained.count == 1) + #expect(drained.first?.recipient == recipient) + #expect(drained.first?.packet.payload == freshPacket.payload) + #expect(spool.isEmpty) + } + + @Test + func pruneExpiredKeepsFreshPacketsAcrossRecipients() { + let firstRecipient = PeerID(str: "1122334455667788") + let secondRecipient = PeerID(str: "8877665544332211") + let now = Date() + var spool = BLEDirectedRelaySpool() + + spool.enqueue(packet: makePacket(payload: [0x01]), recipient: firstRecipient, messageID: "fresh-1", enqueuedAt: now) + spool.enqueue(packet: makePacket(payload: [0x02]), recipient: secondRecipient, messageID: "fresh-2", enqueuedAt: now.addingTimeInterval(-2)) + spool.enqueue(packet: makePacket(payload: [0x03]), recipient: secondRecipient, messageID: "old", enqueuedAt: now.addingTimeInterval(-10)) + + spool.pruneExpired(now: now, window: 5) + + #expect(spool.count == 2) + let drained = spool.drainUnexpired(now: now, window: 5) + #expect(Set(drained.map(\.recipient)) == Set([firstRecipient, secondRecipient])) + } + + @Test + func removeAllClearsStoredPackets() { + var spool = BLEDirectedRelaySpool() + + spool.enqueue( + packet: makePacket(payload: [0x01]), + recipient: PeerID(str: "1122334455667788"), + messageID: "message-1", + enqueuedAt: Date() + ) + spool.removeAll() + + #expect(spool.isEmpty) + } + + private func makePacket(payload: [UInt8]) -> BitchatPacket { + BitchatPacket( + type: MessageType.noiseEncrypted.rawValue, + senderID: Data(hexString: "8877665544332211") ?? Data(), + recipientID: Data(hexString: "1122334455667788"), + timestamp: 1234, + payload: Data(payload), + signature: nil, + ttl: TransportConfig.messageTTLDefault + ) + } +} diff --git a/bitchatTests/Services/BLEFileTransferPolicyTests.swift b/bitchatTests/Services/BLEFileTransferPolicyTests.swift new file mode 100644 index 00000000..2010f0e8 --- /dev/null +++ b/bitchatTests/Services/BLEFileTransferPolicyTests.swift @@ -0,0 +1,143 @@ +import BitFoundation +import Foundation +import Testing +@testable import bitchat + +struct BLEFileTransferPolicyTests { + @Test + func selfEchoRejectsOnlyNonSyncReplayFromLocalPeer() { + let localPeerID = PeerID(str: "1122334455667788") + let localPacket = makePacket(sender: localPeerID, ttl: 3) + let replayPacket = makePacket(sender: localPeerID, ttl: 0) + let remotePacket = makePacket(sender: PeerID(str: "8877665544332211"), ttl: 3) + + #expect(BLEFileTransferPolicy.isSelfEcho(packet: localPacket, from: localPeerID, localPeerID: localPeerID)) + #expect(!BLEFileTransferPolicy.isSelfEcho(packet: replayPacket, from: localPeerID, localPeerID: localPeerID)) + #expect(!BLEFileTransferPolicy.isSelfEcho(packet: remotePacket, from: PeerID(str: "8877665544332211"), localPeerID: localPeerID)) + } + + @Test + func deliveryPlanTracksPublicBroadcastsForSync() { + let localPeerID = PeerID(str: "1122334455667788") + + #expect(BLEFileTransferPolicy.deliveryPlan( + packet: makePacket(sender: PeerID(str: "8877665544332211"), recipientID: nil), + localPeerID: localPeerID + ) == BLEFileTransferDeliveryPlan(isPrivateMessage: false, shouldTrackForSync: true)) + + #expect(BLEFileTransferPolicy.deliveryPlan( + packet: makePacket( + sender: PeerID(str: "8877665544332211"), + recipientID: Data(repeating: 0xFF, count: 8) + ), + localPeerID: localPeerID + ) == BLEFileTransferDeliveryPlan(isPrivateMessage: false, shouldTrackForSync: true)) + } + + @Test + func deliveryPlanAcceptsOnlyDirectedPacketsForLocalPeer() { + let localPeerID = PeerID(str: "1122334455667788") + let otherPeerID = PeerID(str: "8877665544332211") + + #expect(BLEFileTransferPolicy.deliveryPlan( + packet: makePacket( + sender: otherPeerID, + recipientID: Data(hexString: localPeerID.id) + ), + localPeerID: localPeerID + ) == BLEFileTransferDeliveryPlan(isPrivateMessage: true, shouldTrackForSync: false)) + + #expect(BLEFileTransferPolicy.deliveryPlan( + packet: makePacket( + sender: otherPeerID, + recipientID: Data(hexString: otherPeerID.id) + ), + localPeerID: localPeerID + ) == nil) + } + + @Test + func validatorAcceptsMatchingMimeAndMagicBytes() throws { + let payload = try makeFilePayload( + mimeType: "application/pdf", + content: Data("%PDF-1.7".utf8) + ) + + let result = BLEIncomingFileValidator.validate(payload: payload) + + guard case .success(let acceptance) = result else { + Issue.record("Expected file validation success") + return + } + #expect(acceptance.mime == .pdf) + #expect(acceptance.filePacket.content == Data("%PDF-1.7".utf8)) + } + + @Test + func validatorRejectsMalformedPayload() { + let result = BLEIncomingFileValidator.validate(payload: Data([0x01, 0x02, 0x03])) + + #expect(result.rejection == .malformedPayload) + } + + @Test + func validatorRejectsUnsupportedMime() throws { + let payload = try makeFilePayload( + mimeType: nil, + content: Data([0x4D, 0x5A, 0x00, 0x00]) + ) + + let result = BLEIncomingFileValidator.validate(payload: payload) + + #expect(result.rejection == .unsupportedMime(mimeType: nil, bytes: 4)) + } + + @Test + func validatorRejectsMimeMagicMismatch() throws { + let payload = try makeFilePayload( + mimeType: "image/png", + content: Data([0x00, 0x01, 0x02, 0x03]) + ) + + let result = BLEIncomingFileValidator.validate(payload: payload) + + #expect(result.rejection == .magicMismatch( + mime: .png, + bytes: 4, + prefixHex: "00 01 02 03" + )) + } + + private func makePacket( + sender: PeerID, + ttl: UInt8 = 3, + recipientID: Data? = nil + ) -> BitchatPacket { + BitchatPacket( + type: MessageType.fileTransfer.rawValue, + senderID: Data(hexString: sender.id) ?? Data(), + recipientID: recipientID, + timestamp: 900_000, + payload: Data([0x01, 0x02]), + signature: nil, + ttl: ttl + ) + } + + private func makeFilePayload(mimeType: String?, content: Data) throws -> Data { + let packet = BitchatFilePacket( + fileName: "sample", + fileSize: UInt64(content.count), + mimeType: mimeType, + content: content + ) + return try #require(packet.encode()) + } +} + +private extension Result where Failure == BLEIncomingFileRejection { + var rejection: BLEIncomingFileRejection? { + guard case .failure(let rejection) = self else { return nil } + return rejection + } +} diff --git a/bitchatTests/Services/BLEMaintenancePolicyTests.swift b/bitchatTests/Services/BLEMaintenancePolicyTests.swift new file mode 100644 index 00000000..68157f6c --- /dev/null +++ b/bitchatTests/Services/BLEMaintenancePolicyTests.swift @@ -0,0 +1,113 @@ +import Foundation +import Testing +@testable import bitchat + +@Suite("BLE maintenance policy tests") +struct BLEMaintenancePolicyTests { + @Test("discovery mode keeps announces frequent and advertising on") + func discoveryModeAnnouncesAndEnsuresAdvertising() { + let plan = BLEMaintenancePolicy.plan( + cycle: 1, + connectedCount: 0, + peerRegistryIsEmpty: true, + elapsedSinceLastAnnounce: TransportConfig.bleAnnounceIntervalSeconds, + hasRecentTraffic: false + ) + + #expect(plan.shouldSendAnnounce) + #expect(plan.shouldEnsureAdvertising) + #expect(plan.shouldFlushDirectedSpool) + #expect(!plan.shouldRunCleanup) + #expect(!plan.shouldResetCounter) + } + + @Test("connected sparse meshes use sparse announce cadence") + func connectedSparseMeshUsesSparseAnnounceCadence() { + let beforeTarget = BLEMaintenancePolicy.plan( + cycle: 2, + connectedCount: 2, + peerRegistryIsEmpty: false, + elapsedSinceLastAnnounce: TransportConfig.bleConnectedAnnounceBaseSecondsSparse - 0.1, + hasRecentTraffic: false, + connectedAnnounceJitterOffset: 0 + ) + let atTarget = BLEMaintenancePolicy.plan( + cycle: 2, + connectedCount: 2, + peerRegistryIsEmpty: false, + elapsedSinceLastAnnounce: TransportConfig.bleConnectedAnnounceBaseSecondsSparse, + hasRecentTraffic: false, + connectedAnnounceJitterOffset: 0 + ) + + #expect(!beforeTarget.shouldSendAnnounce) + #expect(atTarget.shouldSendAnnounce) + #expect(!beforeTarget.shouldEnsureAdvertising) + } + + @Test("dense meshes use dense announce cadence") + func denseMeshUsesDenseAnnounceCadence() { + let beforeTarget = BLEMaintenancePolicy.plan( + cycle: 3, + connectedCount: TransportConfig.bleHighDegreeThreshold, + peerRegistryIsEmpty: false, + elapsedSinceLastAnnounce: TransportConfig.bleConnectedAnnounceBaseSecondsDense - 0.1, + hasRecentTraffic: false, + connectedAnnounceJitterOffset: 0 + ) + let atTarget = BLEMaintenancePolicy.plan( + cycle: 3, + connectedCount: TransportConfig.bleHighDegreeThreshold, + peerRegistryIsEmpty: false, + elapsedSinceLastAnnounce: TransportConfig.bleConnectedAnnounceBaseSecondsDense, + hasRecentTraffic: false, + connectedAnnounceJitterOffset: 0 + ) + + #expect(!beforeTarget.shouldSendAnnounce) + #expect(atTarget.shouldSendAnnounce) + #expect(atTarget.shouldRunCleanup) + } + + @Test("recent traffic can request a quick announce") + func recentTrafficRequestsQuickAnnounce() { + let plan = BLEMaintenancePolicy.plan( + cycle: 4, + connectedCount: 2, + peerRegistryIsEmpty: false, + elapsedSinceLastAnnounce: 10.0, + hasRecentTraffic: true, + connectedAnnounceJitterOffset: TransportConfig.bleConnectedAnnounceJitterSparse + ) + + #expect(plan.shouldSendAnnounce) + #expect(!plan.shouldFlushDirectedSpool) + } + + @Test("maintenance cadence controls cleanup spool flushing and counter reset") + func maintenanceCadenceControlsPeriodicWork() { + let cleanupAndFlush = BLEMaintenancePolicy.plan( + cycle: 3, + connectedCount: 1, + peerRegistryIsEmpty: false, + elapsedSinceLastAnnounce: 0, + hasRecentTraffic: false, + connectedAnnounceJitterOffset: 0 + ) + let reset = BLEMaintenancePolicy.plan( + cycle: 6, + connectedCount: 1, + peerRegistryIsEmpty: false, + elapsedSinceLastAnnounce: 0, + hasRecentTraffic: false, + connectedAnnounceJitterOffset: 0 + ) + + #expect(cleanupAndFlush.shouldRunCleanup) + #expect(cleanupAndFlush.shouldFlushDirectedSpool) + #expect(!cleanupAndFlush.shouldResetCounter) + #expect(reset.shouldRunCleanup) + #expect(!reset.shouldFlushDirectedSpool) + #expect(reset.shouldResetCounter) + } +} diff --git a/bitchatTests/Services/BLEOutboundLinkPlannerTests.swift b/bitchatTests/Services/BLEOutboundLinkPlannerTests.swift new file mode 100644 index 00000000..9d10e218 --- /dev/null +++ b/bitchatTests/Services/BLEOutboundLinkPlannerTests.swift @@ -0,0 +1,138 @@ +import BitFoundation +import Foundation +import Testing +@testable import bitchat + +struct BLEOutboundLinkPlannerTests { + @Test + func recipientIDSuppliesDirectedHintAndUsesAllAvailableLinks() throws { + let recipient = PeerID(str: "1122334455667788") + let packet = makePacket(type: .noiseEncrypted, recipient: recipient) + + let plan = BLEOutboundLinkPlanner.plan( + packet: packet, + dataCount: 32, + peripheralIDs: ["p1", "p2"], + peripheralWriteLimits: [128, 128], + centralIDs: ["c1"], + centralNotifyLimits: [128], + ingressRecord: nil, + excludedLinks: [], + directedOnlyPeer: nil + ) + + #expect(plan.directedPeerHint == recipient) + #expect(plan.fragmentChunkSize == nil) + #expect(plan.selectedLinks.peripheralIDs == Set(["p1", "p2"])) + #expect(plan.selectedLinks.centralIDs == Set(["c1"])) + #expect(!plan.shouldSpoolDirectedPacket) + } + + @Test + func oversizedNonFragmentPacketPlansFragmentationFromSmallestLinkLimit() { + let packet = makePacket(type: .message) + let smallestLimit = 96 + + let plan = BLEOutboundLinkPlanner.plan( + packet: packet, + dataCount: 160, + peripheralIDs: ["p1"], + peripheralWriteLimits: [128], + centralIDs: ["c1"], + centralNotifyLimits: [smallestLimit], + ingressRecord: nil, + excludedLinks: [], + directedOnlyPeer: nil + ) + + #expect(plan.fragmentChunkSize == BLEOutboundPacketPolicy.fragmentChunkSize(forLinkLimit: smallestLimit)) + #expect(plan.selectedLinks.peripheralIDs.isEmpty) + #expect(plan.selectedLinks.centralIDs.isEmpty) + #expect(!plan.shouldSpoolDirectedPacket) + } + + @Test + func fragmentPacketsBypassFragmentationPlanning() { + let packet = makePacket(type: .fragment) + + let plan = BLEOutboundLinkPlanner.plan( + packet: packet, + dataCount: 512, + peripheralIDs: ["p1"], + peripheralWriteLimits: [64], + centralIDs: ["c1"], + centralNotifyLimits: [64], + ingressRecord: nil, + excludedLinks: [], + directedOnlyPeer: nil + ) + + #expect(plan.fragmentChunkSize == nil) + #expect(plan.selectedLinks.peripheralIDs == Set(["p1"])) + #expect(plan.selectedLinks.centralIDs == Set(["c1"])) + } + + @Test + func directedEncryptedPacketSpoolsWhenNoLinksAreAvailable() { + let recipient = PeerID(str: "1122334455667788") + let packet = makePacket(type: .noiseEncrypted, recipient: recipient) + + let plan = BLEOutboundLinkPlanner.plan( + packet: packet, + dataCount: 32, + peripheralIDs: [], + peripheralWriteLimits: [], + centralIDs: [], + centralNotifyLimits: [], + ingressRecord: nil, + excludedLinks: [], + directedOnlyPeer: recipient + ) + + #expect(plan.directedPeerHint == recipient) + #expect(plan.shouldSpoolDirectedPacket) + } + + @Test + func publicBroadcastDoesNotSpoolWhenNoLinksAreAvailable() { + let packet = makePacket(type: .message) + + let plan = BLEOutboundLinkPlanner.plan( + packet: packet, + dataCount: 32, + peripheralIDs: [], + peripheralWriteLimits: [], + centralIDs: [], + centralNotifyLimits: [], + ingressRecord: nil, + excludedLinks: [], + directedOnlyPeer: nil + ) + + #expect(plan.directedPeerHint == nil) + #expect(!plan.shouldSpoolDirectedPacket) + } + + @Test + func minimumLinkLimitUsesTheSmallestPresentRoleLimit() { + #expect(BLEOutboundLinkPlanner.minimumLinkLimit(peripheralWriteLimits: [80, 120], centralNotifyLimits: []) == 80) + #expect(BLEOutboundLinkPlanner.minimumLinkLimit(peripheralWriteLimits: [], centralNotifyLimits: [60, 90]) == 60) + #expect(BLEOutboundLinkPlanner.minimumLinkLimit(peripheralWriteLimits: [], centralNotifyLimits: []) == nil) + } + + private func makePacket( + type: MessageType, + sender: PeerID = PeerID(str: "8877665544332211"), + recipient: PeerID? = nil + ) -> BitchatPacket { + BitchatPacket( + type: type.rawValue, + senderID: Data(hexString: sender.id) ?? Data(), + recipientID: recipient.flatMap { Data(hexString: $0.id) }, + timestamp: 1234, + payload: Data([0x01, 0x02]), + signature: nil, + ttl: TransportConfig.messageTTLDefault + ) + } +} diff --git a/bitchatTests/Services/BLEPacketFreshnessPolicyTests.swift b/bitchatTests/Services/BLEPacketFreshnessPolicyTests.swift new file mode 100644 index 00000000..78a84b58 --- /dev/null +++ b/bitchatTests/Services/BLEPacketFreshnessPolicyTests.swift @@ -0,0 +1,44 @@ +import Foundation +import Testing +@testable import bitchat + +struct BLEPacketFreshnessPolicyTests { + @Test + func nilRecipientCountsAsBroadcast() { + #expect(BLEPacketFreshnessPolicy.isBroadcastRecipient(nil)) + } + + @Test + func allOnesEightByteRecipientCountsAsBroadcast() { + #expect(BLEPacketFreshnessPolicy.isBroadcastRecipient(Data(repeating: 0xFF, count: 8))) + } + + @Test + func directedRecipientIsNotBroadcast() { + #expect(!BLEPacketFreshnessPolicy.isBroadcastRecipient(Data([0, 1, 2, 3, 4, 5, 6, 7]))) + } + + @Test + func recentPacketIsNotStale() { + let now = Date(timeIntervalSince1970: 1000) + let timestamp = UInt64((now.timeIntervalSince1970 - 100) * 1000) + + #expect(!BLEPacketFreshnessPolicy.isStale(timestampMilliseconds: timestamp, now: now)) + } + + @Test + func oldPacketIsStale() { + let now = Date(timeIntervalSince1970: 1000) + let timestamp = UInt64((now.timeIntervalSince1970 - 901) * 1000) + + #expect(BLEPacketFreshnessPolicy.isStale(timestampMilliseconds: timestamp, now: now)) + } + + @Test + func futurePacketAgeIsZero() { + let now = Date(timeIntervalSince1970: 1000) + let timestamp = UInt64((now.timeIntervalSince1970 + 10) * 1000) + + #expect(BLEPacketFreshnessPolicy.ageSeconds(timestampMilliseconds: timestamp, now: now) == 0) + } +} diff --git a/bitchatTests/Services/BLEPeerEventDebouncerTests.swift b/bitchatTests/Services/BLEPeerEventDebouncerTests.swift new file mode 100644 index 00000000..9a259b57 --- /dev/null +++ b/bitchatTests/Services/BLEPeerEventDebouncerTests.swift @@ -0,0 +1,52 @@ +import BitFoundation +import Foundation +import Testing +@testable import bitchat + +struct BLEPeerEventDebouncerTests { + @Test + func suppressesRepeatedPeerEventsInsideInterval() { + let peerID = PeerID(str: "1122334455667788") + let now = Date(timeIntervalSince1970: 100) + var debouncer = BLEPeerEventDebouncer() + + let first = debouncer.shouldEmit(peerID: peerID, now: now, minimumInterval: 5) + let suppressed = debouncer.shouldEmit(peerID: peerID, now: now.addingTimeInterval(4.9), minimumInterval: 5) + let afterInterval = debouncer.shouldEmit(peerID: peerID, now: now.addingTimeInterval(5), minimumInterval: 5) + + #expect(first) + #expect(!suppressed) + #expect(afterInterval) + } + + @Test + func tracksPeersIndependently() { + let first = PeerID(str: "1122334455667788") + let second = PeerID(str: "8877665544332211") + let now = Date(timeIntervalSince1970: 100) + var debouncer = BLEPeerEventDebouncer() + + let firstEmit = debouncer.shouldEmit(peerID: first, now: now, minimumInterval: 5) + let secondEmit = debouncer.shouldEmit(peerID: second, now: now.addingTimeInterval(1), minimumInterval: 5) + let firstRepeat = debouncer.shouldEmit(peerID: first, now: now.addingTimeInterval(1), minimumInterval: 5) + + #expect(firstEmit) + #expect(secondEmit) + #expect(!firstRepeat) + #expect(debouncer.count == 2) + } + + @Test + func removeAllClearsDebounceState() { + let peerID = PeerID(str: "1122334455667788") + let now = Date(timeIntervalSince1970: 100) + var debouncer = BLEPeerEventDebouncer() + + debouncer.shouldEmit(peerID: peerID, now: now, minimumInterval: 5) + debouncer.removeAll() + + #expect(debouncer.count == 0) + let afterClear = debouncer.shouldEmit(peerID: peerID, now: now.addingTimeInterval(1), minimumInterval: 5) + #expect(afterClear) + } +} diff --git a/bitchatTests/Services/BLEPeerPublishCoalescerTests.swift b/bitchatTests/Services/BLEPeerPublishCoalescerTests.swift new file mode 100644 index 00000000..a633adb4 --- /dev/null +++ b/bitchatTests/Services/BLEPeerPublishCoalescerTests.swift @@ -0,0 +1,64 @@ +import Foundation +import Testing +@testable import bitchat + +struct BLEPeerPublishCoalescerTests { + @Test + func firstRequestPublishesImmediately() { + var coalescer = BLEPeerPublishCoalescer(minimumInterval: 0.1) + + #expect(coalescer.requestPublish(now: Date(timeIntervalSince1970: 100)) == .publishNow) + } + + @Test + func rapidRequestSchedulesAfterRemainingInterval() { + let now = Date(timeIntervalSince1970: 100) + var coalescer = BLEPeerPublishCoalescer(minimumInterval: 0.1) + + _ = coalescer.requestPublish(now: now) + + if case .schedule(let delay) = coalescer.requestPublish(now: now.addingTimeInterval(0.04)) { + #expect(abs(delay - 0.06) < 0.001) + } else { + Issue.record("Expected a scheduled publish") + } + } + + @Test + func requestSkipsWhilePublishIsAlreadyPending() { + let now = Date(timeIntervalSince1970: 100) + var coalescer = BLEPeerPublishCoalescer(minimumInterval: 0.1) + + _ = coalescer.requestPublish(now: now) + _ = coalescer.requestPublish(now: now.addingTimeInterval(0.04)) + + #expect(coalescer.requestPublish(now: now.addingTimeInterval(0.05)) == .skip) + } + + @Test + func elapsedRequestPublishesImmediatelyEvenWithPendingPublish() { + let now = Date(timeIntervalSince1970: 100) + var coalescer = BLEPeerPublishCoalescer(minimumInterval: 0.1) + + _ = coalescer.requestPublish(now: now) + _ = coalescer.requestPublish(now: now.addingTimeInterval(0.04)) + + #expect(coalescer.requestPublish(now: now.addingTimeInterval(0.11)) == .publishNow) + } + + @Test + func scheduledPublishFiredClearsPendingState() { + let now = Date(timeIntervalSince1970: 100) + var coalescer = BLEPeerPublishCoalescer(minimumInterval: 0.1) + + _ = coalescer.requestPublish(now: now) + _ = coalescer.requestPublish(now: now.addingTimeInterval(0.04)) + coalescer.scheduledPublishFired(now: now.addingTimeInterval(0.1)) + + if case .schedule(let delay) = coalescer.requestPublish(now: now.addingTimeInterval(0.15)) { + #expect(abs(delay - 0.05) < 0.001) + } else { + Issue.record("Expected a scheduled publish") + } + } +} diff --git a/bitchatTests/Services/BLEPublicMessagePolicyTests.swift b/bitchatTests/Services/BLEPublicMessagePolicyTests.swift new file mode 100644 index 00000000..fc725194 --- /dev/null +++ b/bitchatTests/Services/BLEPublicMessagePolicyTests.swift @@ -0,0 +1,125 @@ +import BitFoundation +import Foundation +import Testing +@testable import bitchat + +struct BLEPublicMessagePolicyTests { + @Test + func selfAuthoredNonSyncReplayIsRejected() { + let localPeerID = PeerID(str: "1122334455667788") + let packet = makePacket(sender: localPeerID, ttl: 3) + + let decision = BLEPublicMessagePolicy.evaluate( + packet: packet, + from: localPeerID, + localPeerID: localPeerID, + now: Date(timeIntervalSince1970: 1_000) + ) + + #expect(decision == .reject(.selfEcho)) + } + + @Test + func selfAuthoredSyncReplayIsAccepted() { + let localPeerID = PeerID(str: "1122334455667788") + let packet = makePacket(sender: localPeerID, ttl: 0) + + let decision = BLEPublicMessagePolicy.evaluate( + packet: packet, + from: localPeerID, + localPeerID: localPeerID, + now: Date(timeIntervalSince1970: 1_000) + ) + + #expect(decision == .accept(BLEPublicMessageAcceptance(shouldTrackForSync: true))) + } + + @Test + func staleBroadcastIsRejectedWithAge() { + let now = Date(timeIntervalSince1970: 1_000) + let sender = PeerID(str: "8877665544332211") + let packet = makePacket( + sender: sender, + timestamp: UInt64((now.timeIntervalSince1970 - 901) * 1000), + recipientID: nil + ) + + let decision = BLEPublicMessagePolicy.evaluate( + packet: packet, + from: sender, + localPeerID: PeerID(str: "1122334455667788"), + now: now + ) + + #expect(decision == .reject(.staleBroadcast(ageSeconds: 901))) + } + + @Test + func staleDirectedMessageIsAcceptedAndNotTrackedForSync() { + let now = Date(timeIntervalSince1970: 1_000) + let sender = PeerID(str: "8877665544332211") + let recipient = PeerID(str: "1122334455667788") + let packet = makePacket( + sender: sender, + timestamp: UInt64((now.timeIntervalSince1970 - 901) * 1000), + recipientID: Data(hexString: recipient.id) + ) + + let decision = BLEPublicMessagePolicy.evaluate( + packet: packet, + from: sender, + localPeerID: recipient, + now: now + ) + + #expect(decision == .accept(BLEPublicMessageAcceptance(shouldTrackForSync: false))) + } + + @Test + func freshBroadcastMessageIsTrackedForSync() { + let sender = PeerID(str: "8877665544332211") + let packet = makePacket(sender: sender) + + let decision = BLEPublicMessagePolicy.evaluate( + packet: packet, + from: sender, + localPeerID: PeerID(str: "1122334455667788"), + now: Date(timeIntervalSince1970: 1_000) + ) + + #expect(decision == .accept(BLEPublicMessageAcceptance(shouldTrackForSync: true))) + } + + @Test + func broadcastNonMessageIsNotTrackedForSync() { + let sender = PeerID(str: "8877665544332211") + let packet = makePacket(sender: sender, type: .leave) + + let decision = BLEPublicMessagePolicy.evaluate( + packet: packet, + from: sender, + localPeerID: PeerID(str: "1122334455667788"), + now: Date(timeIntervalSince1970: 1_000) + ) + + #expect(decision == .accept(BLEPublicMessageAcceptance(shouldTrackForSync: false))) + } + + private func makePacket( + sender: PeerID, + type: MessageType = .message, + timestamp: UInt64 = 900_000, + ttl: UInt8 = 3, + recipientID: Data? = nil + ) -> BitchatPacket { + BitchatPacket( + type: type.rawValue, + senderID: Data(hexString: sender.id) ?? Data(), + recipientID: recipientID, + timestamp: timestamp, + payload: Data("Hello".utf8), + signature: nil, + ttl: ttl + ) + } +} diff --git a/bitchatTests/Services/BLERouteForwardingPolicyTests.swift b/bitchatTests/Services/BLERouteForwardingPolicyTests.swift new file mode 100644 index 00000000..e6bfce05 --- /dev/null +++ b/bitchatTests/Services/BLERouteForwardingPolicyTests.swift @@ -0,0 +1,154 @@ +import BitFoundation +import Foundation +import Testing +@testable import bitchat + +@Suite("BLE route forwarding policy tests") +struct BLERouteForwardingPolicyTests { + @Test("local recipient suppresses flood relay") + func localRecipientSuppressesFloodRelay() { + let local = peer("1111111111111111") + let remote = peer("2222222222222222") + let packet = makePacket(sender: remote, recipient: local) + + let plan = forwardingPlan(packet, local: local) + + #expect(plan.shouldSuppressFloodRelay) + #expect(plan.forwardPacket == nil) + #expect(plan.nextHop == nil) + } + + @Test("unrouted packets are left for flood relay") + func unroutedPacketAllowsFloodRelay() { + let local = peer("1111111111111111") + let remote = peer("2222222222222222") + let packet = makePacket(sender: remote, recipient: peer("3333333333333333"), route: nil) + + let plan = forwardingPlan(packet, local: local) + + #expect(!plan.shouldSuppressFloodRelay) + #expect(plan.forwardPacket == nil) + #expect(plan.nextHop == nil) + } + + @Test("origin forwards routed packet to first hop") + func originForwardsToFirstHop() { + let local = peer("1111111111111111") + let firstHop = peer("2222222222222222") + let destination = peer("3333333333333333") + let packet = makePacket(sender: local, recipient: destination, ttl: 6, route: [routeData(firstHop)]) + + let plan = forwardingPlan(packet, local: local, connected: [firstHop]) + + #expect(plan.shouldSuppressFloodRelay) + #expect(plan.nextHop == firstHop) + #expect(plan.forwardPacket?.ttl == 5) + } + + @Test("origin leaves packet for flood relay when first hop is unavailable") + func originAllowsFloodWhenFirstHopUnavailable() { + let local = peer("1111111111111111") + let firstHop = peer("2222222222222222") + let destination = peer("3333333333333333") + let packet = makePacket(sender: local, recipient: destination, route: [routeData(firstHop)]) + + let plan = forwardingPlan(packet, local: local, connected: []) + + #expect(!plan.shouldSuppressFloodRelay) + #expect(plan.forwardPacket == nil) + #expect(plan.nextHop == nil) + } + + @Test("intermediate forwards routed packet to next route hop") + func intermediateForwardsToNextHop() { + let previous = peer("1111111111111111") + let local = peer("2222222222222222") + let nextHop = peer("3333333333333333") + let destination = peer("4444444444444444") + let packet = makePacket( + sender: previous, + recipient: destination, + ttl: 4, + route: [routeData(local), routeData(nextHop)] + ) + + let plan = forwardingPlan(packet, local: local, connected: [nextHop]) + + #expect(plan.shouldSuppressFloodRelay) + #expect(plan.nextHop == nextHop) + #expect(plan.forwardPacket?.ttl == 3) + } + + @Test("last intermediate forwards routed packet to destination") + func lastIntermediateForwardsToDestination() { + let previous = peer("1111111111111111") + let local = peer("2222222222222222") + let destination = peer("3333333333333333") + let packet = makePacket( + sender: previous, + recipient: destination, + ttl: 4, + route: [routeData(local)] + ) + + let plan = forwardingPlan(packet, local: local, connected: [destination]) + + #expect(plan.shouldSuppressFloodRelay) + #expect(plan.nextHop == destination) + #expect(plan.forwardPacket?.ttl == 3) + } + + @Test("expired routed packets suppress further relay") + func expiredRoutedPacketSuppressesRelay() { + let local = peer("1111111111111111") + let firstHop = peer("2222222222222222") + let destination = peer("3333333333333333") + let packet = makePacket(sender: local, recipient: destination, ttl: 1, route: [routeData(firstHop)]) + + let plan = forwardingPlan(packet, local: local, connected: [firstHop]) + + #expect(plan.shouldSuppressFloodRelay) + #expect(plan.forwardPacket == nil) + #expect(plan.nextHop == nil) + } + + private func forwardingPlan( + _ packet: BitchatPacket, + local: PeerID, + connected: Set = [] + ) -> BLERouteForwardingPlan { + BLERouteForwardingPolicy.plan( + for: packet, + localPeerID: local, + localRoutingData: local.routingData, + routingPeer: PeerID.init(routingData:), + isPeerConnected: { connected.contains($0) } + ) + } + + private func makePacket( + sender: PeerID, + recipient: PeerID?, + ttl: UInt8 = 7, + route: [Data]? = [] + ) -> BitchatPacket { + BitchatPacket( + type: MessageType.noiseEncrypted.rawValue, + senderID: routeData(sender), + recipientID: recipient.map { routeData($0) }, + timestamp: 1, + payload: Data([0x01, 0x02]), + signature: nil, + ttl: ttl, + route: route + ) + } + + private func peer(_ id: String) -> PeerID { + PeerID(str: id) + } + + private func routeData(_ peerID: PeerID) -> Data { + peerID.routingData ?? Data() + } +} diff --git a/bitchatTests/Services/BLEScanDutyPolicyTests.swift b/bitchatTests/Services/BLEScanDutyPolicyTests.swift new file mode 100644 index 00000000..965f01b8 --- /dev/null +++ b/bitchatTests/Services/BLEScanDutyPolicyTests.swift @@ -0,0 +1,75 @@ +import Testing +@testable import bitchat + +struct BLEScanDutyPolicyTests { + @Test + func continuousScanWhenDutyIsDisabledInactiveDisconnectedOrTrafficIsRecent() { + #expect(BLEScanDutyPolicy.plan( + dutyEnabled: false, + appIsActive: true, + connectedCount: 4, + hasRecentTraffic: false + ) == .continuous) + + #expect(BLEScanDutyPolicy.plan( + dutyEnabled: true, + appIsActive: false, + connectedCount: 4, + hasRecentTraffic: false + ) == .continuous) + + #expect(BLEScanDutyPolicy.plan( + dutyEnabled: true, + appIsActive: true, + connectedCount: 0, + hasRecentTraffic: false + ) == .continuous) + + #expect(BLEScanDutyPolicy.plan( + dutyEnabled: true, + appIsActive: true, + connectedCount: 4, + hasRecentTraffic: true + ) == .continuous) + } + + @Test + func continuousScanForSmallMeshes() { + #expect(BLEScanDutyPolicy.plan( + dutyEnabled: true, + appIsActive: true, + connectedCount: 2, + hasRecentTraffic: false + ) == .continuous) + } + + @Test + func dutyCyclesSparseActiveMeshes() { + let plan = BLEScanDutyPolicy.plan( + dutyEnabled: true, + appIsActive: true, + connectedCount: 3, + hasRecentTraffic: false + ) + + #expect(plan == .dutyCycle( + onDuration: TransportConfig.bleDutyOnDuration, + offDuration: TransportConfig.bleDutyOffDuration + )) + } + + @Test + func dutyCyclesDenseActiveMeshesWithDenseDurations() { + let plan = BLEScanDutyPolicy.plan( + dutyEnabled: true, + appIsActive: true, + connectedCount: TransportConfig.bleHighDegreeThreshold, + hasRecentTraffic: false + ) + + #expect(plan == .dutyCycle( + onDuration: TransportConfig.bleDutyOnDurationDense, + offDuration: TransportConfig.bleDutyOffDurationDense + )) + } +} diff --git a/bitchatTests/Services/BLEScheduledRelayStoreTests.swift b/bitchatTests/Services/BLEScheduledRelayStoreTests.swift new file mode 100644 index 00000000..84de9978 --- /dev/null +++ b/bitchatTests/Services/BLEScheduledRelayStoreTests.swift @@ -0,0 +1,68 @@ +import Foundation +import Testing +@testable import bitchat + +@Suite("BLE scheduled relay store tests") +struct BLEScheduledRelayStoreTests { + @Test("schedule tracks relay count and remove returns work item") + func scheduleAndRemove() { + var store = BLEScheduledRelayStore() + let first = DispatchWorkItem {} + let second = DispatchWorkItem {} + + store.schedule(first, messageID: "one") + store.schedule(second, messageID: "two") + + #expect(store.count == 2) + #expect(!store.isEmpty) + let removed = store.remove(messageID: "one") + #expect(removed.map { $0 === first } == true) + #expect(store.count == 1) + let missing = store.remove(messageID: "missing") + #expect(missing == nil) + } + + @Test("cancel removes and cancels a scheduled relay") + func cancelScheduledRelay() { + var store = BLEScheduledRelayStore() + let workItem = DispatchWorkItem {} + + store.schedule(workItem, messageID: "relay") + + let didCancel = store.cancel(messageID: "relay") + #expect(didCancel) + #expect(workItem.isCancelled) + #expect(store.isEmpty) + let didCancelAgain = store.cancel(messageID: "relay") + #expect(!didCancelAgain) + } + + @Test("cancel all cancels every scheduled relay") + func cancelAllScheduledRelays() { + var store = BLEScheduledRelayStore() + let first = DispatchWorkItem {} + let second = DispatchWorkItem {} + + store.schedule(first, messageID: "first") + store.schedule(second, messageID: "second") + store.cancelAll() + + #expect(first.isCancelled) + #expect(second.isCancelled) + #expect(store.isEmpty) + } + + @Test("capacity guard only removes when over limit") + func capacityGuardRemovesOnlyWhenOverLimit() { + var store = BLEScheduledRelayStore() + + store.schedule(DispatchWorkItem {}, messageID: "one") + store.schedule(DispatchWorkItem {}, messageID: "two") + store.removeAllIfOverCapacity(2) + #expect(store.count == 2) + + store.schedule(DispatchWorkItem {}, messageID: "three") + store.removeAllIfOverCapacity(2) + #expect(store.isEmpty) + } +} diff --git a/bitchatTests/Services/BLESelfBroadcastTrackerTests.swift b/bitchatTests/Services/BLESelfBroadcastTrackerTests.swift new file mode 100644 index 00000000..2f08c9ed --- /dev/null +++ b/bitchatTests/Services/BLESelfBroadcastTrackerTests.swift @@ -0,0 +1,70 @@ +import BitFoundation +import Foundation +import Testing +@testable import bitchat + +struct BLESelfBroadcastTrackerTests { + @Test + func recordAndTakeMessageIDForMatchingPacket() { + let packet = makePacket(timestamp: 1234) + var tracker = BLESelfBroadcastTracker() + + tracker.record(messageID: "local-message", packet: packet, sentAt: Date()) + + #expect(tracker.takeMessageID(for: packet) == "local-message") + #expect(tracker.takeMessageID(for: packet) == nil) + #expect(tracker.isEmpty) + } + + @Test + func differentPacketDoesNotResolveMessageID() { + let packet = makePacket(timestamp: 1234) + let otherPacket = makePacket(timestamp: 1235) + var tracker = BLESelfBroadcastTracker() + + tracker.record(messageID: "local-message", packet: packet, sentAt: Date()) + + #expect(tracker.takeMessageID(for: otherPacket) == nil) + #expect(tracker.count == 1) + } + + @Test + func pruneRemovesEntriesBeforeCutoff() { + let now = Date(timeIntervalSince1970: 100) + let oldPacket = makePacket(timestamp: 1) + let freshPacket = makePacket(timestamp: 2) + var tracker = BLESelfBroadcastTracker() + + tracker.record(messageID: "old", packet: oldPacket, sentAt: now.addingTimeInterval(-10)) + tracker.record(messageID: "fresh", packet: freshPacket, sentAt: now) + + tracker.prune(before: now.addingTimeInterval(-5)) + + #expect(tracker.takeMessageID(for: oldPacket) == nil) + #expect(tracker.takeMessageID(for: freshPacket) == "fresh") + } + + @Test + func removeAllClearsTrackedMessages() { + let packet = makePacket(timestamp: 1234) + var tracker = BLESelfBroadcastTracker() + + tracker.record(messageID: "local-message", packet: packet, sentAt: Date()) + tracker.removeAll() + + #expect(tracker.isEmpty) + #expect(tracker.takeMessageID(for: packet) == nil) + } + + private func makePacket(timestamp: UInt64) -> BitchatPacket { + BitchatPacket( + type: MessageType.message.rawValue, + senderID: Data(hexString: "8877665544332211") ?? Data(), + recipientID: nil, + timestamp: timestamp, + payload: Data("hello".utf8), + signature: nil, + ttl: TransportConfig.messageTTLDefault + ) + } +} From eb2c128cabcb135084555bce11b16f8c35bf530e Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 7 Jun 2026 07:23:10 +0000 Subject: [PATCH 018/216] Automated update of relay data - Sun Jun 7 07:23:10 UTC 2026 --- relays/online_relays_gps.csv | 812 ++++++++++++++++++----------------- 1 file changed, 427 insertions(+), 385 deletions(-) diff --git a/relays/online_relays_gps.csv b/relays/online_relays_gps.csv index 2be682e0..97652073 100644 --- a/relays/online_relays_gps.csv +++ b/relays/online_relays_gps.csv @@ -1,399 +1,441 @@ Relay URL,Latitude,Longitude -nostr.tac.lol,47.4748,-122.273 -relay.nostr.net,43.6532,-79.3832 -relay.lab.rytswd.com,49.4543,11.0746 -freelay.sovbit.dev,60.1699,24.9384 -relay2.veganostr.com,60.1699,24.9384 -relay.jeffg.fyi,43.6532,-79.3832 -srtrelay.c-stellar.net,43.6532,-79.3832 -relay.typedcypher.com,51.5072,-0.127586 -nostr-relay.nextblockvending.com,47.2343,-119.853 -spookstr2.nostr1.com,40.7057,-74.0136 -relay.bitmacro.cloud,43.6532,-79.3832 -relay.degmods.com,50.4754,12.3683 -nostr-relay.amethyst.name,39.0438,-77.4874 -intl-rocks-microphone-did.trycloudflare.com,43.6532,-79.3832 -relay-fra.zombi.cloudrodion.com:443,48.8566,2.35222 -nostr.azzamo.net,52.2633,21.0283 -relay.mmwaves.de,48.8575,2.35138 -cs-relay.nostrdev.com:443,50.4754,12.3683 -myvoiceourstory.org,37.3598,-121.981 -nostr.easycryptosend.it,43.6532,-79.3832 -relay.0xchat.com,43.6532,-79.3832 -nostr.thalheim.io,60.1699,24.9384 -relay.cosmicbolt.net,37.3986,-121.964 -relay.mitchelltribe.com,39.0438,-77.4874 -nostrelites.org,41.8781,-87.6298 -nostr-2.21crypto.ch,47.5356,8.73209 -relayrs.notoshi.win,43.6532,-79.3832 -nostr-kyomu-haskell.onrender.com,37.7775,-122.397 -relay02.lnfi.network,35.6764,139.65 -prl.plus,55.7628,37.5983 -relay.snotr.nl:49999,52.0195,4.42946 -relay.plebeian.market,50.1109,8.68213 -bitcoiner.social:443,47.6743,-117.112 -relay.beginningend.com:443,35.2227,-97.4786 -damus.bostr.online,43.6532,-79.3832 -nostr-rs-relay-qj1h.onrender.com,37.7775,-122.397 -relay.bullishbounty.com:443,43.6532,-79.3832 -ribo.eu.nostria.app,43.6532,-79.3832 -relay.mostro.network:443,40.8302,-74.1299 -insta-relay.apps3.slidestr.net,40.4167,-3.70329 -kasztanowa.bieda.it,43.6532,-79.3832 -relay.trustr.ing:443,43.6548,-79.3885 -relay.layer.systems,49.0291,8.35695 -relay.angor.io,48.1046,11.6002 -nostr-relay-1.trustlessenterprise.com,43.6532,-79.3832 -relay.islandbitcoin.com,12.8498,77.6545 -relay.binaryrobot.com,43.6532,-79.3832 -dm-test-nostr-rs-42-disabled.samt.st,43.6532,-79.3832 -relay.plebeian.market:443,50.1109,8.68213 -nostr.n7ekb.net,36.1527,-95.9902 -nostr.snowbla.de:443,60.1699,24.9384 -nostr.debate.report,50.1109,8.68213 -nostr.snowbla.de,60.1699,24.9384 -relay-dev.gulugulu.moe:443,43.6532,-79.3832 -nostrride.io,37.3986,-121.964 -relay2.angor.io:443,48.1046,11.6002 -relay.vrtmrz.net,43.6532,-79.3832 -relay.satmaxt.xyz,43.6532,-79.3832 -relay.agorist.space:443,52.3734,4.89406 -strfry.bonsai.com,39.0438,-77.4874 -dev.relay.stream,43.6532,-79.3832 -relay.btcforplebs.com,43.6532,-79.3832 +nostr.bitcoiner.social:443,47.6743,-117.112 +relay-dev.satlantis.io:443,40.8302,-74.1299 relay.lightning.pub:443,39.0438,-77.4874 -purplerelay.com,43.6532,-79.3832 -relay.libernet.app:443,43.6532,-79.3832 -nostr.robosats.org,64.1476,-21.9392 -relay.wavlake.com,41.2619,-95.8608 -nostr.bgbitcoin.club:443,50.4754,12.3683 -relay.fundstr.me:443,42.3601,-71.0589 -nostr.sathoarder.com,48.5734,7.75211 -relay.cypherflow.ai:443,48.8575,2.35138 -relay.minibolt.info:443,43.6532,-79.3832 -dm-test-strfry-discovery.samt.st:443,43.6532,-79.3832 -fanfares.nostr1.com,40.7057,-74.0136 -relay.ru.ac.th,13.7607,100.627 -relay.lightning.pub,39.0438,-77.4874 -relay.bebond.net:443,43.6532,-79.3832 -nostr.4rs.nl,49.0291,8.35696 -relay.beginningend.com,35.2227,-97.4786 -relay.nostrdice.com,-33.8688,151.209 -relay.paulstephenborile.com,49.4543,11.0746 -relay.nostr.place,43.6532,-79.3832 -relay.edufeed.org,49.4521,11.0767 -ribo.us.nostria.app,43.6532,-79.3832 -relay.damus.io,43.6532,-79.3832 -nostr.spicyz.io,43.6532,-79.3832 -nostr.overmind.lol:443,43.6532,-79.3832 -relay.mulatta.io,37.5665,126.978 -relay.homeinhk.xyz,35.694,139.754 -wot.nostr.party,36.1659,-86.7844 -nostr.chaima.info,50.1109,8.68213 -nostr-01.yakihonne.com,1.32123,103.695 -relay.laantungir.net,-19.4692,-42.5315 -nostr.wecsats.io,43.6532,-79.3832 -nostr-verified.wellorder.net,45.5201,-122.99 -nostr-2.21crypto.ch:443,47.5356,8.73209 -strfry.openhoofd.nl,51.5717,3.70417 -nostr.2b9t.xyz,34.0549,-118.243 -nostr.spaceshell.xyz:443,43.6532,-79.3832 -relay.staging.plebeian.market,51.5072,-0.127586 -relay.olas.app,60.1699,24.9384 -speakeasy.cellar.social:443,49.4543,11.0746 -relay01.lnfi.network,35.6764,139.65 -nostr-02.yakihonne.com:443,1.32123,103.695 -nostr.carroarmato0.be,51.0368,3.21186 -strfry.shock.network,39.0438,-77.4874 -wot.codingarena.top,50.4754,12.3683 -nostr.mom,50.4754,12.3683 -nostr.dlcdevkit.com:443,40.0992,-83.1141 -nostr2.thalheim.io,49.4543,11.0746 -syb.lol:443,43.6532,-79.3832 -nostrcity-club.fly.dev,37.7648,-122.432 -nostr.myshosholoza.co.za,52.3913,4.66545 -wot.brightbolt.net,47.6735,-116.781 -speakeasy.cellar.social,49.4543,11.0746 -relay.nostar.org,43.6532,-79.3832 -relay.directsponsor.net,42.8864,-78.8784 -relay.bebond.net,43.6532,-79.3832 -nostr.hekster.org,37.3986,-121.964 -nrs-01.darkcloudarcade.com,39.1008,-94.5811 -relay.binaryrobot.com:443,43.6532,-79.3832 -nostr.88mph.life,52.1941,-2.21905 -nostr.self-determined.de,53.495,10.2542 -dm-test-strfry-discovery.samt.st,43.6532,-79.3832 -public.crostr.com:443,43.6532,-79.3832 -nostr-rs-relay.dev.fedibtc.com:443,39.0438,-77.4874 -relay.wellorder.net,45.5201,-122.99 -nostr.vulpem.com,49.4543,11.0746 -relay.inforsupports.com,43.6532,-79.3832 -nostr.mom:443,50.4754,12.3683 -nostrbtc.com,43.6532,-79.3832 -nostr-relay.psfoundation.info:443,39.0438,-77.4874 -nostr-relay.zimage.com,34.0549,-118.243 -articles.layer3.news,37.3387,-121.885 -nostr.computingcache.com,34.0356,-118.442 -nostr.quali.chat,60.1699,24.9384 -nostr.21crypto.ch,47.5356,8.73209 -bendernostur.duckdns.org:8443,50.1109,8.68213 -syb.lol,43.6532,-79.3832 -nexus.libernet.app,43.6532,-79.3832 -memlay.v0l.io,53.3498,-6.26031 -nostr.blankfors.se,60.1699,24.9384 -relaisnostr.trivaco.fr,48.5734,7.75211 -eu.nostr.pikachat.org:443,49.4543,11.0746 -relay.chorus.community:443,48.5333,10.7 -relay.nostu.be,40.4167,-3.70329 -relay.fountain.fm:443,43.6532,-79.3832 -adre.su,59.9311,30.3609 -nostr2.girino.org:443,43.6532,-79.3832 -nostr.azzamo.net:443,52.2633,21.0283 -relay.samt.st,40.8302,-74.1299 -relay.bullishbounty.com,43.6532,-79.3832 -relay.nostrian-conquest.com:443,41.223,-111.974 -relay.lotek-distro.com,43.6532,-79.3832 -bcast.girino.org,43.6532,-79.3832 -bridge.tagomago.me,42.3601,-71.0589 -relay.0xchat.com:443,43.6532,-79.3832 -relay.lab.rytswd.com:443,49.4543,11.0746 -relay.fckstate.net,59.3293,18.0686 -conduitl2.fly.dev,37.7648,-122.432 -relay.zone667.com,60.1699,24.9384 -relay.comcomponent.com,43.6532,-79.3832 -relay.damus.io:443,43.6532,-79.3832 -relay.klabo.world,47.2343,-119.853 -nostr.data.haus,50.4754,12.3683 -relay.nostr.blockhenge.com,39.0438,-77.4874 -relay-dev.gulugulu.moe,43.6532,-79.3832 -nostr.bgbitcoin.club,50.4754,12.3683 -relay-rpi.edufeed.org:443,49.4521,11.0767 -relay.layer.systems:443,49.0291,8.35695 -relay.fountain.fm,43.6532,-79.3832 -armada.sharegap.net,43.6532,-79.3832 -nostr.quali.chat:443,60.1699,24.9384 -relay.mrmave.work,43.6532,-79.3832 -r.0kb.io:443,32.789,-96.7989 -nostr.plantroon.com,50.1013,8.62643 -treuzkas.branruz.com,48.8575,2.35138 -nostr.night7.space:443,50.4754,12.3683 -nos.lol,50.4754,12.3683 -yabu.me,35.6092,139.73 -bucket.coracle.social,37.7775,-122.397 -relay.chorus.community,48.5333,10.7 -nostr-relay.corb.net,38.8353,-104.822 -relay.bao.network:443,43.6532,-79.3832 -kotukonostr.onrender.com,37.7775,-122.397 -mostro-p2p.tech,50.1109,8.68213 -relay.bornheimer.app,51.5072,-0.127586 -wot.rejecttheframe.xyz,43.6532,-79.3832 -bitcoinostr.duckdns.org,38.9393,-0.15411 -relay.nostr.net:443,43.6532,-79.3832 -nostr-relay.xbytez.io,50.6924,3.20113 -nostr-relay.xbytez.io:443,50.6924,3.20113 -relay.satlantis.io,40.8054,-74.0241 -relay.tapestry.ninja,40.8054,-74.0241 -relay.mitchelltribe.com:443,39.0438,-77.4874 -relay.veganostr.com:443,60.1699,24.9384 -nostr.stakey.net,52.3676,4.90414 -chat-relay.zap-work.com:443,43.6532,-79.3832 -schnorr.me,43.6532,-79.3832 -relay.cosmicbolt.net:443,37.3986,-121.964 -cs-relay.nostrdev.com,50.4754,12.3683 -r.0kb.io,32.789,-96.7989 -relay.libernet.app,43.6532,-79.3832 -rele.speyhard.fi,50.1109,8.68213 -relay.mmwaves.de:443,48.8575,2.35138 -top.testrelay.top,43.6532,-79.3832 -soloco.nl,43.6532,-79.3832 -nostr-relay-1.trustlessenterprise.com:443,43.6532,-79.3832 -relay.thecryptosquid.com,50.4754,12.3683 -bitchat.nostr1.com,40.7057,-74.0136 -relay-fra.zombi.cloudrodion.com,48.8566,2.35222 -nostr.spicyz.io:443,43.6532,-79.3832 -nittom.nostr1.com:443,40.7057,-74.0136 -relay.aarpia.com,37.3986,-121.964 -relay.ohstr.com,43.6532,-79.3832 -nostr.islandarea.net,35.4669,-97.6473 -schnorr.me:443,43.6532,-79.3832 -relay.veganostr.com,60.1699,24.9384 -relay.islandbitcoin.com:443,12.8498,77.6545 -wot.nostr.place,43.6532,-79.3832 -relay.agentry.com,42.8864,-78.8784 -relay.decentnewsroom.com,50.4754,12.3683 -relay.flashapp.me:443,43.6548,-79.3885 -eu.nostr.pikachat.org,49.4543,11.0746 -wot.sudocarlos.com,43.6532,-79.3832 -strfry.openhoofd.nl:443,51.5717,3.70417 -no.str.cr:443,9.27447,-83.5797 -relay.lacompagniemaximus.com:443,45.3147,-73.8785 -us-east.nostr.pikachat.org,39.0438,-77.4874 -nostrcity-club.fly.dev:443,37.7648,-122.432 -relay.trustr.ing,43.6548,-79.3885 -relay.jbnco.co,43.6532,-79.3832 -nostr.dlcdevkit.com,40.0992,-83.1141 -nostr.aruku.ovh,1.27994,103.849 -nostr.night7.space,50.4754,12.3683 -wot.shaving.kiwi,43.6532,-79.3832 -relay.snort.social,53.3498,-6.26031 -nostrelay.circum.space:443,52.3676,4.90414 -relay.endfiat.money,59.3327,18.0656 -nostr.overmind.lol,43.6532,-79.3832 -relay.mostr.pub,43.6532,-79.3832 -nostr.girino.org,43.6532,-79.3832 -nos.lol:443,50.4754,12.3683 -nostr.bitcoiner.social,47.6743,-117.112 -relay.agorist.space,52.3734,4.89406 -herbstmeister.com,34.0549,-118.243 -relay.artx.market,43.6548,-79.3885 -nostr2.girino.org,43.6532,-79.3832 -portal-relay.pareto.space,49.0291,8.35696 -testr.nymble.world,40.8054,-74.0241 -wot.utxo.one,43.6532,-79.3832 -relay.gulugulu.moe:443,43.6532,-79.3832 -nostr-rs-relay.dev.fedibtc.com,39.0438,-77.4874 -nostr.hifish.org,47.4244,8.57658 -relay-arg.zombi.cloudrodion.com,1.35208,103.82 -relay.openresist.com,43.6532,-79.3832 -x.kojira.io,43.6532,-79.3832 -relay.sovbit.dev,60.1699,24.9384 +ribo.us.nostria.app:443,43.6532,-79.3832 +relay.notoshi.win,13.3622,100.983 +openrelay.ziomc.com,50.0755,14.4378 relay.agentry.com:443,42.8864,-78.8784 -relay.vrtmrz.net:443,43.6532,-79.3832 -bitcoiner.social,47.6743,-117.112 -testnet-relay.samt.st:443,40.8302,-74.1299 -nostr-dev.wellorder.net,45.5201,-122.99 -relay.guggero.org,46.5971,9.59652 -nostr.ps1829.com:443,33.8851,130.883 +nostr-relay.xbytez.io,50.6924,3.20113 +relay.gulugulu.moe,43.6532,-79.3832 +nostr.thebiglake.org:443,32.71,-96.6745 +relay.fountain.fm,43.6532,-79.3832 +freelay.sovbit.host,60.1699,24.9384 +nostr.girino.org:443,43.6532,-79.3832 +relay.openresist.com,43.6532,-79.3832 +nas01xanthosnet.synology.me:7778,47.1285,8.74735 +relay.ohstr.com:443,43.6532,-79.3832 +nostr-pub.wellorder.net,45.5201,-122.99 +relay.nostrdice.com,-33.8688,151.209 +bbw-nostr.xyz,41.5284,-87.4237 +cs-relay.nostrdev.com:443,50.4754,12.3683 +top.testrelay.top,43.6532,-79.3832 +relay.trotters.cc,43.6532,-79.3832 +blossom.gnostr.cloud,43.6532,-79.3832 +ribo.eu.nostria.app:443,43.6532,-79.3832 +public.crostr.com,43.6532,-79.3832 +relay.nostar.org,43.6532,-79.3832 +strfry.bonsai.com:443,39.0438,-77.4874 +nostr.carroarmato0.be,50.914,3.21378 +relay.endfiat.money,59.3327,18.0656 +nostr.overmind.lol:443,43.6532,-79.3832 +nostr.myshosholoza.co.za:443,52.3913,4.66545 +relay.wellorder.net,45.5201,-122.99 +nostr.tagomago.me,42.3601,-71.0589 +relay.internationalright-wing.org,-22.5022,-48.7114 +relay.fckstate.net,59.3293,18.0686 +nostr.azzamo.net,52.2633,21.0283 +relay.0xchat.com,43.6532,-79.3832 +relayone.geektank.ai,39.1008,-94.5811 +relay.homeinhk.xyz,35.694,139.754 +nostr.nodesmap.com,59.3327,18.0656 +relay.islandbitcoin.com:443,12.8498,77.6545 +relay.mrmave.work,43.6532,-79.3832 +relay.arx-ccn.com,50.4754,12.3683 +fanfares.nostr1.com:443,40.7057,-74.0136 +wot.shaving.kiwi,43.6532,-79.3832 +relay.nearhood.co.uk,51.5072,-0.127586 +relay.fundstr.me,42.3601,-71.0589 +syb.lol:443,43.6532,-79.3832 +dm-test-strfry-discovery.samt.st:443,43.6532,-79.3832 +relay.nostx.io,43.6532,-79.3832 +no.str.cr,10.6352,-85.4378 +relay.jbnco.co,43.6532,-79.3832 +ribo.nostria.app:443,43.6532,-79.3832 +us-east.nostr.pikachat.org,39.0438,-77.4874 +nexus.libernet.app,43.6532,-79.3832 +nostr.dlcdevkit.com,40.0992,-83.1141 +nostr.debate.report,50.1109,8.68213 +str-define-contributing-jackets.trycloudflare.com,43.6532,-79.3832 +nostr2.girino.org,43.6532,-79.3832 +nostr.unkn0wn.world,46.8499,9.53287 +nostr.spicyz.io:443,43.6532,-79.3832 +relay.layer.systems:443,49.0291,8.35695 +nostr-relay.amethyst.name,39.0067,-77.4291 +slick.mjex.me,39.0418,-77.4744 +nostr.girino.org,43.6532,-79.3832 +nostr.quali.chat:443,60.1699,24.9384 +purplerelay.com:443,43.6532,-79.3832 +nostr.notribe.net,40.8302,-74.1299 +relay.plebeian.market:443,50.1109,8.68213 +relay.samt.st,40.8302,-74.1299 +relay.mitchelltribe.com:443,39.0438,-77.4874 +nostr.0x7e.xyz,47.4949,8.71954 +relayone.soundhsa.com:443,39.1008,-94.5811 +nostr.thalheim.io:443,60.1699,24.9384 +relay.getsafebox.app:443,43.6532,-79.3832 +nostr-relay.psfoundation.info,39.0438,-77.4874 +bucket.coracle.social,37.7775,-122.397 +nostr.carroarmato0.be:443,50.914,3.21378 +relay.staging.commonshub.brussels,49.4543,11.0746 +relay-dev.satlantis.io,40.8302,-74.1299 +relay.lacompagniemaximus.com:443,45.3147,-73.8785 +relay-rpi.edufeed.org,49.4521,11.0767 +nostr.computingcache.com:443,34.0356,-118.442 +relay.lanavault.space:443,60.1699,24.9384 +relay.getsafebox.app,43.6532,-79.3832 +nrs-02.darkcloudarcade.com:443,39.9526,-75.1652 +nostr.hekster.org,37.3986,-121.964 +node.kommonzenze.de,49.4521,11.0767 +0x-nostr-relay.fly.dev,37.7648,-122.432 +speakeasy.cellar.social,49.4543,11.0746 +nostr.0x7e.xyz:443,47.4949,8.71954 +nostr.vulpem.com,49.4543,11.0746 +relay5.bitransfer.org,43.6532,-79.3832 +relay.inforsupports.com,43.6532,-79.3832 +relay.plebeian.market,50.1109,8.68213 +shu02.shugur.net,21.4902,39.2246 +nostr.easycryptosend.it,43.6532,-79.3832 +nostr.spaceshell.xyz,43.6532,-79.3832 +relay.minibolt.info,43.6532,-79.3832 +nostr.pbfs.io:443,50.4754,12.3683 +nos.lol:443,50.4754,12.3683 +nostr.thebiglake.org,32.71,-96.6745 +relay.nostriot.com,41.5695,-83.9786 +strfry.shock.network:443,39.0438,-77.4874 +relay01.lnfi.network,35.6764,139.65 +r.0kb.io:443,32.789,-96.7989 +bcast.girino.org,43.6532,-79.3832 +nostr-relay.psfoundation.info:443,39.0438,-77.4874 +dm-test-strfry-discovery.samt.st,43.6532,-79.3832 +testnet.samt.st,43.6532,-79.3832 +relay.bornheimer.app,51.5072,-0.127586 +nrs-02.darkcloudarcade.com,39.9526,-75.1652 +relay.binaryrobot.com:443,43.6532,-79.3832 +nostr.computingcache.com,34.0356,-118.442 +nostr-rs-relay-qj1h.onrender.com,37.7775,-122.397 +schnorr.me,43.6532,-79.3832 +nostr.twinkle.lol,51.902,7.6657 +nostr.overmind.lol,43.6532,-79.3832 +relay.mmwaves.de:443,48.8575,2.35138 +relay2.veganostr.com,60.1699,24.9384 +nostr.mom,50.4754,12.3683 +nostr2.girino.org:443,43.6532,-79.3832 +wot.sudocarlos.com,43.6532,-79.3832 +dev.relay.stream,43.6532,-79.3832 +nostr.thalheim.io,60.1699,24.9384 +relay-dev.gulugulu.moe:443,43.6532,-79.3832 +conduitl2.fly.dev,37.7648,-122.432 +relay.bullishbounty.com,43.6532,-79.3832 +myvoiceourstory.org,37.3598,-121.981 +relay.angor.io,48.1046,11.6002 +r.0kb.io,32.789,-96.7989 +nexus.libernet.app:443,43.6532,-79.3832 +us-east.nostr.pikachat.org:443,39.0438,-77.4874 +nostr.bitcoiner.social,47.6743,-117.112 +nostrelay.circum.space:443,52.6907,4.8181 +relayone.soundhsa.com,39.1008,-94.5811 +nostr.snowbla.de,60.1699,24.9384 +relay1.orangesync.tech,44.7839,-106.941 +nostr-2.21crypto.ch:443,47.5356,8.73209 +espelho.girino.org,43.6532,-79.3832 +nostr.blankfors.se,60.1699,24.9384 relay.sigit.io:443,50.4754,12.3683 +relay.vrtmrz.net:443,43.6532,-79.3832 +nostr.wecsats.io:443,43.6532,-79.3832 +nostrcity-club.fly.dev,37.7648,-122.432 +nostrelay.circum.space,52.6907,4.8181 +nostr-relay-1.trustlessenterprise.com,43.6532,-79.3832 +relay.edufeed.org,49.4521,11.0767 +nostr.dlcdevkit.com:443,40.0992,-83.1141 +x.kojira.io,43.6532,-79.3832 +relay.binaryrobot.com,43.6532,-79.3832 +relay.nostrhub.fr,48.1045,11.6004 +nostr.sathoarder.com,48.5734,7.75211 +prl.plus,55.7628,37.5983 +relay.cosmicbolt.net:443,37.3986,-121.964 +relay.nostu.be:443,40.4167,-3.70329 +cs-relay.nostrdev.com,50.4754,12.3683 +satsage.xyz,37.3986,-121.964 +relay.lab.rytswd.com:443,49.4543,11.0746 +rilo.nostria.app:443,43.6532,-79.3832 +portal-relay.pareto.space,49.0291,8.35696 +relay.wavlake.com:443,41.2619,-95.8608 +relay.beginningend.com,35.2227,-97.4786 +relay.openresist.com:443,43.6532,-79.3832 +bitcoiner.social:443,47.6743,-117.112 +relay.notoshi.win:443,13.3622,100.983 +dev.relay.edufeed.org:443,49.4521,11.0767 +relay.cypherflow.ai:443,48.8575,2.35138 +relay.ru.ac.th,13.7607,100.627 +shu03.shugur.net,25.2048,55.2708 +nostr.rtvslawenia.com:443,49.4543,11.0746 +relay.agorist.space:443,52.3734,4.89406 +relay02.lnfi.network,35.6764,139.65 +relay-testnet.k8s.layer3.news:443,37.3387,-121.885 +nostr.notribe.net:443,40.8302,-74.1299 +relay.ditto.pub,43.6532,-79.3832 +nostr.rikmeijer.nl,51.7111,5.36809 +blossom.gnostr.cloud:443,43.6532,-79.3832 +nostr.oxtr.dev,50.4754,12.3683 +cache.trustr.ing,43.6548,-79.3885 +nostr.bitczat.pl,60.1699,24.9384 +relay.nostrverse.net,43.6532,-79.3832 +shu04.shugur.net,25.2048,55.2708 +eu.nostr.pikachat.org:443,49.4543,11.0746 +ribo.us.nostria.app,43.6532,-79.3832 +nostr-relay.cbrx.io,43.6532,-79.3832 +nostr.bitczat.pl:443,60.1699,24.9384 +nostr-relay.corb.net:443,38.8353,-104.822 +relay.libernet.app,43.6532,-79.3832 +nostr-verified.wellorder.net,45.5201,-122.99 +relay.nostu.be,40.4167,-3.70329 +rele.speyhard.fi,51.5072,-0.127586 +relay.staging.plebeian.market,51.5072,-0.127586 +nostr.spicyz.io,43.6532,-79.3832 +nostrride.io,37.3986,-121.964 +x.kojira.io:443,43.6532,-79.3832 +relay.staging.plebeian.market:443,51.5072,-0.127586 +relay.sigit.io,50.4754,12.3683 +nostr.stakey.net:443,52.3676,4.90414 +relay.nostr.blockhenge.com,39.0438,-77.4874 +relay.comcomponent.com,43.6532,-79.3832 +wot.nostr.place,43.6532,-79.3832 +relay.mostr.pub:443,43.6532,-79.3832 +nostr-rs-relay-ishosta.phamthanh.me,43.6532,-79.3832 +no.str.cr:443,10.6352,-85.4378 +relay.chorus.community:443,48.5333,10.7 +relay.aarpia.com,37.3986,-121.964 +relay.nostrmap.net,60.1699,24.9384 +relay.snotr.nl:49999,52.0195,4.42946 +relay.bebond.net,43.6532,-79.3832 +relay.illuminodes.com,43.6532,-79.3832 +chat-relay.zap-work.com:443,43.6532,-79.3832 +testr.nymble.world,40.8054,-74.0241 +relay.underorion.se,50.1109,8.68213 +fanfares.nostr1.com,40.7057,-74.0136 +relay.damus.io,43.6532,-79.3832 +relay.nostriches.club,43.6532,-79.3832 +nostr-dev.wellorder.net,45.5201,-122.99 +relay2.angor.io,48.1046,11.6002 relay.openfarmtools.org,60.1699,24.9384 wot.makenomistakes.ca,43.7064,-79.3986 -relay.paulstephenborile.com:443,49.4543,11.0746 -freelay.sovbit.dev:443,60.1699,24.9384 -relay.arx-ccn.com,50.4754,12.3683 -relayone.soundhsa.com,39.1008,-94.5811 -relay.olas.app:443,60.1699,24.9384 -nostr.chaima.info:443,50.1109,8.68213 -relay.getsafebox.app:443,43.6532,-79.3832 -nostr.pbfs.io,50.4754,12.3683 -nostr-relay.amethyst.name:443,39.0438,-77.4874 +relay.thecryptosquid.com,50.4754,12.3683 test.thedude.cloud,50.1109,8.68213 +nostr.rtvslawenia.com,49.4543,11.0746 +nostr-rs-relay.dev.fedibtc.com,39.0438,-77.4874 +relay.olas.app:443,60.1699,24.9384 +strfry.bonsai.com,39.0438,-77.4874 +relayrs.notoshi.win,43.6532,-79.3832 +articles.layer3.news,37.3387,-121.885 +wot.utxo.one,43.6532,-79.3832 +relay.angor.io:443,48.1046,11.6002 +relay.dwadziesciajeden.pl,52.2297,21.0122 +soloco.nl,43.6532,-79.3832 +armada.sharegap.net,43.6532,-79.3832 +dm-test-strfry-generic.samt.st,43.6532,-79.3832 +nostr.4rs.nl,49.0291,8.35696 +nrs-01.darkcloudarcade.com,39.1008,-94.5811 +relay.beginningend.com:443,35.2227,-97.4786 +relay.nostr.place,43.6532,-79.3832 +relay.layer.systems,49.0291,8.35695 +adre.su,59.9311,30.3609 +relay.0xchat.com:443,43.6532,-79.3832 +nostr.infero.net,35.6764,139.65 +relay.typedcypher.com:443,51.5072,-0.127586 +relay.mostro.network:443,40.8302,-74.1299 +relay-fra.zombi.cloudrodion.com,48.8566,2.35222 +relay.mitchelltribe.com,39.0438,-77.4874 +relay.mostr.pub,43.6532,-79.3832 +bitcoiner.social,47.6743,-117.112 +nostr.tac.lol:443,47.4748,-122.273 +nostr.hekster.org:443,37.3986,-121.964 +relay.satmaxt.xyz:443,43.6532,-79.3832 +relay.cypherflow.ai,48.8575,2.35138 +relay.zone667.com:443,60.1699,24.9384 +relay.jeffg.fyi:443,43.6532,-79.3832 +relay.agorist.space,52.3734,4.89406 +nostr.spaceshell.xyz:443,43.6532,-79.3832 +top.testrelay.top:443,43.6532,-79.3832 +insta-relay.apps3.slidestr.net,40.4167,-3.70329 +relay.nostrian-conquest.com:443,41.223,-111.974 relay.laantungir.net:443,-19.4692,-42.5315 -nrs-02.darkcloudarcade.com:443,39.9526,-75.1652 -relay.nostrhub.fr,48.1045,11.6004 +relay.islandbitcoin.com,12.8498,77.6545 +purplerelay.com,43.6532,-79.3832 +nostr.tac.lol,47.4748,-122.273 +nostr.wecsats.io,43.6532,-79.3832 +nostr.2b9t.xyz,34.0549,-118.243 +nostr.quali.chat,60.1699,24.9384 +relay.dreamith.to,43.6532,-79.3832 +nostr.islandarea.net:443,35.4669,-97.6473 +relay.primal.net,43.6532,-79.3832 +eu.nostr.pikachat.org,49.4543,11.0746 +relay.nostr.net,43.6532,-79.3832 +nostr.n7ekb.net,47.4941,-122.294 +relay.mulatta.io,37.5665,126.978 +nittom.nostr1.com,40.7057,-74.0136 +relay2.orangesync.tech,40.7128,-74.006 +relay.artx.market,43.6548,-79.3885 +relay.wavefunc.live,41.8781,-87.6298 +bitchat.nostr1.com,40.7057,-74.0136 +relay.ditto.pub:443,43.6532,-79.3832 +relay.wisp.talk,49.4543,11.0746 +nostrelites.org,41.8781,-87.6298 +relay.goodmorningbitcoin.com,43.6532,-79.3832 +dm-test-nostr-rs-42-disabled.samt.st,43.6532,-79.3832 +relay.chorus.community,48.5333,10.7 +relay.plebchain.club,43.6532,-79.3832 +nostr-relay.amethyst.name:443,39.0067,-77.4291 relay.lanacoin-eternity.com,40.8302,-74.1299 -nostrelay.circum.space,52.3676,4.90414 -slick.mjex.me,39.0418,-77.4744 -relay-testnet.k8s.layer3.news,37.3387,-121.885 -bbw-nostr.xyz,41.5284,-87.4237 -relay.underorion.se,50.1109,8.68213 -relay.minibolt.info,43.6532,-79.3832 +relay.edufeed.org:443,49.4521,11.0767 +relay.lacompagniemaximus.com,45.3147,-73.8785 +relay.dreamith.to:443,43.6532,-79.3832 +nostr.stakey.net,52.3676,4.90414 +nostr.n7ekb.net:443,47.4941,-122.294 +relay.dyne.org,49.0291,8.35705 +nostr.janx.com,43.6532,-79.3832 +relay.trustr.ing,43.6548,-79.3885 +relay.paulstephenborile.com:443,49.4543,11.0746 +relay.wisp.talk:443,49.4543,11.0746 +yabu.me,35.6092,139.73 +bcast.seutoba.com.br,43.6532,-79.3832 +nos.xmark.cc,50.6924,3.20113 +nos.lol,50.4754,12.3683 +relay.satmaxt.xyz,43.6532,-79.3832 +relay.endfiat.money:443,59.3327,18.0656 +relay.tapestry.ninja,40.8054,-74.0241 +relay.lab.rytswd.com,49.4543,11.0746 +nostr-kyomu-haskell.onrender.com,37.7775,-122.397 +relay.damus.io:443,43.6532,-79.3832 +treuzkas.branruz.com,48.8575,2.35138 +nostr-01.yakihonne.com,1.32123,103.695 +relay.nostriot.com:443,41.5695,-83.9786 +nostr-relay.nextblockvending.com,47.2343,-119.853 +nostr.aruku.ovh,1.27994,103.849 +nostr.chaima.info,50.1109,8.68213 +ynostr.yael.at,60.1699,24.9384 +ynostr.yael.at:443,60.1699,24.9384 +nostr-01.yakihonne.com:443,1.32123,103.695 +spookstr2.nostr1.com,40.7057,-74.0136 +relay.trustr.ing:443,43.6548,-79.3885 +dev.relay.edufeed.org,49.4521,11.0767 +relay2.angor.io:443,48.1046,11.6002 +nostr.azzamo.net:443,52.2633,21.0283 +offchain.bostr.online,43.6532,-79.3832 +relay.zone667.com,60.1699,24.9384 +relay.veganostr.com,60.1699,24.9384 +vault.iris.to:443,43.6532,-79.3832 +relay.artx.market:443,43.6548,-79.3885 +wot.rejecttheframe.xyz,43.6532,-79.3832 +nostr.pbfs.io,50.4754,12.3683 +relay.mostro.network,40.8302,-74.1299 +strfry.shock.network,39.0438,-77.4874 +relay.klabo.world,47.2343,-119.853 +relay.fountain.fm:443,43.6532,-79.3832 +nostrja-kari.heguro.com,43.6532,-79.3832 +relaisnostr.trivaco.fr,48.5734,7.75211 +offchain.pub,39.1585,-94.5728 +relay.degmods.com,50.4754,12.3683 +nostr-relay.xbytez.io:443,50.6924,3.20113 +relay.paulstephenborile.com,49.4543,11.0746 +nittom.nostr1.com:443,40.7057,-74.0136 +dev-relay.nostreon.com,60.1699,24.9384 +nostr-rs-relay.dev.fedibtc.com:443,39.0438,-77.4874 +relay.jeffg.fyi,43.6532,-79.3832 +relay.laantungir.net,-19.4692,-42.5315 +nostr.data.haus:443,50.4754,12.3683 +wot.codingarena.top,50.4754,12.3683 +nostr.2b9t.xyz:443,34.0549,-118.243 +relay.libernet.app:443,43.6532,-79.3832 +nostr.ps1829.com,33.8851,130.883 +wot.dergigi.com,64.1476,-21.9392 +relay.olas.app,60.1699,24.9384 +relay.lanacoin-eternity.com:443,40.8302,-74.1299 +nostr.data.haus,50.4754,12.3683 +relay-dev.gulugulu.moe,43.6532,-79.3832 +relay.ohstr.com,43.6532,-79.3832 +relay.lightning.pub,39.0438,-77.4874 +relay.guggero.org,46.5971,9.59652 +testnet-relay.samt.st:443,40.8302,-74.1299 +thecitadel.nostr1.com,40.7057,-74.0136 +nostr.ps1829.com:443,33.8851,130.883 +nostr-relay.corb.net,38.8353,-104.822 +relay.npubhaus.com,43.6532,-79.3832 +nostr.21crypto.ch,47.5356,8.73209 +nostr.tadryanom.me,43.6532,-79.3832 +nostr.myshosholoza.co.za,52.3913,4.66545 +relay.bitmacro.cloud,43.6532,-79.3832 +ribo.nostria.app,43.6532,-79.3832 +relay.vrtmrz.net,43.6532,-79.3832 +syb.lol,43.6532,-79.3832 +relay.bebond.net:443,43.6532,-79.3832 +relay.agentry.com,42.8864,-78.8784 +nostr-2.21crypto.ch,47.5356,8.73209 +nostrcity-club.fly.dev:443,37.7648,-122.432 +articles.layer3.news:443,37.3387,-121.885 +relay.internationalright-wing.org:443,-22.5022,-48.7114 +nostr-relay.zimage.com,34.0549,-118.243 +chat-relay.zap-work.com,43.6532,-79.3832 +relay.mwaters.net,50.9871,2.12554 +nostr.liberty.fans,36.9104,-89.5875 +spookstr2.nostr1.com:443,40.7057,-74.0136 +nostr.chaima.info:443,50.1109,8.68213 +schnorr.me:443,43.6532,-79.3832 +ribo.eu.nostria.app,43.6532,-79.3832 +nostr.bond,50.1109,8.68213 +wot.nostr.party,36.1659,-86.7844 +temp.iris.to,43.6532,-79.3832 +relay.lotek-distro.com,43.6532,-79.3832 +relay.minibolt.info:443,43.6532,-79.3832 +relay.lanavault.space,60.1699,24.9384 +relay.mmwaves.de,48.8575,2.35138 +social.amanah.eblessing.co,48.1046,11.6002 +nostr2.thalheim.io,49.4543,11.0746 +relay.typedcypher.com,51.5072,-0.127586 +relay.cosmicbolt.net,37.3986,-121.964 +relayrs.notoshi.win:443,43.6532,-79.3832 +nostr-relay-1.trustlessenterprise.com:443,43.6532,-79.3832 +nostr.islandarea.net,35.4669,-97.6473 +relay.nostrmap.net:443,60.1699,24.9384 +relay.bullishbounty.com:443,43.6532,-79.3832 +nostr.oxtr.dev:443,50.4754,12.3683 +srtrelay.c-stellar.net,43.6532,-79.3832 +relay.mccormick.cx,52.3563,4.95714 +vault.iris.to,43.6532,-79.3832 relay.mccormick.cx:443,52.3563,4.95714 relay.toastr.net,40.8054,-74.0241 -relay.mostro.network,40.8302,-74.1299 -nas01xanthosnet.synology.me:7778,47.1285,8.74735 -relay.getsafebox.app,43.6532,-79.3832 -strfry.apps3.slidestr.net,40.4167,-3.70329 -nostr.bitczat.pl:443,60.1699,24.9384 -dev.relay.edufeed.org,49.4521,11.0767 -relay.cypherflow.ai,48.8575,2.35138 -blossom.gnostr.cloud:443,43.6532,-79.3832 -nostr.bitczat.pl,60.1699,24.9384 -relay.sigit.io,50.4754,12.3683 -chat-relay.zap-work.com,43.6532,-79.3832 -relay.mccormick.cx,52.3563,4.95714 -relay.nostriot.com,41.5695,-83.9786 -nostr-relay.cbrx.io,43.6532,-79.3832 -relay.nostx.io,43.6532,-79.3832 -nittom.nostr1.com,40.7057,-74.0136 -nrs-02.darkcloudarcade.com,39.9526,-75.1652 -offchain.pub,39.1585,-94.5728 -relay.sharegap.net,43.6532,-79.3832 -ynostr.yael.at,60.1699,24.9384 -relay.endfiat.money:443,59.3327,18.0656 -nostr.rtvslawenia.com:443,49.4543,11.0746 -relay.dyne.org,49.0291,8.35705 -relay.edufeed.org:443,49.4521,11.0767 -nostr.twinkle.lol,51.902,7.6657 -relay.illuminodes.com,43.6532,-79.3832 -ribo.nostria.app,43.6532,-79.3832 -relay.nostrian-conquest.com,41.223,-111.974 -nostr.islandarea.net:443,35.4669,-97.6473 -relay.threenine.services,51.5222,-0.62916 -relay.bao.network,43.6532,-79.3832 -dm-test-strfry-generic.samt.st,43.6532,-79.3832 -relay.wavefunc.live,41.8781,-87.6298 -x.kojira.io:443,43.6532,-79.3832 -relay-arg.zombi.cloudrodion.com:443,1.35208,103.82 -wot.dergigi.com,64.1476,-21.9392 -relay.mostr.pub:443,43.6532,-79.3832 -nostr.rtvslawenia.com,49.4543,11.0746 -nostr.ps1829.com,33.8851,130.883 -relay.nostr.place:443,43.6532,-79.3832 -blossom.gnostr.cloud,43.6532,-79.3832 -openrelay.ziomc.com,50.0755,14.4378 -nostr.robosats.org:443,64.1476,-21.9392 -relay.wavlake.com:443,41.2619,-95.8608 -relay.nostrmap.net,60.1699,24.9384 -offchain.bostr.online,43.6532,-79.3832 -nostr.stakey.net:443,52.3676,4.90414 -relay1.nostrchat.io,60.1699,24.9384 -rilo.nostria.app,43.6532,-79.3832 -relay.fundstr.me,42.3601,-71.0589 -nostrja-kari.heguro.com,43.6532,-79.3832 -relay.internationalright-wing.org,-22.5022,-48.7114 -vault.iris.to,43.6532,-79.3832 -relay-dev.satlantis.io,40.8302,-74.1299 -nostr.notribe.net,40.8302,-74.1299 -nostr.purpura.cloud,43.6532,-79.3832 -nostr.spaceshell.xyz,43.6532,-79.3832 -temp.iris.to,43.6532,-79.3832 -us-east.nostr.pikachat.org:443,39.0438,-77.4874 -nostr.unkn0wn.world,46.8499,9.53287 -nexus.libernet.app:443,43.6532,-79.3832 -articles.layer3.news:443,37.3387,-121.885 -nostr.tadryanom.me,43.6532,-79.3832 -fanfares.nostr1.com:443,40.7057,-74.0136 -relay5.bitransfer.org,43.6532,-79.3832 +nostr.hifish.org,47.4244,8.57658 +speakeasy.cellar.social:443,49.4543,11.0746 +relay.wavlake.com,41.2619,-95.8608 testnet-relay.samt.st,40.8302,-74.1299 -nostr.janx.com,43.6532,-79.3832 -relay.gulugulu.moe,43.6532,-79.3832 -relay.staging.commonshub.brussels,49.4543,11.0746 -social.amanah.eblessing.co,48.1046,11.6002 -nostr-rs-relay-ishosta.phamthanh.me,43.6532,-79.3832 -relay.lacompagniemaximus.com,45.3147,-73.8785 -relay.trotters.cc,43.6532,-79.3832 -nostr.2b9t.xyz:443,34.0549,-118.243 -nostr.bitcoiner.social:443,47.6743,-117.112 -nostr.nodesmap.com,59.3327,18.0656 -nostr.0x7e.xyz,47.4857,8.72929 -relay2.angor.io,48.1046,11.6002 -relay.jeffg.fyi:443,43.6532,-79.3832 -relay.routstr.com,59.4016,17.9455 -nostr.0x7e.xyz:443,47.4857,8.72929 -nostr-relay.psfoundation.info,39.0438,-77.4874 -relay.nearhood.co.uk,51.5072,-0.127586 -relay.trotters.cc:443,43.6532,-79.3832 -nostr.myshosholoza.co.za:443,52.3913,4.66545 -nostr.bond,50.1109,8.68213 -nostr.faultables.net,43.6532,-79.3832 aeon.libretechsystems.xyz,55.486,9.86577 -cache.trustr.ing,43.6548,-79.3885 -relay.flashapp.me,43.6548,-79.3885 -dev-relay.nostreon.com,60.1699,24.9384 -0x-nostr-relay.fly.dev,37.7648,-122.432 -relay.ditto.pub,43.6532,-79.3832 -nostr.wecsats.io:443,43.6532,-79.3832 +mostro-p2p.tech,50.1109,8.68213 +nostr.wild-vibes.ts.net,48.8566,2.35222 +nostr.88mph.life,52.1941,-2.21905 +relay.nostrcheck.me,43.6532,-79.3832 +rilo.nostria.app,43.6532,-79.3832 +relay.bowlafterbowl.com,32.9483,-96.7299 +relay.nostr.place:443,43.6532,-79.3832 +nostr.mom:443,50.4754,12.3683 +relay.nostrian-conquest.com,41.223,-111.974 +herbstmeister.com,34.0549,-118.243 +nrs-01.darkcloudarcade.com:443,39.1008,-94.5811 +nostr.red5d.dev,43.6532,-79.3832 +nostrbtc.com,43.6532,-79.3832 +strfry.apps3.slidestr.net,40.4167,-3.70329 +relay.sharegap.net,43.6532,-79.3832 +reraw.pbla2fish.cc,43.6532,-79.3832 +relay-testnet.k8s.layer3.news,37.3387,-121.885 +nostr.sathoarder.com:443,48.5734,7.75211 +relay.veganostr.com:443,60.1699,24.9384 +relay-fra.zombi.cloudrodion.com:443,48.8566,2.35222 premium.primal.net,43.6532,-79.3832 -relay.notoshi.win,13.966,101.513 -no.str.cr,9.27447,-83.5797 -nostr-pub.wellorder.net,45.5201,-122.99 -satsage.xyz,37.3986,-121.964 -relay.nostrmap.net:443,60.1699,24.9384 -testnet.samt.st,43.6532,-79.3832 -nostr.plantroon.com:443,50.1013,8.62643 -relay.mwaters.net,50.9871,2.12554 -relay.wisp.talk,49.4543,11.0746 -nostr.computingcache.com:443,34.0356,-118.442 -public.crostr.com,43.6532,-79.3832 -relay-rpi.edufeed.org,49.4521,11.0767 -relay.notoshi.win:443,13.966,101.513 +relay.wavefunc.live:443,41.8781,-87.6298 +relay-rpi.edufeed.org:443,49.4521,11.0767 +kotukonostr.onrender.com,37.7775,-122.397 +bridge.tagomago.me,42.3601,-71.0589 +nostr.tadryanom.me:443,43.6532,-79.3832 +relay.gulugulu.moe:443,43.6532,-79.3832 +offchain.pub:443,39.1585,-94.5728 +relay.directsponsor.net,42.8864,-78.8784 +nostr.snowbla.de:443,60.1699,24.9384 From 4093ee6733c1c415b5aef8299ced84cc82da86cc Mon Sep 17 00:00:00 2001 From: jack Date: Wed, 10 Jun 2026 16:22:15 +0100 Subject: [PATCH 019/216] Rebuild Arti from audited source with enforced provenance Vendored arti.xcframework rebuilt from source (Rust 1.96.0, normalized archive metadata for reproducible hashes). New ARTI-BINARY-PROVENANCE.md records toolchain, rebuild steps, and a SHA256 manifest for every file in the xcframework. A new CI workflow turns that policy into a gate: PRs must keep the binary matching the manifest, and binary changes must ship with source/lockfile/build-script evidence. Also raises TorManager.awaitReady's default timeout from 25s to 75s to match the bootstrap monitor deadline - a shorter wait reported "not ready" while Arti was still legitimately bootstrapping, silently stranding queued relay work. Privacy policy, Tor integration doc, and privacy assessment updated to match the current implementation. Co-Authored-By: Claude Fable 5 --- .github/workflows/arti-provenance.yml | 85 +++++++++++++++++ PRIVACY_POLICY.md | 58 ++++++++---- bitchat/Localizable.xcstrings | 2 +- docs/ARTI-BINARY-PROVENANCE.md | 88 ++++++++++++++++++ docs/TOR-INTEGRATION.md | 33 ++----- docs/privacy-assessment.md | 21 ++++- .../Frameworks/arti.xcframework/Info.plist | 32 +++---- .../ios-arm64-simulator/libarti_bitchat.a | Bin 7193288 -> 7279944 bytes .../ios-arm64/libarti_bitchat.a | Bin 7211176 -> 7290456 bytes .../macos-arm64/libarti_bitchat.a | Bin 7216664 -> 7306872 bytes localPackages/Arti/Package.swift | 3 +- localPackages/Arti/Sources/TorManager.swift | 4 +- localPackages/Arti/arti-bitchat/Cargo.toml | 2 +- localPackages/Arti/build-ios.sh | 70 ++++++++++++++ 14 files changed, 333 insertions(+), 65 deletions(-) create mode 100644 .github/workflows/arti-provenance.yml create mode 100644 docs/ARTI-BINARY-PROVENANCE.md diff --git a/.github/workflows/arti-provenance.yml b/.github/workflows/arti-provenance.yml new file mode 100644 index 00000000..5d50564e --- /dev/null +++ b/.github/workflows/arti-provenance.yml @@ -0,0 +1,85 @@ +name: Arti Binary Provenance + +# The Arti xcframework is a vendored binary; these checks turn the policy in +# docs/ARTI-BINARY-PROVENANCE.md into an enforced gate: +# 1. The checked-in binary must match the hash manifest in the provenance doc. +# 2. A PR that changes the binary must also change at least one provenance +# input (Rust source, lockfile, build script, or the doc itself). + +on: + push: + branches: + - main + paths: + - "localPackages/Arti/**" + - "docs/ARTI-BINARY-PROVENANCE.md" + pull_request: + paths: + - "localPackages/Arti/**" + - "docs/ARTI-BINARY-PROVENANCE.md" + +jobs: + verify-hashes: + name: Verify xcframework hashes against provenance doc + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v5 + + - name: Compare artifact hashes with manifest + run: | + set -euo pipefail + doc="docs/ARTI-BINARY-PROVENANCE.md" + + # Extract the manifest: lines of " " from the doc. + grep -E '^[0-9a-f]{64} localPackages/Arti/Frameworks/arti\.xcframework/' "$doc" \ + | sort -k2 > expected.txt + + if [ ! -s expected.txt ]; then + echo "::error::No hash manifest found in $doc" + exit 1 + fi + + # Hash the same file set the doc documents. + find localPackages/Arti/Frameworks/arti.xcframework -maxdepth 3 -type f -print0 \ + | sort -z | xargs -0 sha256sum | sed 's/ \.\// /' | sort -k2 > actual.txt + + if ! diff -u expected.txt actual.txt; then + echo "::error::Checked-in arti.xcframework does not match the manifest in $doc. If the binary change is intentional, rebuild per the doc and update the manifest in the same PR." + exit 1 + fi + echo "All $(wc -l < actual.txt) artifact hashes match the provenance manifest." + + require-provenance-evidence: + name: Binary changes must ship with provenance inputs + runs-on: ubuntu-latest + if: github.event_name == 'pull_request' + + steps: + - name: Checkout code + uses: actions/checkout@v5 + with: + fetch-depth: 0 + + - name: Check changed files + run: | + set -euo pipefail + base="origin/${{ github.base_ref }}" + git fetch --no-tags --depth=1 origin "${{ github.base_ref }}" + changed=$(git diff --name-only "$base"...HEAD) + echo "Changed files:" + echo "$changed" + + if ! echo "$changed" | grep -q '^localPackages/Arti/Frameworks/arti\.xcframework/'; then + echo "No binary artifact changes; nothing to verify." + exit 0 + fi + + if echo "$changed" | grep -Eq '^(localPackages/Arti/(Cargo\.(toml|lock)|build-ios\.sh|arti-bitchat/)|docs/ARTI-BINARY-PROVENANCE\.md)'; then + echo "Binary change is accompanied by provenance inputs." + exit 0 + fi + + echo "::error::arti.xcframework changed without matching source, lockfile, build-script, or provenance-doc changes. See docs/ARTI-BINARY-PROVENANCE.md (\"Do not accept an xcframework-only update\")." + exit 1 diff --git a/PRIVACY_POLICY.md b/PRIVACY_POLICY.md index e27866bb..03d770de 100644 --- a/PRIVACY_POLICY.md +++ b/PRIVACY_POLICY.md @@ -1,6 +1,6 @@ # bitchat Privacy Policy -*Last updated: January 2025* +*Last updated: June 2026* ## Our Commitment @@ -9,7 +9,7 @@ bitchat is designed with privacy as its foundation. We believe private communica ## Summary - **No personal data collection** - We don't collect names, emails, or phone numbers -- **No servers** - Everything happens on your device and through peer-to-peer connections +- **No accounts or company servers** - Mesh chat works peer-to-peer; optional Nostr features use public or user-selected relays - **No tracking** - We have no analytics, telemetry, or user tracking - **Open source** - You can verify these claims by reading our code @@ -17,11 +17,11 @@ bitchat is designed with privacy as its foundation. We believe private communica ### On Your Device Only -1. **Identity Key** - - A cryptographic key generated on first launch +1. **Identity Keys** + - Cryptographic private keys generated on first launch or when optional Nostr identities are created - Stored locally in your device's secure storage - Allows you to maintain "favorite" relationships across app restarts - - Never leaves your device + - Private keys never leave your device; public keys are shared when needed for messaging 2. **Nickname** - The display name you choose (or auto-generated) @@ -38,12 +38,19 @@ bitchat is designed with privacy as its foundation. We believe private communica - Stored only on your device - Allows you to recognize these peers in future sessions +5. **Optional Location Channel State** + - Your selected geohash channel, bookmarked geohashes, teleport flags, and bookmark display names + - Stored locally on your device so the location-channel UI can restore your choices + - Per-geohash Nostr identities are derived locally from a device seed stored in secure storage + - Exact latitude and longitude are not persisted by bitchat + ### Temporary Session Data During each session, bitchat temporarily maintains: - Active peer connections (forgotten when app closes) - Routing information for message delivery - Cached messages for offline peers (12 hours max) +- Your current location while optional location channels are enabled, used locally to compute geohash channels and friendly place names ## What Information is Shared @@ -62,13 +69,21 @@ When you join a password-protected room: - Your nickname appears in the member list - Room owners can see you've joined +### With Nostr Relays (Optional Features) + +If you enable Nostr-backed features: +- Private fallback messages to mutual favorites are sent as encrypted NIP-17 gift wraps. Relays can see event metadata, but not message content. +- Public location-channel messages, location notes, and presence are scoped with geohash tags. Relays and other participants can see the geohash tag, event kind, timestamp, and public key used for that geohash. +- Exact GPS coordinates are not included in Nostr events by bitchat. The geohash precision you choose can still reveal an approximate area, from region-level to building-level. +- Automatic presence heartbeats are limited to low-precision geohashes (region, province, and city). More precise geohash posts happen only when you use those channels or location notes. + ## What We DON'T Do bitchat **never**: - Collects personal information -- Tracks your location -- Stores data on servers -- Shares data with third parties +- Sells or shares your exact GPS location +- Stores data on servers we operate +- Sells your data to advertisers or data brokers - Uses analytics or telemetry - Creates user profiles - Requires registration @@ -84,19 +99,27 @@ All private messages use end-to-end encryption: ## Your Rights You have complete control: -- **Delete Everything**: Triple-tap the logo to instantly wipe all data -- **Leave Anytime**: Close the app and your presence disappears -- **No Account**: Nothing to delete from servers because there are none -- **Portability**: Your data never leaves your device unless you export it +- **Delete Local State**: Triple-tap the logo to instantly wipe local keys, sessions, caches, and preferences +- **Leave Anytime**: Close the app and local presence stops; relay-backed presence ages out +- **No Account**: No account record exists for you to delete from us +- **Portability**: Your local state stays on your device unless you send messages, use optional relay-backed features, or export it ## Bluetooth & Permissions bitchat requires Bluetooth permission to function: - Used only for peer-to-peer communication -- No location data is accessed or stored - Bluetooth is not used for tracking - You can revoke this permission at any time in system settings +## Location Permission + +Location permission is optional and is used only for location channels: +- Used to compute local geohash channels and display names +- Requested as when-in-use permission +- Exact coordinates are not shared in messages or stored by bitchat +- Selected and bookmarked geohashes may persist locally until you remove them, use panic wipe, or delete the app +- You can revoke this permission at any time in system settings + ## Children's Privacy bitchat does not knowingly collect information from children. The app has no age verification because it collects no personal information from anyone. @@ -106,12 +129,15 @@ bitchat does not knowingly collect information from children. The app has no age - **Messages**: Deleted from memory when app closes (unless room retention is enabled) - **Identity Key**: Persists until you delete the app - **Favorites**: Persist until you remove them or delete the app +- **Location channel choices**: Selected/bookmarked geohashes persist locally until removed, panic-wiped, or the app is deleted +- **Nostr relay data**: Public geohash events and encrypted gift wraps may be retained by relays according to each relay's policy - **Everything Else**: Exists only during active sessions ## Security Measures - All communication is encrypted -- No data transmitted to servers (there are none) +- No accounts or company servers +- Optional Nostr relays receive only the events needed for Nostr-backed private fallback or public location channels - Open source code for public audit - Regular security updates - Cryptographic signatures prevent tampering @@ -121,7 +147,7 @@ bitchat does not knowingly collect information from children. The app has no age If we update this policy: - The "Last updated" date will change - The updated policy will be included in the app -- No retroactive changes can affect data (since we don't collect any) +- No retroactive changes can make us collect data already held only in your app ## Contact @@ -132,7 +158,7 @@ bitchat is an open source project. For privacy questions: ## Philosophy -Privacy isn't just a feature—it's the entire point. bitchat proves that modern communication doesn't require surrendering your privacy. No accounts, no servers, no surveillance. Just people talking freely. +Privacy isn't just a feature—it's the entire point. bitchat proves that modern communication doesn't require surrendering your privacy. No accounts, no company servers, no analytics. Just people talking freely. --- diff --git a/bitchat/Localizable.xcstrings b/bitchat/Localizable.xcstrings index 8cbbf031..ac92becf 100644 --- a/bitchat/Localizable.xcstrings +++ b/bitchat/Localizable.xcstrings @@ -24397,7 +24397,7 @@ "en" : { "stringUnit" : { "state" : "translated", - "value" : "chat with people near you using geohash channels. only a coarse geohash is shared, never exact GPS. your IP address is hidden by routing all traffic over tor." + "value" : "chat with people near you using geohash channels. the selected geohash is public and may reveal an approximate area; exact GPS is never shared. your IP address is hidden by routing all traffic over tor." } }, "es" : { diff --git a/docs/ARTI-BINARY-PROVENANCE.md b/docs/ARTI-BINARY-PROVENANCE.md new file mode 100644 index 00000000..a13240ba --- /dev/null +++ b/docs/ARTI-BINARY-PROVENANCE.md @@ -0,0 +1,88 @@ +# Arti Binary Provenance + +This repo vendors a prebuilt Arti static-library xcframework at: + +`localPackages/Arti/Frameworks/arti.xcframework` + +SwiftPM links it through `localPackages/Arti/Package.swift` as the binary target named `arti`. Treat changes to this artifact like dependency updates: review the Rust sources, lockfile, build script, produced headers, and artifact hashes together. + +## Source Inputs + +- Rust workspace: `localPackages/Arti/Cargo.toml` +- Crate: `localPackages/Arti/arti-bitchat` +- Dependency lockfile: `localPackages/Arti/Cargo.lock` +- Build script: `localPackages/Arti/build-ios.sh` +- Exported C header: `localPackages/Arti/Frameworks/include/arti.h` + +The crate declares `rust-version = "1.90"` and uses `arti-client` / `tor-rtcompat` `0.38` with minimal Tokio/Rustls features. The current lockfile requires Rust 1.90 or newer. The build script currently targets: + +- `aarch64-apple-ios` +- `aarch64-apple-ios-sim` +- `aarch64-apple-darwin` + +It builds release static libraries with size-oriented flags (`opt-level=z`, fat LTO, one codegen unit, `panic=abort`, stripped symbols), normalizes static-archive metadata with `xcrun libtool -static -D`, then packages them with `xcodebuild -create-xcframework`. + +## Regenerating The Artifact + +From the repo root: + +```sh +cd localPackages/Arti +rustup toolchain install 1.96.0 +rustup default 1.96.0 +rustup target add aarch64-apple-ios aarch64-apple-ios-sim aarch64-apple-darwin +cargo install cbindgen +./build-ios.sh +``` + +After rebuilding, verify that: + +- `Cargo.lock` changes are intentional and reviewed. +- `Frameworks/include/arti.h` still matches the exported FFI functions used by `TorManager`. +- `Frameworks/arti.xcframework` contains iOS device, iOS simulator, and macOS arm64 slices. +- The main app still passes iOS tests and the macOS build. + +## Audited Rebuild + +The June 2026 artifact below was rebuilt from source on this host with: + +```text +rustc 1.96.0 (ac68faa20 2026-05-25) +cargo 1.96.0 (30a34c682 2026-05-25) +rustup 1.29.0 (28d1352db 2026-03-05) +cbindgen 0.29.3 +Xcode 26.5 +Build version 17F42 +``` + +Rust 1.86.0 was also checked during the audit and no longer builds this lockfile because `typed-index-collections@3.4.0` requires Rust 1.90.0 or newer. + +The build script now normalizes static-archive metadata and writes a stable xcframework `Info.plist`. Two consecutive no-source-change rebuilds on this host produced the same hashes below. + +## Current Artifact Hashes + +Run this from the repo root to verify the checked-in artifact: + +```sh +find localPackages/Arti/Frameworks/arti.xcframework -maxdepth 3 -type f -print0 | sort -z | xargs -0 shasum -a 256 +``` + +Current hashes: + +```text +2083d44eafc765db1ffa2691a5c5fabe60b4edbb82b574169ca0c6b98e245e3a localPackages/Arti/Frameworks/arti.xcframework/Info.plist +551655904834748c9dc36034fdbc9465e7533aef1e4a6514b4fcc75875b93058 localPackages/Arti/Frameworks/arti.xcframework/ios-arm64-simulator/Headers/arti.h +85febff37b751df667a3cab8222de2e1450cefe44b5b62c419adcbce48b9663f localPackages/Arti/Frameworks/arti.xcframework/ios-arm64-simulator/libarti_bitchat.a +551655904834748c9dc36034fdbc9465e7533aef1e4a6514b4fcc75875b93058 localPackages/Arti/Frameworks/arti.xcframework/ios-arm64/Headers/arti.h +fd25ee379d709a794733fc3c052746d1e6f7b25fec23e5f5234008a3434ce879 localPackages/Arti/Frameworks/arti.xcframework/ios-arm64/libarti_bitchat.a +551655904834748c9dc36034fdbc9465e7533aef1e4a6514b4fcc75875b93058 localPackages/Arti/Frameworks/arti.xcframework/macos-arm64/Headers/arti.h +8c426a41dc3eb76cc3e3e22e3356b9d11dbebdf0a0f248c5ac892e1839352c75 localPackages/Arti/Frameworks/arti.xcframework/macos-arm64/libarti_bitchat.a +``` + +## Review Checklist + +- Record `rustc --version`, `cargo --version`, `cbindgen --version`, and `xcodebuild -version` in the PR when refreshing the binary. +- Include the hash output above after any binary change. +- If a rebuild changes only xcframework/library bytes, record the new hashes and app validation evidence in the PR. +- Keep `target/`, `.build/`, and `.swiftpm/` out of source control. +- Do not accept an xcframework-only update without matching source, lockfile, or build-script evidence explaining where it came from. diff --git a/docs/TOR-INTEGRATION.md b/docs/TOR-INTEGRATION.md index 0d714834..165acfe3 100644 --- a/docs/TOR-INTEGRATION.md +++ b/docs/TOR-INTEGRATION.md @@ -2,7 +2,7 @@ Tor-by-default integration (scaffold) Overview - All network traffic is routed via a local Tor SOCKS5 proxy by default, with fail-closed behavior when Tor isn’t ready. There are no user-visible settings. -- This repo now includes a minimal TorManager and TorURLSession to make dropping in an embedded Tor framework straightforward. +- This repo vendors an Arti-backed Swift package under `localPackages/Arti`, including a Rust static-library xcframework linked by SwiftPM. Key pieces - TorManager @@ -12,36 +12,17 @@ Key pieces - Provides a shared URLSession configured with a SOCKS5 proxy when Tor is enforced/ready. - NostrRelayManager and GeoRelayDirectory now use this session and await Tor readiness before starting network activity. -Drop‑in steps -1) Build or obtain a small Tor framework - - Recommended: Tor C (client-only) with static linking and dead-strip. - - Configure Tor with a minimal feature set: - ./configure \ - --enable-static \ - --disable-asciidoc --disable-unittests --disable-manpage \ - --disable-zstd --disable-lzma --enable-zlib \ - --disable-systemd --disable-ptrace --disable-seccomp - CFLAGS="-Os -fdata-sections -ffunction-sections" \ - LDFLAGS="-Wl,-dead_strip" - - Build a tiny OpenSSL/LibreSSL (no engines, strip symbols) or reuse system crypto where permitted on macOS. +Artifact maintenance +- Binary provenance, rebuild steps, and current hashes are documented in `docs/ARTI-BINARY-PROVENANCE.md`. +- The xcframework must include iOS device, iOS simulator, and macOS arm64 slices. +- Any refresh should review the Rust source, `Cargo.lock`, generated header, build script, and new hashes together. -2) Add the framework to Xcode targets - - Drop your xcframework into `Frameworks/`. The project is prewired in `project.yml` to link/embed `Frameworks/tor-nolzma.xcframework` (rename yours to match, or update the path). - - Ensure the binary includes the slices you need (iOS device/simulator and/or macOS). If your xcframework lacks simulator slices, you can still build/run on device or macOS arm64; simulator will fail to link. - - On iOS, it will be embedded and signed automatically. - -3) Wire Tor bootstrap in TorManager.startTor() - - Two paths are already implemented: - - If a module named `Tor` is present (iCepa API), it starts `TORThread` directly. - - Otherwise, it attempts a dynamic load (`dlopen`) of a bundled framework binary named `tor-nolzma.framework/tor-nolzma` (or `Tor.framework/Tor`), resolves `tor_run_main`, and launches Tor on a background thread. - - `TorManager` writes a torrc and then probes `127.0.0.1:39050` until ready. - -4) Verify networking +Verification - On app launch, TorManager.startIfNeeded() is called implicitly by awaitReady(). - NostrRelayManager.connect() awaits readiness, then creates WebSocket tasks via TorURLSession.shared. - GeoRelayDirectory.fetchRemote() awaits readiness, then fetches via TorURLSession.shared. -5) Optional macOS optimization +Optional macOS optimization - Detect a system Tor binary (e.g., /opt/homebrew/bin/tor) and run it as a subprocess to avoid bundling. Keep the embedded fallback for portability. torrc template diff --git a/docs/privacy-assessment.md b/docs/privacy-assessment.md index cba3aa2e..bcb5c178 100644 --- a/docs/privacy-assessment.md +++ b/docs/privacy-assessment.md @@ -4,14 +4,16 @@ BitChat Privacy Assessment Scope - Mesh transport (BLE) behavior and metadata minimization - Nostr-based private message fallback (gift-wrapped, end-to-end encrypted) +- Nostr-backed public geohash channels, presence heartbeats, and location notes +- Optional CoreLocation use for geohash channel discovery - Read receipts and delivery acknowledgments - Logging/telemetry posture and controls Summary -- No accounts, no servers for mesh; Nostr used only for mutual favorites, with end-to-end Noise encryption encapsulated in gift wraps. +- No accounts and no project-operated servers. Mesh traffic is peer-to-peer; Nostr is used for mutual-favorite private fallback and public geohash features. - BLE announces contain only nickname and Noise pubkey. No device name, no plaintext identity beyond what the user broadcasts. - Discovery and flooding incorporate jitter and TTL caps to reduce linkability and propagation radius of encrypted payloads. -- UI and storage remain ephemeral; message content is not persisted to disk. Minimal state (e.g., read-receipt IDs) is stored for UX and is bounded/cleaned. +- UI and storage remain mostly ephemeral; message content is not persisted to disk by default. Minimal local state (e.g., read-receipt IDs, favorites, selected/bookmarked geohashes) is stored for UX and is bounded or user-wipeable. - Logging defaults to conservative levels; debug verbosity is suppressed for release builds. A single env var can raise/lower threshold when needed. BLE Privacy Considerations @@ -35,6 +37,14 @@ Nostr Private Messaging Fallback - Read/delivery acks: Also encapsulated in gift wraps, preserving content secrecy and minimizing metadata. - Relay policy variance: Some relays apply “web-of-trust” policies and may reject events; BitChat tolerates partial delivery and still prefers mesh when available. +Location Channels and Geohash Public Chats +- Location permission: Optional when-in-use CoreLocation access computes local geohash channel options. Exact coordinates are held in memory only and are not included in BitChat or Nostr payloads. +- Local state: Selected channel, teleported geohashes, bookmarks, and bookmark display names are stored in `UserDefaults`; the panic action clears location presence state along with identity/session state. +- Geohash precision: User-selected channels can range from region-level to building-level. Public geohash messages and location notes expose the selected geohash tag to relays and participants. +- Presence minimization: Automatic presence heartbeats are restricted to low-precision region/province/city geohashes and use randomized timing. +- Per-geohash identities: Public geohash Nostr identities are derived from a device seed stored in the keychain, reducing cross-channel linkability compared with a single stable public key. +- Relay metadata: Relays can observe event kind, geohash tag, public key, timestamp, and network metadata. Content in public geohash channels is intentionally public to that channel. + Read Receipts and Delivery Acks - Routing policy: Prefer mesh if Noise session established; otherwise use Nostr when mapping exists. - Throttling: Nostr READ acks are queued and rate-limited (~3/s) to prevent relay rate limits during backlogs. @@ -44,6 +54,9 @@ Data Retention and State - Messages: Ephemeral in-memory only; history is bounded per chat and trimmed. - Read-receipt IDs: Stored in `UserDefaults` for UX continuity; periodically pruned to IDs present in memory. - Favorites: Noise and optional Nostr keys with petnames; can be wiped via panic action. +- Location channels: Exact coordinates are not persisted by BitChat. Selected/bookmarked geohashes, teleport flags, and bookmark display names persist locally until removed, panic-wiped, or the app is deleted. +- Geohash identities: Device seed is stored in the keychain and used to derive per-geohash Nostr identities deterministically. +- Relay persistence: Public geohash events, location notes, and encrypted gift wraps may be retained by relays according to each relay's policy. - Panic: Triple-tap clears keys, sessions, cached state, and disconnects transports. Logging and Telemetry @@ -56,9 +69,11 @@ Residual Risks and Mitigations - RF fingerprinting: BLE presence is observable at the RF layer; mitigated by minimal announce content and platform MAC randomization. - Timing correlation: Announce/relay jitter reduces but does not eliminate timing analysis. Avoids synchronized bursts. - Relay metadata: Nostr relays can see that an account posts gift wraps; content remains end-to-end encrypted. Favor mesh path when in range. +- Geohash inference: Public location-channel tags reveal approximate area. Mitigated by explicit channel selection, low-precision automatic presence, and per-geohash identities. +- Bookmark persistence: Locally stored geohash bookmarks may reveal places of interest on a seized/unlocked device. Mitigated by panic wipe and local-only storage. Recommendations (Next) - Add optional coalesced READ behavior for large backlogs. - Expose a “low-visibility mode” to reduce scanning aggressiveness in sensitive contexts. - Allow user-configurable Nostr relay set with a “private relays only” toggle. - +- Add a user-facing precision warning before posting in block/building-level geohash channels. diff --git a/localPackages/Arti/Frameworks/arti.xcframework/Info.plist b/localPackages/Arti/Frameworks/arti.xcframework/Info.plist index 5e9b24d6..2cfc3283 100644 --- a/localPackages/Arti/Frameworks/arti.xcframework/Info.plist +++ b/localPackages/Arti/Frameworks/arti.xcframework/Info.plist @@ -4,22 +4,6 @@ AvailableLibraries - - BinaryPath - libarti_bitchat.a - HeadersPath - Headers - LibraryIdentifier - macos-arm64 - LibraryPath - libarti_bitchat.a - SupportedArchitectures - - arm64 - - SupportedPlatform - macos - BinaryPath libarti_bitchat.a @@ -54,6 +38,22 @@ SupportedPlatformVariant simulator + + BinaryPath + libarti_bitchat.a + HeadersPath + Headers + LibraryIdentifier + macos-arm64 + LibraryPath + libarti_bitchat.a + SupportedArchitectures + + arm64 + + SupportedPlatform + macos + CFBundlePackageType XFWK diff --git a/localPackages/Arti/Frameworks/arti.xcframework/ios-arm64-simulator/libarti_bitchat.a b/localPackages/Arti/Frameworks/arti.xcframework/ios-arm64-simulator/libarti_bitchat.a index 3b5d71768625c27e6db469b5b068e303ac6cba02..9ab40ec71a2e9d9f877d08a41ebd86ffc66aa8aa 100644 GIT binary patch literal 7279944 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

    @daP?uE2kF1`HE#D`-hZlO zeWV|<|B!PCNl$>^PFkYSuYB4&X~5CSy6OIy(j_AUu>MZbEcUrQn6 z&U+e>jBSr8#!o7S>PR^N}>y*t(U@8LND^ zeI8zFry-j}96fkjnHHH&d|QDQQDd5}MW#6UzQ&wU=S1iGK`k;)@~+gBjZ7QzoWOyq z|28cGk+6Pm)FJ}cD*h{41X_{P1|C}HZPvN3z$m!>5_u$F&iQ9c_W4`dr{lTkXB1qy zES#=I<_cZM-5S?K^yn6B)|O4Oa2r^yEEqZ8wP1EiPriNb=FCS0@Lg%+ru1K(wH+NP zCvg`&Yol&S``B5VYZNZi&-2dOG6a_|e%9vEz$tvYAE7^adFXF0@ej*-w39Q`sGV@m zR;69$Ufm6*{ck>s4qW2o@8aj1_Su~~$3DArDV>_xY3Yl7GjB86kX50__aB*u9-`BW zK2C?WS^K8cqJX?Zq3jU@Hf^XyM^TNwK2&gC`{ZKo>}MG9>yZz4lJ_`vv5Ymop|0dA##O~$bsc-d zSGi-E#a{8DtQBF;<@7HI5)S^k(eAAb{b(uzFOkf)eiXRREb>clCX$Xt6rz1M5>l2_8Y3S=!T z+vSA&i-xRI09qc;D33bvr)1Bb5s03)^I>=MlEg_{st)j8ekWL$yz*Cz^UGgTHq5;7 z8|!|)EVj=*x&1Ylb~W#;SIhfpI&hT_TseJn`r2jpzXm(4X4ZKy7dh4qA1S|tcaW?$ z1{Vawy>o+Mx!Z2O7%-EE_~XurQ>VuKuDA6aHP|Y*bFc02>zVg2!$v~N9Ku$wCG$aG zXTpIN_aBSnJL^iK?lq|-J|}+CxTeP2y0|?#!xf93UQ?4?lotM}`}T!Dn{@la9~a)f zP`m11i(By}ngF)-6TDelTUQcC2Jb=-BjXoZ*K}Ro%E|gWc%M5d*i# z&{NnuVZY2A*FzW7+qkqPZ?_~)f6)l($kp_p@ET`sWxZVXxrMW4Vn&?6>4JBnN9e=G?GN}qi#J*@eVDsK;txFO^31Nv(B>~k z76|fpE$zoMZvjWs55#wZCkwz)@!z!x9Gy`Hj%xT}S`3cr;dm|Sg>@x)CwW8jWD~ZG zBlwco1g1<C+u1-84P z@xbuaW7`vqCG@P@sQtd%SjXN&;JyF!B}O@WQRZ}5-W8cv&J6?LgvgSk?T%#b<*%YZ zqkopIkMPzm_hpI}euNJQDMuc)=QuSS@7h;HKBW`1(_d=oct2F?lCrtE zo`oW-i=R!2+p-TkhV|TEC7*oPy2hbnIA1Q3cQ}U45SV|qLF9j2jc~(aGw(2FHBX50@tR;1Y=+A#x>yAujokxgm8}$ss z!RX&2U!FhLw#?J%IU#*HB)rIN=@EVL8;mAf-a!YrTI|a!q3@FKC+<}#(aDNkT|N9r z;%3X)c^>onm5lJ#^*0z>zI208v+)L_!j;9{TFVYM^re8Qd$EhK$6nd6ob=^t9pZD) zHI-}gw>B&ZZ)q4~Y$R_GnF(K<@1LfPATpEC^q1e*6pf<`h%c%uX?y2^D74Lt(zo`; z+fprV&L7eF`c5oP`A%x7woSJ$ObnodzGX>GVw)b$<1SKL;~lBQT5xp^GLk(Wu>-0^ zR;Yaw{XAo-ecKAVkaL#7hef`5^@@GFW$&AhE__$DcH*b-!g!}Pd>^duzVfKlbA)xN za9cdCjyJ`g&gI;RdU^{j-kMkytVt|#g%i2Z<85h%@=@7Le;SV!$II(VenH;&BIxES zMSG#+q>27^1>-vDXIvR6-c*MkQ^$Z^$69E&)G>#A)De2~23x;t!!+Y+qh9X8#>5Ut z#;9lVc5sF^FUG#hGE&nba1A0$UVNM z&7F3_!Aaql3Fbz(7O0Odu?9=#-5YFvm8p zma-y)OuIsxH$PLmMaoQhMh`nYU%mx?-{5R{3-D7jiL;1?8w|PMBx@?`RS7&wzGH9R z!Cq4{<+t$e+)VCl0t0gISK`D!#gv)w?IFu{PHZ$W^Qlh`<}?2H`^M=r@Bu2!|(9^vIjZYlk49h^q`2hy0b>Tzl=QDE&cYh zCS8TvHMhCycE~$lPCuM>+lQ_a8u1i*ntd&MN7hQ(aK0tfX+!eKpNzTH&WrwMUrXaH zsblHdk6Ya<)!AIjIO{%6KYk5-U(jyxcsuT#`tbNw=s%QC?|f`l*YoGp=ft0~Wz#oY zq67AuBCid+VeR9GVcUjvfo%uQuZKR#9LRg+QfCEcSAm(@Jjdth(~Mp9nYop8)o1t3 zDP+X?@-1(2b<^~`+*7ip?;iS2nV8eheAa3`f09@JoOq}I33S)T7(?ml z%=hI!MhF;m^5jjDv${+7J!h}Gl#kmqLw=`Tv|vT#M$x$oJuYId7EEZGE_a9Cad~@| z0aLs$Y6d4vX)Zz^yKnDR(P-nul(Sw!NAfuP6!?-l^9ub@FS2lAFK1zmV%s>?(p3T< zvbU4_I&F7!i-Kha0MWS~S6LO1U^Xbf;{;%_9WHp0(l1!S4{?LK8fn z;oY7WrO)Va-E}*br*Gf2-JR8}WGU!J_bm7DTXx-yF}XiIy7jR!^ojdOyxCB+YDFsf zx+Z$S`*rT3RoHhs&MKH2p&i=_{890NG%db7>YZcJMByhwJM+c<0XigfLG}T4=$?br zvyA!6MdvKEl{>Nuf1UU{PA`vUF|W(1bH)BZ6o1NWxorEm&v|zzU-zftywRZHzrcG! zOL=WN+~&S@q4c!^U5DIj=(78()|m4v&zN!rU-h&pam!}0hV)JBs+P}^wk%i=P4G11 zG}64(t0}rFb1Zz$;U&qr$amOZ)t=&91iJQlWVZIkRW(8%HQo&CvfslI+L+p;g@0@5 zlZWZA_%D(6rQZL=S_%IXewSAd4}?c39te*Z=6}K`;D3@|c!lDD@EOGe;Tgj`Q1}JB zLh9a3o07kE!-Sf){qFPW_>gr@+Qxp*p~(*HIxytWmlp6;&7X{odgX8TJ=%%0==2nv zNZ)`H=@&xEH~U>$Bn2!vemFvJTYO7o1}Q5v`{}P}(Ql!LjIWY&(0cZK$l7naqW^Rm zaVv;pFW@`5G}ZKa8hmlFC6_NM3pcGyuZfp;;5)>U%|*^qa`~w-#!#ncST3g>B`Y~& zvHLwNKb+-6)EIChf7}nVwbP1TB(o<>c;&NGgOV@t=h_2n1Kcz3K{QCcaPVT5Bn|w?s z_x-?#ex1Ibr;~e5|3sbK`SUXk`}YjBb~T)HU&=YR&wssf%$6g?w~2}D=X-L+!fQJ9 zVK}>R{z6Or=6J>{bCl&Ri>bM5z_$Q*szS`?1L%4x*<-1>YN<2u4O%R;l(RzW zFMTq5q41chKf5eD?d7Zi_YhiS4KgwgwBVDeA|vyFvd?SCF#7k}cU`ctcI*$VyDpb1 zn$tvGKIHy?a-mD*H?W)2a@wWv(m68^VFL^;onKLA={yw-e2u-jy`CP|cENiCrWlvtR5FE^rwO8x(Sems?kEI_7u|K}UW!X(wIIt}B@2rK`NczP# zvD1B`qT$uzJl>P9Xn2jVp71y!{?p#RA=>7ikcu|uq*^*%$ZM9|3jMcem5pDrj}gE7 zN%m~QYg*MhS$Um!;WORnB6_%Y=J1)&G*5HO<2A~Eobo}2Pm~4aT4XX~QGWb0v>(fQ zcQqi#(ob0@v7=QmK!4=B#f}#_st9|FA>;;WU)InA+&#fqb5t2?k0-Dt@yI#o9xZ%! z;LJzcLk^s6;LeSm{*2sP;#=BNu!(Mgb%hQtR%i;kSDY=de+QT=|FoRug8zI_y#=`$y6)&7Dmin@yELbHJ!wwd#p({t<~?y&)^S;* zCx+Wtes(>-H|yTx8>weMeb|1lWt_zxos6VJa8RFMQ-;?TY^KV(|j27mJrTIj6f=+PqJQm%N|y@~YU%uPqz=#M%h4M7_& z)-UOg7yq|n=U4IT81{zk7W-*w=g zlZSqB&TN(O=#LzfemXKo6L%s)oJ%_W_S($2VB@$XI7XOK0n|Q`=psL)+0ElJOPD7SoBnM zZKL5t>dYOlyXP)lqs8%T_Fj4A?Md|HBJ)T-ukZ(r{@^208(&wfkFPKGKFW7C`=GprV$mgg^4#sJ z&BiqD8ehV_)v?$Yj03i?i`Zt#xzcA}$F0UO+cu(uvrFQJdArz@9NTW$l~uq$Lk+w$ zCwBc;KDzRajiH4#j|GfM=B{GBU&**0^eNt%{vEk5X!k1~mjCLmSKW=kXs5vF_Ox&N z&*nkLbKO&`Wqh7_kFI=G?5?kQ6#sXgW?3tNp#<}sl^#e{p&QC3&v93F^BD5{+BK#b z8>Fv!ut9R^+(Vtv%)M*bPg;C4k9~HgCD=c zd)TsOj_fD&rWZYd@Lf6Yk}?&xOf6?fx=rhazZcj%#MxW0-d29QZ7Dki``f3n1+Akl zhgU29d~~uQ=ip~u6h-+Las z?^e~f{~SImNdJGSd-wP#k1Nmn>286Z7B_<=1Oi7w^4Jp0*qQMK+7?5r#9>eQ)Ir_MQbim_m9>Qj&YqRiTV+TY78 z-I`z|fv>y$$6LCz=MlY2iQdyZvmSo4oXc(?J}^2t?nj+}2&U#OY+0#zk*AJ@Qm0vm zC)kgE=1O=a^w+m`UiUz;C%>_`V>Rph<3YY_Je)uuGRVKp!J?sE=wvvfc>n9z2DSG; zj4rE;I+%9l-_NjqmoBat82aA8v&zsjL|sywL?-~Ry&pX5+y})RxIS>xaDez$1JKF9 zrSrO1k+&jHJaq7E&Ta3f0v{dT$^Y8=Nu3W*wmLZ^scaZKSQvfrLmLYoT~Ef^7=_fPc2itp^~25Wb2zP z;NbZ(Ywz~p+@W1%9$e>O80*jE*PVp}*ce<8jC&ukCQ9;$>7!1GoMCj-Hf zH;So85!ZE1Mcp0Ns4u13-<7L>>+kqh`I%zkJB*$sd}47l%LKajXI%14Z@lv5F0H>B zTpLnpPZ)SteDiYrqc1#i);Y#d(&*MCEQ=%2oCpzI>bR(~ubW}&kzn*GaJjl)sKZ_*u`MQ$Bx z;aBLA-8z&}hvA^La_6j%ZiaB%J$YBxGXxBtb1 z=1(f=F?8@H(y7npH(#4c(x1iauU&Eieb{Ek-|N)lZtOwl@V7iO`4ijbk#;=or~R=m z+P9#~eA?H%HHSPJr)AvrUdsIw0c)}P#Kfk^g{HcCn_rCZm;&_|^QQM*&uT*&{OE43 zUyh`o?559uALUVnM~}T2Ag)b854y0P6P)8cj9f3-;W6;9I0bXS|0!tfz>}P>S8ZjF z5%cqoIo4IXf8X$yoordzbgSKMU)t*OiGFahmA+vT`;|b)buVRdc$vPbx@zI{bX1cfoM$Mq46`hZ5*50jNSb`UDOh{OJD+M!{WG}fM}AOzGRF0O#VC6smwRy= zWeX3x;mdQu!{31i#h+3jT z7YE*+O!3z&`QHWpN$Qphmbfu#l(+I0wckq@Vf-lVKa=h{aB$AYf!W*H#rXVcXx_F2 z?d_%>&+~o~JfHIARke})Be-}JT=Y@iGHdQoHD@{Gm{Wy6wfPpxI8cOLmGdBy$Q_Co zpywXu9vd1T0PnZ4E`B^%x^3CT*6}m11XC&6tTJ@9@ZIQ9US_OL^~arXdI|4J^Y8s{ zdXAI6l}pbN{%a4ULq8PNvlkEi=5|j?4NzC+k2ml!NvRGCS0%e^Zb^1y|4eOXE@^=e zyY$=qL`J;36n>4(<+$?8)-o@E4Dt17YH^@++Z?W8>aq+z8>8OBt;#laF*ZABr*jTC zKMg*#=Tddh-WAcI!+bV}`Bd|c1O3%3DC&L!8MK>A<4@%#3#`4vq-zX$<4NOUy*m#u zW*HZyjEVZphs_$K40zw!u&;X) z;ZHvA@xq^S-^p0r6`TX!N*Q;vd*BBzY9CswKZcouUKD=Jn09#AT1{oW0zS96IJI5A zxq)Z-9sU~pZsy)ZUB48VcH^JJKlMK3@=P0^xvgB!O6%|pZQUpv-J`Rf1DB=9rk>Aj zqZJxj2Mo~^<(1^?fX2t5I>CHkBk!$eKG3>aIw%{SUJzI@>`6u%*rdiXr-N^c+$ST_Q3OxB{uD8iMo%{DlJ3V&Y zkG?UpqiZwYw(;##eA~&oX4}la=$bn7%U#oB^L|tUoJPJC@n7X`;I48?f%_PFjh{u_ zmFqpbf*aS}m+|9=XE0Bc^e8TsiHDW%>tp6dWFXG=!S^6=TXxYTXdRjPF7zCa64xq> z>^z6N_{?r}vFfvBU$Bn1G47OZ3-`@IWJt=W+H7~r=SXRqCzp=Q(USWs0wqHWNP8On zi2jTAPTq1oYo7+zKC#sBeV(6^`f2Ou!`)jx|9W>W6n4ki4*G8zJY|UW)jQR$-(HDe zs9)I+_oif=A-=!E|6dbBun3#emjl=gxX#?ee)w~RixpE$`-oM~F!i)I9|1nJL%;6e z`&8fzl3#GN&J%oHJBD+6wVpBU(>J3lsXCWiJxF@h%cSp{5>0hrCpZHwv6rRiKT|iO zyA_35e|_E3zr@o$XJv+7Xugx#Iv z402PR=+nl}HD6zeY%L!t*Ebs6yLNtbUr+xR-$yzKew5$nXDTQ1weDrjFfKlu@*JTo zja~U^*Tb{*&8&%oS`TB_&HrZfd|EHBWo|ge+^qk)*0oukZG4lytOdJqzQ4EXXlOPc zp2=&m*<^7bmywyPU0@0?%3aIkCWoD-QXz!4LnG9K1Ifp&^NC4+i>Nu19r(*c|@$AH` zh2IY|-Z1~uvpjuN8hc{;1irBTzXO~hu!FQlM%>QWQ{5g7TIdrze*Qdg&p}%? zzOJbf`Zl^ItH9b*dC}oI%f_zyyI96f2Q#i-j{Y{W_eM|U=^tGh$Jd;>y&yHv ztNSEG8BZTS1w1B0=osMTcB$1VIfn8^VrQy_F<9xv5D@r6a$it@`heALX# zlPaxFY(P){iaA=oT}HQ@4|AgVI3K3LmD<$qk6-=Qd+gudS8mL znl!NU+ceUih9EF(?90JU*^9$}!}^y#oni$$Uumz%Fc&?2KQy5I5U!E>X(Z{DRk`OKQ11=%(KC_Y2VPI;7FT( zd1WB=Yrjq3BdynOUb|{8VlRbtWO2g!Z;Mr5bN#FOvsW}R8F|Lzm*HFK&mHvVMS(H> zsd7I``D(*^`!e*NZ=WXZuW82y@L<~a&J}@_X`{i3`pfj6_(4DEy*4g)`!2r^L~r`1 z@lXrS(_gnzMfBkm=+EGD@LPdY(T9157N*?_9ezES8vJ@F_0HD|QosKCq?E>75&7lg zF!0Lc_t2K$A0DZLhv(e5aicT_hF4c_98KIG(Pq+&S>L$h#)>w}{uzKK1;gMdpB8Cn zN!X^ItaB#%uesAJe`KDCB#^`Nd5-3tCgf22hgN5j@u~TS7*U-`@WA@t&2Q$Q@qII? zV3e1n!F?b7qq$RMYHc_Xf7HJV!P7r82aWKg_ECPS|E8Ve>!N?AY{QExte~qmiF-cP zBlJJsUcJNn@A72hb0ByI4$tBd@7Xt`^+Eu@1^pjCrj)JR)+w6fG?K6Gr zAJxf?&_G+&mNk3tE=Ks0Rymt?MuD$4}%2~m>wTiZ!LU)$tQlIJjY5YyK7hSfa z9a>jaTb(6DJ!u6x;<(?ZCuzeYlqp!c@^Ny0lgFFJt_eqZsL8|msoC6z&>#4C=oo{C<*Xac zJ~elbc8ShT9^d|hZ3poIY^gh_xFPt6czE#2S2+{WrD^*_`c3ScE}i7o)earXyZwo#eA75Ux3P~8liR&XhOLdWDl zSG)7WNEtPZuc9rtViNw{n}g`er7vxPX2bZZgo(R8aD}yhKsE!; zG#@~pvFwZ3HI37x%N3bhTiQqyIbcN*R10| zdW{-z?5twH6?Poiy`mq+PqpgLQqE6muCmRe|dK3jmxtG|8RMB_${uy@#nnt zfMNn2)pxt)ldoa_y5C|v;M>BP9QeJ>_++LcFyD=VUsvfYmU0+-Y(7VJ?#0E>$}QvE?b@|xdi_*+v79&ZFE+-dvP9eu88h` zcveUGYr^3S>-c(b_}aT34*w1uVz=qM8`^4r&@buQ&pX0 z2RIY7i_$ZGvNXMI_fn_&0qjO|v)E!fBcW?L6YLSM2wZo+Q~YANJ(>85^ljo{+x1;d zQxEl7%Wu<0{&Rxp>gm+$0MP)EjmJYjPB%jvyayB{pidF{7J=sp61OvR&& z!~1Kn*`FaMS}lA$y|a*p=AdOqiaZ#eZ$aa#`u%?p$bH?(z&XXH~Mto$qcL!_4*Dub7?9X-t&W zyKzx_!9~rB_*de;C0q8D-PjqyQ=@s`UCzj>h{^s2yWj}n^nUsE4a&xTQ+yAF@ zqQhKpo*SF2-=#w@29T+f@bNwRcRl_YiOoM9u@A<$KmVxs>ypMeq~8 zoq?YF@PF*%?!vv2{h#zzC3Z>eYj$XR5SV?7JX$lp=RtfC4a|S3jz`WEN>2ix)H!zW zIQUoPncUvf;9Ky;&(FY1g|lw({I|6G1?WkA{kGfJFLc!~7oK6|h?Jsl{`+@dei^rdz1!y3OX-Me+9KV2VBbOtTK+1uDp+PQ!<`iE~)C;o!2 zAC!%~+@XH@Zt@39o^jMntpksNSyp+7}F_iTju^IT<~|A+c?0RG@yX1nuY zzxo82He-JP+N;5Dh_zB@EwsKYJ11LnevaGLe&ENb_bF&2fBj~B4053_zyYIh+^~x@Zr^W(}((Pwg2vmoJ}vk zAI~-|e4DbU_Xy7NbrZQ>Pp=SVOq;a2x48Z2l`{-%1JkD6amr8{m8WN50DE-5M?U=G zFWg3qM&hjlFCTu0elY7;eb3Ktvv!wHbUk^zy%v*+hggcA#cbC3oH5or$vu__=HZdOv{wT0Qc<>V1CG9pt?o9}V;oAx|F>SPibR;jX9M`T8`)+wa@$o!M#n z&FHc$^pLG2T>ujgMp1ADeqtdwL{i82mZlQgI=7^54``b?C^`ndIYjqBb^~ICS7R9`wdv ze6qK8jI)L}ZPl~t-tyCFnw%K#6{U)9Ea#+&}Gup$uJ{aiS zKzq>Xu|K!K+bg}0cqW%lp-gvAz)B~_8ONc5>|kL*);U(uInYqqxnx0}&3;M&{($@o zRgT*6i}}Xc$4+(Lw|RW4D9Fww9xzJcz1Hr{sqjqZvd{t-XQ!*LcVkbt(5|;71`4 z(5=R1tN2<&X=fk#u#uGHIDa-*U64&&x;*84y)fnC_}`&pK>wenECXBhRX$U$>3es7 zG2acX)lgodN_#(bZsYZW=kl_Ae$TfNy@|>j&o`7O>iM0Ph>wh=qfvd{Y{qLTWA$zH zSnc4kgY(J;(V0q~ln%_{c?)=YepeCam=?KyvGTXH7;DDoTjd+QVF&xm-UerO>kDIK z$GBoABfp1J2UGgLnEyB7pQe8Kkt;Kn4XtDE`Le0jary2l4Z6(L@{N(tR6jn7(r2A! zUE9Z{GGDyii}S2!@%y)f0e5{OnZU&F@A#T`CZzUR3(i7(uWFv~{Kn+}+4l`ArL$}g z(subWyFO~|*zk4}Q^?2rI(OXQy9NxU8RFkNq#5t0b}AH0tw2_k{3U!!Rurzn#2L4V zH*S2@Eap7dR}C0~HPbIg?eNYlDC?PxY$!jvzUul^(B1do?fIGIr)@(v93<}$FqBVM z-;|i^wec zl6Uj0G{x@x;hh)yetP4vx@kF6Y71?tn1pnGtr%I#a!8_1sG{$hd%%Nk7Jxw%o^-P z_?7dGSax6yb1ZeyUR4L(-YLZ#CB5pU>i~E?1Pswb{&&g2hL1G*ee9M~?ejYBeLftm zRrOEso+qtz!Ule>w|s>6Y~df@OU(WK@H@W$w5O}oB3=M}mxgBcigwUp%GYiOI_eH! z+rUn8*E(M5w9dEGM(9&*NN^vKLr7x*kN;!*xz2AYL^kr~(()fhQ?utp_m`0_%3Mx4 zdmEu|yVNUJbA;gQT4v3@e_*j<^Op_{?%Q5o8`xUDKIH9R(zyAB?}vMq_|O@~Qg&W+ z|7PlAVl_kyqu4qWuiVp77`WmAb3R49CUh(AH`<%FtgB5v?VY>sZ0;(H_IWXfz4)85 zfmHJC{3cgc7{kN!$CfF_$PK)gEPCgOw`$Hk@s=I1UUh!^xxbaKwauDn5P4c-uok#s z(&fhx6b*!_%QVL1JMh)1i9ZqzjEid=CT55y!{8^|)BI)5(`qFqJ38BT;HHSR@DA-) zJ3dMo($R0=zXLqQd_PE<6`XB$)yF)2*ZEB=+&L`?Eocp3x4t}ft_W+cVE-3$h5j$$ z|Ly)|6KUhk$O-x73LHQ+T#`v#Z~QvFsc zN!#AckV0_;ggXQXPDP}3nK~6oH%kly2XBvFUHZW zCfaVuB%Yw%hiKC}FK)K^FFiAB;cMm+CsNPL>a2%a86W2V=C(q3L(9s_n6-HOGV7s( z8~InIeQch-_aO8v+g@`lntd7E)-ZNBE8~dbY94$T`vz;og=Rd#8?;8P30;>-em=9$ z;6gMnd(He0Tg`K41Tr>sLO*pn4WVr2h7k6c1~+bW%cJZi4wbt)6ySVPZtQ!D+Wm8L?-CCciX$oYN-}zQBo7u;iQOAm!-MV3W8AK+DF2K&#M;<)~ z+Ul|gVqTx#v8uV^kE{o)*!!zCEok!EI-BPH@akq-&0*{_c7SuV4$1e<9>HPaUSCgrFZ;-a>riEcfrGC5;?5e{p}ID< z1~QejFG_47XCJZ?bZ5iGkCmE-=CU^A?*1ojjp|Ff?{Jq-uE{4j z!`O>lTM@8oFSd^An@RsO(6v1S)vSrIB{(;52ah$yf!?yNaJJ>%Sf zjQhvd@mLe>z0QlJH;B!=vbbp5Ky@^GZJ_84)#aG)TVl!?#D*SS5boXuepSvf;3yq2 zsk1eA6jN{TD!Mo0prIj~43%XZ%C(Q*oJsWtkJdbh-SH+bPU9)+&7lz4B>Ppfi>P1m z%U#aHf$YHJ0nUViM{nXhQMJh*M`>u=@O6_cwzgPG1Rn4Lg2Y3P6;%kQL z{sS&#&@Ly`(Y2v$d-?V<>%lFdEnOYF53NTg#mWFSeoh zuj+L*Werlc6I$3apS_mzT{vbbh~Dm6kYc=)gG*1It?_B423k>n z)!Y}&n!eh8C9xZBrX7@H!`rQ5d)xk?{f6d$k48Lxh3u3SE$-m#C6(E>tgf4)JL?*?wn+vy`*RcN;Pp(ea6CnS9!-{FzUCK8-rpF+W3h+J|qS_*lk% z*viNULgQ6F6~ugpZ_V$K{2Yh>IEAvy5}W=b*4}fpcOyJrbVv}#*6QSBYo-m(?c&mHgR~Ey$?PC) zEP@a3Uz_T#q>skacunslm&R-PCmL^j82UcISi)`+o?&mR`|kzWm)y2ZNC%# zR6gTlOXju%b7s*tXAM3^H^KMu%bCx&))_Zs0`e1Uu#SqKF2n9*WUwmiO=fNw4t+AR z<`(NgWF_R6<*8-#TO(zuZGzV%`;$KhZx317@=!FQ?|ppFbzA%A(q?B3V@ACCS^7Q~ zYW{c34}-{d|DbsS95_7dn~?>sZ6}u89bW&3jvub8E^Ap@Rs4mz1;y=kmBnp!RiXMw zC2^Szy$k+);GYBbIm(EKi6dPFUxW4%Rg#e<((aiTv@UH#)^m2ximdq< z@%HHlAmVNzLx{Xc|10{k8o4W z)olzvj!d;F$olgTXU4QHb?3PUZ^@`VH4ie+9{Xr>vUl!A=Z(7}$zyYuq~AJ3JxN=5 z(Vl_ta-JdeR5|HOp{08cE!`1%u}*lhAG|s99e85niC`w#d)LNf@9d4qV|Oh{9-F-+ zU3lxBnrRiY(obEyr(%WmphY}u#arJIdcLmlL@d*I!XnS@^r zZjLx-Cr1o!IH!64iQU24f!z(Y8XtqZudf}{`1$&*+VoRX_qg@m?X78EzKF93zmLDp z_pR(9;!kJp`&ddb25K&;k6<@`a8BV%UFlwLJP}v?xN{%6ozGa=OP*~UjuU4gbHB!j z=hLQg9q72@T&_&#SR-$*KEgV+vA}wjI0-978%JVRMEooZE_8lR%QNkD>8DogQ9RqP z_Om|{Jat@ZWw*vSo8r5~zMVCRc=sQPble<>boW@zFWeo7Y~d`?R$^{;y=ygJ39M&> z!N`l8OYl+=XA>X??1bMW`L1?KZ_^R-_PKWOt)nU!Nf47xI)Yq76}mgmMtoX$0zapb zhuw39ICn^O(SFOC<1;dzCRLit}BSB&gsI!JuUQ?%6S&JY0ei?UpwTnkKdB1 zp|3gbg!4+m#JImc;w+j)U*9m&*KR*>Hs`ZHUXe=QW9H3+OAkKN%2_BLogZv#uM^%n zsP8|mwIa3j{p;v723~~!AGRU`#VeX$pB36TuxMrE^}n|w|G2?w9-tpy{~7?)(*cNt5u!q zf0tYRAG|VM+l*Of`gIudt_D}x_PBY_FT4A{&04kJ*J-$U z&K8d737i{(*@2sak`cz1<&Wv{-<4mNSy%e+WAgew31hzfRUTfw{I=pn2-j{peXGp# zNATeqUx<-3CcVK^-!zZ5MH9+nzU%pdyvfX8TEoGc(u|SuaGPd(aL0e|EA+l=K2jOu z|La@6&Q*KPn;7>ynd^;DfYO|$?M4r4>=?Eciy#w!TSeqT%4*5;e8_ge7f2j z&m(ph;HWP7X$6~aE=`zpig!5CnT7{FJU`chu333HE`@)gBdKY1mL$=0Z?E$D&^}~j z15>^i(<2v}L`=gO#ErNJ--Maie>hWSQ!zSx&sQihP5b)2J^rRnYoh^t>c=2XU}6T2%IguqN(lB>H*>p9^(7@U4<$8CgkDE*nd=IrLIz0thLg_ zcucpq*Y&l3fmo2@rC+S;3D&=fzWVqO`uQ8{w{@+lwT`EOv1WmFJb-+nH4XbaB7@63 zUFhJkXk-!nKBRBo4@8O@@cUb=IqLiF9*Xt5h{?0aJGY~+p*~{bRqQxXz9e~rCu=1y zyDr69P@^*10^%Jvc>iq9Wk>d7edP61935$&k0YD)X@Yj1-?WN;T1kI>oPN8NSckWy zz)gwpBR`V-y{#H6`mU?Rj|Z1$!;${oWb?p3UAIQy=NQ1ygg6?g`Zc+>e&y?;T|P4BvO*@uT#w zh2~^-gn}buS~e*ICmG7@lV0fnX%4i{S#lsWH*+9VzQm;0m~yJA;{vVMJ$sz;awtGH z2c6i^ZEkmAO8OK7)7;0?$?$z1orpK(_nFcM{4+{M^LqQl>}b^0eb&=Y;%npcDZOaa z(1J~W|4Te|A{b4;H!#NY@bNTl>S*p}J~r=$zVqv0_7j^lx~oiLRla$d-^c2Q)bv~y|26EXD8-*l zW3$z7dn5HD7ISuQdvWI5p^_y#szWY~%O;+Ncb>Y*%ATa2EzpPBu?0LjuiTP?m$ z*?e_sFK1;u@8e2oeuREO@C+>7`+%W;=3D-pFFS}Af6JTClx`xNXx*cKiG}bZzdQrS z*j3`xPxvyjLq7e~`}7ZtF@AKSckvRzcHtwJB!O?ngn?!Hfiy<$V(<6Z*vkfn?xt>f z-r>j0;Z8SrbgR4JP2=f5QRT%DRvP2CG@gI2Va`58o0KL$|3oljJ{_7iNER7?wzA-u zD<7V|N#<$q_vZNyaBR|@H!-LufM@78hCaZ=LCTjy-va|&nz#e*-sh-S4(%C<)nss? zJ_~;_npwv9u4inH$4!3yO`9nXU&i;g8{4C+b5MOe|LE=I&N3@v>UUxabNM%$fM0L#fAr-t-+Jie52cBapJEp{9-I`|=BX|I`J(-*JKOAHTr&nhSg{xxjbf zMRl5}4f-cvBi+ZhL*EovXYmF8gX0V4Tj>8241*UvUvhywvSnSU4nfAl`~BB`efdIO zD8G@jCTgGZ7aj-gHE8xQLP)eC-c z`i>yHel+&Isr#$M6vo%#>4$?>=a1m!FL2&~{-O9js(tLwGe_y&@RR&;^M3Wwzg^>b z>HF1VaMMUVC~)r!ZC*Xxx{R*_a{u@kFcZ~9-`)?;6UUc;|K#yk!B`mPd^U8I`TcM| zv}a;uD9w$$kMA4B;`oD^R;TGB=+TX(;P@{iE&__{vGK49uPg|hC4 zpDFD-l*Jm81UnyoW#!mdjQlGZ&l6?aTIAEE zsjK0O2Cktw^lv?Fl8GqC@Yn!zxeNCK^_!^w^JQeg3ivuWJtsJG#AYwCp_TWf4SVG) zZJhI|tb)Lvipq)8YfWO`+7PkLnODd&(ho}Rimwg1;oO2Nyl}$I#vLn0r zmu@Ivt>@KK=>x9K%6e|TKgY&tPt#%VznhkQ)A=zal&8;^vx(p2&da8)^o#p$;zf*a zyE)I$t?x?qAvA<(|HwMWtRtS&dVZpq5V?j@&ku0-jLw?Bxjv%(ysFO_yyW@(ZT?O{ zdSIl!6*JYDZr{=}7!xgdY z+3HyK^kuPZb`icESMcvj{STy^#oQN#Qv=s=U#4%tl+(Z+U0X*uQPufy zL!3i-vZpOIa0~jUwd7y)k<<`p(wwUbrA}=qNS(c#*xG9gQ^I$qJ=mG8nw+wZ$*<1S zJ)WyVC;BY$Zgdx3xc8Ax&zT=g>CF9LO625a*spFNHV!zmE1|PLncUp8Ycl?Eo_#k? zJc_23qyFQZ*W45Td)5e~U&}wia)uiAvj)HBjE|?Y;OP{2It`vO;Aqw?j`790(L zqd{=wfFtL!LfXZB(d3jPT(JfRXi2uv%AUS|a_a0Ig{hMd+o|DSHKfjghs1ZT9~p0n zZ(mPbmihRMa+U(VL)yQr_9PgOTF6 z>VK*}#oD)IHs{aj3;^f14f}TxTSmIvUFdOlxAoTjW!v}a{$tyJt{b3^gVgV9ZQrl^ z<=3%kg$nlXINVyd^Ke_;uEXthyAOY%?k^92vF<+}ezGogxG>Wbvoq0wMNIneP(40$n}PHAo1R|6rT4Z`dOr=lCs(pJ2fcGEV>tnR*ddGa67hedkIwqE ze1<;C&_~1ckwYK3{R1rz&__e`k>mCe{iA*&UY*xZ;Z&TmR3BX`BaSY;kuxFnzJTZT zzgd-f^k=J68wYPoC4PB3@!###`kp&d_wTwhHRSg9C zv^p!PtJ>8EE(BN4x{LRoLZ&?pjVCyZTz#Fc_R zk4ew(>FD*YI6Q{_-Ty1R{|lG{X2Ku-7&-fK=Cqx}=F6w8Qu4)_iug8{UF}^rj^mGfh9P{@Td6={x3t?E3Gz!X7q?wU&J2JeS0AF!rEY} zYhft$^5q4oFaOD;)K_AYQ*F}=Q(KnX?)YyFhEs{ZEr92i!gDTTw${5jN}6XC~6e{W)%e3}z?YEC>{;LdSIZzMh@80K9tH5LtAbAJ!~5^Vf8arYDn07nWb1bS2~UVAR32f#pKMqxt(iR5$5*bT|7Z z^6RDV@&`QVx7U>cs=T_mGJyY_AZ}8lkpYMSW$Ko%7cqNq-TA(t{$HN&fur&hAA*+Q zMeB>|BO9uU@u_WDns^|X-P~3jS^s1)_8N4%)FXcmulMJCoj2p2shJl~s;SMZznkyy z*nAZqCnl9o6C-oK-^TaM{o~qf<`tL6O%@LBNKt>u3u9<-!g;@U@=>+*Of^1Y@s%TI z%8r~vy1ik^7#V=`hK%2T;%l+gV}sF%bO?{#yD}1w#j*?FcY^1hJ-R)##9lU2KKI%1 znwg!o-0c$|%7h=T$jmOZA`3~oq2F@jc5Mh++0C3?x4tUKo=k8Yn;Cg*`OL^^=FBu# zQ*abtS@t3=TV);J3BEdf{;D#iZ^^&|hI?a?9m_&T5Bck+IC=Fy(eLWDU3t-+Zy&On zjqY^WEuM^0&UpuFhgFEpkN9SGG4ljI4hF~aIT9ZMxh2}el3=_@R>@4pKX_d*k}O{J znlmf#nsfNZ*T}bDu=>EQ%8%a&T<)?Rq%X5NcTz{aA7P!*aj%tn3H^B2S}W3WFE%ay z>)-R7tLDvJvm&`(jqefu@?4zuH?8&BMvNg3PrF9(r2Ga~O{CRa^eT4md>l31;FV+K z%6;Q}0)R1whQ^Q4s86#K@i7~E(ipDy(ztwJeEx&{8Ef zNA%YBt%u8FKZWgoqIE}`*LQB6{O81m*eK805FDwKXz72de&73O1X;*E=eJe3I_UPP z#_xM@=GHa-uc+(2d3C+_-(J^zynA(7?)q?4G7i+&E!1ClGk*s&}5hI=HoHf8^V4t4L^hF#DooXYK|%SUerB*I{ZB=vb_kOIqYw$ z%Z`v|7vB~7|9&-)2&;B>8rR=4E!Z&s(B&I|~1F zPka`!`a4_e_CEWeC7hT2T6kyhwZsEa{Nz5gu`A`tVN0A&8)wiD zoMRa(aN}7hPZRjLT#$rh{LZbO&j-N%uOk ztI}OeI-M;dTWbk?@mAi$l^$IA@ik4-83uu#7Jr^m9n$R{57hrd(1Ol0NVeaTk?)7b z(~fG7F7}2#k$K^>S7#JA=GFH38J!)K54)bc?+e@YTlwIyRX4Q(JePc%`siJINMC*T zb8j8se77CGtf23@&LFEPc8S`rJ;Cpn_n`QMpD#bJ`Sz{1Hl@DZ{)x;f`~ZFoo{ewG ztFb`mkBQy!g0B+}6&d}|t@Q6L^z+Twj6GVmr(&Vyz0(H?%4PCYVHXA zwC*71%_c*4Wr!J(Rho2R129^F*9IKR(;eOs*o{Xh*rju|W99LMJ7sh@P(UNG$>`5MGfBTv;FD~IQ_GG2chUUGYJqc?< z^W9i?^YMeycNdm;260lvukWF}KJurbyJaOFjJ`I{KUKbgiUIg*?#iz?3iZG> zc-sNqc7nIm2f&;1=sLe?r8`g6#IYGLU&q0*KQ>G9eYz%^$C^lMyMv6ec-6^ zp-KCGYOR>xVeY0@dpJg=9HL};emUKEpstr8ZjP)A!=;%D4{5G$#0z*}dz0KTX-0h8P zGvSTvxT-St#_Ejmp|dH^_VxVG|I;zI?2yY36lZ)bWmHbJw&lZCTXbCzPrfdG1WyY- zAfEhuX6@n7?(moEmn_3iHb5KXAHd$!&f0$tbYc^Ku$D8@SnEZ!ZY}x+=W6q9#mp_` zx(|i|3#V*hKT9bw0Rq-TftlO8G`6GUQCsr$2gXN3vR&D&(NyW3^{F}Zna+BwWG>Fa zV;uIYEB?ak%m>oX9R@G2Lz_0|S_&6wpJ!U|OugHpd+MF$jMyal>o9&w;$PZ-RnNBt z$cUBH2b`BEkFncEC!pQ`+4*toyyx%3@3q}|w1&0H5ntC+U!whB#Xa`+6&GBC>#Xp{ z*Ty2)Bukotv8>UlJT^I&eSG0bP7xy-*a?4gtXekXYCAfJscQ~w^PybLW?PzpCp!=U2svll)ljX_Ma{TUUoN0@Qs0{J^4){ng$)n)J`ka;`%b z2cN2wJ9kijVt~4JG;1EoLocqiQZL8QHJ~HuQyS7gzuea~#4bYDVCU-^MsxtA8+n#q zb3$6iH&F0gof2zXL(e;*=Vt66iK^=(j~=EU{XQ6PbKCd;V-oyqgtnE==p#2iU}cqm zb5%jarKd{^ScgN)51~71qunuVEa-1l_QwCjw_Qb%v*=#ZTuuDz_vNV!HkXP#{ZWli z)1RiyEWBfQ9r~lULr0BnL~sQ&aq0E0&O6@b+3?&t%nG7I^2)40hom(`;_yc!tUVuW z;@n1+y@2(S@@wC$)}(2^pQ4=8lyhpUmHl>T?vj1eqx*BLWp!?Fsx2D%yQ)|%`-E$g ze-dr3!M>CFY&6nyO|x+8qL*bqcfubJqVa3H-gMU`-r0reEiY2ao zi8iR*KjuBLm9m*nql{yH8^KHeC|*oE4St$PE1G=`I($F8e24!wyfVynUBKH%tTM{} zJ^Q|@qqSk;(#<oW9unMcnq{{PF=NdB3s4tN~^ug)`87Fkm3d6!PN{5Jc~ijJuQO;iFJ#{VZH@2xv($~m z?)dDR@KS7}`E^i#HP8nu9<{C!-3-3S`Otyz!hspYq-O7I;#znoV3M+t zq~;vyx$~`A=usa`vo1?4$9EbS*s&fGe=mioq_1R&3$&Rjy*w=b)|ZU({!tS?djN$IjVZpFQ<#J^O6txogeW zkkd?l)lYTN`zhMCfpMUFANVx=sPUCgTlsWV2@M!nx{I#*sE0|fypZzsbk&FqYJXaCY0!;%bYzD0 z>L%uSf4|;yYMbyw9Kih!wyzHH)2A+qY=p05uw#ohSTB@lOd7l?Pk^z#Kym}m$hYpA zqR;0AY5Gt04CM_>u~y&d!%AZ#zXDjwqkm`U<2&f%bM$SN{yIfJtG^Y)Uj5Sj)YyJj zK3$>{?e915f@S+{K8KD<>j;~6>;LQbXZFc=Qug^q+EzsQ`loLR5xP@`(rP><-0y(zl8q2Hm?wnn0K!pQ>y)bWtQ;xO`8%xV5f{I14$(My3oJp-x%o#bJ!7?!w_|`cKaewl(XE zfjzE25qo)GBCT}grXRD=UJdO|JTy77aqyy4^H-2J+mJU&<%BHyiE`(tzz1=csMOZfjq*CtP#HpwE)4Zs=r18eUNX3QKWd zR}4212jIiV1#Vlgxg>UR?m99=;?nX|{K>{W@h7M4iQf$EJl3)_O&=|wj&5Df65CRB zp&fcJyUQD^iJLR~9&Iah>0jR;f7g>q0+S?{%;*fl`%Hc_UIeGIp81|~=dkwH|C*0_ z@x;oAzgU_MrHU_s7Oy9!nom3NT_5t!S^%c@wz=mls7@aT?+cNq*A;Z8x%&7oc*fS` z`~_{tMzWK&roLz30gd#Hctizq$Br2F*ihKH{y#M|58M-KW=*-@c_pwvad>iP{K=0& zpOZT)Cs})}&O>#T*n`w2!BO3_&!W=>R&A&@Q@cE~FUvk|Gq#mRYXP@R>X~lv_A84v z;_w)Q3zv5s3y<)Q9aSE_Ydl%-xeVo*GG!xs6gg4veY91u<@cqvbd%%}=y|=*Ujob* z`mgtW#LL;m8pEaWNl|ai<+Uku-_(fnO8x#CY+TMg?5|%oxjBEF<<25M-V=0rv9l@M zocnIU{(iJiQxVWJhGzKLMIN)USf?P$B5RPhN+SM>8op9e&q8} z=WkV4|&c$`SzEAkJBXPrJRIT(pyU?X16^ILG|!_KgptaZ1a|a^eh^ z5@&eLeSvQt1D{6r)IVF_L-s4LUh{lc@=g5xsy~#mL#PkW4tt7VXfYWy<^APQJ6}Xq7Jpx0lmmodUvSHKJs)>$0X^c z2U<|+m8EYEb^9NAb9%mQAP%paO_}d2bI?aB=T2ZrZaD*Q*8A1K6yMUbE(c!L=+FBZ z)`4b>L3?kmfM+Vr!t>4%^x4OW*MUAV&zCoEEp~=JcfL}eskn_f89pe##nKtE%&7`% zuOl70-~KJrtgFY+iO&O7PSV%+I7QY~jWZaFl8^m!#s7@&zCACI|M7bpQ)&2L zQ_Rz&JG%AuYLHNNhVr=OjJp1 z!~xc3Io5$W_~;;Ow4u$c)i&{tJY+*Bjelf!=NN~%oRuA#f^0K`i~LS8>B~qr4;i+C zHNSWWb#7rC+1NJp?8dQEt2ObQ{OZvNoQ{4Fnw#qx7Wb_EOMH7oW?0Ns4 zBf)4ha^r*Y&v!ydV@004dt@^4*b1#?^(Xcv;r_YQl+3;@jIZ^KtuTG4vXk(_OSrfA z^U4v@yLwV!wfelEWw|#lRG!)zhiA0llfEPLAL`?~}8{H2&;cN|cicf~FfFnOqlWu5IX5adSfz%4pYkY`*Yt7uj{Sd|E7Jfnj<fc{-uNeSmy*k zL5$0}$Zs#zrCGB(_rv?{gRlJDI@-^fC&J4xx^0!uc~&lNbuQi+wnyM85|>!%S9ve@GMReLBv zT?eXTDVw#G8&{J4Fm*Y3ODvUO3s_-*Yuvt6c zyeu$p>y{0VpA-CPhXT)h8lCT8yOomsuk-)p%X=y`ttS~c_%nOv!Jj$P8@JiyvCmKG z&alpWj`N~gssiXxJX%W=?;?r+)U-h9)|2ku7r_v$`8|W}oWsab%Y z0b4=M0xSFCVb52q16j8s5IBCef|zX3#+J5EW|oB;ht`TteA#BCU*N%Re-sc8sc`Zh z^}{LpVaHc)$TY>gevr;V`fS;D!^!`gI{EwNw>qYK{V)~U(O8-nDB4=Pev{h|)9Hts z=?B?OGW^rI%O^O4?+AUM_S>Yj&rj{XDqwHZ8J#V$z|m}|2>Hb81LWq#3Ho4qpqM_G zP3%>jpEsvxkp9%(5%qz}oqpcygBs#e-d&BoBvigl`hT_i*?e3~3LNi!4<0<7S(^PK z=Qn*4{`3j>)IIR4yWv}R5l87x_SW3-Y518NTgC0ytD{-L{=_6~1?wa;|JS79R`&a}RrnlmN!y?_PMC{6I?Z&*6OU<1u*4qwtx{%%N@gQz~!MY;f+| zVjr1px$B;aK*`Vmbu;B@AMD9n>gmhgB;W9P8ug{EW&SDx=Qo}!>aGnGZL7kMNNFbW zsWtEp0^9S+y&kv?#M%i+hAD9_t7q?)uN$Rq`SW1@+3&aEH`D!H~OXx3|| z$>U6k?mxYTJ$Rgru?GLaYVzj)&Hnu-T z&!J%-+0(BE<>xgTXGwk&0m|z4>DK&{oT&36((U}GEc0LRjlXM}IC7>AkNvzL)kLh& zNBb$yKPzVZe)%{$7c+jy=gRH$uj_k;{QvY9u;1(=u6bZI23N`0ws`(TD)Z6l4NG#H zt<+;rMk9ClV|5PpR_V~9jHdwh)Bir}`SQe8tFyfHS!5D#T*|K6P`te>Sj<_n*io;a z6B}*?f3m5j@sSd}34RMcHLgAm`Na5!jprTcr`>%`@(+i9yW>8svo)A66kk7%9A>`9 zvEzkHkXf+9uBSYmZOHnh#ICeD!_&gsBnuTGZ#ELwc}0Nu>X%xnXOX83zE~3@TLwRU z`i>B^&pA<>JY0xxTzzL0n?&^dRa2u`_8{*~GavNg2QJ@awMAD?u;`8TJ(gD{^|Q8A zULLmY{l99NuX-4F3C3WOGe{r(8gcuWQ#b4irXKl_%Kr%EUC&r+U`~jA8d&(OM^lo$ zq^qnUeo)wgAKBg+;5w5{{Hqq(O8my=T(NXXpcDC>b5Yi0lD?0mp(VkT-~3MSon+qDd*igg8^x^^_#%3H0Q60l z{N;sXgIDw2+zk!n`vmdtJ+Y7iR&)>b++$zTkh-$Z?!k_Ut+V(C&J4+t9)EK#^Zbwp zuc%KoA_uJJ>;zMedk=(vaNghFo?l)g?U-ooVe0Jqy<+#0{1nQzcilhpOI`QltMCr8V(rYWU7PW1 zY{#!Lc+tyU?wFxY@`p?@_Z=dQ;8rqr#5eW-Abtv>^Ag6W#-PDtu6JyFM&)BohL12~ z3HsH0#eD0bmf*8pW*(b}7ic~8qp#F2Ie>qW_#k6%W&XO;v{UP!EwpVbZM*-M$oeDg zd%pa?et@?1`E9e#7ha?JLT%eg+qC{k052J|7g_;pmTBJ<@c-wmwZzL8a^FtBXzh|< z-I8zrUc>i3zJtSTEq3u*`l}YZ*)sS+5?gemi?@z)^}Cyvv6Vk&@Bw+zhVR)AUc9Q7 zv@5I~4^{rb5qQ?2r1FTbr0HWrH#MZONC_-b`P3eb-1g zkKF@NV?`sPD|o()wPIshr6AZ zzJqthcuA7G%R|Wz{~Fn=md~eEw~{Ef$Rz9c^PJTHjf9EW124?lr#}By%Z5Zo`i%g1 zePnt)dm8c40j}yw{Ez)DZFY|*1C;dC``=qw9~!=#UzYON6YaC}$DH_{<^&gZEN^cw zF}Mvpv!BzGyZrbt?TSr13m#kyFD{|KO3@`u>U8(~UjP1kepQyP%`xI;Gq$v+GJj8R zAMMuvc?Q4Wr|Ga)N2NFUb(j95kN^ZT zP+nI@*B*lRPobStX(xN*8oYH;O`0)=4qR*W0Q@b!E0$6nn%FZFmu?xJ`wyD4S{C|Sw*12Ew^|ANVd3^szeHfAn zlvkJO+x)bmOPe-1ew*s)hd6snl-BHVH}bIba|VXF=fhGN|J%~t+W#}?E`OdKLw8pF z2;KEzXOCAkq~=2(kKY|7UIqHe5c}q#yFi$IK@C1V!5`EouNP$YC0Hkz?+Mm$W!O+Q zicaBKfp@>)@|iR~GRQ(p%YGV4%^6Rt#AFGh8{|A4m!4SLjGif0?N=g!-qu=v{VmsRDEc`^|h|kxULsaJx9{<8;S7l%N{Hknj*7W9< z@4UWL`0Z$0<&Gca&%a*gdpZ>8-09D|T5qPGnzYA_S&sjgdq&Yc(^J`XGg7(20`$`C zQ$WTH{*%`?9g`a(7m`alzIJ13D`);FhWWN&C~}kTF)O=$CAPE=N%!=nx~)Ya&V~(T zx6BGtwla>4d}ZcZwJGkm$)+uOHgm1H=krW={x0C`NBk}68#g{c znsMv|tgGYw9!|~P4#}`_zi(U_(0@+Q2aVuUc-RaLnmY0Ro_)sA56GYGr*Df?%;k(m zWF*z`LiDdPjZ7|j(Yxq2zRNoo+O22oa<`B4Pgml}+dLb!pJwxurIEx||C>*Po41xm z+_Yc0&83z6HeC>pm3KyJ#>vf^TjH@fZuwqayywKFcY1YbD|7#CzI4ur>}<+1efpmM zirzhOIcv*D%kiHR%kTEvI@c>_dHH+Fp`F+(J=<-)*FPm%XN@n{ih6a8ul4S#r*IVS zpFL*Y%+II)(GS??E-mi3>pih58kwgJ&f|x@cDT6opA%oZD`Mvg(OHki_Q>C(s5Y5( zV}9M-^8P=-Wquj|Qu}S%%h{|xMp__M_S3;uoh2z6j@IAY!@!|lhQ z=VSH=`|n56yRxO1-p%i?i5@}r97%)!fr06!(YxsJf%m5uXuX~YU(?>w8pG~ zFPr)loy%RcD9^Vf-sa8Yo~~tVeG=5C;$nP@nUm!U7}cD^9;&`DeBA1jq5wwz1PTvu!D77ABE_&a&Gak&Fm#VyH z!$Zy7W7=T1aK4-T3RH)<+rRD{VRyvb?~<|d>+81j53ynXiHHBqZNZ4q32lCoXO~t- zbp+yn`FhcOUiN-`?m~ISu7gMIEy7tYRCIJWbZKV|GDclNv@`oJ#8I^?ci>w#X+N>l z+;JOV9k9UiXk73VH$(Tv>dPZGZI<1^{zJ=6dk`AcKXWB|V%buB4IcYzU}^1qjW;$+ ze;Q0x{KAUFza7M<#&Y*!B)${O%1`p~!++G7IQ;3z|I69i$5&Nd3IFHb8!|$<3H+w!!Z1!n zCAV}+LPm|!X+OwR+WLFyxk*RQO#}op^!fd9KKq<~_UqbfueJ8t zYp=ZldBvG?+r$TMirwtyUALLjIinbSvm76w<)*B)rOv_3dri))CT%N6j{sk9&`d5@ z$FJqRW@7xk=1}gvraARqb0F_te6!wb#;4zF_RhT5?7QJ!^X#m9&Hg#}n#MdH?x!*4 z6HX_rAbiyuF%}WN;)@u!6VA-S7c1d%iNi1EeS{BMa5&ES*rA!!ISW5*)ZM=lzp?xq zV(=MD@kix@8M> z&q1!=h%C4n|FVyL+a1~P9sJtTF0mJ=o|ZrsUZ>$_QhZ(m}zu%DrCU1FmDRcF0a8>v&%ICIFlqqyw4aDKs4C0ZKi zZVG;gKbs?^vCJc-!ChNRs&+M%6nB)>RL^$Rhm7XG=!-C{8IYCeTkArp7pFJzYPDywnWmzWlj}b?|1U(qp@?F zhMoUqbHGlo)<=9w=tVGf)y%+fJ@y?Vp0&mc+{?0UWS_X4g9+!Lj&*71sdo|@_!s*9k#>Vf_!syGM z{R!bqvNwr6OAGtE4m|Uo#}?pqZAJaM;9MskXH1V`Z~KNT)7mGKc!T+7G>%kvSHtaA z$an@Dwv|YHs3B9?W+)nger@CG+arob?6YWuoK5#~Zp&Clc$X_;PG1x;9>gvr-yNCo z*XZ2xH8Zc>(p(UsL0sVEpsOT%-@_;QRn|p}!H^ zIG$L_*i|hHT!N=P&@br|`^)M~y^#^Xk7SOrJC=CoEWZJM%N@)H_%6N=jAsa;1^v%0 zF$Z5*Vh+8$#2nbU#EkD=VxD`2e|veL4aTd4&60t_?&Y&YzuAJ zN?SW9N5UBJEzok3bJ$?)5{#7z?({>$Ctl8l>N zU+%a`i>C6+^)KOL6uK#VuU&MP8QV)kzbwZW^F*`iAB7ix_P*p-bLdX)0+uX$z)1Fy zP^wvXhXad2_~Q`#alqz}=VmgG;g1SWXAugX!Y32($zFKmdEt-38wF2qClovt-Uyzi z11G2LVwWgwai!Thbeq2G6+bAAE&2iabU71j|EmCJ!CU<|TT5fdwgL}}7wCn2Pv2VV z$PI$8Q@O{omUEne?a-Jthqdb5EtpXEH|2;e$1tQYcc`a7i>=hAAP7-4SOHo{#0^ayj~4*CC8?&s|) zg08G8HgEZxU6i`UgszmzL;NJ7;n z+IPNZURdXeK_4Z40G~OIev$q7(=z{pHXYQDWkfJN zW%#u}X-m)Zy`{4x9OS;uAa`#Dxq~y<*ia(n#XRV>ZTuYGJI2f#)=rAVJ*8Z z%EQi?9LbmZWHa}s^laWSIXAGwJ-krayEyY#(n%R|rpxWM+AVS2$ag)qY?C0AvDmcR zg+07ArUmUK3MSHi{f4GeeP&bX0V!t{@63(<-4FT`#}=60v5f87TNDp(#`egmx5_@- z7Q;uG_rr~L^;bzRl}vf52$GDyn%VZ0`pC<&-D={*z7D z-WaEa#b4S0^hICQRT^V1#tuADsvmqpjk(!(znM67zp7jEHG;zu_IEBYPrb9i96GYV zG=8(dJPi!=;|t7BKU`p*_-KK7vS)$$*(VFkfxZQ1{L})o_wxm2Y;b{zANu$E&M!cY z$?dDBjWJJFr1u?PUp`u{ooAEf{1>HjeO_l!2pjM1Dg z8*RqMj5g1XA8nrc2$+4Cg+lh4>YEB%SS99XP9p;J5G3JT!E2AgJtc+@% z>>YP-)}#~Po*mGD&pS(8pZ|Lac5^kc)A-dq-B_Ycg}*j#E!F6&P9HVKSf`H~W31Ch zjWO2g|SZj-));9GX)ix#Pblq$P*FnZo z!57#HtsW};wqJY{rNX|1G6nVmclM~2+%RPVHk!a@DQOeTf%6sL_7BnLpFrEBycYa! zb$`{GCxZub%*3G_bCCao4YR}SU*i|xny^}<#m0u`6^nmgT+OG-!iS&;{s|LOsFhzbgId|aDHC1+%W$U*NTcMLT*kkFx^l~fy7k}Ke|C@}@Am;)?(uSKzoM#(`;^VtjJA|((PrxJw`DYEY*l}OtAwHl8F@`0(u+J0_uwze z7f@>(Y_;*FY{}~?{e0xMb?}8b$Z+#gWVjpnp2fEIqUrq=3^g>u;hwA5Q00QKN5;u(M>3F#m9sqSM(C1s|cM$ zemlcEYs%07;ZnkLgi5X;Wc?g+reGxK4FU-Uma8@)-HvT3W=k}3b&Yu1kTnO<~1vghfX znc7(~%`f^OX=@cSf+J5lx}KOVPqy0fWE1<+UEtyZXoBRCr}c?SB}aPaTjhw{*jk=e z&YhTWI^&62mW8MosoY>F(K8*FLS={e4GhjYLKTpjgJgh~2^ha0ZCx389 zw)J`0@AEmq}=hd~$uVvQ!l6aMl^~sc!IjigSj@Y@(91iy{*lgz}h{IBF(%VhKfJn#i0bFw)!X0oZj z@^)!#@7tx_ufEOvTVK-)ZC-*NuF^HSru(_4N@LGFRjO})s`Q&9M%Q$Wn;ec;++q4$ z8uG~lQDfCj(N$$v`8D{8>xeC5+4?cJ{q3yNjLeB<|CotMeXp!*1DxsTroM9Mn*$dG znUIy`!U~y#pO+$6>;!OZ4~oKK%^g z;gZiNb8G|qZf71ZIXV7L^JL#xQ_py(RDT4TS^rLn*02>B1KF~ni4fVc;YmVdOLT81 zHWozVTMDAGZuXti{3E~b@*Dfdn%UDdf9S&BAM<`)Li{oWRi2_f54VWVkt67qA$lhe<}yOl|0jvvPenGM8A|N?JK)n4zY2gS#%!olm1-J zOR%?UtQ@P_Q4p9O{uAXrUgu`*JrV!lmcCf=+&Zr%$JlEri_eb?Tl{!rxU4fp<_XM9 z;!8U=5vjDn(K$&QH-aN_r`1gOCErTl>*&JEY*_^uKKoDXw+OGd);`wy{VZ+MfnRL? zoyY{X9OBky$2^N8#!RORIq{>kM?h9>ivDc<~oJ($^E#6s8Q)K^S*Fw%k z?_G*+lZW+?(>5oRHKo&@BJAx;{x`BZ@Ovy*yLsoZ>!B9T{7Tx~YqX=YDYuQf2k4jM zD`yZIzn?e2av65J?sf;?eB|^dfh&Q=3O;uoHsA9-&Y&l;m0p%*MA3(73FJh z49}Wi4$PTg(b8RB&W29dBX_VF^Cp<)eBzN0jEV{7`9%}V+PwSE1oNzR^?*BT>WVGd z2sq0gZvp?#y#lPI--4_4mYk@+{9b8n=X<4k-?q}&scohDZr(rNRyuU-9&_OMJ?7wt z_n78K_dwfufYtd=?lJX2@|-8#Gvs-WJj1-du&s0_I_PHc*@Qf8zB0yYANq&$uOeSR zN1kU$_Yr!s50SxM;Js&S>A53g%>Lhu0T;%ggC@^@+AC+{ry@TdT55WyqUS%jRE<&d z6z%o-S81o$Orf83BQ4rYoSZG|n9Mn0o5lxuFXQn}Vh{Qn_O&Om|MXYZd%e8pqpyd@ zc?&E&t9lx#h9cPO2^)vad%5!O%W#{s9X#@Ip_Hj>lOhnGzwj^TBv#d+_ zg0c5*YtILt3yM#5WQGIvZ@u~{q%kN1T*%`1atVg2}*w_cvlp&WaNUtSHle{Yl&Q+cGQF? zB<{P*Jh$>LbH0Z)@~sw5NLmNKk;xTL>F_hZNNXGjMia<<=T_Zi`f9z)*P}O6_&q_x zr$ybe%2kt=H-VqkdD^(*Z{2^axMT93k@8+Ya*yEakI~C))Dj1rGtrggG4^Jwz9#3Z ztb1&KJtp(sVBU*PA`VXWf|GsBMX6KmXTHNf+0Q&e$bP2r8$xi;p;NMkyv1G%iH|*{ zD+HDrv{A|!f+mR{K^Ml zvd1IkOr%W`P9dH!X%Cq?R`UNj>I<=dSDm5VJ%7FSP-wKaVkGI8xW0I2eN&cYZz%bS z3f%t5lsyFA$+zqs>syumoX_o^M{)MS3`&cj%$9{2nuJ zJ+$oj@Ct2>CAS@5?D|((cw)lS-u!s@^&9OmcE--h7sF1-$tQZnkJ8yA9t&?$aN<1J z2*#-2^ANUq3Qk?X=}pqj#wRUlAF4wRbkh1JSiZ{UulM+i9`g9lXU>ccKLYM-1eWk2 zW6K0JZWf#@U0E-@BVpr{%u|CounK%_VQ)r12t7XpY~Fzf9NC5sMBab1tu(%y@?NpZ z5}H$P`}z=mKLlP5QjXXfb%484UYzpd;P23?3FhD$@;+$MxrmH2xE*J#WgjR(ntsy6 z?KFZ1z5Ewkh}FWA=)+jjS@hZ3YjCw#Fi(!{UfTNVHcS7$pZ5dXN)xwJ?ozA0lFos> zc7pSG&=hakjIggv_MPkA&&MaA!}Ice$Zm|W=wQ#SyT|PR?mcFJv2FS!W6n$169^r- zCnqrX(AD@#2G9CgFNht3PMB;DeTva1XDuT81o;}iJWdA^MW1Pje)>8{9|ix7BQv7n zvs3aa`XaC)|2gu{v*R6k!zte&-%b20A{07dkp63Y{}{gulBNUS5Ebl?%X=T=(<@^k zbeS=VF*db~bq8%1ypw&@_K_O*>$v(>uhv#%RtM*P3jY2x^Y%!(HfP=UT+5#tp&k8a zbo0HyG!9HH+ld+2PjIh2ZRl0=mOj%C1>26I@C4{agf=NW9nmiLzux?A@9-RHlb7|I z+wNOxpND~SAN}d2oH+eAfKv>-F^QLasXWKI*E^Nx$efSUzg~yu>_tER4*gz=&iDwt z2!8WRi%ve@O1qhdxxyE{(8YftUh#O=PL&u8LjPFRNCn9W8v5RdxKHo)h)hDdA0mojUHJ3RbAm zOv-Bi!+hWO&bYuesn1ET>iP&8{2|ZrrqbcgY%}qWC07&#vSg1Y$9NUF1sFtFBP77b zg~X|`V0?|Hti zpZv9^m#nqcjIcAFlYrYKY*Ajs7A3SOVC@erFN|8cgDlpj)_%8?G05JKpSkvXY*F;R z(9TzQ4g$AB@QIh#MU7cA6kd3LwxG?DA&bJ5H)?Ih^u>|I4{3?Y(^?`i3t4>5J?4MS zyT?2?^&a$g_n7gDwb3OvmbGo$KdNmcv?zYCFq-EX*;fyJjnKzd`k3&H*i-ziNy~l6 zaN<8ycJ;?Dek5Ny6I;=!*`n#~5dUr9&^{=*i=(Gn}>B zEd}^Lko6Jk4@dTr^y3&?3Dq8#y@oH)EPsyP!}ZH{eZTc(`QN`iFKWJ=7uAoAf&S%1 z+My1Rj)q<0=ATMHck-XdGanH%yivC#^98`0lv zz02GUjgz&D_`NZp!A1spETO~f-#L6&ovaXGH5(*uA zB`p$%ju|hniYAUPMdx|H+5ge~-1quWRP>O&$mVBPf+w!Y>x8bymyd>WyP;@cUuXx3( z=zQ0db-mMfPLaFS`Usb}woh4weyf9g2J&*eB2Tqr$_OnidK(9p&K`*K?SyB+z2~v1 z(|~`BcZW`$qfZ0J;0+n9k&hFKUXn30URfN8e?$n~GhRXW_zAK{AMdAlWIg>kq3A9L z<^O_6{5;_>5BeW(8GHH{w4@(A_~C3tbDte+)eR0yyOL>7ca|jAgV|4%Xs7?ZB#^ze zMEG%Ky(>94^2^>X2^2Jy#OM64=;8ujTjdDoHsuJ6B~0b(mVVIM8yntFyB?&ids!d8 z$~*n{!c(srQSP5qU&ehytce1aER=_jf%Dvb(#~2#a1Gmyht=F9eNhK?9OM6C3gi5c zi@RsUF2UrUpkXHsGEmWzT6n^QCtuQumo_>0p$}!uF&{yO+K8;OeS&%R8M__zGn2NV zvKEZL%3PQBm3=kb3oMtQvo!V-e;_-_e*%o*HpVJL|y%#nF9;&&)ToU*h%eAPi z{ba2px)x*BQnT9Dbryqr;w!WOS=kuR+MM?m{Dw-qz5J8?sTk{d`SumB^vBn5Pe}NV z8Y$Dno=a?Um5tz3<`gzvz1STY*c}xFp3P}xv-5~IQZ-6ju}Q{J>Z&jP0`5ruBwh%u zC0)5aKZb;63cXChjecaj>nLw%4szZ+*2MFL{_rq{eTxWh=Mme8rG!Ffmy>^bdL(`y z>8C?KR}znHb$k^ea^c{brKYk$1V_$3xK#OU9_D>0_ipgxZnHn{ZpNKQ%AZa+lSj(G zfl$hyb+=Xi9MVhq^N5%7=Mzf#6?dCw7g_ot>8m{F*e5y*eIHzhohJM^b^q5yS0TJv zbRS}?ZLm*gY|NO`d44!|2woY7@ANzCRNAEA58n~ol=ne+&slhnyh}f(GMB_I{7<&L zt!OEDDF21`>+^rW`p&XT)93tv^)BDXS@(X(TK5LNXUR7*&4;9&&iBk8lp2M|HH|q@ z{T<@+eo!iHRkjzjcW^5EAc^7JRNCg%(6zy90u~R!2c~xP!WI{P8xm*ePihglz&315P*J3dn1#Yd{{5kH~a zWjY?1R-`4sxt!-da7SKnYc)@%Yc;y~k}I#nzkO#(T{`ED@#}bDi{;Bi`55i2$JZ!6 zM>|P_PrLSX)`^{zH!~1D32YOqeu3`|7k(MsoN@6)E_7Obo1>RUifAuuV|Bhmd_E%Q z4Jyan7M^-33mXsN4_@-a#QFYqqJ2yb@C$eu5u+|Mp-BQ)E3eI)q6m&O^F;!I1!uv_YOG-dpj3Q>4KkSjU7oza8ZK zcGX0WxnYXOtX-BKU4K3Ab~|+7QAJ;z^9G5G3bSi9ya;~N!We`okN#sbshLmEhM~*~ zGd`vQy0tJG-;F#sePL9|bGgLzS@YB=UzjisicJ9jR%y&}!Y!Fmu`!f3cKwZ2zRQ-& z#8;%mi$A*G@z3yhBVvbR9J~!0NjY0?j~cgUMhDrqm2|qTZ%i$#gMIYJ&bV#61neKr zjEKtk)~=r9m$9k>W&+nFd-?M38}!qlpF{L>kbd^j$5Zt0#MBBi zmRG@@TNUQX+ZRUlr3<6IGb_wbZvZC1vAAp@cieI}6#b6V=Sbt^w#8}IUgl@BD%j)0 z7dSF$wH@btcW0zW^o?5dG_dOJbVp9k*P<2T#lD>I|M3wIrh z&xB|1cSR-wqe1Y~*bSUWW84m$NYgZY*D=wd4vo>wPe>zu^5t3bMGG(wGEbY++RsS5 zP8#o!l|CUlHKE;t^NhQ|VYOKGaEAZ7_luoiZi_1d$VhgWkL(rxwP=7_-6gPn(u5ni9Ylc>!)9{ zCe0?#Sn}xA4{gfRvet?3rm=2q#*HJn$Jp&UjXr6`DVK|VVD0F$+0oX zMCWz*VZJWh(vYqCs`cQPV)c0Sz7wB2W`_li zhp)D1RokwSHS+(!vI+iQ{B&f^fqSvHr(H379lcrRt$S3>Bg?Q+h8~OW=h{6}{6g>F zM7P!Y`LenHO#8QC3s8x!WE-{sZJywe=7Yt(z;^G|AfX33kf}uzWD)YY#_RQny>iD z8JsCYPHDOcTv>(f(^}H+y$#vw_UMxvu%|wpo~V;EWQCrvyVV+tpI|%wW9-IX#BN-_ z0a;-Ka{3y|fS&#cyK$qFeK_Rty6@MQz64EuVce*i#k5&y#FH~7`9s~ge)w_HzNhL= zi^g)Vi|G>@%UUKsi+ww2YQK%IpF&elLQ_vcQ@f$5JnVF5-DO{h3qCYS@0^)Z@uT0;>(2lWY)vWt471u9>i|o^lwUx={aE+VQ?GpdButg zKFvGr4^4x&JW-FG-NmyrQf5A7JM&rQ&o1UO6C=l=G1Aes*1H_4V+R z&JpIj4P}XHcy&8|>SZm|4?mPLWZuXl<(IK{ZGeL=m&F@fz`Z1Y0X{L|H#b!%o+q?F z*%tCTdS)q$1+qH7*JShhR>pQ4WyP5*wY#SH*Irwp{Ertv7dFhUNUndKen=VOhuonj z-xIl+80_Gef;ZNJUa)@4Q?A#L7u>^ZT{57}*vp&Qz8=Uw`lXGB^74%j0&>`IEENQgL%1e%ED;q zYLQtoBGu!FpGZ7wn(8UMUoG$Hkx)5u3T+K7BxJ6KsL!Cyp<4-|5uweNJQF%InYAV7 zIG>nK~N-xNv0T*e=oCGAe~7JEG945Q4KNv^W@lRAMr z;4{dr;?FU)3}@WL2f7JP^dGv-9BjNj8sB<*bUbMXm}9Bw-S&Rg<#nF7MMh8GH-v!jA~H z#pjXjWc=i8ndq;b^-d4p-Rxb*sIOn_hBDJ5F<{@%mzhGGAz~ zz&vQrQTax$eqV4ya9C$fNSr)Xv_r{B`)xUCoh2s~*>aM)>l&K=6Zp!2@K{gojJT&V z;;Q#4-Y9gm2wx(b&y<^w4U}VF?VYjV%xzJpeC~x`C+Fwndx$w4a>J{0wdj`Bfynx6 z@wGfHpk(FHwa{r`T8-~Mg?qcWzW}_ep0>D{aaK6D;csq>gl-C0__mhx%%RZXg^B77 z0p!VXZQPTU5Lj11!`=U6(eL2ej?%jE_+k4)Ikb9&wT5`#ZLaMtM}PX&aP=R{l{|;s z7%6fUC5(~SJrG}I`w`$?EhQ(kHZJ3iu*~QXyg}y?e(lr|7|)vUhPqOt6Bw?6A8{5; z#|~fUl5rpH^?1zI|F-1Fm`C}eR{mWCCPBNNAbtwuJI*-wqK7pYds$x(!S@Dp1JV9< zfr#u!%6yl#fY&pn&zRNpk{cU3U(xnu)hC-D_I@w&vgg9Lj{O3@@Fw!Ll-CSQT7Zp` zPncib=oxx!xklCyLgNJo)c;Nw|0nR@+UGDHxjial#(wl{DJu;9FqltqnNRQ%k!y$H z6Y}rL%l-)ul>c%2e*^#Xu?x83dbQDe6kprnIV+}wi}2kd=DIB-zN9X z;NqkH^@k@X>CxqNg`QYw*#R-Xg41peS2f(M#t7dA>;-YR_F?N={z+Q~x0YM_3Gh8c z|G!Q>0*AH8uk7WVS$ivMuCIH{84_2{`$C=_>Cx(CQ~ZV-T>kcyaD1NFGNE7E5{UYI zTC{dgdi0S8EEr2$p$~T5);v!j_Y|$M)@t=a2PnJg30IArztGWzNV|gMlduRGR;}rf z?Q4Od#5?zf2s~=tH~STQ({HxyzrT}i)_yRwB^M}7P%b)E3W&Ms(e-rh4p)pQ7 z3T;TF5>I?i;&I1g5C`$vBPI2n79<;q7TjFn~4reAAO)&E_Sxi|XaJ@7ut ztt<$%iCr*lyrS$XxcvoR9d>^le;=v;rLO_tC1I!>|4isen)!x@+!CB-(E{{hIgU<9 z(mCZ^N#``|nWA()j(#b%>@HhJQ-$2N;oICp|Lp}|>iaIV1DzfA9Cfrs?)j|Zo^+{u zkTs3YQ-vQM$49LEmw)}xDG3i@rz1A|GWPkj-5|Zzf?rv?KQSr8)^SNYYQLT4hbD)$ zjx78tSaz-o{;Sgz4N&)t^54DHqUE)#C-?_5u+9m&hH!{8D3-R*u#qTre zzZ6fdNCQ0?3jd{^BK4orVu z=sDWVQ`K;(f8S{1a`>IKJ`g!Y#_bltxkl@(gmV@{#`4egN7|Q{=b7sr9u@XJlBdr0 zbDz0_RW16|&;!UTAG`f;I_>C|y;WQ~3`glfFFf_%7h$C({|@H|+Ms3azwn0-ujK zi`fip1ovC)c8M+AdVCNZXdIttC69(KLU3EkZQ&c-Y!U3{JE3`D)H|kM$3GGLq{|(kc9NbnBdx zweC<@JkJpZp*xe`MgN;AS0gX~n+Bp-aw~Nc$wt@pqJ3m&*U|6@IU+^KGY$ zJp3e(g#_(x(Dp} zVETfH`k#KA6)v&TCHsOOiqyUgd&Dn#I=cRgcV~cKuS*$=wZxkehTP~V@Xs#q@)&FI z^K^{`ue<{8prEg!!t1M@~!^?h6s!uMFCl2{NztxDBI%Ut{3vkB1 zK+2TIYNzFwJhdF>-j|#-?%}av)la`S(0|D{iF;<7xEo`n-LDVanMZ%mofuBJTA78j zA`@3)k0$Xh@<>QNl}_$`;XB6(|Nr#Gn_s4AmW+kS#qIR}a@>9d8sPNvO86~pavt&7 z=HyR>oAci(hi~x}srYUgbvk=HSIQ&f*=~=cjE|J%)Zv6z%2#z+UnH&5{!7Qoy8BSd zeRP*A9J+Q|0Q1P3F41V-X}nFRB4r==GqtTU!oq1{$dw(;iIm_E{ooH z?fg<9DHJoa6#t*g5LRgHnf{;ofJ3o_$=F%3kM1U7*l=`Ikt4 z;U%wUvRc=Q3@W%J@&5&G7;+C_Mmcw}X*?A?u6TdN+O+*@}&Xsq0n%7vg zNa~dDO_VJm_R6Y%+_@pLpXjhupX6Ph%gfnSVU;6eUJXp;OrPj%Q}OmvIq~9s2Tqx3 zzQAT(WTrx^?GkUW7cagPbYPcSZjA32SG&T@$xC3P&h*>*fEeXCGT-lP+AQ#{!`FFz z19m9D`~~#xQjW+|&i?{Ie;q0TgI@-o^z7M;b#N)ErcF0w`{&P?4HzDPrp-fLDIL=pI}2{iG>%|UcbZ- zd*m*SZ0N)|`1^SF^3%9S!?lNdf__#bplDdo7(={`Em9Zt$5N_>YmAwLVze*3;!0D>4-em> zZ&h^Y`Omj5#*e8*b45?+=m+$zmb`>atMLA?lt&xl(7JruA!SLMFUl-dTt4t=BdwSI z7bS*Y4?*MOhne?fM`?|WoL6s(lG-FAV?cJVL5Qxk~wvBs6&6trNFjtj*wQn(VbjDQyb1`>$ z&2R;xOGaqfGhAA9Mr9y6V}us{YNZy<{F+vr)vQIFHgE?~l(Ryww`2vNmEJx1THXiF z-9EHI`8AX~73Drf>2p5!Zh1)S;$MMfOLHZAo20C8x$Niz9z}P^-Cdkr1;2Bk-%r}` z5q;E7x35oQ?m6T8=o4B(>UCsC8}47=VFKq=zAW?ca+&f{-ZO@IXRQMUGAy1mnQ;|< z({}h!qRpi#`EO3fi&KoNIU97f_K>%J=S!*lLhcNfvFU2i!m>Z`J9ty;YGiO^?+)~Z zxya+g)6lo@t~Y`=Hox{hcN;ohY(vm#vv1MnmHn_aE`Reh3zwyj(*GEFaEC4J4ne;e>yt%AwBOcVw|3eNUAY z|D25Jl;g;im)EW8Os@4Tm|AN+>pgXyUyJ_W%jycycIm@kv{p?kSH916=`X(TUG!Jz zZEBx_4HmxDy4_c-Q^{P9S6taY{4Oi6>WBRvYOwB4aPHlxZAe+SURHN1j8r}CWnZ#3 zws6jZm-QZcJLR6Jw=dok<%|O`%1JF>U>5ibVdvF=8~%=)pk2}~A9SVIrR;ex(Z{FO z}pgehZP`&)iS9J=VQ2$fgFYpQcnQ`+57hGCa-KAw+Dq~rGn}-{HN6!_e zt8r2AXP!uS$vCI@LSFlI_!nnz3}ge}4}FQe`m5)D16!lp3*6y2{AuP7wZ!dZ?(iLP zclge1PdM`yS7dayX5L=!3itB=_N=@_AK`a?n3u?FarsAGlMxwtoj2lL%z0b-Z0RnS z&OLtEb@a>H5c)Pe8{S*}v4?YIglo|&Zbs(7jxw0;-KVFQ5&HIpb`kGR_c!lG=jpzv zCzk%zXIpy|d#Q6ndPX>uzR16k`Tu2gZh8%W+q*^}7h8K`O4sJjKqm!#{zvNh7yJ@W z%Lq#vDSy*Ams#78Y1K`L}ZIWol#+_gXFn$ED7^vG~v}M7G(i zm&C+BMf%Q?j?K;7T{LOW0DMwx&{GA&vj=fC6^dC_IdhcZ8>K5oekUg(Jz zdh#Uudn2p2%q{kf+@6mOYUmGv$d-o}7fZdHX2@D*LZ6)Rk2Yo}TFbSgAF&1qat=V> z8rTX_%H}DSUcspIup?6$StuT=6ON@Tzb6-M~{>;axNG0+O z=cdlIV}B$0^sQ<80(sV6u6!d*%6uf=XT{%V`+D5!-4_I}e5$~KfNO^J|FSR_0t99D{XZjfW*yd;D7OyL!O`$V#AJE0~aH4~+qrLjp#oWV` zwokv$f}_5*l5fvG&g%bS+u>|f{ognY4CiZ9-)`Qt0!}&=r+pLGZtBOR@ilB zEL3%dR&xgr@=#Frq}=7Q2QY_)e9~S-U{!9f2f$|~Q@1!c1kZbMJUTAs$i~ZXQg9Ku zKP>A}?tEV1;GMv8*gd&VWK4M%U&jMadlLrt&kDXuoZzb7&`@&z;f!Kqn%s?^yXT|P z8A`wKF8limw)9Q-XNedDO>hPlLLf*->NkcE`)+b%bE&u8>m%Gm_X-}IXJT_2Hb zi_py4^bAEae@=U)eGcp{f9Ly(dtj;Y`RtosY3*`Fp5^hX`7QMn3D2|dnrnf+4X(j1 zgGctb+&$^b((V>sUkMyU9`=4Eu*0FX+b**=2)Q};h(59! zo59dXSG2Y~%`f_>{zq7s?Pe_i{gbkteTI+RQ~TQSb)pvnGycoJ^XON8Pu=U$Tj+(@ z4cK`$*m_cZ9c5ETW@KSxF?YuM{M>ndmA0a9rYkaljTJf=_1{}+t>vG*Dsf@9(<<{x=#YBwBa7t^FwKk$+P-pFROy`DWHqdWDt#MfPlRwSQff`_~j ztm@dLviu{toQF0tTsNWDS;v}hg_B>YN+Ped)Edcbz@wk`)r*__a_3e{R3@>T)FG=*}MCp zoHcii+BOP3Wx-R^t}kf)+Vx-6uD$vx4|j#YKh|*Mx<##lQe&4eD zH3Yud*bmrc|9~ZTFja~~nBD&Kq?o?6lQ!Kqv?}ufPH|b|rw_9|ZUe4s2 zP1pu>xvg>aA}{y9ihtOR*rb1s&o{e`;QY};;Cu*L;q+5rC9u)aqe(a$m~_#uYUYRN zlD+qa`oF809|1q( zBVY|Y#m42mX`_qZW$&PM2m7}&SDABljFoB+W8rNIsJddbRqBxQq4LkmKl%1OsYP3F z4b&hf%x>MrJ<{D}ZEN{Ild^AL@2cU<*9>4TMjp0q~*)G)PtX~cPcrOqQHguI#HN1=d z*h4=2(iUQm$Nh?8Ki@W5ySbHl&^k(cy;;!`>-=#ybfY;v5OK~UH)o=2t6Mc!_+2@6 zESz~&V=TUoRUZniyL7q(;;SDz+n5oKO|#O3fR(Y^>(`N~dnBH{hh)B^s@GF))}qX`O95U_4eE>Vs1(~|HiqU^T;EiF-zxe*!|^etc@~ey@BXY zsPhfVPPP?TcH8GR4qz9ddpu!$xvH|kmmHOEPg&H@doqvR7pY(LY^p!^p;Hyy1z#MQ z^WxLr)saG48{2sjIqh@io0Qeoc;DQ-TcBh0zE8`5_J^>GTKwFCHu!I} zvU5RO=xP`Djst7EpPQg(3Vv_X4%Wk}eb_UJuEvF&b4edl{1^Cv`^R50Hu5jdKPjtg zqP6#3g$%Q?AuTMhtg_|)+V`lF@zJ*~+oy3~fxeS-$UbabE6VVVJ2~<#XsF;=?U*rh z6)YQHEZN9hsU1IA;apYYOC^C!=v3p&C6%1R2z^u%+0>ZVCUm3rZI55zsrvSw$FJa; z;j`en+=lC3&AfjMa6O666`IinP0%l+8F~uM;5`59-T=4`-4Hn;&UyLX!&+GQ$2#f@ z&B%&WqnnFk`&T_~blc+n6>ZfYYf(u*gL6{z;a7{%Efby&Owd-$XJ4>|u$J~!cYDIp z#$dxUB{KE}_1eC78OQ2f<05KK^8fNVS;bg~s5>86D|}yBSL)cg82c@J4?=(SMvD#! zOoFr9OPf8qSD!?O{C$l&kxO@_`w!T-R+Uos8_)xx0m834sJ}_( z9`;ZUT{u8n9J=SUMd(^S_Oph}5qM?Hriy-6t@$Cw27918B#wvWO z9c>O>UuDzvPK|x*$$e$48TD1|_^O3B*FRNabVA!dhqe!EW^*TY)HWZHHnn>0R(wh3 zw9{s(qx?%~yX04Wfwq%AN9+-0{_2cR_1g>m;MqfNU&ZFtdJKQ-cxxN(`OZy#OLAp!jJKHYUiI;Nzl6R5+QqQ)> zSg#c|V;h0|+=Sd*)Nb_$8T#fx8hU^3}}iHofvcNPHLdkEEQ9f={d$gP?8k@kFrJA8omA>h)&nXcxBj*?iTwy#;vFL@eEWSuGH zpR@Lull#n$k5KuSmxFE+_%%((K8AZ2dMg5cuP@-A%Na&Pi7Vb`%pzS#^!= zCH0LRB|&Uk>KYH11U*lbG&NQvT0N5zKW~Iq_qf$OpFb5jW?*>5{5(pU* za%M~_xM))orMw!>OJ3M=zrZc033*EDdeIA@LJ?C=Yu5m}^` zGp@UV<8j8%DZjOGMMCUim^&-l;OVW6_snhMoJnirTRW7&W|gdnf%{n*CX=~TsE2Kr^~=IXK&_Ge0KIf(pB3ee^Gn6-0`67tvk>yo5(Ol zW0uUlrNVu*)waV9SUx=!y^uVjhghGknXC5%qO1RfJ>!k_%UEA+YNGG0jk$C6-LCNN z3iym|=VWvu|3iQ3m>-J&@L$Sl6?qWZq>lEs3Vb9EIWWoR)2%q~8ttg~U}zofN<{t< zzEAw2X_`NBD{JIw+>=E;^T+t+A{Xa`X0V0^cFo8qQeHFrA`*tMArYOV@$_wpt14t| zc$KoB+Hz;W42qt7f>qbgkr^a?9b+xwDs;OYv^$%!lWDOvkblXv=$4(dRrF;FGKZ`M zh3D%%?&KbTmv~hkX*K{W?l)8Z6ULHO@;f@^Rh~)8)=p@3jQsLX_8TO|W|HV6)H z*l<{MndwPdj~uwKd8=RT2{muMb>9%QMaIODqg8*i1E#FMrHwKE$=-nUN7X$zjLo+@ zTwkb#-?!*wa_m$0=03+hCUG|_ zA5HOn4;`oP-6^fRe7F|HkN5X{Qyu%P_2ts-^)7G=eY`W)%t5u6Aa$k61@eu&_iO>M zaP0A|_E^vKEjzDzs`8=^a_*kb7cZjQAqrn;72^;d=JSxQF13qAPr3s}c!9r>(Z#t$53m z#PglwgnxNIEIU&vOZ5X>tHf^S7RF^@jWyo#Z*X_HfB0GpUj-kFu-lb*=VAS+?CZ%G0nej@;p4Pi(5`F7OW^R3YVIo9d#lCQ$)9S0s#tnzQwaVPXo=nD3>ig8@;XC2a z?eu9UcAoXDQ_AfAGAKFT#xg%PYl@du;rq=y{kF(t`p`OkPNWrn7V)@`-dccsL|w%$ zE!;YNZp6#Gm-k2^{|o(*srH`Oo6sxq$MYd{Ah6ro6P9)uv_p7D9c>UhZv4)w{b1qy z4^(L3E%26?*$+0yXtM=}yp1lucaG!{`Qb-g^=i!lDNEv2A8pAPtgdwWv8F8bN-`jV>d2I7%Vv2~R)g6N6AbCVVcp}$`{1^p8HIiXv%n(FI)#eX+L zGpo=aU)b_ZHKz@5)HhRb&z)F88%1XlCvIk>Au_*;HN-!;BWqLmqC@jKMqSjAJ8=S2 zo+STdd|prGb=}MX=f9KxFP~fRHIGZptqnH5<}$|&=1!}<-(;)~_+_3sIKS<(J-!&S zR1BE#Kj#C^!`(=zkK?S0g%8Pgi+m}x!^3!0FkaFx?s^elQg^>Q|HU1Vr`pa$+`jG5 z*L6j-jV1m7 zBu;3Ov0C%v&(Rdzk~t>yxyg?I02;r6e~!KXr9Ra%v9EL|ZTsi22g9EAx*&5{U{nO` zkU37v-j4Vo_=j@V1KQ+uEzEVPTl|*E8B?i`GuwNbUJ69T?`V}RONd_GIX^z1d{yLo z5&kQDscwm8*29PE$}M?L$}=cS(#1S=FLisGrclot4Xl}^{UXz5kx$YUC^%Yt$KmY` zjh6rI)bl8L@X4E9Gg6CQ*up)}R$euJskr!;nVAicY%8VnkVv(4jpy$hv1mmdaibd&{`L8 zIIehju9C?|QxE%xoMqRP4@1f4lqaF=xu~@+doFS|K=xb)Z9EcLVAz%gj)V6yrjkeO z;vIVh`F3pehdVXSzTv-b3%>3ewImKnnmSFJW2IH=bX88O+&A1Qw)Nw%&mYgZogC!R z36wLDax6WaT?fg<{G zdHw|XB@g@8efc)7%6p8m5(~AktjP`J8iAv%^QBBle_UVz?T^{t1BBA9Zi%zuC}m4t zDKB`=I)_T%lVwObPW$8>#Dy*Q(*Jva!wTTBoO1)q6s}$><2mcpzf$MA#V>;Kw-$^) z^jQ9|q}&kxxkOg3V*Xa`T2iC$o~qhyY{bvYcx!*R;C~5>R{E>&y~pn>^UWxBO}eT0 zHf`LD?~Pq9Wq3z4z2qf+G4!Jve^k}@qbg$mVeK!yHL~WCG@@tGE5s&c{2uq~7iql6 z;}h@KA``uusRdc9k;eId2;WJq?%4_NgNXy@dnSdIkLryc^nCcO!heJCl%2qA@CMD4 zF)!x(THxl$2U6d(%XFwxzO+Yd4MZ-N_j}2Ah&xU;c9)wQ@C6}pZd-;qM>_Eb{sBDa zaPO95@=qR++$%puw~xYc70Y`1(a#PP8v?F@duqck}FX?UrG z&y@77xym2>aYtz{@D3FGpd_?PsRbOymoMJ zEcNPZzLLak?t*-OC;mLjgvNE|C*zH&3y@!|cxm%C$`c-?cV5i7hXOe%+;nEmw4RRi-{o%Jtf}b~*gg#G8 zR6jBzvG(&3ZI#?FW^A0|SMtrQ^i7*z`X)MO{LbJPHJ80^soOhCI||H99p4}m^1)r= z5Ru>rU);PJwHmgJX>zzu>pzlR4znKVgNnh7R44IA98n57OWB zJdOEEU+C;x>*Ki#CwGBrx3PO+^xRS{nwTXzOYLSI8b7?oeM$MvjbqVAdX75vsJYxY zMb&R`m)#I!Bl5K-CVJj_=C#q-ipkc%lp)ZQn}Ag@;Gpicc*++H|@}AhqOWV zOl~E8BQ{F^o9Eo^@CSVC#H06BCul*7WCRI{YCtFLA(!oz0R$ z3+F}GDfIcH`JUg34Xh6QV)s?x3P5`npOEm~tM>c}pGzOx_Xdexxr1_AS8Ht}}&)z=nt&)y$Z!0*+{5R$-FuNWel~^^# zvOAZw06Hh$4}G4QI}#;f>V{HagX z)IE=Ct>IzZG8#&I3%wD+M`@?31KpqAnWw(>-Is-H?C*-Jt^YR8>4o+;d_l@_X#Tky z7*`waPMmK07fF7j$B;Y@AKWrV3kwgpi9LMX18vAStmuj0n{j>-en08&O@X#Jw5{mI zjJ9DvhPX%@yvW64!zs#QD&Kxuk33pJwar<)83H z@!ypiC-Kl0*3^VbcE>(W^y<^@`sEzghx&q=InNDmH#V?ua>-~XZY}c~s zb5v~VylMC-qfIer%6x5N-@DgxkJ?ho%Hl4lH0|h;n(D+z7xgTsj8#^e2<_=bjyiJk zv19jDuS?7%U7)6~BvA8aN#82Y2q62i|Fy!6Pp6A*VBKc7VIp-3KhI@s99THIWanGj zD(e?(ysWWn_DpV*eMP67=8DN}$m{D`zH%via?`Zz1NhWRO{+7HByE98d$Ekm>l1%n zQa3cXt@$eP2_k8&J&^N4;|sk}1xM;&5239V`^z%yKU32cfg|w#XOYYNddA{NgN-xE zbD0_65E=6M!S9wKS6X{zf(Mg=toKRleasul3%LEcpZX$s|2Z-;aVQgersG`U{ZvV- z=l+EEZ;^X-Et>bJW;UhJPGhV^JGXra?MyIN2Rs%ZlKS<%9crI(;#ls;n8ldG_q@4@ z1H$8m*ZEW%C7tsWO-vk+G0~xWF`E|X$PM~*)+@*k@N83qXS=So=7_*+4*kjf>-tuQ zSHue|Bh`hz$VIte#J+f81#zPyn<_lm7%Ym0#%HyO+~d7*QCsM^7JckE_t2qZso6a` zvSD~kq_!~4Upodnif1(R+35Tl)BN0T8x8GF^H+N2Bm@r9X5q>5Ut|aQ_NEd3Nn5Jb zx%cJGwd0!D5Bdi!I^{0bTIcasd4zuah7h_bdGuG26ZRt~d`>?P5ZW|yqR67qKYYeT zL#(HgvOMh;TL;M-$1i-}%tetCvpDNazfTrIFJJATJp9}>)R(->o?jEXjCyR$^#c;u zSVCKsesBA(w4|=@rClQ;FT9o>+4*KhLIlldv_5xtPpC;2v}FEHEP==jcTE9p9unGo404t|fMPfO6V8ii?cXMh<3 zrpC-PB_|3`GBVQ4;Y^D+#gDLV_>K5Hx5jP|x!E}GNuKX@+NHz8dTid>to#kZ`$TTf zL=F&H8`(kH6hvl-Aw$T!eh^>XhbpXhWcAp7`yH8E%{%06HShk+ICZ4hmO0}nWna36 z%|SPJaed#`n44%Ww0NqdP2IaUT-N-OczF`J$gs%fUgrKV^JW;C*7@gz7q+Yr+{>}y zpEKNfseZyq=Y$TPIo}tySh|YTvwIh|_|Vl~)H_JpDqzRH*Zb3{OTLAcMMjq=geSR> zeMD|{AybBSxx&@61FD^aYuL-?sbbtEPhyO<_aZui0DLUeurN|PTWF2FZ_fRXqT6wF zTRYJcw7QXDsUx2=CZgwabcRx%u6!8$pybh;0_H66NaEzVuw}7=$)$Ug7uOdKZ*umk zy!n>xhqG5c^xZGsXE5BDaa7Vl>y(bi-ZNA6IrSbIsh!S8)|Y!N&NjNkbVuPU61c6NNY{Eike50jfO9p5^&w+s~Vf zp~MRuCA=ILLem0%iI>OGn_jLbT!ntF!!9Q^|CP!tx5vbR^RUN-?(EV#BAoiJ)E*t! zHM%X>G=W!6S_c*ahYMRQ-M8paeL*V?ZF%->d#}~$N9vp`v)Z3?dEZj|lWa5d$fp3Pha4DO6VqhRNUiB4y;ZiOpH%ZS$EyXDzl^^G9^@C?$r-rs-_YNs>Ooz5&Y~Zd z^6S`haMttar_oX6U~6vashXM3LUYb86&bCwRmy6z&mcA_y`a-JEhlx%9RFETzU*zx z<&nKMqkCd_O1+s_mBHCeXveMWi+Vj5&!|+|@As_K@abXgf1X8N1135D$@(TWt&}ZK zoHB*i-+aO761pa|s%vQYbpv@{{u|Ske&P!{b?lek7aHl*BXcq7i)*ZsXJ%{Y2UGWb zC{L9mn?TM*2~Kez2Kw{THJ&p^Mh)wNHbiB2ZBu2j|$z34*b zb9S@^d)kQFlk@deasP9ib&!-HW#v-;pj+K*rtbZl%(vgey}0Ff`?){oeFxW?*e_aK zy>718=i9DvMzwFeW^PZ{W)F{1_w2m?`0033&Nf(U0MSv(dM!q~bk;L&?eS&Kxd)Mr54l}^zqqOX zC5J}#DE)+Why1QFk3@Dd{z8`;xjVa3W6kN-`~{4mjI*_dxN1-8{Em^o&ZaFdd!}wb zh7P3eu*Ii>=J3t+yequTwc0J~rJz@P<7ND}h`!`ya9r+Bl{90Vayh|O5VrVAFf2kJqR8)0dKEMyQ!%>+g~z9d!sfpaN5fm zkEXZF%_rY0=MG`-k@>EveY@ym9pmn-)ztsP<=ltm-7c_m?rCWv&y(c!x_n3S$hU^J z6}hHvZ+hFU@F-IFNMuii=V;&ufqi-&cWV_kl?GhsJEu35E^#eL^m5nS5__+qjCM$$ zVuUMC4Znf%Cr8#*a{rnOTRxd9+&vNfK5(I*QTlOnGrDJoCb_dOu3Ml_Ia}!aL09`3 z2Ub$H=zY20APSz%5#MO&4OBawG=EJU|3vvL)|ScLg1t8W%H4l!ks+jvUe;P`r(p{| zO^Y~oNO9u$HrEq3%>7!-rKIfc&`Qx;2s{Pnq#S{1t9_rWz)9^rb8m8tJCmC|AC%~G zno8CE5RY7hQHyQ+Rfc}R$?x=EU@9&pOzUCIMyktlJMyczpeE0$+Tmb#M|}sn}nop`Z3*7^QFgw5ppP~r)HFY$!O2{r0LPR!LvFZ8LM za*h(#5&lL(^8W{+PCCJnI`Rn~Y72E3&`R707sa$ydzXtUmNmnS2-Vo)_W#2ype@_~aC1XTQ)2 z=x|OEx-Gud`cLEgO1y8_lcV}9TtIp}7`ttSWGErW z7AA?UKs&x!u1Bvk8lx>e_*cDm8zQ1o*NjINxf2sU&It*`HySQv1aRS7~7uO%X2ll<5NZL z*x|eq9qfJ zpZw5$SxW!xbsoKMYWeNWxnDY6nQ+;*b1#)=I=N%d#d(U@Tb&r2$!%ob4`j6Abq;Jp zp9(Ma7KFTuw}iZb+K}O?DnD0!Z@heiZ+n)1hPBPCd*feQ?%d0{DwE3bZuvMd&XAQL>4yL55y=tht0(p+O(Y@>l%=&z&F5#Xs3nfVT5O}0?}?yI z`Dd8dKXla!=Gpyap()#d`HVB0IpEj-`NY)8vMrd=7sEgDtKUeT_}Z^iC$h9xa7pgD zLLQmLxe;^NZ`-E1Z|XMA)b_l&oX;??-qScO?61?zy*=pY`j168FJdflOO_qVwlc>t z@4i{&#}Ur`5}Ookt%aXdRh?qvEXX~_TAK6E>-jcw9Q=BAVB62!wW$jG=c;;RXLlMJ zP}&@HaPCwzp8r`ie*VI!<_nv{oSn%zP5Yuo&X7H&p$+7m!`N(S>{L=#3j5|1^NQ+C zQEv?RQ&pk(=7z*~a_l9m&nsFEFFFnEiI()DnwGl!l9o_DcWi82xKZDpelCDvJ231U z8_&NqHh%v8qUH+^6*c3}V$w|`-CArsYmw1=f!7HwxmYhbLO33cT=UE{eDvzLPiJ4} zPBXS8k3pklN-x<+^@;9sl&xpmKg3aN7X8&RM-Ly5*?%ow&_~_9==po+OpN!>ofyBc z-EGe8a+}@7?g~TGoTFazUsESyJ?{P|;Gwx=cg8P0SLa>aUg!1iyEESV5?4v6>%v2~ zH^&&?cHOSJB)eQ9rrkwg?1!i2N!JWN@b@ZwnfEkn8ToA|!7pp_4M!F@D|ez_fHs%+ zLPMh2RQR5Fc?&*&yeILKb=jXtg(t-OHzvFrLuK1ikr~^xzp*;vycG#KZ>gNnd~{^& zg9sP8`r#Rmy%O^HK%76u=SFuI@$8RN??L@P4D1)7mrKw}?o=`7!-R(DMz`fotf{#XI?%sifw=@!cOZ{;Egxh@KCvNk=tgv@_ZkRJ?eK}QpP&oN6 zevUi$F=qfn@2K=w9-HOv!fxR!{rESYm0XxXB7j*3&gM3TOj`a zxc0r+_Y{t!Y-ED@ev{m6;gV*FT1+o&=7t&oXdAfC3DK1!9$ z+~$(Lm$j1MJa^(w&f|0r&OUIo(}f0BG49r3PkL)KaWR4JZw@r4vUDYX?2l1B=b*QW zzaF?T_XfU))cKp{vWlRL9CW<(lOH>wdQ}E%sORyKHgeszwQCnHjh1XnunyJO6~9m# zo7RlySrJ2jzZd+A)qP=k?rgYOX|yI3OoAsxJ-}n+65>e3RgQ%r%ba@>9;NyA@+0?v zLcflSl!0(o7DHx`OsO(@TZuLBKcD=Hc-m6$>s}|3N0#aJzg) zZd&`#cgB}sPq~)4zgGO7F;>f3SnCiMIU4=Nh92?cKfg2HInlWh9&m5!&&S3uZM-_u z4gAO^@jN_c1w1id%s4NBUMGY!Pi%;>-b0QvXE8EgUbT)hXl#rs;i4Cwn!Dr9cr9~k z9cLY@uG4QMx)kFp#~A7@sY7=g?F(yNOh4JOeonnwmpuaRvdBhicNI9?$9I*B{9cw7 z-Wj*D`80KH^T(E32mP;+Uc>FH#MU_vPxaubN|SrB&YV3Yxx=A6&X{~#-=`2)CI7RM zOq6&pg72*PPkPM>l512B?Z9tqLyUabg3Tx|b~c>H7Soh#(-9-2mvkxQW#Z3v#qMS8 zu?L@3_CR`(1-EkMO{_h1Z~4ca4c)}kvh9U%261Bd!at?^K6c0}Kj&XIGIoFOBZ;m& z>Ayj`*q$xRa~mVgf5CG?bWXqhd~PDc8of(rSh?3sTOqr-ai3@2n@0>-_`%QTaz^2+ zC7G`ct4A`nsi&5CbFS)|vi}RDG3~p4PNX?oOnkZTN(Mki{;p%_$HPau zc5P@wTJeR+Ut0q`(_e>qFP|RTVD8t1HaNtuD6ivP_XoH`Ke4EDlhy=x6vEW=%<@x| z*+{z+eD4O&IuEInJAp$C|G1gE%YV^qj_;C@Q`~Rl-bov8;NHgl_qn@#|0wrv-ao=U z#eFvS7~f;ubG%>2y^;58xwmnz(mS+P!951uDi&;v_p7;gbBDmoQrsm=wQ--qy^}kg zQkLT`T5-vD757H&l9k(lS2`{6k1^bH+%+DAEAiG&-pv{hcnp6G{ulCu)#xO1z$Y4< z0}ZYvO&>JaJ8x-CAGqII8J*oXZ%j=Mwr{`phl#J8o{QdNapMWezFNcNAMw`_xrj6S z7Y&Z*R*u_0jqw9+%$UzIeq>v5n)TWd_@DTG@4jW3-nqVPk%u3P?$B3y_!Zt8y~dg3 zUi0}A`}edgUmEFnwDH5;Giu?1qS-KO8}X?I=4Q*I#WR)PlyT~If8B`Oe`(_^}VNaD}mXPrZI;oc(rxZh3udT(WEk z+ELkdp1GGg&oaMYo0UQC^>WNH`mby21m;7{1LF6KcsI31A4_HTga&Ik(BcE(I!hG0ie8pLV{9j|^8gE*sH2n(S#_CUG z+z)HrQ2XO-@z8wuManq+!zJjlnV*sGmx8y`;Ian0!o&DfYF%*{e^RY0swpoAFYAS; z#VXy|Ip}m;wLAMfXC>z&V`@aNqE+#=k5lg2SIm5EViT-=Wvs!w=Iv3@`#-xUko7dS zV(j(je&)*~YFAAC$y}{|)B76AB3_Z=RyNx;i(TXFLDsW)SK3dgJuex3+>XSVql+re zY=QkaJ3hwuLiz|p>re76g&}S z>FV9)w8zd&ICT2eNtqPq{p7ywc>LoW)#varLM960BdAQ_K3R0N!F{smnghAkTg|v@ z0&o2;Io$5$Xzu$A`LZQTGL{EO|D6EWCM|HPEIlXHcGgG2Pj9g1=`{P;WqoUTUkkp3 z%WlqQRZQ`gEn9b5zM%ZNLi~F_9T7G;%v%XB3vcLwM-0HzdRQ-+v9nC}VE#T_2RaVs zh_^e@wZosKXDaLAz9&jdZranw{F@?;;_)9u9lnP`p>2ij(EN}>r?%;PA@6fP2%%r__i_!MXEN?+ zr+8)CuZX>mEF(Bdg=6(QW830F_o4A04aWbN18HC$>__IN!hWm(X2o1Uhd8M3_sfNk z1UR<$EHQR+4+ERd@P*HW#>t;;j9C{cjePHoZf0)1Cp?yi!hMbOqYG}o%|GV2K|39# zFI-CwJ+sF^`)r-M54Y9GmN=P;ilLa7N`sxEv8%QE0e#c>_S@&{0awyieYdt834d)~ zrhUdjoxRfN(w?mDN%_R%b8X=lty|r=V6%J9F8gVkr;*FwqgPisF8{{x&z7%umv`HC zbP-!f+_#We%twUuN>dflN^TY^wBxAi_9__=dd!PSgdf$Aj z$@hs7>N*MxpZpE^j>5O^9wFZi1$jOw?)C!1Q^6drd2BciPXfy=1?3jvYfkWeHEC?! z!cieU_d-Y2!}8lcJ;^`GjKk~P0z8r_hkxHoJ(4NkuOB3fKqv3}KTLk*wKP4v{CfV| zf0i~$Uxt3~U?I)Rj~)8WsI0<$DUA)j!z({z#=@`JTWDfjy=l(+@?*dhmQzaF6m|i` zv+3@}KQV<*Vv2E=TXWVbbgQd?ew$L%b{J*S_D@JNT42@V8`@U#|3# zZiBzC$e1pha)z+qVr%2W?kb*2hraWINV> zPb0P|oT=s8WtClt|Dm(Ne0!H6I8~Oe;c)8PJDkHa5}fG($1ecef&k7o1E)D_rYt$w zM??L0f&S9DJ{5s%A^*j6&~97aiKp_EXUn@rDo1qC`RDccio1Q#!^+|GAlei? z9Om9ceU=`6MO#(3Uk~yW{rB7Y{mT9FvDg?#3~k+%oZKG!-y54y|bKR!$75b+%)4=qLrUQNAGUB zGxINlbNgsB22_@=3+(qi!5EjW%YF+%Yn9NN=DaG_68g?r;m6evT94aw7asCuiAws= zC68pRnkSs&Yq6nmkx5by$|ln66_w>nh)WaTw1qJs9NKbrg5S2+>)FSd@z!SAbyEN7 zlOD#A(iHv|{+-Yaf9&y3>5ox=V`SR4wpYSlGcYQT>MfkB_*OPFhJ4ywf_SAIq&lygZGn+%TuLJ*ZgU| z?pNgughT6d3wF;ak2rn3Z|t7ohOi@mZd>SQJKrds&YJJ3_TiS!Ty&a%o`f6iE!Ig# zbO(F!+Y?>;CndUGE`qK@W7eOZMcJW}zCP|tL)&Jol0JYo$d9lWe@^WiO1_D6F1+?k zbJU~ybeHYAo^=L~m8F`4Gr#oR+TPoGgYyj!@z3xbi+d|$+w%?!@vd_0W$|A4f3RPe zFYJHPUlFTG`K`W9&o!1PG)PgWPj>9(XM}BswPQhi@0M8Dy`!c!<&V|z4le&)mM{EUCRqTfcap9W6 zbqAWZY{jSj*+r>O^8aKR`b&HkPF{IVIPooKG`yQTTz=UVlU*Xp87n~sL!1IMbM3BSK6%g~(4tiTuN%K2fm zS^o?~78$&qoQ18A=Gb6OaJD$nzA-!vo97krZhQu`_t*2M&dP)MalElS;USxrbr`*8 z_&|qZJeQ{zzgpCg*$W=CK%xb#@C8x^4#_fe8_(i$@Cs8GVd<$ zH~&k$@#)Pn4=9Z;+2r0>Jbl~tUw!_BY+J8JUfZm5Ea<gH zTmNz~IzRl3mU*4{n{6V^MP%epVAp%$uZq0H1zo1|s7K*6aNHvF+v10lMa{)0@Up4*KlvW4*I;O4uhaVJjNnmw6># z-vY{LDDlqTQR02X=~({rWxU_RbwB@BQ1&xpy+1oQwtaWVX&zX^_ibF;`S%?67x}-d z#QV|risL_edQALT=Jp@#9YcJI>zgy*8QcCWZ5eZG$D^}DoZb8G*!Dj59%?CP?YO#p zEpv=$IW?MdHd>tH`!7GUoH?bh8y&bi**V@f)$s)HJLkv7Q_tKM@4h%T{^TxVChe=s zO#Q{@PAtF|q3!NOMst$N}T>?PifJijBUXJ|Kze3)Vm zbEo@hI>tITg4Z%zMg{LlY@gJBhf9X?CphC{N4?X|nN-IYT!x-zHDu-i%SLp*Wp(f# zVyW4BH3{w2k1RCbR$;^36pZ!d?AiCz z|2vLOY&ZO*em1g{V#Zu+(q1?_o|qBi+Or#vEyn(Iv1}u=>;324Ki-bt-vr_|Kv$Ge z(^S(Q>lq(EH(`Qzxpab|+1;lm#J?8d%*c%^ySB=YefNy6w$f3WYj@;ImwD%ZIi6U} zKnLYf{{6Mb0=_qS_k{s6R^vf;6S{L{H zRqNtQ_q$%|)ZLjVa-i~0MXydgG4pKTzGW%%!vA_(XKIJA*NB!6{ky=wfpA%$gH3_O ztMX)DdTMdc%TF!7c+XPLTd~y3-@nwm^w3gMW)t`}<-%9OJ)_zqp;6{t-^9~&Pj5+c zj&aMP3%86hdDKVxel@-vx@UJ&{=TQsf5X>1T=VZE(4F~b>t06P)SsvR9OLB@Fl6Wc zCHC=u3GT`ND)|@iehcq!@c!MW7F&44bFJ@!g-K;QEzg-fsZdMHqW)p9EyBj^{a_Q% z(_XVFgK{pg?`EG{B{I*?qDC%8&BOr(h|>>Z|k=>K1VsPF)j{*>kf^Hf^yHc zj`8-d4z+jIhloe`zuq2TKWHiYZA;l3TY7_Yqu$-nj-9LtJ-2T5%kK5N|Dilo+PC`p zp|+_$t@jIIv+cI9T%yiRk!e1C2qzD@gLJ6zoVvh14D+f@KThT0hhg8HpbwC_Z_>By z{q*ZYPc5DSKP_C(=c*UBhgy6YCkG8H?GgIH6)y+Zxm8i-fT*!?%$ED~l52pD_;wx~ zckiUm%G)yor((_SMD(-5)nR|#lr4bIwDqtrcS$FdJC$m7M<0GL`|ZD2oIUl_;@&k& z@HwZhA4a_;jMd%~JpY9H*UV~ub7@h0uwB4s>ohz=v*52*VjBh)HeWA)RG8yqA zO_}DLzm~;2C~uN*xa=M@DZ*ck8q?IUFZRC)bsFi7*nqe zsLj|!Z=$@iP}%Gmp&7Gd*z@W9Ih7l_*_WlGe{xsc{jYbKa}nw!laNL_wJ{NA`RUSU zXFPkcc)>dCG?(7y9F&ez^~K18?6E<8avA)5eN9dK5$tFHF($eSzlOuVeUB2fT<_`J97&2 z?zu+qMA6}i~(X;PnQ(o%isP^nW+V>Le;~bsT>d}l{-go=& z{m@N*-=es9>1oPoYBon-@M!WZ>k?bb#UgelwnwvX5?5r$na@wPN5@sEMk;1{7;Gq@B-YP?~c`tk~ zd!Tr}^xTrctq$1m2*!)jImq(n&a>$Y*4b7+AYPv&?^Nau!8aK=1Y7hPKkt%RtShy4 z7@f#yeCJqqWgi}kZRA+5CWy%?Jfy;`*|CS(gAK=pTI4#-#dDaSX5u5I`Is2Zf?+N6 zeik`Od*C_xBTGMq>U{a~9O;dW8un?$_HkzczE8miJArT1M%Pc43j{fQR(B|DcfFpn`XD0}jL3-5vK zX>q8#9T(c07XJ|*_e^pQ+BJ(!`y~I@PD&igOo|@rePU%-?;De_@mlJg20z3>)cR zE%D2KW4T{8uv`L`4$jNlvxWFKsbGAtKe(szv;#B%POT1rjN^aNv##PwpG_d~!zt_9^r!!m{AAp9@uc42- zO?WTs2VWP8eY}|V2Qt(n@Z%ioo9wP-UeE5}KXS0js<;bX67&_@;~0EyW?y&NzJZmw zhkd?U$}(S0zqren`LlOGXUiBL zfeb&1JWloPhF+3e2X1tTC!o9z&syI_zjS+kX&|5WA*+n}MMFFp8Z*Xe8(4Yznd14U z;knX_M8~5`L0(=G+PZVh1nm8hIoE}r-RZ1dn|If)%UfH^8|Z6OK6MP|Ymz~91~C7x z*t@Hf98UU*VR43rr&F3jy|msF@Gjkx!91kr_tjye1C8NFCmm=LGIVmU-|t!{E05Jn z`+KlM?<19`dSpkbGuN=GGyDJ21y!irD&o?zZ_&cDf$d~4MCzAfM~ zJ;~W-;j?Ml-_J1__WMVBr}jB@(!}#IbLZxh&Y-_{;ojK0o2Igl?Aror@518Z*2Tt^vnQL4Epe_XMt?ZoMagt7)|lk4d{%dkFr%o3)itx}Ja@C)j*JnO2Ws(++P( zPpiLn63V15FG|fC%o`sf z1|G7`s`60_X9M@Ty`ea~WcfP2Z~iE0uPe?xQO`4HN~^r4qeD3J9%2t~g>T=`MxMrq zW7dpn$Fcx-de;7&?y0?X{P$%hw*nl!?KE3l*51QfiutXh_;c8fk2=s9c`&c|ULD1o zu;UINXhPR&+jHTO1a8pi?BRJA*JHQc>KNQ*U1z@b3yBrq*Mh&BY+M9m?wz|b^79r9 zS>o|JoU0XTW&SL7c>c>p+Ak5_I*OaAD{`PiXQ&d}&zzxZU=U0pA12D#6WMe?F@r8Z zJB;T8$$EcmfA!Ps-4-yMJHPy zjAl~d(Q*2JaBec^AB`{Azp4s!7{dQ*;(7-(tM=GFXo6-_l(#!r8=AHTYo)z>yM$cv z@u}0d2|uzY2nT#EJuq;i_Kq5-&fF$Be-r-|Kjjj>tHF80gS1PTgU{mg!^eFh7&jyF zaTl7lJi9QT*+1fa8x>eE%&J{O*4_Qq+C+RFbc_`K>8-S2^KYo4)X$OdQl zyrZ%TZHQVZ^G#zb$r^)lhvQOZTe?l7FR4iQV@PFd&EG@2Q=DJQcs;0kZQ2iLM~Thx zzYQMMfj|72P_U1yci>v7dtGq)Td}Z2O(wMV$sNww`{MR0+?D%`htF=lKWx}hySUTJuJ@RILZJ5|qX%mY% zUygr~@-#9&nU9S=NBY~G=C#rF`Ps;xwGTM>7oN_$)HUYa-Q9!bV87+U$D))CF5VLp zP57~M{n%I{(|8y5JhyTdN+ajCM7b#YBeyzUZ6o_=HO#56YQ~tSdX69!inS5)ceOF1syHGuzz3fPw zc(sSz(vZ;+yA7d3|9y&Vv#?S7{hiB0AKLS1ArH?+hI}b5KSD&7HL{=czvZxFzM4MF z!3Ut(?_{B)&SF2_?dd8XuDW5d!V~mEh%$udRRht?sz@|{`Hm1allTwQKHE0tuKfeR zngw>H&0#NC{xQ@4J4A;Lba{#2#KY{f6-#P0h$y3B{4QDBswJX3u`rn5D2ypz~XimTlSeOi7bUbHs6d#A^_ zJnksxwHS1&dBGuOvtqegJBTcL>%xCG-a}kD=5@g#JWJPUVUq1g>Hi1=ht4AO^{6S* zG@if?4w&G9?GMmrF}|&2pIkWjXYqbuX_@YH$%>buNQyatPuo{V!!?AS01`3zg&B+u=+xA!Zg?D zT##<)`!eOHifBJDVNV=a-ZW>IV!ODw4P9UkzeJ1wucG@(>s+f___vIIn>gzp{jdD8 z&fRl&CbvoWb+`TTcz0VFF%l$G?SMyT1G|%K@l^-%d;LDo7JrO07@Y$;|7gcv=eTsq zKSJM~3zxnXg@2U=wjLI@Bi&=*?^Do3FL=^_wWTf4a|rJb^Us`-6U5-so{rL-2hTU~ z@AX#BD-~UTfioeC7af?#KjFTI{R)*w%m5Q_;xM%6%g9&ZYnM16zUGW3uAtgbjPAMk zUM}~*Jjzx1Cy2`-zB5=3G$K8D3*{)k@F4q~Z1ElDIa}Pwec}PZ>X$i|ca=HrfTg20 zV9$lo&llgxcVye*ySPFJY~Svl#2OmDAh=Ck(gCvf;f`(0m%0h`)NWrL_3MAz9n7!b zI8_zh1#kDJgjDXWX8#LXXm5jGyZ|qI;U32;hF-RxXvn0I-CHELbKY3G^?Qr5#GG%_ zzSny42D~f+Y|WcYzY}&qk4563F?&2Uhhd@v3diWMt9^6 zGdIwe-k2b*z6(~Hu24syZ@yljQS+Edqjl7k@=g)wP5En@SURD&P)64kf<9!EL_5m< z_>=xVh02@qPd<;gJRLoli4lctY35L+QQrzitH01U^-F4tbQDIfXkaN^=O|5re7cXg zo&z?so+FK9XVRH|{QvtvHtN57AN;=%e}gjE2c_kvfR<&qpL!5`H+aj`I%u9bG*sow zf>ZzQ-;J&Z;d5EzY9HMV)#N)lo45xV3A#1^#e)R@NbxSS)&5wr>l24^MDO-4JMQ!M zhu}L`#?C$*@R2lj1R6(e|H^p3 z7g*=kz5khY!nbq*FWko(m$tNQ@!PYz$oWo3Fvi6re0_nlwT*SA4T!GB6fQ+}8Kt~36` zkIb11fsd8WXRvyXj#CE5tZnZb8*klLHna(@^mU+zDe(zv?fh>IdtE^`qo1O3u0?*@Bw`N{v9j7??SzyQ@>uNtb z^x-kP4qrEBS6fjTYeVQGJY}2glr0YAyQ;NxVJz<9JX-m5S=w|RE5F7lD~DW2Y&wJM0vr7utDKPW z^>L}U(Q$W0vGZFiopq%%JTCa)dbJ6bWW#xDl9)`x0|>p zje+m8^1EvoZ`@PCxd8G#aFLILel-1@Vqd_G_~~-wpNyP7wS=`#n6oy)o&J@-yW4fi zn*&ecu^RJMAE5HH2FJc%BQ{;ceen4~j&-8Osr98CPHP=LJ;8evH{GA}?Y%Iq+H7@1 zQRKl`OaH=d_+4sCV`lU1=%RqnwrTBA|9^@$+p<#OrJ2pk{d6hDZV3Bs`)~Lj6-?NB z3||1%**3ZVYgzxEqwLI=Bl(xNtjh0y<@1@BUvV;>vqxnV52(C+^uphR zuK%by9KTEVIgG7a7%QB8vwqH)%x50rea&bi=QcGA?IHA^YG6GWI@1G9w2{x%9uBc> zVywkdyx%g~Df4Fe^OX0?1}}SRe0vl46I8&oW2-2|VN!woCzhXJ5qz zOk?0!s6Bj*KUQ-y>x|wv+YoJUY4G)5nhOTzpkp95-Z}o4<6oHsFFnMXR69364L{M? z0dBq9_GM{9OKUJD!Ke6q4?2yDKWp&L^)+~x!CP)K`p5;2=Z?w0p}s8*`qs{2Yv4C3 z)4|q1x1GMfnz)(O_yIi!O{`16r-C!;g8NC*v(9*a4LUUC>xfLw#~f!;XY1sJ(Tcjv zm`c{eq*Yuw>AMo>Yt+|Ddsh9}I=%fI|MvuasXjU~jkYx?rq6U!rqU9Z?Ui@nuhI$W z{jb1LFYP)_yZXqVY&o*1kMzmVmPN}r2eofrgtPrPTj>_g^{kC}=jPOTH<|J2^Bci% zp8TqB&-2(c!K2O-FY_?-qsmt-EprEE-PQN~!QRJ<)O~Rt`<0X_n$JauwFJHN(1%K^ zJ-KtO#7AtH5>L%yjl`I$0nasSnQuP~K7jKSbn#R2eHgjsUmFysUw+Y7`}mpH;Qcpr z#)7Smm~wgHpSo1`*#Pd%qUA3FH{o7SLDY42d4 zLQ_g-<|5kAgH4x#A^6^LEPPz=^0&G$C*i3d^VNPD^}qT-dgG(Se*!d`@yjFox#&Wqb6ycu+rlL;ON{^T?t< z3v4p=Z#BB-j_?l_^+K1NrMajxyeuCJMe`=+TS1*3_)vP;$9$YTqSN#1!(RT8Ft*CX zh?{x@+aYX{@ShMIJ$e@0^tJeeWEJIYfxqPG^T+7(m!NmiSx$IDFW6f15^Gml+k|iCCbA0#+*%Xj`TVH zOGcMYUix(x`AGEq=Ej@YhewCJ5m+}akX*k*{jGbl$T?_v;l6+u9>(VL9C}YnAKBo{ zhrx6K4Rk17AF=p;Nvy5bsl;I8>|4rAxIT>=m}!3*uoxW7Gi5Pd+Z7PfzEOk z*;(N3ibpF8K13!C$=DZfs z^hdzObo7z-o9qmm3*ME6_0#h|4m0=j?;`bGru@z5A*BbD?zD-vislP>zJUY!DP@ej ziLIq@xo4)c@&RnIY+dp@nL)d+4rElTn^GQIr^?YKIIuJJOnUxnezRkBccj$Fmp4L} zqSN!}rA6=J$=Q33Ebcv3%J|r_h%~!<-i#$X4&_s}y=8Is zIs6>fd@8Q_FGO8xhou?iZwlnt9@c0BYp#uR?u*w=y|J}7EzGU@RNM_szah7Z?~E0f zvr%%4ms~0H2XsF06TXR_|1oUnvWGEol6q8^%Ko!`Pi8Xgi|n8KL}oYo(Y=hDRh8^D zf6|{nwZGnThkwSM(%Z}Z{kEM`*rzxr8HoP-KK!?~g*_npe=7O4_6%Wvm3lgn?_}QD z3(r)$PC?gt*v$(K)G#l_pozZFkY3?_&19-hmJ?G)G znj_xDMzTMEBaiGs&%oXwxluUD$HrTORKf+iQua`}K53t+zJWzoDne-RuEMZq% z-kv4~PVX`JJ@NN*-wh*=f@64=_>7_XfDfhj(mv9uyj)~eym#NKcxfm)`vmg1#&L5& z`C2RYvL_T{O`Drp)D^>LTXn>~Gv<)yAk90H@%vj>nX%)vA6*n`=ggsp@#9|4xC&_8 z(E6T$h9cUdy4uKU?CH-J4-qWlBfpd_?abS|avMi?`SmP46vLl5`!F=Q9=`hoEI_)ZG$Iak&F>|bVch4rxtNy%Xa3Ee# z=?uoc&Y)o4QQU^<&`J-!O+)E?d0golKkO{%C*5A=y^lx2CU$+> z`je*o&(O~Qlk!{Q&dL`eVWZcwyjOCh`XV`sy)S4}`bTsV#MmSb=l1P08sW=p@%7re z{<8~fzZBX~0j#y{oB_nWA3QWhoY&Tdo#j#D8_9o?Ij(H`SZ99h!_GnBVm0rzUkGhT z72%^sIsJSyyc+xsfIsbN4p5HPG&yi9Ux_!t7yjNWKR(qt*p08n<9y4J-epWHjpd)& z&CqHqa>5*B@{)+xf60&6BiPf#O75gRYFiq6P07RO7*E+_z8s>n(G){PeZ$qewW$nuYsP0^8w)WWj^2r)_&j@4QuR`F?Z}h&T)b zXWLTb@(_ER$miclm$LpiJ@DFG@TGj~&`m8PZOP}~+C{8|zDm|%vN>?Q%_mgmXDHJR zjeWU~zTZvRG3;9@@3>%_^XuaInrFqMt*n-hM7$d0!rtPD7w4{YS>)*+@w^Bizr1~=YMfKB{AgsmdxJjuT0uF}DMxs`8Gf*(;Jeln z+j-Bna^?d1H>J6g`Yy1R&W&F(6z682uY=P6rc*;YKE117jGj+xXv!}lR{Ng-hados|DGKvXwptPEyrH@qx&7gLWVm2Hmx{rMN<;>4%E<`nYJ%e^3_}Z?=xY_fx@~tbcYdq?7f46Y!2gUAxjGm{W95A`9xS%j(Nr^wUN+ ztvU3bKgTYD7*Y+aSCMg?te-wvRL}PzUm5L%ntdenc7=IVu52<6Q=iJz9Fkn^>wLAY zw9l#f0{iQF-~L*DIV0J5SlziP)B22jz%qfy_>|bTYJFTC*qaLee~Ue|+LrhYczh2Y zXn&gYG4^9@{mFVC7xG0?dDh>haKEIm9McCC=yzu`r*XbhbR28Ez}BpZ{l?^VJ}oy* z@om79TZZ~q>&U`))u*elABBTPf2}*Bjg8Vv9>+A^XD*XQLCO>xVNHNk<;3G%79-HKs zXJe}cZQVg!22+pPpgrwm@IG?;{JnO&2RLFpvxx7T6Z=!M=e0vT5Z{scZS1Ej4#f+= z(Qzt#Ty4{3c|qZ~L7jZ{5RcB?;lnAtrtH>wf`8H}tDFpD{s)x(I%RiqRUk9hTsUnk1F9m7KUDpcgl4CuFf0tPj%ihWIgSJum8p8zETn@ z*|wB+ycX1xq@GGH)pL+~c2mzDaCsxLj`k!sS2=O_NqvKg&l_Sv$j5HX?h2K@v>iMejc=6cW(rqt-h@995%c_ z?Yg2IGxjM<{)>fUwva!lE_ODKmw(AQv!8a?v^=}B_K%3uiW~{9Objm;SXbT2d0XqF zW49$k<@omb`?ATWeLcD6gu?Q**L%hLYX4pEMZZ8@=$v9-*uAqG-LY`m15T66eR{Nf z%=%c`vXpnE=fQNqV&PJorT^QNUXZ=bBhc+fL%98T~<&eyRz*H!i>C zLSQg-;bN;%n7@+shOx!ryG`R%m~qCs!r z=eaD2U6{TZIVyNgeJ|Kouk!zG{$BWZ@?|T8PkrDze`sXFH1Kp5*j*&UemxrJ2EL<1 z@V%#uxsecaxv-;b}#Z?7(2%b|# z1$ZbL!b4$Mrhhu_8?>!0?30n|b`Rce+TY2X@EhBYOriXPeC(+2U!*xVS?~MXB%l7I z*^^6#>p1(^-}g=i={D~#il@GHyKm?5wDD`+vH4p?@#NDV_wxjOokVUGJ~qEnG$O4E zMyFzoq4m_;@R;d-{B`ANWZVqSIa_@Al2d?Xh7XHiee55wZ-Y0b;JwKoQx`Hy8#s#}-vW7D_^KhCW9sMD6}_sI~oSRI~BgH^}cofmbuBz!mn$b4Qr?)39i+y)E55?=6!s7Y`$zfhRy@9 z{2^KI_m9?bh7N;uo7U9^H`MFj&02%KZvXxm^C`$1lqF4?qPqwCnD;AaNd4ocSDN;w zfv3BWcf*^Me`A%ye&>*V-f-L_`xslb3e8FIsw0wjwgmic^_8-y*7Jotqp)1t*M;R9 z`2OzJcz0kASI4?0xy6q`l&lKw0j}(Pw|RBAIT`Sd%|93ww`=Is-;8RC0dvmGSSz z{{_cyf@gRe-K6h_Vf(X5{Yk%>_5@>ckmnD3AH-p{a14F0Hdd;hdcPj+AE>_6bp`X= zbtBJjN_QCBd-=5+7=tm%^WePvo;Ftau>+FSDVpt3-Nah+>%1+VlYK7bb_D%sWT<-o zzrGjpCfnx1I+SKaInC1QQNNwCUr*NiH09UfKc}v1@aM%XJ|Eb89X_=MW6*snk#A$1 ze;`>LSPJtN!fD1AJgUvc2GRK1>%+GBbU3cHifQjr|GxSE3bRemI^D{1@6-Ro>##Vp zcj3&^&oEdNI08; z>c57L*#-U9TK1IzIR;W^tHZm$erTqqlWVBbMw zMsQ3m{@Tvm-G0mn?VVZ~N_%GAtY6h88}mnHRx%#D!M)BPOM!z<;4!|nfy^LV`?f%T z_3owzXvZJWp8ILneVL078#%hH4Op3@4Zb_L`~5Z}FIWXrZUt?D?qwIGcYAfL37I}r z{rdJq!8sWJ0=)WW`LxYr@Alja;az=elbctbd%y6DDJbfV? zmaiDS=iHI?o-3e7EB~hV`txf#n1^?q^!1>n1$xloz8bc^wqbr5ZCfJkF8&(bBYc-H zi{B34KVx_sep{PIf?@Kz4JW=D@F@9e{cXU6ithh0i zl^;BAOhx7I7B}YiM)`4LsLRBSvE}?*eWoU)thtmtwV8Rrj7DyuO8*cjk#vj zd*jATA2k#=rgD^7tNq5fG3iRfn?wg6l%}u1GqTQbUAyTc_RT2s3SMPt&B|+vZL4oq zUeY?=yjvL$8ub7BeAe#WCByc6aIX*M#w!2)gUt6IgeMM9BOVMq{@V8g@Kk*2x(fO3 zAP-L%c;ADY-=xcm9&tD$B>k0|(CK_Fb4>@Z4Cf`z9v=^~VH-XsZP}Km4F8`#ImyR0 zV=&Fw5#EQFFMJg8&*5bZuS4l$@TcMFhL=0i+ASUM0`a!P@PZWkXhGc{NS<>)b)~*T z{WctqbWxp=y#{r^RX+Yyr=15_!(9RYNV1{eAI{U%b{G3Zn|=v0uyC3}mS{vK`%&Ug zmap9S(xb0&|2TKyME`4@vh}omWvw%LeG_{QvK3dJT!4>MaMyW=mM1FT@cLh++!d5N z894sd_&6eKB8Rz$-^9<_*RNLu@`~t%bH2UkRf(?JP^pP?F=b++i&(+y)1)cG*ROP< z)1`VkxA-_Zi{FV0Yglxl^ zkefykk0WI4PB^zUZ_aWc7Co_jOe}hpEB}ma>ET5^r9|t$YK!?Eg%3#vj*biE%f~ui zdD@AGu4=`H<|t`6r{>rF-Lff9`ur061C6I!k*zszvcd59E5@RGXCkwXIGKuvTfu@|5mN}e$ z1jh&I*Wvjd!zQ8)_(dm4?R6IF#e==i-=*B&6&{1nB6F7S4*9X0_oJf*b;QHr*MECy z57AE_$F4Gm4dYg9J+LirKOL+U`)FB-;& zGVJv>;6wIKy_b^w-B8jVAzdhl-IH5i=k-2P=bheI=RF%9^H%R%^2`f+7w}=ouNfu( zS2nS2>5=d5J^rD5q=kUptwZ@ShtgL-v_BG9Rg3;SUY9t8&$EZ&w|D zKqIy5A?8inuE%NDys4A7y?%NVZIYesWWP-TjJ7>ChG1hsyIwq5oB3)%yZWIIVpo~* zgpFZY;k#n%TRPc3b;h=AKo^&xmCN@)e=DG!`|<4qKZ?87!}wF(DkqEoM$aSoa1cMN zH_{ldg(hUP3k~1s71wzeOX|EFe$>d18$#oJ9Mu5lz)KS|vXPdrlltS_iw{Z}yG!;)>DSznflMgI!YZrjXZ*AM~4?wIu$Ug{}pM{G_9yvTfOC?mKXL zQ=K<^qT^K%!|bwqM_RqWnu^&YYU})fw*XUsx_%_$^!7jP1MX$VPlW zR|DG}w|4a|yS2-mc-5rSyBeGOZn-x;a3b85`$@Q~_aDPueVa<+r@uS8*^EbMJbbhT z-@f$nLOW2)d+-S|@dk3F%a%%(nZCbQcDe9)GyWSIy6_n}b8TqFXYrZA<|A~*K`$qN zwVZfbCAQ(gI2tVTCH#wNFYdvZu=0djk3}_4BSg zN2z=B{l4A5h4r6;ZzpMIGwn$AZ8}lb;vC=6GjPzRiKCC9jmLMeE-0d%d!Gp%xBvc{ z{Dtqo=3V~t`k%XncGCWe7S1xCnqGXKKI{H+IA1X#&6zX7d~xh5lUDOjs0rUoaAo`F zEb~G?^Md@%dwySg`_uP7HhxrIzR~Ja#eEc?Gj)-+m$Zsi8RPtJzphdF1=S720>c;d z5Ahub|I;TU+jF16m@@L0&VJww2p1VkevRt0bEjq+npC;{(A`YdkJfi|@=D^b6vRAL zS?rgZGOzwU|Bl_0U&l@UohXjxy?k+S4~65(H}y9Eed-ebKK(A{YrZdhcuZ#gJtdji zNF+Y*Sg1WuTPL5YXcy1Dfd9!u(CSQl6)N~A7-RTumvf$X)mUtCBMtFfiL-$D*{fWZ zFlUcviG3972(`zSIo^D9au&bu5HBT7+)B+amPX&{SWx z6WpJT+?-!}WB!fVb;Ropac)55*`4m5NPBPfDEw5JSA#Ke9y!41eGAIgyy3@I@W+Fp z(|}ffG@97C8Y=;S<%2jJfnXS@>SA+>iVEY?VI_>R7XB4fIZJj6GN6Vg`>-*_zhLxn(3X29}fOw=lhDhH-GJ9-eldBn}A;t{eH2a-+Soy z+DJG)h~ry;;aa2L+2NvRa*&zX`aX1%rGdIgu;+;Ev{P}TERuOOYQ`_&mn1GJ60gq9C?4i%(Gq#8NW3_(2bh18w9QfoHDp+;3 z$q#0C$lJmFqXqv8zboB``Df@jXs75~<5h81^k2BtUHhiLFe60yYk@Bian+l$3CT?~dZwbbr#_HI*_|PMSF+do*<1=IP&3o>w00 z`=WTs7gmpMe~kRnr_7%Rtp#`!U(;Mt(cr@uK?gm`w>{n=*#3$1f;)$t+>4y7XUl7{ zz_ur#SL-W+52lGR9%Bp}c)^pEqs1d#&WgNg<82w0?NV25_2^73@TgqThT{L|Sv1!~ zSr#tI2{TAP(1)yqj36BR-J|ZVOW^iAzAZWr;hpfbzBD*JPg~DoFQa%oJ(Ou^{AfTI zLA!;A&EPJJ%;IUR(TA1?oTaTv?XLxSDq9l=np%qvR75z-BJ#yWxs7);msdtM91)FE zp3P_Eojsxlf8CIKPUjZ7eWI-v!4dT1#qG2m_|xm$U6%iI*mrwB?fM(wviP#|x$<`h z{ZOb|QlGk!sc%IoOTHVnzlA?t{nT${7|8*gGf`3PEG$i;(Z~^WF0G3+ zzvv9HbolUM#pKYrAUzXwPKa~B>eZCb#s?j)^V2`I`MvS)Mi0inQyQb6C!N*J!Jn_t z2U*xcO}-vD1mCXIx_ga3PuTz2XF?gL0=xw4<1~5>cai9~bQ|Zu;RijGUiu&MmEj|B zytjJtA65*=L=`e(QAf2Q$FaOwO0__m8Dt%AVpJ&EYWc&DO8G^s7T~_&#b0 z{8tsHT>ssxJMOmW?Ow7|5&O^|L3eNdx;UeCQ)fLevwrWaCw>rp)?Af{Ke@U-{=}#2 z9dj+_7-`1=fa&Su=^UKYM#3 zzNwxwz`l|=)ESw6D0MV(s9WcoD*sX+KdHT(;q|K1l{&fPN%%=~_84d8Z1Ky^z3jAq z?%7f8Ywxaajz*p4t&v1ml(WB^s}$G$fkUaUIFy&5T<6fHdMEzb+nsola(e7*~9kTxP%bRQoW!yXj7Jg%K0qPvfeQ@`w9f6zZCO@Xq$->;BiiN6{gkPSCf~ z@fH5Jut>g<3|;>B&Y82wl^_2*;+X_zH(fw4m19nRC#={WFYMeLp1dwTv2CZuW$E;x zF?;D0V}YwF;PHdwgKuh&J(FM>a(cGa|EBM`_4OI(+Q@^7A9XeHqo!ZW+=Xu;Iu7;< z3gSmG=k=aKQYYW)QsPIQC4N*X@uN!p_)#J8jn#Et&!>qWh3p}J-k%1sprYVYaie0T zoCy^nW)%PBhgX>9>+c{Bp}YAU=bdM%zlZgX>e7`KAA;}MwVnEc@APSiKJ|6RN++KR z>Kf6PLjPUFe)`k&y~?-kvGwht+=_}sCV~#z($Z1j2be3`XVZs) z{fYPax0-zad4%$+$dewH$F^(ruVfSB{=2{LQpT4Qzb-(&|fJJrw1vDw!vf=OuPCEy?v|Dxj zYal!6+5WTRnQvvnU}%f4(RdotzE!h;jE zL3)&vf$u$Mjb#SdE6A3by()BV{$A-cWZ$#QxBq=jSbwvqr}c-#%oCo!2%f*R zsCSmrUUBA!i)c@KC3mOk%ZoamxgjGRXr{F^A8LBe#MU!qfjjA6J6o6MYtdD9FyGJE z6wm7%wJy@?jPcIa`}0cM0c}V(tLH#yqbQQ~9j*{(?n&&2p?kj|D- zcqWGA%zku}R=!i3{#N>uOV4&bweR{?L(I?KYA2p;U<|OXI~l;FxI65l8JkkYUSw`4 zQ@$S3Dc{-qef^o9%{%M!jjVZW*;Y;(zAn=m<);6U$W*{jmGAMlolG+9u&?dg&qevp zp3Ip9_~HM1e5LK2bu!|^LAskH-wx-=Hl6Ayw5_PQZTHR$aHX+ zI0vAHxZO(E28_DZb{K$tNJ(&1WSs{&E-IDTZ zoD|Zy@m7th(BMj!29M`-gE;#PHq z#b;sZ-_PgM} zQU(ZOc{h|AI|0EJ!yncSe3p79ql;pU#-6)t;Z19X#qcgTZ*~3bC7HEVjhWBPU&>g+ zZt6csf9Rai98xoR>&|u1N+0`R%ZRP8?%iikC*X&x7!&KOWLxL^?jt)rPdv8vrJ*nG z?2D8rj$@hq*9Q!rdHwdxM=9@Hp^xUrPt3oecwL#Qw#>`3LzzFDAI^BJ!)l)!y-;cX z)2AcxyLCs0y?LGEt*siL`J<0c$gI2Js?6r9(eVqBD18-WzSjKjpLv_FCdT!1zJ9Ka zyfI>br&u$$&3CXPNiY8x@MMn>dk2_>rzClGPkp)pow@IGBV4Cm2{j{wU~j>^S}om` z?@wlRAcFf1ooBkuKi^U7J^7Yz!3QA+pKD~^VXfLeWly+0w}w5j7W4%Hj9K0*DO2@c z1w7@?plfBlnp;mk*0J*&q(^7(g#1b~QvM$P>tB|&=1IycEL-0NR}b`_Jr*f|-Ix22 zH^D){_cg_SS>RrIdxH0`fwMHa${y0{yTMEN8uWIhgL*svT-UpY;x(Q0(_XZFgO8l; z8nqM&8fjeg)+Uat?twKm zeMcD21Cc3%<3!(edDUg@G5oG?`AAXwW%Lx@J-HNppSQtAGL5AIF>Iq=T{ltt+<5R+ipZwQXGvQ;_HbnU1+QgJh12}Q|za< z@yiyz5FR#03+i3>%{wxwn>h=UJnQkDU#9!*jF0=E@BJm2wV&qs+I2I`6T) zb>6!FgdNY9{n*c&pDm3){z}MO_j<@n9Ua%cwrX7ax^I!@Xb2eyUF<(&-}b$b*M|L; z>1%M3+)^5E!`5r?{RjNV=X&t{>C*UCY%lvu62x5f=P>;)hB0K2thxy58w}9NXJY#;NU-5HwXeMAO8D z!InyK)T^U$_gddhY%I3+xmlyU({o07eRHu%pEt_;`GWtOwfB#&syg%i_dbUtCka0c z3BRr6M+*r|^(t04nhYl=fFY<8uZwUvft3y*r)$B$+qz zH?Mpnol)ms@)-6F9{&0M2vX0w^wEH4G~VFCV!%r`%ov_x|7zc#@Q-m{7mf68IyyGz z*|VQ)zqbDpP6vME%Dw(sW&c}s#@F2w7A|!A=XL*;c^17Vy!mJ_(LK(!l`|E$Y-#wf z0^`Q+vfQOR)UxJTd>QvN+{zi1=h#PRSjt`O@WXHLzL|9#JY01xe=l>$r2&&Nr`k%w z6G?Mn8@~M84d;J9_*DjeDQ)t)pVag(_(_f4?`7WK#4|n@y)AUanfKqFlsS$Z_CDj# z@f~B)_vTSgDZcsmuKZ6q52tC1aB$OpXmU=ZC;7y7d?0VHY00VWd4DBi{0!gEZm)?) zbHb`a`unZyb>Q0}V(yWV>cV`e?|8p~~b>IE6Glv@Yd;1u--ig21 zJMA;%(L67MPoDAeJVG8D+{-ZkLQkw1+lOw9ihsH|sj~IBGJ;D7{eM0^ti{eEuDQV) z@>TXMhvyph#X4+n7{98<>O|>dU+zi1K>z;%SUkqud5QN!J8F_`KdJ6-d%ZgOD&Mc| zs7c>PzuG6+3n^>Myn^ug6_e~UD<|3Ue`S1LeSwLIyA9xmA9xy%spcm`lOLHUkHNYmD z&aCs+fUH}djAqdu>Do7gi_@Ty@pbqp26yA@z7%fSU!2f9N<$~(Gu(O8`V(XILk&|B z@rEyj<6m{-`iXn^@1pj90GE}1%Og?y;crFlwgBaAmQQ^*{-LAO6Y-<>gdZ-)H}f<% zZ{soGKDo|rnp$VCEBN=*Xn*`PUgFzN%SLHC_jjGLYL6u-9CZU!%!Zzu>a2d9R%71^2Q zBJAIa?BN}R74V48BKyJ6zdMe5U>8IZuS9Qf z{yXVOw;EYT_l_Q^G*;hzDq<}^fNe4OrF(6aX8AO97(O5Fn}#ieTmDzpG+6iCzXIJ} z1pYk5qhGGyVbRW?hoBX6z^6I)gdb|VD$!AI+^Fv+XtwBN6SN+EnCQg=`~EL*j5L0o zn|~j*!^{oQy!g!xVbRFSTa6q2yvkF?okxBjLRZnc@{x^vr1$g4NXfcC8S`U`a_MEo??c~b(5K8ZE=;t~ah@@>8Pg%gR%!al zr%-ygoAC4cMesx4S3VsL?4dz-(zH$gR)5Xi&s<(eIgQK(ube|~xiXQ`sNQYY=5o(Z z@xiWt{kHY;-KN!5{!J@110AGfGvvvx?E!~}D19lugvD=C@Ehr1Q}YSe6JAHSkZ@IG zt7O5{!AMxNFY`~4@WmIShf@phw1*Fjvr@N^ZiQi=X(L@hZ8$Z*uxj|4+VC0XRs-{U z&GkzT4?<5;@TnB~tok34?ltZRZz3&w(yPB&8~)M{mmW^7ywe`6D6mp@k!~YC1HmQn zLbWly&4s1#DRQHWdwOsE9=HoFDFLS>yLAK>WxAiq9Ad4R2-ViGrqmv)H^0|M?9@w> z=o8@~cn&nmK;9nXVdk#t^Dpp!3;+Ltu#@n>;;pH6>3@vLmFYlu=r@z>*q*)`^mvKT zufe;Io~VxBjLq}&SJ_G8jK0fl2h?^w@d1}t_pj}!8Cc&@bB_6u_F>LgIxv5JqUFF` zuwMWSfW1#6D;wQ0sC?5MgB$;!Ncg7f>kd1xpHKS5q-PA~B_dlZtK2cTrKUDq{lg`P zM+Em3Jixy4hztA5oi6Mv{}bUYhJEw(%MLqmUqe}INDKVSTCthC4;gq(M@?Kj6<9g_ z?#WFgzt&M>OmXL(`qw-exd{3kzqY{j-vT{<7=Xx*fAnQfHR3S^d$v-Ni$E!;@&3i-J-F5Si#TXLlJk~ru)+31L$bb zE7gP3S7X~dh4Nkr7-N3aSvx!T%uIzQ&fpz-otQ~@FX3L!C$zGL&>dSUXB0aq_U~86 z{}ntfpZaY6Uq`G4%KeI&f1&^y0^uoXbkdoF`?)X4PluiK%Z(qvUxWDLCcfzmK1B1; zyUs0mc3x4Wm-WC+w?LPxDNDNEuMo~-zU9+?`RdTxtlo-Px|b6j=<4zKtL$tw?ySn8 zjrc{6pl4|QrujgSuou1{*qwPI2cBJ)NCCHVz%2#bQow5ncxA)MUr%Y@tsMg+c2eRKPbODpTj+Oc2PexyPgmE|@==)e> zGn03v^Y4RS=j#B7Q@p>vJi=b1+Nt*W{42XXl3!ztdk1|_&upV$qpHI>wX&Lq5vw)k>)^SUYFO~5TS zzg=Ba zqwKg%QDE@FTJEhf?DmVJ(;nU*wKqhO`FAmP&qeKj^6CsNhd+BfN_5MYZ)4&ul{i&R$Umt=|L8ff2r$2s@I`k|0@ z-CDla^F4|0;vF?Z@Z0ZAyf)$VXZ*E^et2Qof6Yzo=N=`&!HI8~@5XyPGWj*~AKK3S zGA<6kh8(;Po#zmEok4eH&yU!*!UK|dtOE+)sL>wtdFr{h?)pTeeMfa|J8OhV{40K= zCepr>?_KZ+@!*?WnofOA-G^SUNp9RxqdoD|EfZb-zj&gJ&eN{^B=&awDI>gmLGW;j z`ck*@e+A(R!uczz&MXLTt)Fj(b-#v_cCi^={?a&jC28&=4YstYHH5E4dQ#rDn#x=~>YjH|TCH`?F<&Gj z`}}Zt)&$mM6E3I4v?=Q8W1wG`t;dsvu1t7tvT;&nYTo@N^Vh*y+O|1bl8Es%QosJk zkFIg%n%?!)k#_U%17m9ze_!An>%WF^EpOpR>f`zxBf-5CgC=}SGKlC#J^Li;WBOLc z)-=Lxl#}|0m8>fbF1;a#;Lank>^r(H9N9&$MUEn zOLzQPlyaB5>5=PF?~!f|;VHt6I^R_=xQ0GXqmO0uZE%GYv=7<0>EIeG4eZc&I53OPTjs#(;o?Ym3pS}u9;1&5~n z;>-bhy|_@d``be%pficTx-g^kOs5onCk#0IkVq-dW@8(kfN z{`-1*(cN11!WGNp9&lKD%^ zxHpwY>1#D!k~h^y(hWV8V~;$;x8U<^j(vVF@9O7)9NT_A#~yxxZ~B~iX{tm2QyV`Y z)|w$D9`(agvV%W zMP1dI;%Qq`^REqSFShcBd2ZUpd>51E1Zigx{+zIa@NL3rgzpm47U5d@y&T(MzqTJ3 zsh{WRxAt3nJw#^i5_@(rdw0lv!}FKeBiAi~PVs0=w2#6#OTJIvvc%PEo#w8_BQDHR z=qZhyul6KIxO3}5Yt6+iOYC#omY~mDVqa)?_i*}2uX>XsoI}2FWK8F)ILUeo(4&a9 z3{m$5%Co6|g!+f6`y6#9$zOZStuK~$sjd`tIXVvNbJ|LsYU@Snb$M(kQ5$sU)9gv~ z5B`;*{2}&?Z1#Ibo?_4E8O~8Yi~LIYSGF^jH?Bu?BFz}5bzYDCCgBZwZs(kCpu%la zDR`qhG_%Vcq8`8O7S_CTUv*vE$dl*L^7HRSC(_Y2;@ z?Hu+1q5-DHY;G<0OtDV9jz?p*fKX#bp7cU=w#=#IvAnS{OXl6(liV?}=OTUx&TZj- zX3k?@XmTTti(6_&C@bTY z)k+^!)+ff~B>!{v*2Q<++XK<;m*!H}hqll2LEvh2quuRHFX|4Xg^q8+Rpar2UBfR9lG9)o8T6x~xwZI`SX9KCc6Zcn+Ji3%^bH%AeJNaJOz%9yT6Xqg_pSu#2g;dG zx0#XfUbAqc*1Fu6=G>DQn_%8iX7tsVkC%PD?Azlf&BH#lq2K&id!)+l=rn2PjgRb}Z<;6P83iY9LpQPOh;eeQS;&2j z#_HCc-|Bhn2hBZ#K@a6mz<(+={8~31^4{uN^k05E{)BXo(~d^kt$LK!uV4L< zjf=j^CY-7^XuCn%3&^APsr?PKy+LiyZ|FQi8M1}gNn8*!Rdn`Yye{4kJ{zNj864A z{@tjZZ`E>V`ixGseL45d=1)KtV9cfy_wXM1|7dyZpV2)uF_yD~`Hqi(hsn2%elI_Q z{g2l_`nEf}Z>RXbX`n>5PbCT;28Tok;|)`s^SA1U%69%yUlso>Y%b(?(_sHacoiX3 z8b=peJ8{g8YPNaRM}5F!z8UI_u-_X)FBbv^@-?M9zT<6C`=RYod#X95Q)fKO7a6Pb z!Lh~o`i=qD#b3a$IAK08TCD#I^&Sa_^7&Sp-;b`oR_){e?BHh6va zSRLb>ZU3*wtu(JLyJKL|vYtl6yu%nb{{Dzz+@ZMA$4kF1nz5~}v~zX@-!IG&>?KO1 z^Nk0QJwD8}HAh6BwTCZV?-^w225czLY}l}9-e}&!iKN%wno}=n%PB+oHw5#cKT`)a zrU@#KB1cSNsN&0s9bIC}#`bK&5tpb>)umi#O%ZvFJpZz%B z%<`>pGYzK?gY|Jxrd zILN#{Ise?+Ma_)miLw)WHky-m{rL|f=S}tu78`-VO4=&B=QL~I&zBkO9kNaYMyUk_ z)*1SHbG~VP0eAsZ?1l;srg?;8N7)b299;oCM0YetRfqc7415gePc!gQ*l8?U*z}lj z=i;sA0|Dq((`Srg&OSbnUbA;5b7`Gey?U6%;$dPhp|bCqf^f}T30pgVqaoEeEPY7 z-2e^U5S}i9<6q0eW`V%S>~>TLGr%ZPndvb(wnfXp%={2RQ^!`krT#G2pF-?uL%Z z)~*bjr~95~uMC@v2xnB1({|LXK#wtqzV=UO%U@x~xsAPvCiWvXd<%HA@m^ly?E7pK zoX}r1!5`K#4{O1<#rQ2S37fU2ad*_-dM|rHUya(a8}O%f*JI9FR`|Dt@p%M&T(+z) z-w^6&*JR^Hg?hvjLZ-pGg}NE9rnZtqGvngG&KsKzFS3vE(^^|LMH?8;Gpr9c93<`E zljp^NEt{j}qtnAp2cve=kBIv*&)-Mw_&*`@wJ-)p8ROSk(^6lp*M?2espwZ-A18|6 zgr2zZb^5~CTn*0ayi)vVabhiVBwWP(*TBi)UEAC~egW9s3}24#y35ha#@O>}1pic4 z418#$|9Y1`Xw89$rFE!d7o&A3>ra0y>ZMbX?mSO>{ZlySWh7by?t1Pk?=H9Q`LMxC zPJ4rW;m2xH3+_O-QsC?dsXg)UdUZ1fjf{cn)3_*%@4m~`W&YS*$A(I2>reBy>Yr%z6ztw$JB`IgP!hi#9y9~{TlRr`X5 z9?H_=+iH$|N8PzF#C+LvFSL!Zd#0RozuV|H^Jiyyz;g5f^uG+-Bd1Npv}xK;xHEZN z&)?o%VExV43$5ff;tCa)+mo8rV0V1OaB$=YZ<$*^0mj*QcABwq+L8yJG2Z59pLV`m zrn=|hrc?s!*-x(;E{r7J!Or-&_z=DVkc+m4e)sKFY35T^?G4Ob=)iemprx9zHoY}{ih!P7($=7w>!=P z&oDm7CbQt7&jIgj+`h!G-FcWjAL#QR@NMBn8a^ky@#QVwoOs#d88VP`D)W_tv0rHRnGtqZ^rlD-ZuPiLpLxoNJI`aJNL~xdkWZY z-CM`H?<#N(SrOm3&ixa@{g3I__b0pObB^;ZI#J2mCN9`PLwLs*Dzt3B86I66NpQv^ z>x_zdunRc=n||9gr*$?$^WO!p;y=cY0zYf@ta)Sq1YbC+|E8-q;5$b8CgK9$iCDfq ztIRaq|NF6n%?+YYo1Tajz#}FG?WO=WiIWMZ2JOG6y@HA4bHU;f#?i+&efz$B&ZA!% zMz1u2UdcI^03O-c)~8PKXpW&*^mT|6z*n^szvxc8qh8tKH(VPa5(IJ0s@ocbqy( zV#__YHOOd{uQ2(07 zWe)A+TkFj@|K;zXgK(zz|I_MIJ}ZE~J@Pe`8`f2%eL5Q1s`!VZ@D1Q1*-_tmDoH22 z(!2PE##`@k-s1tCzjb{#m7<@`KIiz!wu#*N5lq|!td18LCr{-XA6f9*kaw2-e+R4O z!1PY9o_hN8Y*u?Zi!+CsI477-d_D1k+d1fk+SIiU`KZl(@0f%95XFXzvn1MgcJ@10 z7`?G__kTBS*-n1Zi*FOQ+~LY8zRx3-_Yk`G&> z|Gr9CN&R0TjPrdjp~}C9@R@;n%V{$-%&%t-@p^aQLq3f!3wbB5bycKS|Ei4qPWi>J zYTdi%U|{wQA!v0WJYb{ASt;=Ludrc@hQ@bBjM?ve_u3^^%a0;f;%Ke)IKIW70G5^C zjO~_gTR7|DYD>-2_qzA~CDE+k%nOAiI=w%&E0@O?Jm*Fqk=%o*%ICDKlMRS{g&aQEB7E(ZLe+W9JQ# z-Y0K}I&D6PAN>UTAmjMwmf7;w!HGuEUoSJQ|9C^dN(b}jp|3v}|I?uL^=rpj8&(;; z9h8NiFx$oJJ4AmdEb2lFvz#Z}Jfy5WUYp<=&8f7Q2D`F1O_EWs}IpZ_2K?u0_ zr}dw9;q}Qj=N@FYU!OwTl(*9Bo7$!C|J__w`!o-gZh1lG(3>|KiQBzzd~_vhc|Se} z{Vt*ADtdeu54^FpLhe~{bavP*m=?4GeLiV-$)}W;_Bn8Yvw^B(ex93tkn|f_D>Tgu zST}g}jm!cW*q3Y` zaK9Vd%*)R6?n4IYfG%NU;H1~OR{8p)?)drlU}oQ!TuJ))iw0*Y-Sft$?m!nvIU4hQ zbwQ_}-(P1~EnXQ;`anq-7$DQRe(>CL$IG(L9lL8|yDq?51|KfvI``_H30HgcNY4_d zZtg~6IF0X>)wykS&YAN4t{d;j#9p4UcZU|VUw%KG(qKdBobC3~JN5YQ+4sUR7hWd5 zq!J#hu!?!MnDgRlQ->Fqg0}XfD;)6r8!R@0gZ=!^_H&@JvwR!i>*D{sO;`HAaLaah z+2!|3(AHwpor7v`3osN;`+g^4vdJXQ$7`(#V&J{+!|2~zPcikx!OIZ((RJUAIKGP2 zCY|Z@sYCG^Q`S6t{Q9zeG|2abQwHV4pd;BnCCaFeeu(;$JE+Y8_{6Qajx9LCOzI8CP_1@CWSi zJ9S>Bl77eOw{Yatw+yyg#lv0MTW$T-m|u@^+^2HMr|4$JK15l^n4=c-d0tL!rXE7+;i*&q`24e5<}+BzjRvUo~Ilm+J`MDx-P3VZ|L9;robbd28=>)6%_;K8_7| zy1db zn|*k-$>dNzO6K=u%PT-*nTvh8!P@Vj!!-)iYN#~0A|x&x73%D%BHI5qQH`_x5U z?E#0MX)YwORZSkabcRa*`n^7Ouib3*2G?Y?uBZj>Bb zqu%#<?#S&iv~Ped)8XLVneO&4XQU$xVS7g( zewYN-DP+QY_Ie5`T%4_CE(!O2-|k(&Y9F}7{CE6Q`aazL4LcIGWp;^+FUQvz^3}6Q zaTYKsH9Phk4$jQzey3b^^x$o`y$rpWOwf@!+c9Vb)>rgDf*ok=yB{a&*o%CCvwh|{yvQ! zJ5KvL0%ln9W2z26@RPBpU$EqG$1f2G*(}IuU zH>mBk+aHab(?1s|>4|_1OH{vTQa|pjMPW|%5uJjro zzdu7OYw_uOtXuw?9CRgy@`gyJGzx#PMFT-}R!L+wdHSI@cns)Owru}GubNsp3bCSOl`x4~Bn#zwN znfN@$@mii6cy3~hZ#LPN3-pH2KgOfvy+b(b?m5QqHtlWq68BY}K%v`a=$h(Hsm-m} z2&=z*_w((`!OiP(S)&w=>75-MsJq-ZxW>GmadyTSnxXZQ_l?QWVQpYC061*Z$$>sXQ68vDhX9Mm*M|QY<+M=$CfP>R2e*~B+ z)RXf3&-vdO;4*p(dw$-Ae$cmTy&h!5_(qF$1EN>Xt9X&v~%jIWf9u@p8rhSxmA* z8Ti1SN22K_7e7@;qsPa@zwlG^Km@uGZ(C+H-^BTJcOCk@(FW{eL}NVpL-(e1U}J+` z`+*khZX}aS4pMnr+Kg~)yOB5&h`gxpP1trXVEpv1=aX&A9r*pRb(iVUC?AHQQqFgA zZ=LT`@8bRc4ZXMt54c1tN89sGDqU!tvCyf9HJM+ZAHIe!&r;^dInE3XwFeR{<*w zzmc`J`VJo2syp^XAfvT-W1-O-N3VW?e9ccxToezCvl`La#@30)yFP>C<;Z3S@*EuT z@y-8cJ$*2_*3dd;ayl3cubad9dvxOZZ&LoBQ;zD@odOC|BiOW^t?i93<1E!~qc`>Z zTI&q=zZF75n*ToEnm3`Kv-!CKt7(6swc#%v|8oxAQ{Ex+?p?*&l`)PpNB)t1#nGKh z_t1!r`XuX{a~C3Z*MZ>4BOVUL_Pg~eEoF@9oK&9wh&EwQ%bA)y`t16WQ#)syGY3nd z1!{Z0*Z)}V7cJ%6eD_N0;mzFjhTIy$?nifqG}11AuTQdi=rbjqQ@_Nz8aViO9&}*q z7XseCZ$y6&s4{4TcS3*D(2D11YwYXpcs2bcdYiARE%}26^U=WO7XLtYEHJ@oM;~YH zQ2ROBS2GaNWQF7X%4iGTCpoqC=! zZfCETzNhZ1?VW92y%GJ_>hufPBkhj#uH{=ac;m7NcCDd}@6W|<2w44=JK`QUzcX_$ z{II^LV`fv)&OJ@w9CuRSG64EZeHzEN7ImsQPP3y*mhd2l2({$?y+anbg+PQg;w*?ys(d(**M=py>akFdyy&e6uxCc`^Rt|dp*}4X~3O> zmC7HLpFLL=-0SOx51{{G&Zy2#K;==77!p?>};-pRWTe&0TROa}Y)n7o^VyzAbl zF%%qk@SG>pY9D4i_;wrk=E?{GtMaq%x@^Jth&@^nH{1Hp4m(`Zj5mKRsJ_SBExs+1Q?%=0@3%rodC}wKSW?U>aNvnLB4nc8e9Y z?5Qnkoq3eJ+G9yGze;mjYP9cEiEWegQkB?aus-gs%r|;{zs{;BH8D6G z{*Alpl1!mC`*NuMW%EgWo1fh3=ppo;%^R;=2kU<&d=+{7qX=c{yK%p}4?Ez=H?B+< zMgFKo4ms9Mnk)1?-a4s$isLu*0`vajVwXl$mM(SXf$%6FT2=)ubNFkPFTv(Hu1`MI z9b?WZjC*@vG4}TxZ!mhB_M^wVGtyh-@xUhVs|tVVPTJ>!mQU|u|u-J)iS$X6Det>?8TKNO8#>k)9a(j3Mp=&ae(2J%+EdW15pLFOEg= zKghR}mbgZ~eZ8LOMm@5v{zW)nH4I-IIelw5#$DNs#nQ2SrYBZ>tU7rX+?vMuy!MHS zO8lIwOy$wjM?R-)Y`~Lwf7TP*-C6C>0bsuAmj%|Afk3!%_v4ho{`BteRHrB-^ieb; zKaSn-^El_d9o>-H1{|ESyte!0IA`#@IKN)Stq-_3tho3p7e)suv#NEM)-X={s%n~d zFFv>J<5^nA@t|h*!keKB z&E;;t*nfqFy8CjM%ls}s(_P@odl~)7+W+mCv)s~IrCoD^;Rc1^{N8oQINQ-XZqM!M zKpxv$o*Uke93UM+Yt+?;s{bmt44x$T7Xi0nXy);Ww`UHKRx~xn__pqM(>r+wgMa%#RN|%-+F0nM!<)%f56mXBZ9U zk^H4@03M<1ckS6r+!W4JsEyi-@b!iM{=;lz%3$C##_BI^i(&3}X)a~IpWTQofIMcx zL%Nw4`uFCn%%SE3hV>wG3m`jVr1;R>|85l^2jmy!cc$hdL*2!FvRS`F{d2?5?~;R+zY6_20pV+#VmsN!G?1hi>}n-&=B@e{Tut<(F7+lHO7KYby80 z?e{qMnREqz!JPemHFv(Dd!3fi`k)f|zni^_gYAKn5#43T9jeOH1>Njs|3_!<&y{EB9ldeYk8F1LK>Fo|KvNR?m;0p8iqtc0#wc){x--p!O> zQn||$#d}isv)*j43rikz?kv+<%#%$tR;p`wqOtHn^5{H{iz7FIBhxbe-pvK%5BZu@ zTFtYWjP)$x()}(j#U+nZ{zckVd>#M66~9f&qc#X%q+^yGCmA5d-1f&zVQZb+X3^As zaKV?+{qbley^p7_0{7DUi=S<+aPv5K%K#VdsXuuycc$SGhkJB>QGEs)6G3*=xYQ#% z*3qJ&61uJg9PUp`URIvFDNG?7R=x)Ptm}fDYkv zFUcL*u{`|Dq8F*8kLW+xQ*eFDrSwfZ{5t(HRXax83&wbcKW7y$x|RL?Z)5A6T-G`6 z-u5ta3LToW9|wQN_mr#0pN>v>dMP^5MXp_7Bjfhx*o*xId`4wUSLFK*8eMN#Bk!V{ zn=gHf@Y02kzke(`toLkvCS_c)*Y4^!wdOhtJ(a%Og%|vlHPqd#p`7z~v~kh@LJkKO zXVLkjsB09PzjMHBg!Qh;S~hvWtzYXH-3`8vJdNHu?07Ec*o>(gu{WP7d&umxMp<1_V)7{*@amy0&Rqb09nFEM8=Z5B>?aHNbeERa)cwrMBh(KaC>a1hPv7Fg zR%JPBdE)wsldg1VWj*VRTe$~v8TUXg#U41|+|!uKoz@xp?W1o`VV(I3>&(y*<77TQ zUPoxl^a?ZaFO!WsXL28_nOB$5x>scnO#@a7+;JQ5;^KiRh0TE(8}pF`D~&0vF=se( zq1Jb)9eZb%F~=7pA4&$@8!!e_Z|t3^x!W8tH#QNfz4hp4RlXkP>_?60guChE<$8H{ zTyVPUMsvao0c4UM-gW-s0{bG; zQN6~#bA&M&4;_4gf4?RE-eX4MM7e?QeABvs&!aRn@XRenZ=Z0v&V}I!?Fb(;PTChn zxxah*L09+U{&ViZWekQ%KMmNw3m*Ei$2;WXT0eyaRgca5WK81Zyf=e;&xtaJD0 zlTW}`*atT}I_2m;xA9HADe)yjpWe~gu`>zhSE8?Gyrv>24tKieDN_eZ!b9!T66fnm z5=p{-Lgn}Qi@%4J404w>{|~tKir-6m=}h!Y$~VA&4ol&+s|h1YZDQhLhN3G@og)IFIbX;9^{U%j8~gRe8Q1gonfAXimZ=8zV%W<(pSO2riZ+#Sf1%FasZ2e| zX46JTWy@|t?eq7n``hsuw4>Ip3WYkWIB&&f`^&omk*%EtoMG;t{qX#y#-b3krvw_b znz2seTUL^sk?ty#1g!mdT4+DNYqYU;6b+Z({+>X!mV}GU6eR-)P-O2 zR{TP(;5_Xu_>fxMT9aJKdmSNV`DvUoy|Tr}lZhrhQ?HX}?Yz{c%g(SI7B4&MvK` z&D38D-BtSYjJey!av7 zp)swkaLY*5Vaw5veCxs4`ELDLwP0Yh{+w`UwZU4T1s|Lvz(_i-)H9L+P1^%iS4xGTKH&v-cH;jZSI+R_hf1}Z{{Idw+jSI}YQ9R?;N9zOf9 z9RiwZ$~fhoARn3nLpAG$sJ0QJuiotmnquyAE+xuAB9Wmr|IF5();gzU$Xm{ zdnGdmGM6RMnU+( zTJB0%ulo{m6C+jMxF7o|V3h(^YA5S_XDwwS%W!r8Jv_S0ipkaxI?Qvk zYVG0K_#wkDSq6V(HvY)c@<%3LWY1q^UBGYH#aoD5%y*sQ##`xI30DwzppbnC-tXes zV&MBy|MB^FpW=YmF?Z}A0T*wEb`DbaFm;bm?{BI11M1cNTSL@)fqLJEpPr{~o4Q-t z|0nbPXVq=oEBYbx;dJZqYL%a+>|eG1wE7J5e+g^hU$vg7Uc$N5GxyWZ2dVcKleSPM zV|QT^_)-i!rh#8Oih2f~nA~&bt^j?(f85)q%{s#V;E-Yc_C3N==!;LA_8{Xn2yJ{H z8UOtg!1lp_d&YQ6V5~nH(`@<^s>O$sr)xix#oLC#nUP7XaZgXO#N#v;dL#q+b6?*Y z+o1;yk4OIQEoY2@y%XM#Pj+z7ou96aR~6qNCUW15gC?{pz}=uK$EU5MPX*X#L5{|U z(FJfY1ntkC5bC@U8TW2zOb9 z3D(UYaXxbO1=^eDP7ckx^nt6a8Gai*pT}wDTS|O{ex$`qM)f{{vrf#VJRa~!^*K0H z%=a`N;m|Do1BYf4-ofX=yH%#=#{Cko2HWS{<`%&I^n+frR?%lKz-Lg|BKBLp$2qX%f^t_`VblUd9 zIIH_8-@CnZZ}Gn0`}Yq)t2>aFNWbN$4PXoGo*|K*CpCAuwUB;?c+$6Gr$u-MAC?V- z^YP*OIL`#0)a;zzbVW|@nYlT=gY$EG-@h)W_qPjjdM`4E{-&-W({k*m=%RiAt%=w( z$XidIo!G)|%F4Tkbbj3LpSTiTm`B5HRYYsl=XTah_)UB1dB21ATx-`cg{+tEU)noZv9$O7#Y?QmY3~PzqE-*#&v;I;j{JZ- zeLtu(dOw&Su@(0r&+qVGaTR?^73cKsJeHrSZ=LA)4cyf_>0o#3RR>cq1gtaQbG-G< zr&5ebia8#{&siWJ|3saIj=px_i30S&`RM=Lc{nu4{@l9}D|2e4WpBgh_=mS!$tPS{ zcP)M^kFfR-Uyi?JS`Ym)z}`>LN=Q zaC}52*Q4WUZmCJ`Sl*Mo75Quha@iW2V1L?PxRH4K6vT8 zuWTzcM?1I|Q#5NTv_{{0gnznMYT8$@)!=*fFD~72qP4f;yU9PL)U-;jf){Lqzc(ZQ z>=@sZY$v=QJIJ%q%sF^h_s8yC!O0!B^%zgKR{Ld|PqyJF0h`Gu+pD{|Q#kaCaro(K z*&X^5bVbI(%<=J@g@flcarW-fuQPtnV_z}{7&8_d${9mo-Bg~#y*(@OVfmfv{w?ge zwISy{e>?HH{J)Jb&q^OyK?vM|zx>2DmFHXXv)fb-9YPNfznA@}w$AG2-*ack^GmR^ znZ$qYCf$D(VLf3H;jM&|39&!gUu>nX!*|X6I>xZXl5S|@{wbF1ujA}%#Won$roc4x za;}UxT6fKuPVL_#^VUnYlMDclm)tw;$SAr~x2zn_k(=DtZP-DY&K;huRIr+&ys8ZlKQ0!yj(Bi zo>P_YDB;nJF4vx+ELib(#`LmlLbTU3BmZcWmR<9m$?`E}*fS}6ZE(h5DQ60YSqHVU zC$W~hF^;0^|0VW79jqze{NT~Iji#ndAND+ILyO15^!^cTe40FZ*Q2$E_7v8Y7^|Np z@1w=jIy)HKZglRg=xtlF(i+IM+CORGKl|fO*+!1B@Kj*h;G4|pQ-SG&M*EucN2Ob! zZ2vxZ)i)ZLGC05Pq?b^cfv47- zZ~tU;_1~{{_su2JAzW-t=e&WA@~FXb1YHCs|J?K8H@h zKM&)V>+6ZGw8!?#@Y5;u_lY?Z!MXJSx@OKEY;(^L>wl!w#ZA4xGW@N#>C}@f78CzB zb9po8m7Vy>*ero>PkXv5|IBT+j^E#7Q2KKA%M|Jfb9PbT-RN}vxLNoGbo}ZuZi?$; zycEW~JHz$96WHwpf0ldW?dMe}+S0;5z5ig1;mob0-WoDRyIVZ`iV^zz6509v_v|s$ z*kqqM@zca8FX`bh=Sx3IBHQ@zzkKiArLlg#>~MB)mSdAS3QkK;t$#iq`)l7m>aoFf zKi^{LRT3EJyUc@6yZ5bmD*CK{pN89);iD%*DD9Q_7($0De>dHfn|&6Nv?bYPd>U*@ z|9`mWJsW@IUqJQ)QQ9I~=vue0B}S=(gP*D+7moIAZ+6CCYo%Avr}{W5-%$QIMU;** zFSoCd-rIEG?b>_&;W=mN#|5`5?Y2Mt%*@q}epY#!IoDXmIG^{<%Shim@bhujNL_y7 zcqw;XAR8b5EFt?29gjzQx!a<*<4MB#MsGjsRqdZV^xfKwbh5AEf3guimqd@HwhV7W z-&8R^yp}QY=XMWenV=Lga&)1zuU+ed+QgR>Z&bH?u+mY7OulO(@(~BRIUVL(*&eMzAyes{H z;ypXo;k%;t#Wl!m$B_AQ>U)y8tZ|mJK3LaMlX)x&z^%hM!Y{h$yM$cNKVl{sWTRg19+9lhwoIu3sdNV(&&P+aeF{8VqASV`{Qwu zxt6T+d;xm+>*JSTbr-l_0X(wDRqgEB{>7dy;C*&Yox?-ot1^d@)Zv%g1w3qETFTj2 zA74~gzt@h@vpLpN3k~N^S5SJQV*OU;*q#!VMr;;xzPu8mUPHN>~IRcEjzP9Ya%DrQ<|S<}4j@zY`W z5ce_l&St%Rk$1II_cIljx^q2wEZ2eAuQ(g;)^?8f2%5 z)%jz8^_VSz!Pxt0gtMXvHu&byr~gBGlv2Nsu&3m;@20cttpI~E`clp~2o6d5&`%%K zr?aGU@#AU-MydOv_WuILY361@5qmmj0qc}d=T8HXttZMOhX-E@_MVs+**dr}Z!3F| zHx*Pw4xd0?9b|5um>lUHT#?%=JNY26E+jnjQe7{5)!}(X#$oOxvFF`sWX`Nu);sT{ zaky$Jdw|SS{55}MvhFar$3ZyKH8JKxtDJ}<8-VTo;f8Pdz~{av}=I8 zYP&;^k4+2fES$MhduSd{6J2E-L+8Hrw(2+z|8HCtc{sA(g%5ss@E19H<0<616#IQ$ zoGOMo=UChDs{Q>B7aad>E&eD#Q>glH~9z8fq8ysFj`%@lX z35IIp5d3_A_2B8buDp5{9Jnyor8@=CJjwt59{K|4rr(DdeUWem`@qfM?0IPA5OsZq zeyYq4V3p=s#QxV-bJw1}a$p*q?$l>5fW9vbj-6etB37SM}*>$z2AI%IQh10Jfd*%vp84sk_GYre3`5 zaK{Y=hhJi^@*?YErM-+cp^w&G!{?z<$=s!!YsW8ZC%lNdQ+F-tO>G?4+i^p~;f@yz z4;Op&&H9gqbrHJ^>9T*_MedO-VIxblP_D+jm~+F;1;zt?%<*-eeYN5x8zi+~LEmN5S(+EI z{QvqFD~_D+hxTc&y%{>#>dBlDeAS4Cs*L2t(Hoy;kJ@jG;#60Rvni#d`Rxl!EWz4` z)dv+3`xRtE@#V9?Q0D^8&v>*E9E>sc+XhUlk+Byp#^+!YA2q|m$2j9Id_?ctyZMaE zOPw~fyZkiCc<6iR=S!`n)GeP6-Cqkk_ZNhi%hoaTB=@XwPgu~l4)6{=Ng-p6$uqzX zot;z0m^|ajk&@Ll=Jl5>u(`k!UjvYH~P~ZJ0 zc?C>1Ge%?oym>boyn0NxdYrQ&SK}8tlppFWhBg=fXIF2iJdzm|MhGQ4RC3lz-+ek4 zj9t1TCqIUK<<$}-z$)MI)zK$k)9UAf0tXb>u zC&`zn_4LWvYgv`2Cx)$=6K=0X$K$SNv)A>$-eF+S6B#tdClbO>2-o zGl%565}LrgbI*OZAfp~yA8_(2e;4nky)yLOjg4u#TwvGB{1#1~{2 z`&;`8zscIg=;?lbGk$uEkIuk*nS0i{i7hpo%H{vj4Et?@Hob>bs{BnI7;0pvD4z{k_^6;-=Cj9lg{HW!Br#4g2${icnbE&*WZ>{3bLD_sM z9$m|7g?>D9%8B>CS>s*yE#1%obVthLKc8&7RpW4(&ouvEj5(n9>~U|z2FD+-PaW3* z_xy`rhC-zuT6wga_dlpdx)f~D9G|3p;Ft6&Wzgm9Jc3R9yAj8>UuQt7YIp5ftn(Z6 zUv_(HpJW=@qx)?OeOt102>U=6x6Dukn{W5LbqG71E8BHB?oCGTIW8fa;}OqxE$P|d zO@Vi`dS}X1#<{&lI0R4CyDuZ958(Ukg`kyrdz>}Q9;9!}E1uegZc#Kt=>wjOFS|zR z$ZmuVbmfIDoqv59TvVE5UXVSo|6ZM}0MA)d>5k20yDRe;z)kvm*^bBtU1y~C0gEo^ zy4DcN|4KV&1_CoXr~ZX$eUH5mm3wcUkq{kv<-Vx0X{$4r5(G7lb zU!65HiVxwrm-^u7S~&Oa*kjG*9#QCe62G#lOFVNHWvLIZWwk$rJc%A@tldf0B7U2j zIaAW=wOM8SnD*YY?Uu|o&Un5`8H<9`U#Np8KT3ZjQ?jS=@>gaXlP&tI^bvGd=^(cE zryky&4o*KYFaH;NzWiUNKReUB8l9PYmM8S+^k;SEq64|(KHwjsjrouM;@M{IW3MBB zLC$@hE4FRO=v;G%^KaYo?mHn}y6#Qy%G>JDDei86U?2E~^800feyM!_tOIa-ay>Lp zZPKH$zKZth&Ul?UXxJ9dtfhS8v5r0DXI{3v^=WyMLG9JJdmzuOa%rT>OR~=q%LNC( zHJyFlfResCF;!i|Y615%1W1T;t&H?-}oGUHW2U`XIXE)k?3Y6hD3bdlDX@_auI- zqEB2FzYtw$;vx2n2&f|6d?O}wgSiU5<_dTIl_La>saul?{D4E{(Rol9>;cy{oE1ubBB;~M~+QOJo5G2 z#04I;r9bG}QVpL#C&&GfrR;~$)nruVl z_kUx02eJqAMYi?WHO`dYrlqjblPBh+-lQ`;q*ULsE80@Vt#^$bge0cZ*dQ7bcDMRhCALM?`!EwDw%IL2PjFpqQ z1)C7c>8Cuutc&xfhEu`1-gwZ!PUE&PXH&xJyUr~R01tOO+;MpooJx8y@zd!4Fgl{Q zqu4D4+%Y)LyL@izyWbmA!8XaGF+bnA%)#e#qqPpbH!F3v=jud1|5RR|7mCKSPw1ox zG3I@3g^4%$SAk!~U(wfo=-~i*5#>3{x-JHvKS!wZ8!74Ds9Wune~*D%T;6i-=TYv6 zE_Ud?Zhp=H1 zuL$v-qAh9mb1VPL?Uw9nZ!Rl%*6|m@KI_y*&XnwnSZ~5VOB(Z^ogFM0?1SzU-^Y5O zunt=Zcie4YmU=sCFKjnXPT^jTbI_oXHuhfHF3CVK?&9#}B>5x$E$vXdH4eXW+EnN8 z&0+3uK8HO0I&remaN5W^x0t&kQ|xB|rxm)_EFV4kwCi`y)ZF&xt?~~2L!FbqZ+P@Z z>4IjIy}M@%zP`^;*5Y8npzg0a%bAbL;=W(zo6|O?7wnw5nDPoJuj=|;Ge?=Li@v~G zz$w@DFVVstEcUpr}dQWZF#63&&O%irhDhkELgU9q#bB3tzJ?!3`Hy}9#tYska%(;lv#1&`Ig z)^az$@VgnihDLM%Da~o-gHI#Rjhgly)UB~9$Ty1M2_+u^KlyJ6VZT_2J|V@rGrug5 z_#HUa4_qcdvu=lG6=D}KuQrf)A3qTtk3|k|tPPyh{bRGu2^&l4|MJ$mGkeV`g9c+V z9-QBp|3CKJW?~=b<=;!X2zY&at9-+b-}r&(C3i1=2)+E7`NYgqqW49Q&#Wr?&YlM9 z0lz;okzr^oeigyZ)}K_Ht*>)$6}DEhT5F8fH~2nY?cm)N{frBS$0mi((qH+!E~1PO z?Wh;+1)c@GH}Kwo|Ade5G1y-S4V{F3s2IJ>{BgZ!R*dTv9Df(&ZZ67D9imwZ_4JGW zi^eg3MQ;=*-F=KP5DoUzC4=sJ(xXSL-Am3MTN%DGZxXxge(aHxd4)a6*@WwnS?ZXF zC$Md;SQSpqmk)!Lhg0{Ny{RXb^bWyqJ8m!zYklt5ckTpj7o5s2wIPYETAH}h*2mZf z*j_E0wbIrd)mrbSCI!*AO%Ka|O=VF&I+4iXCeF;^ucMcB!u4$~-+D{>tO>#yj~~fy z=kvgK!i|Q7e#fQP5$1A>v2}LH1aCi|>EMho>ncZAQAOGrW>w~2W*9HO{Xwn$60%@? zKeE#&r;dk=%x>v8y14Uj9`tJ?@q%5NJ1T3zDZN+D$Q=6Z0=FK0%cn&nZG+yf(pgQ} zeai;-;tKanoOp-$Mm2onnTp%2H#t90!hBur=^s=^3p6bhUltaRZe=V-erY7W_e&bMwZN|o(@fsKY=fK27Z?GuS_g1Za3Ch?2E&C~cEa#OPCr^-%?_K## zWs3^Tg3je-M)=L2ah?TuzlopA{7J6dF{5>Q#yDc0>{q`iTk^O6Zz}QP=VN+9()hNj zsS7TBiZLciqr8&)OQAnQnj^~R!3dkHZ%C%o7^UY&?3)-P)<5je0?)!gZ(r_h)|eb} z?CS6+dqqRQWfXn1&zq%FluV_y>uVL)vu2u{acBfIP-z|AHFGsZUcp9b`#ijgVaF!E z)rY=N?M!}xzi;GY$pNCLe*g5X|Dydv%(M-Gxt2Nn|C0Ca@o`n>-S3_mS(=f2!Io^H_>u+#r_C|6$w@dZ zBbk(um4s6HG9#Pl{r>jaOBy>S&FB5+{Bi!6&swwh+UxSHXFcm#&uy{JD3|>pR*$|fZDETZ>LrMvC`qhycgzmE!joR9QQb|Sg8-j z&)Q7%=Tj|~~;y^Gm}soob(Y(gp=O+pvP|N;ZrWm#J6)6 zcHyHk9b@pnI4spioo7`xcl}tqp%1f}Q+fTSPh#(&4nB6_qi5@@$yYna&_B4ca69)G z8%u8AEsnCjTtCF9!S&z4m5Y6Y?F#G8oWIov`22+J<8E*}#d&=f^I)IZSmwcxM7Rf? zdqAM^bI%p-kgi+jRsHJP?}QHv4W&wVmT7%!-Ah)WvblC|)s&;&-;qID*gl%$j}!5E z_g_(7eUXhyFzXR(@^c@qBab6(LeaE>aMJ(@BXJ>s7Tl6&XlCOdGp4!I! zAvI<$B`2DJtUzr{Uq#IPFZmJ`U-Bnr+!;v3hmAjx44vR13n0UK+#X46 zM2;)F=@fkaLF|%sr%oHT$nuNd$o{B4I{eohftT3_k%w#E+8Ye~^uCSrs9TPH+ITeb zchIx1Bj-HH8t1NGw+`=!bnIJ&Y47gtr*(tEoG2Rg_4{5yMako&4f8i!*oPZ`HQ7 zInBjISD%0$qZax37+&W$B*3X-lC1{Yh+#OLF?qfMeZL)jQR8t^hAvh9cJ%7D2H!E$ zM%x<}hjVF-rE#N;6-LHb;7^FRuT3?C6?3rqg(EIPzcN zMnt&5xv?Mof_B^%L;jm8ZM(juGnyIX3^542u3(HCi2JvZb8hO0fnN}t?g#!lxZ_QK z$<|Xf{+@+=D_O=W)+(AK#g8Gz`Q>d@IQY`H+9Y`+Kmnyo>#x8uA&rbn}#O+CM*&{%qzY zjla0k)%`uyBwvpUd~3dd@5>oz*D2&aqA@#>BlhB7GXl-_aW>qEeRy@bvx;EbJ;Bb! znPu;t?_bjkj`Zftr{sIHJlTQ9BpZtgXV%be&dbyJ{-tT-fjGC_Q<}sj611}y`0)_ z#ZPGWbk-DYhNhNpU4YHWA|Em3cwWu(=~HLB^7xn73r6^^h&ffA9oz19{cX%c3MMsX4qX2x-hB;v zCpn(VfS)Cc=8XH>oI=hf{8n7L&k|Rva@6?U%;22uY{^f&Ic?U~3Vc*wpv*|13_rga z`&t9VL!u=Q6ht%6yM8xDKkmZN)0Llt&WR7u9pQ>CrnYB8FN8ln`fTCX7r52EtdoA=0df!lF_Qznzc|O9PrDt#PP26AZ`Qntj?diGw zodq_zV||W(jQ7Rp^m6+mS(Uz3tX`#dO(}n%^OKq9I&aN1fm0Rugf##+6kPj62TJg- zY7-u@U#aZ3n8UGhocUEI1YXNeXDRSV15@j#lWH{b0omEDf6pJ@h|Wp&2r+oQG<#B< zy{fg*7k&_(QfsF#Y}aHAcv`*h`XPV#5OiN{U-(OTzR|hQ$9;Wf=lJ@R<@)-#d%OL{ z?t%J$bPYO}DrbRoy+?r;chYdLi5Yhx{FTZags+$mZ}l&XyKN2p3^Ya06(df#(bizf zMJ{t*kp8wd=-wCP+9;@8FoMr>`{=^1Yn`iw`={T-K5Q5p>>GUH40}WAlxU^`KI)}w zfF-<_csun&`<*>2(WjEyM(0@WUhpqGQ+e#J49OAM~q!)0$;-0CV(!7g@N;B>{){yiNb`NlT%SIxU&5ff{%U;|?+2AB>nJ6zh z{_*=9*-yc%86B9@+v{UCi*yk6G=XB9NXjYHJUd1EcHcJ1Ap zS@g-Zj{_rku|wC2)|T$OdrCuQ2Q*Q1xK{DN_XK+CK6pD=7jUkze4*-(*YF%%47Lw0 zWPDe5dA1vped)c{)ECLeSC5Y=)@;V~z|V>j`o7|WoxwQu!=DC^at~Deh<~ikICXxV zJ$g2EJcx{4`*j>X=4Il=iyo+~zNaz4rl+ad;EH|z^6kj4phH^McJ9@${y!1SjXt9k z-01W80QGmNsmrAgCxOMz$$ny`NOouNK<)H<>ku1ux7^n|Dl&R+?SQ(tA5wTGy@$>T z`mgWQcDi$M693=@nI(8pTtRk6Q&Z3$+!>`CZ@VAMp}2WeAx z8VE-ZdUd_+_j6AnI6xnos!jd+FBsc?>6>2mF6}#GI7YvB@n2(Be-Ci<$6?DXBq9r)x>kE>tdxmy=;Nh|5A+a|U(54_tDcH5<#-s^V_k1MGhtWD0g{ZR~HBm(+J_SX*Wtl@iZ=);`%M>vU3t{nz&?i&NhCHgKNXa5r~P;}0&} zurOBHTIxQ!Tk?l-_{tVq@8Z0>lRm8hUdn6F(Ehqda|Z9DGOg^fN(aGN#ozvzH-a>(sc(YZ>Fe@x=$iYG^GXK8b9Zfx$$LAczvA9OZ(iNDYfS&_+&R?a_Q6X>1Ja+I ze^-^hJILOnw9WIA?po{%cQ^QYYTMHb`yA(*otGP&cjdj5OO3VT;`Mp*bjjA-zHpAT z{m7NQ>0QK|n|Sq-@KX3p$-yG@p<*g`gE0@W!^RFS=J(PLvrh`nu?BNDgX)Q2z9gIm z-@thn&X(tk5kE=qW5h~w(*ctzZ~JsUURisSp6Hn6XiQ%GOC>)PYN$p`V9B{y~v$_1CyxV#Npd`zdyTagP*t* zCE>H3#4zO7#C!R6X>4cM=SSghguhyw(`i5ZCi?oHq5s};=YD6)W&5#r?rA!1@JV&+ zyZDc9VxQ%{>}vDBl|DFI?%D4Ylp@DcoJm7-)xV>D_{f4gc!wQGr|w)ZHi-^;Wv5^& z<*|?Ax$3ojQT~+Xvfz`Hafs=`8l{|`JIITj0^+Hw9S{F(?Bh*qFHJZFi}%O!r|jQ& z8?e|7uj;ke%6x421^cpK;Ng+RHo$*7ANuc(uVG18xF{Qr-u%e^-Gv9QZ+i3+d~n*X zZ+b0~U9&x!RKHbLIBNSghOeHz{*M@geHI57)V99yfj3nSdxQ7CH!zcZmU}ZhXL2uC zuqV{FI5Br>;nt#hY*^<_ObpdXpYH8r+|wtn-W$7L)-8$h7BuhU@oT?d&A^s2WgPhIVz!Tv> zQ-i5@45!fBTb!~uVsWdA_%(6*+CqJ@ftCz$x~JomOnR2{pHC`&@=KFTx2_J94z*2m zRxRBU$#A!9c6L)VEV~Qgr*Ir*prrhx$W#Kz7to!wl%wDC?wRDg?cOuFmUkM1y=O8W zSeWUW!ab93ayHvDIXwCnX<$m&!ba;mNZn`O^6m)+&K5u1wxLHVYjHXgm>N#AMx=jf zLpEgV`Iz9uI#Iv6&=Z8R5$u3w4YeUFEksAP+!y`+I^HW@;o1*=b#x~>tTZ-3yRZj~ zGY;7d1#~v^=FDwFvJGr@&#@lUM{W-PJ$ND<>0*ACn!QnWDcNs!nzPzb|H4cye4=4&cmaw&QvDY&fdmZI96j|X6bnDzv9 z{&Qib=f3HN_9(9(=T*)-<2u}2TO4bbFIbn}8A;5%HHzGPhU*`YLf5K0PTG)1&*V;p zhjMhSqH(f|@Ns^%`*|;WyoHDS10=%~?U%j6$y*wUN8dm^dINW48h;mIE_3^Cc@k{w z-jDfrZnty97)s9Xv$=afW2;8KqEx>yvR|dQdvaps|NjyfXgji@5$5AA#x9yE|DIs* z7u!qQ%XTPUgwD0ny~Myv#SCg76?`haSV%tRLjMm!x1@7YUO&Y+OL_Q+oW_N3r}tmy zKVo9M@!&na1aY0Rn_OR)a=gFLthN8SRg5-s?v@ZCG6Dho0)4_B^Gp=DgE? zt(Sh}l_|yhrWd7D>?SJQ+kb}Mv{IA0fJmiCR z0CVckZEuXm1^>T3H#|}m?(V1>KQ~;F=fXEwRpstQ7Veg&$!6vB9eJ$bal4h%o*z%` zpPRYq1&?&D#I_)N^fKrEHqHl}5x*$;XD{}Og0;?$y`7h4y3w(!4PSd+Pqojy>)qp? zfu1@A4|KXXl9bFrFpOhcBir>ZzL{Qy9A_D_o{yoEXo(~TvFlfyBh~#j_e!Ln-dXlC zcTEibY|Llj+BkKD_+Djn=b-K!lYTP2*Z9mFg%@0^cA#_g-R&pmK)1ZLm(h7F_ugRD z)#Z-Y_#KIk)wVl5UHQzrFA}btijEC`*UAa#&WGFTwQmVWEuGv+Tk02WhE>;id*+;W z;aR@e;VxtkzSHvIv zF@_fIjRSX|k9qry`>xH*%LCY+#gWDJ(Ow){6DN&%ZN$9!jdh%V7x9JTP<>4<96TE( z>Iq@*X8WMj_Az&z=H-;p_jaACe2{h5B^wQJP49T-$|ICsY~F&gX!xkgGbfdX29B-E zIOAzyjB5*t>G_N=v39P(Eqv2l86fu6%D5{yCpJk89E8#JP*4 zg}X@BR-;eE|6g%YtnZ;S+qwS`eT;t&`9J-wQhXNhK(?mX7`y!!UWj+8B&`*WtntCC zTpTal@weeCFXzO=>(>-*NvIbrc!t^8NLt&H#A`2QuIOILmxUjIzF!5J&ZbIVa)vPat&rP`zW zbDqhj?KSF%f6krHYa@);$YJq&pzSz%Vbe?s~Vn-nqXQysOOPY@X-r_eY#f+T-F8^pFlVj+{{`SE98fyo^#-@7-s}&K1vZ zY3?&?<4N2AYvYM8(J{y8_N64(zDjjmXiLg77eAERGe+D(osP@Lw- zb;M`R!*;2act_Z{md>P&>+pvd4sm~liNmM7z8%GvN%y6s@MXg8FgyA(za@D*(Z_&7z5C|_;X2zT`Qdd*m5pHTXl_C8x~^%3OG zHTWP=m)c+5>EplrC`_#6m5r0bcMwPCj@AC`(!hdD@S~ZR@YBhTRM4*)e)wCB?zzN` zyEIbnM~{u2RSjk6#~J*2Rj1la&7s^pe$7+Eqw|610{pVBBUaCFko7XV=j;+}P#VW^ z3!42zvt&lR+wI9u@YOPUzM5&_P-QexxD0utH{P?I#Pr$HNUWPf_3e#^U7xbS;w8!S z0)EfsC0h%8@1I7N-4E`lPlKIK5*ft0L&$4}!G*809!~7UerFHAXM>4s&7Xz4w%u@m z7)Z(VE!6S-2?s`=<=yxAHNq!#{#iJ^nV68piw~q5DRVDnu9|Ql{Sxo5BL?4k{%_cbUb2s=i-jx%t?`7@-IgXFm);8`Zc@;Zp;#w8q=k^xQ(M9#oT}A*(W~*|=^Z!s%IeNp_dVlq(<26#QhU6#(@UGZw9!jFxhV0XlK3ex z#v2c$zwa;}{txs2D*nqyZ7Y1&M)0>Bxy-QH^Y9r;4t_s!fO|3zq=)c>8RkF!XM^+k zf80r?h$EgJj%0P0W@%&eS~OC*o6;n$K7l9O5}+ypr}d!ow2RFuedg zP`Y<%Vz8z-kqt};r-$HApS$_M;1XZ*#F0SH(y73@ku%yJVux?W_o$gN$0;+PGOK;b zr9Jrv1}P_huJm&bK7lvYomfX3_o-d_vJSrZhdh4;`rh7EpPI+ByCd1uy=~X0?_=?Y@&H%!W$zOo@3JN%FJ!U5?jV-3V(XO0G$pFz!! z=88EQWPS#jAI+8K$j*=E%I%wUXBB4MyLN9Lyq$=NUte)2HusfI(ig#Yi#Z71;3O-~ zkHLVZPvvfhb_neR+WOn<=1R-}BJ-2MW?;!ik<*+J+j z>tDLP!CSCF;$F#@8|6RY#x^QR?J0KSs;}|rv*>F7=7#LIy}0T=zO90GXwT&wnXN+S zrSqzHzo;8OAveZy31zze!tDFK@Zma3+d8H(*QsXNzWd#^WuK4HC*E25q%jn;?#~TD=?2anCF|98A4yT z*3UVN_br8HZCKfX#+tjITVIXQBNLD5+$&jNhCZEPoz0>@^Ba9VmHgDcD;FzAX7)%V zvHLL>2D*cI0cSi{x30A**>4TmKC+AcD_`kb zK5~$JhDQ)CT0SCy}Ip@#k67UU1@{&OL@Oc{Nz&yk#Stu#v$6}%s)-% zh+X2rfwAj1g{`U6i5=D!V2>Un2!E40V&(~0!b2Hfi0#kNzwgSZj}~G>*s-|5%&@Vq9mlMgHVj z_NH^?{-hn7Y(uQ?@XuKDS!B|^=*|1*nX^1TEXgj`lJGWD6v^JsT-DwOonfrj*WTyR z=-fILizYZRn$b6L;?%9@JS4n#;p_3q^Mh@-9U^w2jd3)Lor~(IYWxuT%)2!n|0r70 zi*H1&t9zWfP~VO5-{jSf_UYaR1B>UOW4%WL?wnVyCw7Ck-`F`XV_cR_-AjIWGyLUo zb62|EAHba_zRX@UVC%o-A2{!i+b{SQ7`jzl0?q%?@6!9+bCYOwah0Jnwd^nP0TWAA z{Vx8}xNoUFLsdd|t=vc7`aa9O4O)M_@*NxZ-H$!Su@fvMX573VCn-FB{m;F96^6?;=8pTmR!W_YokZx5B?d8Z*~YRyyAp{ci%7_1^s!8Qg$pyJqD+ww@}+sB$1^ zN$R-b-kR~+u}Th=``mtiAq@KY*2*&7vHVzYxeGXa8hG59ICtNeP0g6>NbnyG6dW75 zw-g=FOv=roJTTi_j;)Zf`>2iF7(UAWBiUROy{zKA1a~$roc;=T6n_XTbqBEe9Y-D_ z*_*zp*cn*(V724gM7In$Vc8V7Ae(K)k3N1C>35C1uE{?RtJBC)-Y)dH_C8&dXRit` zW$g-H(*&1*S#MU>86Swa@)!%FU?sA;`z1>;wjJNVMoBv9^WfAl0XW^wxbI^8p9T(h zayPSq)fxJoo_vFA$KuZE8gCDv{ifaH{ZxN!Uq$alv;LK}to~KinEAA{M)6=MKQ;%s zdCf=eT2;Lf>QfrqZR%0p;(L&}(Y&Zlr_z1z%2_Y0;~?+~L=`;dp{tFS>b#0r@Kuc;Fm%jfn+;6?j+2oF4 z8hn5c9_t?)!-LqzZXnLlpD^x?tc^Q}7nLq_?Jo~9p4zeTEk#F?X1!9n+q zuhh0f^|5JRtKaZQAe=5jMqka@y*#oh{?Fz-7DK)rr@wK3Akpd%gtPQX{cQ5)|MZ(? zjknX5UE5!woy?xa_#x`%W7y?eJJ5fd*)EcaN)Kap;!AKi-`s@E^Y3Gp8=bSwxh2y#YE-(5Ct zfBF{kG})i#%-sqxh z{J4a2I-?Rl^gx$*w`X$pY5M+Cc(MO(y??`xZBDflZo3?Ql6h5IF3x?|36FMO$~rdZ zcRf$fDRX&!8+V0gV{}!tRQw9_`F;f0@$PqGET|64V=132+aC8po;haMSPKp6^7caA zF`Z?swL6zCyyg|(vA#UBNA?=qhp~Rd?};Qh&$_f=I(VXXf_dg#??esGN|$B&(so;( zcjnPt3Mciv%WukCoL0Mwb_N$-J3K36@uzk@@jizy%Pd%5kx_p{V>j$>NIdlKOA;G) z`$$=Tmpj={@?5Z?-myNWj!(lr&GaR`y20gdV(j&9%pTsU52tDKC_D~2UgVDBJfnr5 zeWn=hwXPqp?_~o#8^|Ix=1!n znM(Y{oJQG(>#i2#w@(P}FxU^sn`a(p}dlD%vkw_+9pP#q<)t?`tx2YbtfB&1I~QZg6`p|B1hx z&2Yzq$~85cau<#*2F}`k_vS}Tzdat(9fQZyxbXA#IX%}e_yvPEDdg=sZ=We3_8oB4 zJDo#Qjg!XCXWQ>_65j+rU7tmstBkwe8vOV!%p6;98wa9^k28k1bNH8BnZt$qzv?ma zD#M%SzSp~mS(DfyH-v+p9rHn+iBFL{B<9J=TwcM;+dV+vYo7X$dx+1}y-j+ipXKe8 zw|n|U*Y%O$G3jztE|Sw1aA5p=kYk@LUU2k^Necy=^qTU8=@Z0!U+X`XTJ!Vz)S7Sb z`vt$J>(c|%GbaW(7Y|&T8C-K2`O7jV*HmOq7y6D3A;%TXHazrA3unv$e?FwW_~oBS ztX&()z9xL3?erBlEmR#JUY@&6ulPhFetC$rkk}{Y44HX%MWRA$jQb6f#01tE+J)0< za9Xk$a3j7r5Y`z(&wD$4#6R}hoP6^*?>k^U4`@aj## zG7gNsM;$5r4KCz=U*tLE$7s**$v<@z+M&Ab7@D9-DAKdF$lY^wxnnd4dZF^Y8mD_c zFI(v9c%~xbr_bq}F}n5AXThckzcJ#WhL09HW43bfhDMzw7MQgV2*(#Uy8eNE+AoQX zv-ajlwstD2Q5GA!7g`9k~79{i)1&Q zn3RaCj>8ke>Z=Rm4pUD?{VejmAA^=st@sp2xs>aNVV5vH-+(&)(0iXC4^cB9Vm-a(d#H^uQoo{ZYC6sxog|oQ!o>wP_ zGOw=j9ed6HXPLJ$6 z-=&F`)BOKMLHJA#Y%Ttd;VyJkD78)}D?&7a9FT&hL}(Z85l`Z~BM_$U#B0GVSkaMnVZKN|nK+B@#@29c+XraWjyL{4eyldXZc3!YZ;_m(1+hBcYR#R7&bmLp(p;# zjo}Sz@;=mmCVthbM9bVyCDwgE;_{Fw^pyP#rma7vj`$B)!`9yc`|qae@v~>sn*6c7 zLbl=RQ$}YkXqw$GeoGzdUzJBIY`GOYr~F0ti`LuDhnElfCwN&Hxwsn#c7LL?YI}Vg zS(C+C3yb(KArT2;ZdiF=*3wpi^@%O?>|H%M$BG z_2Tavwn07WjGa)QqA~QKJld2XyGyI;V zQEB!m@zt7>O~Cfg8RI4oCsjwR+VG(<_850;l(9Ig_ZGIw>-j3a|GBq^iyzlnv##ps z_PUR5cyiIdec`_j;wlqV`ZWRH5%9s*Yu80pvF@tIPpgBykoSjn8=C9$ z*0U`yUu3Q2KH?dvzLe~lE7gvPchCks3@$W0esJOM;zlZ9Y$4*0aOOVYWFPv4FB$(Y z=H_rg*!t3GkN0sdQ2nudLsvC+E5D8Tookz>@f~Bi*dAAhoMG+dw%%0(FyV_Hi z8oYD&-iz51bRpZ+x7{5M_Uxw?cELC3zxUl!T?6=h@jT7*u8xMpPUv#(JMjaiU1NKY zJ4V$LykLA$jc<)<(;c6ek2gfe=M}r(v9ZBZ+WdueNB+Qh4PD(3Uc|h{y?G6CS79Oa zXF2=oR%}&2(bBSTU1;Lg7`mmH-^{J<0Kg}V*Wk@z1M}Eb<9)Gx`j0Vt#C+@#jbF_$ zw#~9b%y@U{2-l-sH;ly%{14DiHuXc6>(`x;*UnNEssUBQ;GMK>cn@n z!Sr9}4C)x;4YW>G=h!|>S^d{u^^u%dQK3IZ9t{pk#uUGbHE@;Tsa5vS6*>zR@0;

    LaGDqifka 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

    HAzZ|24lWOlv-jnP+)7)Mxvddlcqv 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

    ^8J(qSGg2gFmsn((f7((z0?r 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 z ziDkjMvs>_A_hMz)g}-J@E3xgTT)WgAzxx>1`x)0QtaoQziC0~W+t51i2yQ*l5iC1! z=+wQj!CdQ1A992Mu!X*XUuSgn(2vtR%2z$XS|mGxWkJs1@D7aUj#kPveo~ZX2H^{M zJ_%gS7zs9lhhX(2Yele(@30PVXSTy*=$_y9V89tWl>rS{(uq$A`L2=N-DcdA!2NX( z=Iz0gOXFJ_KBlzJ+@}0Lq1?gAj*phr^QgPM*)8wugqJWkIx}Z3c|P;AOO&TxX=l5B zFHK(+9weRK)!-`mhWqcN(;m$9V=xdNXaIkmXHOB^P`f0HJ=p^MjJ<^XXKz3Al0Dq< z$;egFBUXYhI@u?LrbV{){nIxz&o^qlatG&`mzZPnpYuW5DY%GUJO}&*OVw|lwWPmr zbEK@0biKgnerz1purJX(R+`S{;K{?mRY}V}IszWkNWTu9XL~Ss(u_@e+O`AjX&>dO z8!?Z+?46A`eAj)=uQG+(KAKoF|5UGylirV@?0v zI^2EHm~`UB@JZ1e+U|^Zwb~1RRipO8UzNabo4&G_Y!w|@2;TOefqDR#e}wj*!#|9C zm_5f>#ohkz2ERM=$+Rc&)J@#w2yFv*PsILa?}OH+uQ#sPCcopzD^Bjc-r7{a`p7`8 z&slzF{LOqhNIluqgWs{bc=2B?6~2t;bbqY7w}J21mv--KTH4*)y|lZjd1+^J?$#HY zuUVq{<@53a?NOV0D0AQXVgBSOYv*T_Yuc;6NG@>xG10)A%FaD?Q<>UfXy5}L4ZPpr zO0SKBFNTL`p!O(LF3rx;{%s^pWF7^_wMvdI`LpgBlX#rtb`l+jY~6_+|&c3GeBS(tV6sUwR-q*Y2)kk9k9cwNW}A|KE02`f@A0 zlJ_pj$xZ`r>B5#HkNFqY=@Q$jyKcNyC%Yic5u+Qr2u+df@*hbfSR7Bk{e*nEAkSI- zm?yJq$A(|F^!2QJ<&AKsLfo@6(Y>JxyGQc{nAALL)k!a5d$`-^AeE*XIGMf7meb>6 z-K1B#fM?(6q*?Fcg$GXA&OSt8{nT*{{l6c$Wdj%RczPfDq3yJH!S#{UM?O%2pAjqe zsp})LTM8p(w}r8nc;1fvGvhIpvd=HJjtt-jAj$qru+0zVIdE)ApBbHnZ^vc9DFeu; zfmft176_$>gM#A>;CRhIC46wcoxSlWIKH0y=5}&l+Y2^y8F|>^jX&Iz;QVDi|GM8D z8@-L9M4Z7cIJTOeQ|s)X&)(B==tDe2VQEI+V>l9@tYs2h@D@I-`)w<0*z0i zsJtxSp1iT0Hhqt|5#l+?_?!)9bR~Z3@^ONTo&xCdTGbV_2P&Mq?-&E>3x#J!vl#Pi z#vI-OoI&1KBeBPjotnIQS3_GPi~}2|tcGvigbsTqy2cs!QgZh&_4pPGMeymC$(;{V z8LJOhUEI&yYLP8Jz5zw=TUZYk?-I40aILW((PeB?&cY`=28>jf(kAYj5F5NZE!J=h zzLt5S@J8aH!vk^j5KZ*C1^-mxaKozOMPckcu)+NlHdNH{cDn0dv5zw67rJE*-tCrG zaCEplr=DA^n9{3E)lon>m$&~uG~-ru%D13X{uDapPoh&^85^t|wtaTFuST$qdm!NBOScvxz6$_{RiwxFZVxd#Rgb|vU?k>#|Jq$*OUp5c5v-3Y%)9=?VMxy z!q;D^`uY#wYWd!)Z&iIQ^_F;4lOEgL5$UCmtuBg`^?3P}?%!%>6#B`_FV8K{c)1i^ zLg?~6uZ9|zzZ^QS;$?j6zbt*9zn+BVQknd?RxyumR$ra7kmv6h$3J^8&o_wpiEQZ2 z@!#J1>Tzd0gU-A$wp%Eo0WO&K;)~&H#tO7g`VC znjyHvn~yEE8k?5t{?hQZ+*=F{w#Ekz%s6V*9ft>Q$+l9bj%|8Neum9{c=SG4uv1;8 zZ8gjjtvv&Ky^Z`1zJz`>ys`ltELt}}Kehj_M?WCCG%1`B{d4f?Uhp9Dgw+Ykew!Tvw}<Vv%1(1AL_&xK{))`D15+)4(uoATJGJ;2@gIhuf8a9CjR8` zy5hdvrvr@DKGv$*CwrZ7@HXRpyp4D@*?c{}&yLAYh>@KR`+;}+7*BKHygR{I=G%oE zBANrhko%s~Gd>o1H1sF%_Ru2klY9l9!&!SP@mZZwJK(^yns%;a{I%B$ao>r}`U|lB zw9e%FYV;jN>d(S<>trF1*;7`tk5;&Fk8GCD!V|O$zYx|*SSPxK7r4K#o4OuHPR5?F zwUM{t+kfloY<2%(%XHajyE4qt^G#{slU#S=Xf9X6Bk-rg(X~YmcQg zM(!>7V*U>6OeHe(-P5cE!NJN`Ls<>0wtsfa$M3xf*SjHePaETuWx_Cg|8$-;>%=daJB!fK7V^lpMe*(M#U=a~q(u&t()aXf z&`>6BM>Cb*aJFMM^@ z{wwON_v-AV&I0NTGVkiGnFGh*ja7fm7jpKzSASLik2gOM>&Vy=8{MW(Y(Ji(O-I&m zarg(3) z*%J&l=R3NfW!%9MWUrty%g{-caHnNxe0emRd*%CHv|8tLpZKx@(r8ZdZ`PgC>)8bk zPNyvm+E-(L?ySRk8dvyk#`b6+azON8E$5X4iz>cjr|pxa9r!q@+m;M-4_`lVw@(U3wWmqUD~~M+?rO{9 z|H&y~?%d_hC)z6?;nj>gyz+q>=3avKn09a958l~lwMqtmC;OIP^WFkp$OV20)2#!lTjkZGhpD^q$+k}J^!y0p`xocy zpIsB2HE<05TPVy~LiVHL10uK0++%-wrlViEv$7z1h%#>{%)lq|&fo&`eGXhD+JAYw z%fF5#t5Vw2v{CPl?3}3ZsJsA3DZA3+>_#A*LwfhJU?mlx{CMXSndgNM2>+a(K6WYRrz6Lc5|n-v^~jO3r*YEwwt+b+N3*d%(ve8 z$o-S7mDi@Xv~^B@vQ2B}5HQ`%zdzkegr&1iZO%6;+`u~oY{UQU-d97H?|oJ4y};i4 zOYsN_*B)N{jsC~hc~5unoXWF(a^4Eh_PM1A83sBd?E}OQbpXfFX^T7=(c$JGdcJY3 zcd{n1jeM&So3)+Div#1sd*aQmUiSR<^3-#zpL1KvQ;yDjDR^shc`7zJI|`n3{0U^s zhVSXwG2zAjf&AEo{b{Y|rl9l9M6aBK&Nt7-w%pY>v;RuPPow`n=Hih=eL3=)83RYv z-W{KJ=upp;a`~4(7|(I@sQp^E;zgxXS`2bXqp62pY?+%rb?c8w?ubk-MCr6%x z{<`O3JJtIbZTW}K#}eF!5dUWRfdX(>5JsA(M$7^m_ zs_+Qu^uEv>Nnwb2@Y2KFiL@h<+KW6(yk+B#NV5I3%VRk9q4Zzr%_IA)cvS1j)zO>q zb5XZ{)s%7mVf5OM(LTnk#~U+!o3!Tb=|0vI5p5}3`zCPd6*QXJd!NVBz zGX{b`R&ptH1*yRcR%);~T&D8+m!Ye#v{UmmZXe=%KF`ghSxG*4V0<0d^#wD^5_b`{ z#?#l2>YK`uEq;#|-h%Hgg*Ctz?!DGM6s7>pLHQ zx@DfVT4%z-AKta9)M~#sJ^WHz#@cU8|D>If@qycStojsT(Mdna{nC#nJ58e1k+aLeD_0cyMPTljv z=NeZ1aMItkHSphVThaWVWuLLoF--mNBW(@OH9R_Lk+rA&1L#{Ob+>h#%s#p7;P^8) z+}P08@PUR$KR{fZv`2a3J7!}anjgcjNh%JUdw_EsIQIbKII!+e8pZ-2G^qmGAlRI0 zw9iQcVl_}w29ph=l+-KZ#;U7JvsW%)b-OzKW+Qx zNmEYztvw}L)e+9y$@wkdn7e}SDaRUDO%4AvH?(g`UWj`ue|l}ztJC7~S8nK?96bfz z`QS4Tw>@;NHT`dnPVAao(EZ9!IwnOAT>IHaAF?NPJ=8e0E2R5A)`q&4e{AY)8?+z7 z-!}W}u1<|HV;cq^$TlqT)NE%R%f6%6n->A%D$u2BZg5`SdHd&0V^Kw{C@T~-c;_s5 z=b(polt+(?cd~}?j%>uwf_GME{(^VTQ`dXpougO5J8|$%HF&4Thj+4>k6Ap@O|obl zywf}a?_^yS@0|UGi+B3&9@koM=BG>hp29YW_tkKaUh6gVv)X`$FUL zZIb0neo~K)%wn(A&wkeESf8V;S(GLGYTD5myko0X{NI)q6oaQZ2UU>P@Ud{_&4)`f z1BYXkpF7+)$HrG*pbq?4X2CaGI|2t%w9VimV-KbB8qvGFMjfW@>hlG7+4K9YvIO`o z`4kdJ>9vpY>#hc5{{`Jjer_jf*^=OD}5FHx?V{=ku zmEDJ~O?tP%%IQOV?FI6mCx4Rsaq2AeY*GFJJRzH;W5^~{R}uB=jn9T0;nKcK&Axs+@&2{BZ^y9iZ~|rO+~sIrv#L+F?&1})!O?#EImN+q zIzB@*?%)Jx-Wc7sWMHDP3%8ae4KpKt32!!0dqvtMv|G<=lJ2-s@;ny@R6~u(Nuth`p1S z&TYfTudt~)h)q=uchb+8lm+T`@saMnFyH2lt@)3-8S8%V2zP=H9P`FqcIrkRW71Y3 zlT?}jb8lpShh?bw$N;+O*Nj))_9}0jekI@~?%z<7oK@)BZ`8oA&al@cP1%yES?HK+ z0<)rwFSc-*UFfA!GmGgf{neRP1M33z-DC0OGvG&6p6+JLtSw#A35;6OC0BCovaU8a zvM+!9)qnH6XnOZ~q5VB{#L>MhTkYB~dut%eFQeYaep78X@+|)zG2aRelzU~6W=wf7 zGRK3;-|mf{zV$SE|Av=WnC@Zrm+vpzA5Pk=k>mWI^ZGw}Ui;-n)>re9Z@PE>jFfNA z#Aaba>#wjWIFF5o&Y5al_kPnlvmP6}?0K$C7F(j#_k(-32Hka`G%5CmPx}5{nPz5} z?%6DdzA25KlAyJMz1}9tHHH6--bZoZs87$ZGEd~f??fnT`-b~D`{kZ9t)adK&V(qP z@d+Us9hxIQw#a~dW?RG?#N!Qh%>{ve5=fF5xy6l`sr)XbA!wG zuCUHLeq&3U^qpIg&&i)p+l198UbxXZQ#x^Y+?2P%+b^58UG06$qsODu2p7tR(1iQT zZ1RPh__5w9W38_(?^f4XdEYC{!=cVxeXq3tk@3&dzeUWC7dX>diazUVbp?E|xLP{J zRs1Vpe6?}-_rgbZxue^tb+FjiF3ri)jt(yuok-@ud2B)&1_oDO;(blAb+YBH2hpD) zUoEsw-VeR+UypxNJ>ad+A!obD98MzVU4mTq0r1EjKD?y5UqV*Zj~;CKH>_kodA8qL z5WVx(lIU}+dp{17JS%~Gt7J!hvh$XL=nU$UEcbg;LQ&mMxdeYNE$|UB_=wfA#pM3T z{>6K92j=X}{p9>TZ4cRzlD`o`wcliSX8@M6QZx@6et((dpB8W_SSXDoULnzcu6xKG=E~-79=~j z%}*NsXDs{E-<5Y7L8BcV=>@3(Us8XMWz3j&}i0$U@U!e$@S1^)??!7 za)(B*xEhUyzPdEp(?NTFpND8Pv~ND^VFZo#)pfiO8ttp=sxN-tbei~hre9ET; z`q%CM$?yN)(_wV%(%Jdxa4t0XacFR7k#%xA^!EaD{~g}q9cM|G3Qare;bY;|MEJ+s*KnX>Qu1H*g+^b+IMgI@BRr z_eE?jnAgg`cgn;iqDi8ES}XC&ajiBs7Y^M)w^q7Rdin5x_S`DFes9K-7`>=etmz2^6&qp72Enhp@)_D>e=VED+k^_lRM|P-pM_!y@4{zXOp&*xNyiy<+od9 z`7?Q2c3J*)ysLRP*!cD?NxoE)d|v!w4SCzS!@J}|*n6S#OQ7>}`oEqtyv3#sz-?pt0*Egot#^hYp>N76ocPg85(1|FXI?I-$Ti?k%d|7R6=G<|)&i!4b|LDql z&|fLP;FwrX9_+y*$d8Qgx5VA$Ddq<{v@J>L{DMFHm?Zp|yx z?(ThFT)?%bznQ%8k9uwJ^0VK{x&Ys4Y$@5#41G)QQGm}ejSKp&)tZx^VVz2sl%S2O zXQir~ zY4q@3$h^(bm{p>;0xzlFO#W*)?@;^8$dP6Ctc`u_*=5_8;9X+3YY)BpBm&C z&%@`(x3fO#U6{wW46l`i#5s7ucH0_nCT>T0>Vt$+hNG)eSp}|4VCdf;7rKeF7tpOj z`tP@UHTF^UoG&rwDn{Gbv@i}1erx33d)Df^;Wy=@PT`L%tH9~^mEYA~xECL?TzabU zw%VQkIcMj%&n`LIhqmADr;9N!ZNy*7jA6Y;17$4ZUcz=)XXe!H&!h5M=>NO5f2i%g z_Nz}JYY1mJZS%vAJkA`~yIg(n{#!g8W5P5yjn2j2CL^yIteiIFv%_x3pDa56_R8Q% zm3J_>I=S1!Q-_*w8TF)knQG+UjB^~E+vDNZIP^ZBc9=b`oc)>l}5-mZ9(0X|7Gc zoRDJ^AiGZ4F&$OjV%kc1D!UWk+m1~@b564FDL0SKhAOVXtEYqX`j>40x@5;TAi0Be zjBP+SbHSEvz>6*~)4tw5*#oSUUTy5)f9Tsw^On2jhQ|EhT@S<#;ginvU+HbiO;Aqt zKC9JkbmqGQAH}Vt&vCDgga7c6*dcuGcT$gZ(+RI%f@2?JXtTBp;XNfw==JhAc20lI zIKGJO(bGIn@l<+#Ngnp>oVF0Qorf{+XUsL;gFAQ_>p{vM-0%4%`2luK&+=f?H1PI> zx&@judu`6Y@;pzvACtEkza%I4{wa8u_8Iu7FXkD%&DHatr;X~Hv3a_nF|Ax#cJ}6# zWjcGWu{U{yPo?ia>goHpKp*e-bpGu-wmEZ$H36=4WqtlN#6n;%{;3Sq=11aprE*PR@jwvb!#ix|$LgB)ZpsT znS zmH_AI;nfcQMo%G z$HeLR(3PvvI>Ao$W_aVF?~n)EqrQ1A9B0xhO}Kn#Tc0;B?abe0oK@@~eJ1>aY+y{k z))u+*MtRI5TLpcaG-J(S{~VydzwDWC9p1q#_Z7iFW8T48A)piCV zWi{B=U>^>R;+z8cOOXlaE(x>$KV9jr2WtX;S+GYhVV~Ps;fDFst4=-L+`Zeu9AC?s zZIvHFF0y}Lq^_NPuFjd&TcM3{)(3i|1@d`U%Xg^e^pgDX_6^@c2HAr>f@p}19$Wnm z@z&XF&7DSY>@s{?mT-TOse2hdJxlF|wmy6$s1Mon;k5vLxXX^2HZ`y}kzJ~xIi0je z=SqW@0 z4KMi%_2==+l8^x$)Ob=>R%zkzygNoa(y37a{S)7JukZVm@4JZk z_*cGmFj2G09P*Wyd}MPJ-8+JXJw(3tr9iy&aQ4B)cGmu|B! z?tQ-RI^XwQzVFZazCYpnW{wTjaii}$0Ij;qS6>C~yu;wGI_WiE| z2D!ffCSZ{5`_J{2wU4+dzBu9J4BvkdeN6NH=lSyXk{6rb;db!<4)&*J{xnfm()YiP z|Fiyo+WjxS|6}~W;rs6;eS&}BxKKQ^-&W89hZ$P24}FXNN5`9Xm~<1sOaI-&e}+yQ zx}*H#yfYm7UJJf7c4zt@OFyqPMy{hYMn^xQOvXZSW0g6U4nXOQOheyc+AMmuYn1QS z$M1CQ!j$IzJ9VG?zr3=JvFZFG=MDA#h}HUe-iq(M(Q4J2()U_quAN`AT5mFO@53I1 z?NemgE&-4DVKYQSUYO$$)>AuO$HF6)4; zo3sGsy9j?k3)q-;J?;;}d{MzfyVqDhAZkv>^MK6DCxUr2-#pu@?!+CzBWn%91DQL5 zlb|)-3dcPkr!GD?6MkCq;IAbg{xz^Sa;LnHhII_}NZTCuwEP+m#`n|-*c(lhVfgkm z6P_#K*-7jpj$u#zGSDJ%sMFGgYeB0f{u%!!&i)bh6$>z?<+!5;abH1PS0;SVqHg8y zo<2Id8e}_9UX63u)$Y)n(5dL-U9^2M{gU}B`WIj?{3y_HkiTNw*XhhmK0ULcQmBN3qn#(rg4gt<(4`;$Y0+_q@ zT6;Q>K67`!N7GU*ceB%XsClog z;CchPC2&*d`3>L^Ux#16YGZPf8#?vRuertSeAR89>aH?>_QPuP7wGHK$36S{v5rKU z*_kQ*s{LwBjTwcG%<&TAU`O~gZ{<1oYN-V*A;N)rm_}QNbQnjbBg}0!_rCb5OtT;G z4&8}y1FrlS>D8E1=RJ9KmH8(0ZssY^BaTcK_ZY=WvP69m3qR{o*AI}MZF=K+cj%Yb zR}1*}rfV}!0mn#d3jdg9?^K+_y4_~}b)g;ihC9k|wy7<;bdvf0wP_~y*@YTWUU-_8 z*u#9*_!DoJAAGL>Fi~N-@^tjVG--_e_l+e*^HxHfRab#tOu>0yZb!3a*pL^BMfp?yqR1 z6Ltgk8S5mTdmwK*)9I7*U`Qd=A%PPK7dWKwR<|W`W;x43{Av<-wGQywOx$Z~3*3k~DPf!l zuVREB>!5_6X?+&|ApHCfBaZKh?&YSeXa6#tdQ^GpAM-X5&%15tD~aLki+cDyf7oVo zd3u36eRBLS?OaYe%w@Zh=XjTP%5(XY4~u^(ZD2O*&N7y_B&Y=%({r0<Nd&&<)$LP4bs0=z#qjw)jRAydYNQ4u!#IH2?Q2xW6^i|3%aA7sMSI_6}DM zeA!?x{ZFxnhV`iP_apMq($hT2^3dvw@$@v7!Kc)V{WzI9O-}d}=NiNSU~Ymf0Q2{w zKLSio>t*q$_4x51d=0>#G44@c+CKRSTikhAJGB{pAm4&-9r#%=pN9^mbUi8G$3JgH zdf+&+ZpRh$IL2{2-PU+5bHtCE(A{pe{;9jU@ZAbMZ86?Hi`O(-{PYdzQ7j{dy#O2G zD~Gz<=a~*Z!x-N9!zyzx_!qx7r^~bhNV^$l`!|-^%+DdMw^-r<^*rb<<^qI?yv6QN zeX$mzPk>@8jQZV7^$opF=}dd<;0e(0@>SleZ*kUNJ;^EVNw&gRW-I)sDxJxMu0}kj zo<^MseI)92Vhl{cq;S~O@DF`$BXmV&|M(=X%DpYb)f<7UV||41zRef059}S=>;Vt# zHTPi5Z-UQ_*HDkT>nHq8R~%=paK3&H{F}~gqhF3k?$gYN#CS`;JXg5Wa6jevI_Oqm zyX;H0RqAqbjbH?KE&B0{gS#VX;FE{>N2LKS=~g)R5F>unT?$Okhj>Jj=iT|r5W1~$@TG@kGERF0bi#hwj~v(#!;1rI^lOhJ34j_ z2OJo&S*bZ2$^f2>-v^mUPummg$wHqElxyad`r)&Xf2sOnEIeE*QGK&_%$$riSlTmH zeY8E?09eO{^L#DgQ*t7?jhw4fcOILE;YAbVD@J_vn0VGf`$BSE{N~e*^otNjd86PM zi34xs{A(->v@;})!3g{+pW+d!yySM-!F!pm8uju`y@BuX(jGzmoPQ<9^P5jE@*~fv zxa4|{Smj@a)4~(Ge(KUrJNBbXIQ~z@aXs37*LeK_IkaM&@NU>l$iK(--x1gXVC(%v zcmvXt$FqGl;4j8e@bKh+=Xm+h*79+}X-E0&IN>&=FF?3~v2Ya1eo(lq`Zu}G$>WsK zi#AL}_;~3VHZt!WLksKCMis}kk>s&(fDVNnx zbguEqy%t;xnDPKG}@JvrcbpcH^IYlH4X?zxaxvE6BLZ?O_{+p}Sq$d3nz* zVHqor*e9582wPm5SL|UMR~{wfiGg(3YhYsjkc1bb@r30n`r)_2lTY-A4qb_|W*k^) zYa{;2{PN87SUN_W7_0vidG!extT8FYSQLK7ZI(c8oP4=Vj{z>*-xejHG*p?7Ckscj{4h;X} zZGc7ar=qb z9a>Rmg;oe(5owq!O!8I|7i&S|z-8g1arAt}+TZMVoT88V(tm{Q%CDIp`Qh^u`$ITy zbb%hC(0_5(cfgIaEQ@ONzza6acX2NU=k$>rZFT8!_%P4a7Tsv=_xAyQ2lz=N>IHt~ zmcHaR_u{+%ICR#Tj;7WH*PGFnv_Pvp2m5ufHwXTS*zQ*Q-P;S$mcz)OgZ%VuegOH% zn;CDjY{R^t6#Gir3n#$`;qHZIDblq1bK^n#+ZEhL)rx(@vygTn!h`k$6~R9Jl=91i zdnQC3Vf14w_FwJ7{zTRnEU}*|LVDJ79DB5)>fRXm{MweT1zth1wqxBYXtQ@sYT&4@ESpP>Dh72&nK z2kEYO^c4+vJa)d}wp6!wu*`5qdV9UUCLZ0UC04;^ zGxQ4^eE!_l?nW6^$REDBv(k<7qi5ZrT9og${~K&6*fZ<%i?XZXC%BgRSHT{THK{#Z z;H^x+R>-p5?+>pQ`;3^Lbz$B*>)RU6eam)HZws&Otc1J@XlI_Sh`xgRR(^r|Px|sq zMTgOsW}8v;YxKA9zgB`dIQtW2Wg@Q*o>&Cg-vBucoo3{JJ^q=N={)eq;)aha4}7z* zO&-AOM!VSNTE9Jh7JF4UVji*-`w4+ht1*8IplqQNkClTgk8?Ryue(MIbXzz>|0yb5 zJB)C^!1TmTbrzlf?*f1LPJZee0Bc&(o*C?sa|2FKrni!POB+OTKXU%d{KJ0US0LwE zq|zRzgR ztV!@yI9&@(_Gqptf3La7Pw40M+?_Zdy7TfJlKHuJwjS**ozXa_5qkifD5nhNKsIh! zHWT}7uhO;#K__LXqa1ZjhOPEXu+`#j!p#Hrra8-J9%|m4t%cCu(8jH}8v|w4mucpF z^!YiAr|MrX#)!I^Y6s5Dhr%_WgKjTuX6UzWpTN!fOf5vccx+zc$4K59w=0~3y!((h z2YL5dd5gJ+R`%^^e-_eqb>8xy;0AxJGTfnF^lM+Hv^lfv-@%6S`#J7VC+rSgu-)|H zzYqV6J7JUijt{}-W$Yzu-!XY9c+yh4F7_nD|K3PkDfU1=1fKga+Or+9V+Z=j1AE}Q zGA*QRQN%N@57Aaen{p}I7`++3n!yL78+544+H-gUYHd%=0eaD|T^3(W)>#NA9}jS5 zon<=_VSusVD(oA>I66_Mv*_fUH?M-8u4isyS~ZV|;@pA<_H*FsK0`B_csG3k?l(1& zhiebqlhyL^@ajVBO~pR6Gj4o)iecBnc-12x>pBcylqYbWg5|K>k^Nv}{?{R2a{O=) z_2tWVlubd~+o7inlut6>gYA10U>K{*_1kSG>-@{Lx~X(6HP^-Zikaq?JdA0Szw>0- zE%ZjzLw#uPn0YSq6r){+TMM+pW(QgPTqe@B!gjI;urQus2Ex?%Ff0u^r-Fh1eCDB? zYrp(Pq=;AHd^aEteIUXw+b%v?r)oFzthdTj>Dj(y-JuF&jdY{*DCSdm#czcR z$a_Wm$XJ~72s@9ks|$EX`!KnDcMr=Cw}1~=w#_K~c-1;^cgXYI6=C?uiauY{0o^ym zH1zSg-byzJKOxNP#T_hXK`T-Cx2LXOg|&(Eu=jS-C+>zPDk2-6tiU<1w{d_4_ve6y z>^jahz&@Mv?TT25I~2=F>xiz^T_1rLfuTP)WV?J%;z6XZYT9K|?+|eI>4C%e=KX~= zptW~#Mu6c_z(PN(htZe3gJk#v+-CsWGi}?4pl|sQPWYMjEMWU;4eWk-^WZ=3^@@o9 zBy>Ejop*R#L>^2K&aA^7zY(NY=P#I#cM~O#8^YMHf)_wH8}U~c?Qy$W{j-*+IE9C5 zJdapyQSmBom&H4h>riq5Y4`Kt{HLP_emJMO1FjlZpcMC~-UNJNoIB_4kK9Z2)zm-h zaQ9wSg}zz?@6vy{Ti`R-a&*911m30URIsUYJXehOOI_iL@jdCHZ?70{Hztm+k!Rzs znBSi{asD2;KmCgN?NcVsUo&;$c>lDC<9nu09BwvI(<%LIPFR=;+#(<$+WWpvt8*Q2G7g94Tma*%1f6U)I*1+SJu1`1eG z$Up(h#4-@}ZS+lwIUCbx6U#wSjyuKNOu#cE^*D539hF`tBeQqxk* z6`97JVy?(E-V`#DX*yHPCj~qyWTb#+Vi_40@T9P13V2e?Cj~qyz&W zo)q>?0Z$4!Dd0&VCj~qyX}F{=K;ZnJfxR=EZCio^pY0^ zZL^VH@||QG4EStDtG>G-uBFp}5WLy7UslOQWtbfa{ZCq{rTQ+Rt3o5_FLE|QsU*e&0 zi^?x`3*!!zU*e;2kIFCS*2a33U*e_lb(LT00>&dMzr;_&tMW@6HTJ6f5>Ji&D!-K7 z#t&3}iLXYh$}e%&_-B=0;;r#7D!-Jq#(${%5`T?fs{9g%jX$XT5|52{RemWOjrUc4 ziO)t{<(D{Z*!*%lyb`aC$=1JR3pMhre@)`IQE2_UC5{_qD!;^Y;|7&q${yp3D!;^c zqgLgYIB%>}`6b>Pf2;CKSz&xl<(K$xd_(1zG+=yF<(G6|d|Tz0yxn+4<(Kqeyr}X^ znlO&2{E{w=AF2G37aOmt{E|M5PL*HMi1DV%FX_bimC7$^!1youPg*ddDzBV77$2&< za-LvZRC(o`z)1hL92?6{gBUFElEr9tJlXyqxDU&;~V1(n~Tm7vOR(Mp@jZ_&z8m0!vg{g>w#skO%KudPrJOPTTjjUt<*zEgMK2$z{1&}TdQy&$HD5NSTK}3wFSD$F zx10wX#n!*qqLngt`YaUVgEqd{){1(0JRrxJ?*{||j zvgQXWzeO*tD!)Z9|7`sSEqeJE6>rhYf9zfv#GML=IfvXMT8sUOt*5WU zeJ$B>8}^yA4o|wba$Tn0PQNrI@Eh_S+>`Cd#9rOI9S6BbHMX`OF=#JHL^JSUPGcOt zDG<#n5PSG=RwYoR$-am-)g|U~udhB=_-Ho(=kPA%@fW~vX+h%r+B)gO9A_A!yXz8# z{x>Vaa{>R&n%wh?eVFuJUWI*%^H4uwvsrI`i@MwunCIk+J(TBB_7KXZuiEn{KkWZS zW%$6emC>xaM08<6f^#F8M~)58S`fC*3%C<*7hvH%64=umw#^$E58PE3U|HX*(F1?Q zetj`74@*74j`mEl;2HAQCFn!8(EcA4;RjLYhPp)TLDbtfAMJX*B7E<&m9f|6CzA7r z9|U~2BW>S(iO9XbsEp)zk>~T6Z*rKC-Wxnp_DcTiT4UOM3`IR{-`jo#Q#xYostGdg;`@iD$FhWTZM@> z0LCl*t2u0V;V&wK#OKqGg>cS26uuq*)xhVH$3v}G;~#w%Y=B>kZTP85g5w{}`Bn&ig+jqRl(PZfk0Aa4%XzXQ`WpWCY9Z21uwggK-4$y60pdY7!R|(! zA6nVb`p?K~KUEPd^Hz#|^yR?)Yk|YSr`dA=)06zP?6>491tR>To0(YWyI48rrmjBOMl;_LD9e_!8f=1jG!2a@Kd{w_;A1-_p zNFPyRtlC)->3GRk3jf591{ufx~E=Bv}pP1obT;2ihJ8JDqp#hIRu z+GjpdygEBDHVyn69#!R>7UyB)-t+O!(=_0muuA(1^3}sPhHda$rx}*)<6^8YQ|^Bb zUz@a7{aW~4fq%+yPiKXPxZYFMQ4d^K=Pyy-sQuYp=u_4)`W%Y%HNtQk&II-^xEovj1G=lSTMbL4EpMStex>^Ca^S{wq2T_n=+Y9`NvPcRS8H zwug6D;jOnb9q$lPX~*W{8E1wuU#FF?)5^y?K~z5a`02L#U?dFns_|g{u$4b-<>&n$ zDs6JTsy;14!l`9QII-z|-1KZ;aZ>vVt$c-6KKgM{^)Rh0zpCAhbo{=M9FKO42aCrl z(_@u+F*#3CnO>_*;*+W~xjfciorDV<2htejed8Lc#`>Iahloq zwRDr`cp9(HFq^M7%*F>CX5-bF=J&47G8^xhY&LF^XNh7sCs%rxW|lhW%SHOX8H?wH zg^${&ug(rIti*y#;rLiORC#%3>q_)|C0bR!E&6aKs~6`8lKN)ktRBkGH6~ZZ!EZ_L z!cVk1+sm^p8qPRN7q^g{ydJAM~Ght-HB-Z|y<&N4p5#*=%>amTdm!65jQ_{o~;qq8PVEv^j#axy3k# zMOeOrGb4|{=TO0K^({KiU)2uZayk=rEywwz+Ku%~mQ8c-TZZ%hdtZKLWoG&hxAxm1 zXLB@HEFXTN01tf)*k+5fNx6+#JR76A;u%SC4%z0np&Pw`x{uiMM7^wA@g95&9>=iJ z_fEn;RE;e#2%o@1))_md;X__>+&@pqiC*grO>3Wa3TIDEZ@Tc6EPS8z0X~(d3g^_q zJkvuO+XtUo&-*HZ{NJs&n>g1-y^Cp^+T8HZ<#_AOk9VBj13j8yd!SD_)3m^zsW`Wc zc8W6B;a&l&eEMmu$GJSpwUKz=|Ekb^|5f1uKVm(a@B0-FUtN47&g<#EA5^eThpzy4 zOD?0F7U$xV`EV6@HgQkH;mmiY;Z7_s(gH|)EIA$TQDhoE$>Gjh4>cq0QTir0jIwl` zwFEup;tmc`AJg-E+_^h(cGEf|ch>6X)i|exc+uDA;Kvz@c>bZi9}@IGjhz z^<>I)o^<(U`6{0}8)pFSrMQC}^fszJPS9B<`m*d|=0T^P*;Iu7v}lig;lf#c7kxAn zFHZsno-yxY-IKIH5gx*ivRyo{&vacV-e{i|zdkNxy=p58JF31_AE+~<3@2YfdqjJeTkS1Idkyj$ zdEPg7H1128eh#=F$&x-5>a9AWkln+$FSrM1lvSN4z!Sg^#6SI0GrV!?T0|JcN4+8O8^BpkK-|-LkKRZ16Czxvr?Azw50zD>z}E=Rpir7jVfoR?X6-Jmc)-7poe6>W9Y^y z<1-rg75pj!56a;Gtz7T?!{!;Ce*j%ckkjqoGqobt_m8u%<}bUYnf_188F@00cF z(e!%xe6NA?gv&I2AQL*qV#k}!G4L(tr7Cd;K*YAE+2)lva02&Ddq6MH4Fd__1wl5B}m7k%xTykbTa8 z7x2)x9M6>=1`mKfpZK#y!@Cd`M%m}DMY)zvad4|Jklu_|N8c& zohv?Zrj&Zdyt_3sN9czugsd6v`J~TB!pvt8aP$%QCg`-zdKWyWZ|MYFz3BUb{rVQR zRi&Ma_CW?Ea>1YIpSTNW?Smzd8z=|-N}OS(?t9n@V>rhq+J|`-_}2^1XmR=hpgv4J zAX*N;95^G-G9p%cRe7u@ivDF?ygP~IJcKa%^iz5-%O8Y(M;S~WpG*f;NU!8ia(El& zFU~6Hh?TgD1Y@G~t+75PlI652hccXXQEs1ykJ)6|t@`MYO&jR8c>8(4&wJ^*tp7-p z#A~L7Ps@;D*A{8kT(+|T{$ez5Wj%ORv`-uH@ftmCGjYe1iF5M8H!t(nuhh(J{Hr?E z``ldEJdl_FXjg6|3w~&eC4PqO@TmZQqQaLZ^r+V5(s!Yv4aL($S&zA&SG??sZJh_+ zhkACQy?Y@Gy}%#J4~BW*OEY=C%CP7!bThocf(7p*)M>0S7kMxi;SApOa~t~gR``RK z{s$2^Y7Wk{)+55z8RXq`u{r(~RAt?fIl`LuyDj1+zc{?ST1J!$Nd+kFJMgK`93sPdBI ztF8PaFhGvz&=1+ZLj92Nm!;amwvN>yT9KcALH`8apwjIf$H&6hx|KhJ7K{HMK{?+= z`D6R10pX2f;O7`TFisf5t1*Tf$HXPKw;1KE8xzlbe2S6xtB4y5!+M0@k8rb43#fKb z$57wQJJKEx{A#03e=gxXQ*Xn5o;KQmK*(1dgKm`1_*OUOZ;(6VmW#SsPcPEmIi@TH z|9Z5o3~^)OXZ?%E3GYVw>&BFo+*dZl=ONxidlXD#+s(RLJfqvoeq{L7W6D-=HdyiW z9WxeI<{i&hAMH`-<4>gTMtVh?ND|cD`ImY@)rLF4*lnXzQiKFyoWa$fT z+$BU^!3Q{$j<0k9_7@-O{Eg75_^te>avWNbm-EWQ;QiVp_v6~{ioOMY^mq~8+N`4a z#6w+o|Ep#c&DW=w%_rXr+ZW8IJmy?en|{rF=JzoFx80v-{_*mTlv7$H@{aYJq~N5F zzOyaxlWfV%bC4mJ-6!ZPUGclt1z#i{?WZg|;ukvleym&FsKR7fUg&1GLXJrp7KVQj zkEKU{Wa)Zi$DR4|(7${Ksk@**6|ON%tQ8h(u3xjCu^z=R_3&TeT2db2(=d5nrqX*+ zhWZAcNxv#3noH&7yovm!&%!Y;<`^oD`N%8y?u0FbI+})gQlv!MAfUsb?Gg`{&eOJf z(UzpVLVhO8T;dhW@>Gw$mu}oN7#GsBT0{Jh51b$gKrn)>mr}%KgnNX zC0JV>9zMG9h-PxWy$kv!^qG;lZ88iw*4T8iT(r9$exzEhF(rO`M)a&J-AQ`cCplrl zUB$=XS8wGm*tj4pgq=~%gTRNyJz9#MJX56(9>G1>iE{YyYSOl7ypQX+wk6E>gZh?2 z(7@7z`j#Mc&84sDTilpmEj?}hf1q!H&1SW3ckff{T^q5k+<~hr2g4%^{xCAc^uj?ME`Ew3uk`Y*gY!6_F zpbX9fAfIzd_k^<*Z`OSlWvI4!P^UBI1*Ao@x1bf#;wL=;oLGK_$~6c)7a&ThRCDdA4C*vdjHMsyvQC7_`YUkD_f1 zUkBWdW})9OW*U4#iLpQ!<2o(;=XWx{!du4vnKoKiZNk^(nIP);22BkLH-(y(VEzwP(v-&dzyPDk5=I|J!9$aLr7=ku4=7!|@-Bo=Yc*^m(T@ttBq`fD(hP0Su^Rfjg@PHgZIKeCFYxh>Dn<&zK?2XEAI+Z z<*Z98hrXLh14FQ*@SC_yoHn56v5ntCn-va5hGkz|hj<+@f&Yjxr7b9obje}N%kbA_ zp9%Oc*Q*KM@d$8N^)KlDhVSs-8W;A3y5!K8!oc)g4G-%VuJlN#EmDz)I6Fnkyaw0l|u9x$61AWEE!H7tfT&9 zxtmPGO1^plAM+|2CZC;%hKKz&$X3wqPPq=ma>6BYpJ244O3>Ci!Uh`-`F(VO4D*3U zM$7TN2kQkEzod+#PQm&ihXuVcFWW@9&lh&XLukA4?~vU^@GA;g zxamlhxe<4BFmE+{-L0UHa^&6hS#8Tn?B`N>DUUXT2Z?l$QME{C=yR_x0Bl`sr@+Bm zFt#-&`hF;{!F>MRS*1(!hq{;nhN4@&q<%z2`BYUVcR!D@}bu*HunI+tTB`;6&@-h%Y_7JORKQL+u9 z5cl|C9+=QOPsB@g@4myDvDkSF@0fM}bIiV{S@1f2)*`27?B!ixj*I;#>vVk}0=NzX zE@h|Xy>*v%O1)zkd%&XPJ@0CFhW$@g80%zP!tg=t0DcX_wlfU*JcVm2x42!z_svCb zHcxgF2c`@_{;xiCqqe01Z`8Gg<1%H(*W>MaR@;;vpNoGU>8WqAjpY5PTkt5=PQ^-mugCg&hONCdyE-22ON-ZKXj^Il=SDn+zGqIIUEA`ot#M8`qXz2- zaxO_Z3jBY2?!_Ia`xjK1o@x42-ZMlPz79Qs@Agac4zAUwG`-jGcS}w&m(h1jMxZW_7QDuTxLw@AL<{{T%qMJNR9EIAce&}0V z)4H&!a7oPOXu7#bb2%=~J2-@ILwE0sl~-e}#CU74;i@Gc+2${aXU|`9ws`&$C;DOd zhhH>@8w%pfKtsHz0k&uCMX>z5?uH zM80s}>+mTGf8?-{M*-s?=3xyMj~*4T`(qU?bV$GhrJV7?@IRC2%7qVLJytT~9#A4~BuS1$O-md1VCt^I0GH3*UUekK33A zd%icT`MHYo<{T7!Uj4(^e%D-W_FI2I-z~DwZ7RYOhJSv>!^W|wRD@xF5B^bByYltR zf9{Db&C-s(=D#Q2`qB;)ckCtJu;wv!dfq^T)h})Szln41tLi*t&l})Aju!h@X3lO}TBx1D z{q?IO_*ZM>s?HZdYn-2Xt$k&kczdw_i*rx5v$an@<$x}8;?FL#)i(Pr^8LoVSxvlO zgXJ4DXEhDN{#%!&ozbA@(l4~Jfk2-#bvnb7Y z=7L}FK0=irbLK7e*)KF}Y3_D!y6;EzIft6JAzc)-@*BL9(?zpi6zSXOPGt)Id zccWfRoIHX&-n`jOzC773S50BlcfiA6Kp4}C=hE;E>YK9h1N5ijyH~oK+74WQS)A^Q6fQ{?`>?UnKgtJW8$PU29)V9w0$9}5=Y7Wi#WIpzeP1}4J@G4mN zemHx7v$V&{yPe0g^WTlRi#kJMXxhp>n9Fm%;GCJ+v>D%p7!wcV`eF1LX_0##YN02Y z7{iU&JFMm+yR@Vn-2hAj2U~H_b1^a_kJg*#a#+p;=tqIWH&aqW*=xKULQk$?Z zG_K`C7NrSUr1Fr@!`63Z9mb*+yu20mdB$~#|9j$%kR8UY^zoiE&|R*ro{#%3?!$c- zPeO-2Ia#~w9Rv4bfJe;q?U{3AKJLcI)>bzbV|}V8zoYRQw`xeDgJ-V{8s!cT4?Vz?oeYlVDjg6H2$1A!9ogMkE!T&z%zX$(!F#gujiay8%K4(+W**cyaQ(?Z_$Rjz06bBCU4sB%5=HFwB=q{{W&1MZNoyUO*< zBks_FUexz3cj&veYFFcv?$CFNt6eWX;||qLf}II=k3YXY%{lP$bZ7XL8P2{(wNRvP zrZcp*-1(Psq^+)YHQZ6{>c@Qn{Rg$sVf&hnwjMm_lXmn&|Ft#FkFTBLd@_64_VXWP zIs5O|LY;0~*@g0IXa7zu)ISaR4rrnG?9?JMKx}nVJf59E@?WzPO`cjEm8?$8IYC;#aN3HJ)%PGj0TxyJ!EC*amGz;`68%-M_l z`M}Awz{$U0KK9>`*S8|iN2v3{g)HZvdUBi>pP%f!2>Ja!>V5CT6lWZH%#t!E@X^(f z?cQGPHp*IiR(C`XYN6;Wzz5(3Yzg?*Lhl0x!uD6}Plz6Ohs>I_9kHFr?_b+t*5r4X zcD()h9WlUb0tb)ZU+(P7nCbir`mx_X!+GYPraS-aXZkfAv0YjyhPImiypF`R%bYRv z?+0jaTg{q|AN8#5=sm858q(dNBQ<#)KSUef-Cg6n;IDSRH&EqFhb*Z5e*G)9`(~}G z_D+L-?I^3(^4lIQnp&o4@@2H4zhI3sKJ5AVQ&xsEe+~L%!JW=M-MGtU5#TTR zigQn|<~sOA(1=ZUHQ$E#CeT;0?us738|TU0 zHCJGt)=~WNH%>QvQFC4QvFCK)ZEgGBY}@uPJwAQaQ_pCwrhT^UoAKTBW6c#ki1M=S z+YS6T{#;c66 z6W-mr>xt})?X4{9=ZJd=VK|r9>c6|Au~&C}Z(qjt#$AYeAMn@__ASKq;ElVNpUXD3 z8!U6G4P$_?CpFNa&E?&PaF%zC%@utO>In=jMuF; zKe~UFdGW!O=CD0o*kejH?E9Dk8z$@)wV*%TqdCXGJxF252(A-33$;Kg{K-Wz=XL5n zF$WQK0k$%v&*YxkLfzyXY@od3A7Ul?KP2xfRCi7f+lz$`%Q-RItIxpwCXj<4)yOm6 z)Gg3&@py@x<1x)#)WNeQyz7_ukI)vv@cxYIP=5yKuH-t=e;v4|jp6Pj-4OG+MOw+_ z^|jxik6Pzf?ZAB|TZi%vG#lEXk@@93ZC=w(=%BOp*-h_5XDYOB_<;|PHf!Ddh;73U z*5kX+e*X`OX04yU%MN)udENX&cpLN9%_n?>lkgEv1tVeOz6stTN7(pKpThk8DA%9} z8+9GdgBh0$-_HDlqu`sZ&2E~f&uikD8N%lUJVgpVz$M@VoYk{7%pb-YR?+13^OpiX z2jC+-`r*~4F~w-g!@b^XupYJ;NMRQRK0gO}5r|m#Ef-#8-Z2?C{u;)WoQJ*DPVM_5N6d_h_1`OP%MVZQmeaen7`kNs3IW1;E8nHrvF?S-DoxQ-s%sgT`% zO4$okxfd#Q!Vl$Yr#cZjuonpCS&o}l_ zw=UQs^1WWF=u7 zxyz7e*`a@SW@)RB`|pasinGfi9&Kk`;;cL3HOy&4i0?o=?TOr1zTRqMgZ0+5{Fi&N zPJMCdcUS%`^noHRFKekbZ}S`EQhc7l$B&^tGR9q+skH* z-RdChsYrXO(LO6{R+=_Lx96{5`d+IpwU38k<2@`lg1K!k=2+v!pTxWZc7ih}F_)n3 zt=2rggS!eZ)Ff(aCV_X$eZee)dnY0m9zFC`J@N2QZK3)PGXrkgFm-RGyQil@ z>+)9Yd_YgQ?VXjLpL#37Q!)3HdnHiDC^|`kYut5(Bf!CR)?Pp>?G@7{$16HqCvA6E zyjRq~Ij?%~I*vbVLxPr!r>Z2MMxU_Eho9uV?xXi?dDd4Y)_tu?>@_-fXBFgDPb<=j zeMFq!C5Nf`Ud(PQGah^6;4sb!RDo`5A3J<7>oLbc2Xx0}z?DqL8_ga)^X2uZx9YG1 zrmN957m?q1qdC*(I9P6U&-wZjwz*S~_sht;{P8IVm+O<;mZ6Mwx+BZlbC{bv_rf`{ z%`GU~X`Gy+X%10O(G$j8%EV+lVzS*bdHtAn{N5}rWcBlYoZBwU~$I0gM*_kUgIWn`dx_v8G7;iOC#$JK1JAT&uRNCaMr?yW~fV4faD{ecx_d zQR*`0w(3S!-c?%8$!}$>GW5(9`S@OfZQ#jl+%*pqoChCYKmV&yFKiw-<0 z0-sguPsCB$%G6r(`L(x0kGM^&IkO*)FYH}ess*>!0=_*z*}c-76x>>*8!ObkU~CiZ zLpSP&=BTn^6BBF29Q$4ikM7ZzEK;~YIXO0MueB$_*r3fQfZQ-(oqFyH_7T?2D0kX`qvGDeT{mg2U30V@ z>fB=~)&M}mcNKhI+hSmy*a4WG`X}$sD@DKMp&uHtW|oV0EB>?buEqa!yzBALeE^Mk zQ(hSe&tyFQ4ZKg{P1{@)Z}fR?J>o%Q;!J~4sJTQRqi*cc3z*CUeXA5}5l(#XMOsIx zZW@o-g#HD4{0-65&x!Fcz}F1mqvNr(RZCBOVTS$l7$Df92j||FX60@wS62F5P+hOP3xz?flo}O-{#`Rvb#x zwr(o>{>nG+3T|CLWBE7x4;-44we7i;FaN`l)_( zr#H2J9)1XBHj4fny)Gc_wuAOb0_Wn8S@(dKltTA?6tZa#=y^H#&5Avaxto2pP2?@h zXFFCbb2ze`hijWMLEFm>thEB?zhu$&@+p&7)OOW24clgI-tnELIb{V}cHMj0mYdKw z%kaGv-*dmyIHw-p1%Ib)*@$u6xk0;&?d3z6rD%$@)MxQs+NV`~E%G|?Y{IkREN~xX z*87?Tof)7jqbswm4B@P6neV$Jbmi!La;5oH$5yO0W)Z%Vtdj#j^ zH-pAD2^zcAM4dQCG4`HTTU)8clcE?4#anIwZy}6u`%{iH2#_6;X2O>K#W?a9oYffN zF*fiO?$cHKjZqhMgIqE8$I`Z79cXnyC{3K>YHi=WvN0zpaNw|o1D@eK7Xc4uB;mmf zOYa)R`;+m(0A3n^f%S}Mg9MM=M_AX%I>fl}Kl$7tMJ*H_CqPXu|yU8DHF zk{ldc=UM1Hxj~*I^zK^-S=@;ASeEUx%JN$O-eS2ANa>;8^lu3myiYzZ-psS`U}Z|0Bpt98l+^I$V?6r%j|s zyKxwI{XPYJ2xHAg%`5n=Z)sS`H0SZ{$-@3H>-+=5@}^_o0roj!ZODa#i`av}`@@^X z8M;>cT{Yty$+!C#{*MorPkQ~sGT*rmvmVbpXgvPr!92!C^nlTIVhQaOhhf)*%n|Sr9*j*Q zX#aya$7iC?Hh!#|k9<7IbU?q|^}{ri^4Ij=8-MtRy1-{=rFLp#v1UF58(BTdsfS(2 zfiygS$~7;RsluTvxb6l%F-+|v2*WNLLBC*bbnI1(ml`vsQL^!TNxG;jjK1iVyk~zf zMhK{IRE3GKXtYi6B$HfZepd4;f#6zS-BU=?fB9+6)z!w z;J7g@{GY+5KWo5!c6jxFqD-El48xDt$%d*p?eOPOH{oJhk=`!9TNm6kBHLdrx!Ke~ ze?`y*!+srSIwW3(cZ>OkIOoB3sWyZ&#NM?1oJVpm*m!I3h2RxM&q>&+;~CJg3f_?W zzzQPTmMY8>M(QlVSqp1^qWBW~M(K`9Kjj=;>5YaVbtskI0M3F=!F%Msxn#OjZTH~J zwA%ZbEa#Qo%9!p>VBh~S(xy>}Z}6yx;QtC8chrMDXt1e@euUjsybpmM8?SF{uK(C> zK2#>tDR}ndeCjToSAH0K!|sN?Bc%l15{M8KF{Nz3!!gd(***xH8bUoHK z4DH5xybbIbjKY>si}|Z+v#=Lfd8hua<51!Xy7F9iTs{r4%OHK;AQ(tH7!wOxN%lY z(&D>T+oKB*wi|n}ux=i^8UA4I#TjMDPu{T{_WLV(Z%4dX*GK%lh{swQ$D3t0V82C= z%{JfwUA1oNT~d&yU-vWMhoT*(QTu*a2LGcdgZnVaQ~7^2+Tw$JC0s{rwkFElH?a15 z87`ZE%e2pnH!8TMdMm@})uKGp{vXo++816H(`jdEY97z68(D@@a!w1&yiP*H_I5iA61nt$}i@5snPpu zN6*ctW8aY6*Q4ajY?RG&6my`1T!7D{dHDYx{(+C;Oww0D&-s{h4M8>>!v39F^m*~K zy9k$PQ6UD%dxUf7ml(nrF(;Gs;@hjMSVWSUBQ7-RL-8ts&;2K(J$7n@`4 z6P%8|iP)>#BiO4M_QThpCEMADF|22W{r^@m0J`&FuUtQTCTzk!yXXP~`vqm+U)m}A zE14hid?oL=R`4e8fd>tPUeeIt*w3(2`GC=dzM}Xw^9h?T_Nnr_RocMB`O7foVhoe| zm84C@53v5b4{!^5>;HIodO7?%Eq7!!x%GnIFb^NK$6Vf(E^TJ=Zt~m#@-5h16FkSH z(kt7;pJdo59>6ro?N)g_=~8|vo1AC84jj3BrfzH=qiRocf#oYf!M}IRnQss5TS~Tg zfO7yam-Uf<@U7z1n_mqNm8U_T|3lhb$SW6hq$<=w9bANc z13V43k);Ta!R~J8+R8%R$P_xdf9!b%tUE!@v0kt2+cpFFPg-NhaAgZ(*0c8+aT-Yn|dwde~0j7yBv8t!-s1=C)S=47Jh$Z-4_wIOaI7Gdvzk7 zQJom7`HHJRpEuBjy=Jh%i1h~MFR|p5+yAqQD*u0C4{=&M^ThJ;Y|s+*;Ir626j)w0 zHxR=cexm||CH8=OX=i0&k*_kGajW2ku?^tQyRs6|%~^@_s9V*~I`~AhsDa8#v!<)k zy`llWVQUl7o6{4jZpK9bi)h2W%fRRI2ErK6XiHUszFUazVXMyvU#f!qn%Cr++F2Rf zuuQavYi}1`))U{`patF|u2^NUJU)Zy>l3zl1BYRUi?-AzIu~_ShD+d=5;8@l;XAxR z@@#%5j~{LIerxVHxOqk5*IcVYzZn=WvHvF{yA4P zea}6Rs{R=Iu2A<^4DLj~pPp_;deE2Uk`9>W`$#)dr?0bu{iyl6D%^LXKXJ8!^;HI-uM`z7#~k}S`Y+uf2hXDecQ ztOb^oUpc)!Dg9y0DR0EShebD!P9H%Zb8o!T8YwBpdt{>l(gY5t~~DU&oF_ z^j^n=v<5#|t1%Zzkj^+xipILEbA}v?I*eUsI`H++TA=XEvlX$$w(@Vtbvekt3G zv`h*VBaM48(hv`Pd*I3f>(sAN?#?tLHE97Dg=G8!nZYXoLY(>N zFVPdR1$rV{u4CVwBk)hCWA-?7FX-{^F0l@!XrJYd&^&00G|#>1SEl*dO@cRq<_dN6 z(>6(GiuPTg{edyGPkd0cUxc$AiuODA`at`Rgy%`pY4(d=3w+s6E_A38thnF5xs^nhdIWAW18yG`2dV@r+1M!stdz+@!OuP_p^M+>fh$L1J_ zqTk=a8uz>QLw~T%Jk-oOBUqaxjlPR|Sii6#=Fv#md8lGr~Lon}kK(3V(^Ex|E7zfcRYt&k6i zi_k|g9=T_?;hY}UVqbvHp9h^^_zwqd5uRSFj|RcpPT2AWs<0k>b{p(Vuw#(^2v4g8 z3*jlWH&zTT2Hw`_iF3CDcU$DW392n_q)kAchapd++VaO~G{74IY_W3F_ zy{jSy94mBrD-9iIg0|_2!3}yMaX;xn%3PL78+oKg-em&a269e*UyXV$kXP^Rf{$d} z?SOUKC~yUSN=Ev&7kWF(Am8Gfy2W5it(gye%DX%N;0VmX<1qR!l5ZQ~^^9|8+}0ko z+q}Eo7nyHXm%eZ4KviNJWF6^Z z1MCwz?6!=HqHkj88>ijzRt&gH+j$ggEAZzLq93wf!@hcqeF#3szIqkkq@NhzDD-(N z1ph$)MIU9~%YM2Q#(9=)Ou_zb(8QzI%Rs+x$?&-B`l%P;SAywEr#!x|6#M9TR>Xk+ zKi^)r35^Ns!IyQi81RBL#d**mU_K9+BhxUh*4)@jJrQ)s@{%9=epKZ^U(Ux|Rh9(Ttt0Lt8B>(i$V_^K;3opBR(Jg_%P!fh}&$Kn{C)4bnbA0)XRJ|MN$_6Uu>N(ZHGGODj7z84KMss zhuA*kRlHWyvmRe9PxiZWw7I_*dof?2F=0obOB&p8%f}^G&t^ z`P6wm(I!g|3{GFNNR^!c%!7dW{OzOrDf-IF5a%o+A9S7s_|YKn>wMj^MB<>47(4`C z+X9{|`fU>I+R!QZ9dQJriyb3=s-ibL1U~sNAE6H-rEgMy97I{?q3b5@Uj{yj`9W7E zWFY*`t@ZIN+tJHm(EY&M6X5OZ)^=5jaM-=AEz=<-7!l(!DYBgr4N5E|9 z)IRW;^F1i*b;uy3(||J(=Ckgk8T=#q!onHq)m@mctG*gUS^O@f4u4{0C~pY~k|T5)sfm!)hVt$O{y|DaBk7dw&z4 z$wZhkL9|!SxqfiTvQa?)=iJV-+$ZJ$o;&ykKCJXro&!A&Dtg3yLVA&$y9r#tyt2^u zvkD;(^k*vyeg6qwytl%$9P=_i<_mZ5?L#?y!!88)&z*ow>w!E%Ib!^+JBm0a5|8yj z4CxB*f_%V3coXP{!BzGU?Mx@Jk2gVGYnO$O0tR2jU=8Tt+3e8yrtA>sb`rOwTx1#N zG53>gm;7AtqQT+S9q9Yfwl;Z2X4t+|%+b%m4yEY&Voz4!BRpX|EQ|Y4_>S+aN(}9) zN+j%Ga(Q!brWbR;@avtG;j@hu1sVDoop=l1*TXocDB^O zJ+iGVZ~J|kxdZmxQbDl0Q8f9?eQU`2``nnpjmBF?{LN%oGqT(9)1mDx650p^mg_i^OCQ(Ku;n( zUVmqW&(HJQ)7#nB81$W3j-F_Ro)KeTyoEB}X@ITeE7I1IgZSfVi746{M|pBgWPAIW zAL9}AS0$RDkK*2t4~49U9zC#APaJQto$7e$M%+J?7iT{m#y??bwXcoOh7OE9!~^S) z)_^{BqT~kignec_Z1D&%h1_t>K&^_!Vy@_VdT1n}IhNbEUIJ zG3JCZOgcc{kJw-=Tp6lC+ii22!f%1557r1e74tBZ`_&DW4F>qYHb()sR@qq@wC}Ho z-VWOh+B$^(W1OHb=oiQDf5_~x-;Mo@vVRS<$8o=LFplvf-X;KdEBbH<<#WCiTcIb6 zD(E8cu@h^#&y2ogH>1Pu1kV9QVXKLi|D73oIo*s|`d=9O#jJI(z3Y%e=>IyqW1tXW zbN`ncd#v4w_(F~QEssX*Jhwj=^B$>lbKkOP!%MfB^ECK)-uT#vZoC9*6^6a@4+i`{ zH%_Z<;@S#y!@Ul`Zd`I4j4dV)H=1lyF5B?k@NZ<`+~6#I*4`!955cnI3k9!V>?*uP=)ZMijp{nUw*JTv>jjplLSUifr(W#qTr zmEqm_?csOu{YO0hS?yuy^{l&yvgZWy!51Ilz6kpcd>P@amD}vMqfaph-H3T5*Aq^P z`6c$&zLah@zOzfrDY<8tb4s&iG3uKY=X`P)^GO5t#o^@nB-XaXeGV8O)+^?c#5eRk z{}aGB(h0x$ETzp4`UmZK5%j%top!1Sdvo8oFnmnez`2giIVI^S@w`2eIAAA#YwKT_ zf%9O%g+ulP=g_ehywQJA3%AHG4WFE=sruN*UjW^)KZf$P5YOvy?udDa&{a5QG4#Pw z%`uR#?`d}697F78EioHs8kkr3={ZmXn#eYcwAOH3QxAjj1E z=i$|{`ypG9$AkH4Kj_cB%v-q$^V9x1 zIpEttyIqV6={QV33i{I(L*;rRj`=h1R!-auIKXRJ9^p_l9IlbN%g|+C^1P)$&@L#arIC?+Ru-!PN z*3AY>Y$Nu|V2k}!kxviQ%#`vg*zmK8!wpVt`A#;`i&r5N()M2fg!8R!FMp=e)rm>bOW^{vn#Me{w zr3{m>MC@|U3ER~6(iX_Jm2sZKuR?#vTGC~j7O88REnDDINye2zzUtt+$4~~#Vg93l zKa4sKTQctu`hFeCp`IK;IMd9;_($xrJnj(ty+k0(rPQ=@VyTE`0fhLcM|VLyx+hZc30nF~^>cy_SQev0$FlB?v{hGB<<9~zA7 zS1_)t;;|a&jo{;h8*G7~|Fp2xhVwbT@PC4GV22QLkn)fJ=Ub-2X932@k1=YI{nz%= zH!wzbVT@)8eKFQz$TU{Jwf^xNCfAdxOTK_H;`}XyGFT4FJO)_8C`;*qCoo1j(uOzS zPIape=3)9Hz$fNmna7^pBFgOo|5jx&uH*DK%%J~N#bN*372JzJJ$oI}D0++Fo9Xy4 zOzGR#W4t1M+4l?a9k%_Og$E8Zx)ykVK4P9S#IgJ!?DssQ659rxzjrd$tYv=`GH<%H z%ZAf$6a6U0*lG*UZBw=|Z}gAz%)w``GGnlh(>6~3j->0N9y#`5>~-)wskLthZ3{bt z^)F~2{X=-D|I?p5zxjl%epi0)!n>uP6yOQ)=oZ26{@XrZ%uhbHr(=EA^4(ycdg|Q+ zlT5C!b6&%<-xqLZ@1q)fpzj^sRaEFs99ixTsr^`ov1jPWSMhJvcldhzZ^FOTPw>wI zTy}?s4pzGoE2?%7Ht>eFFxD9K8QKi~*8;zA_u#SfB}SmO$sKamqZDT)qkptu@k&YFl2>x@oSnHu)%lNzOMp-CtWlp;MglVV>>u4B z)*pd?PTJ}tO#%mLvpGr_nZFnMU~(R&KWwE}X}C68jW+fn?Yqh4KX|V*RwCQD4)%D? ziOxQd?u;F=W9^~}59CaSI}rt)((g+I^|4GU&nIEomV{ndBKZV$b;dEBZt(~H z&zgdH!AiIJihs=#^0yG;eTCpN7=ML_(FLfx1!q!GH*qvmM;_orKlo@AIH2U=@)n!9 z4EF62zKt<_7jV+nTLQncPgs2KbzTkms9b==?5+~T7XIHsH=TI)c)j7`(KnqcOPMP7G%lu;R&0fHig*Eb@p--0D zt3G`1wQ6(jjAxoJ&Um`{J?PFi14~p&!HGS3byXrr!m5 z<-?jVzlYGT#ODa&`M(}Ex`0fFow*qf!%cq(Oj|k_xfR}CY=XzKE$-<-B zL+-?PrqN%^%z-Z0VG7~XlklEJdgf91(S^HF|2J`O171~m<$dpcP6GQRfIt!m!J3nx zauV9AMS--joFsk(uv!s|Vp~pN-Zqfh7V8(Hk`O-vQEL!u3vCI|d7Bf<%+nD+n9lPW zq;ChM)43w8cJz53PeNyULhM-ND?wljdS0xW5bi>)y&_4dx5pbKIhh<7&iyL&R+A&bYQotvK^0k zcX#EBHqmIeh%ZrkVg~R?n;}0g9C{%9U`CKT`K;4L#UOK~vS1c(jf&*YA$PyB5K-#%N3H>Gp3#KSg7eeoGa8 zj>WShqi|_0Wm3zjd#-nO8VFAq)K_aPf{PIGf@RMfmCP^asqzwV7XBLgMK_K$hRZ|) z%^VB<)URV-uP8ZQT#@Xzxs`biDw0_jrr$B z_0#nAM)LB0jxE`6-Vr;`#te6SC#yWZM&*m@y)o81E} zZLD=i5KF)6Czg{X=kI{8bL(5xz;DJj0KBZpt{=Bpe&devrPG`QL_&l9=TmcA>*Q zvp=IHnU&Xk!Io;L0CTEnn`F8BL-EqlASTV|XNWRFP)%mcs zG30*J9mihkOdvaXp0ot#>-L#*lKAi;WEr&Z@oTx){+Zorc$hZgIJf$BrWn@_zmD|E zTaxu*_V}WDVmVLmErJdd!nhx%e?!L592fkj2pM@PWXKQrY zEoV4SiuN6*U(&}1?WNM$jD=WfMVwz1^Evf+=I$i2*B)rN=IQ;v#n&u%=zFbcGjlsRYmi%h!434-YOtTMKnV;PqsrhU&wMg=o?U4CDz9}83 z`|V#IPUbgU)MvhFos6zv%TDmYaRL*RB9Q$ISyQG@+9h?5HlK4RC%oc1NS`m9XQ&jq>(~J=~e% zDcOlz=hDw7k5^se;=&4S*ar6wd4&I};Nz4}|EaMVyH7R7`|(u+O@Nom@_fG^$0qw& zHawc{())QG=;HMC&bH%?;g-Jnam7t{&mAY&FW725jXihEnO&h4qvL;^Pb)Nidz`l}P+L&7|{7f?4jd7>^S zdFH0vWb4Xs=V5>RKl1mXWHc&g!xy}@!kdrOST}avmUS!b&TYt3B{Mokxddl&$rofh zue!SYx=bB~c5ZKjbVGi6nt4)Migi-`qQUUe#NfqWq3G)~8;GsWI>JAv-$v$zpMCX3 z|I8J#9S<%f=aI}qa*iX^9iJvS&XPX)n`oPPd2&ZMV{m;<-&KcfL$JBVUT+ijdd;qk zDW^263lXugd)YhBy5&i-!I=ygAz4 z@`0)$9;3g?+l%5Qk(Xf$li{BI%vqsr>6+x8@M6x>$P2KMFgR3WX~a*Vp3z3myfd+V zY&_`l!Y_w!#-GbAed#-}$@J`G3*oh#_gw%gZMQZ9>lNPphG8DqW|JsXE5ICB^{n z_@z#a!TydqOx>oe!JC6~$-JB&Zyp41BEOUj7(HkDZTt`)9)UOgwG!U!X@-aUs?`!d z`p@M@NEhxr0_{4|NZFYau>1AshQ^et^6>u<-h2wY>Dd7f!<*=B4Bkv2$4JfybxPNf z*uc8Niy0jHKiCVS!c}-IKAtn$Py6@N)b>YJUOzMkhAt1m6!#^-Awif5`)5wsTGllF z0-Z<3?m>8hF5ic2+|cC2j3JtQY!`m1`0v6$uko#e|G@tIUg6qM3mevzIbtvL^tv$d z<8|MRbhH1D9l9WS`h$r{_4Dvyug}*QTI#Obg}q&Z1s6|vbTq%w>g?lQl}kq%XX3Gt zM@JtE?-ni}gopK_m)PA?UUOpZr z!2|6_r*&K%&8)vViR`}}IKs~&urMAQa&J7T$Gv{554w9O8)&`jUvQx3KsX2ktigs~ z5bu46e#$;__#O1|$+OgdiZ#c+x83zmMm_QmZ25O4RWJ8mk^{5p53rc#eB!40a0yLx z_4$4934`+3MyusD>M;6vD-bVDa`eNMR*TU+q*zPI#(V;j+8`S{e4?B2ci>&h&0MYk-@C|$eaW$JT!rPoG^7#%&c*o!EzrSLNOLrA_srHT>Oj<faImZFyJYSnfMEa^LZh^7Lg^ z|G;#sf6#7_F~=w)`;iNo=T^p^Lf>{|W=2xJAGnJ(7#CQ-#YZWRTW>hDTW2%jVzrs# zo_ss)9+{cxmQAy7Pf%~GKW_1J8l(QNl09o-yno{-txnk~H~4Fv3oj^Htz~s!ukmyG z%iLtwqyHn0LY38T^kFzFar2~R)n9%5?Q4>5d~3;Mpu?(vhhHD}irsxZLAF#?Ui%-h z2Tr3;I=OyQQez*OaY1rm>BOYNeoZ%KlqueHmsyYfUhE+C?z9i6UUdsN}t-rMrz)x_&C&hOk;mYcVp58OO|P`WuVfI7l6|e`ck(heQkZ)0WzeV}qlo ze7NuO(>h3N_3KFxckD67Hjg-h%Ju$r+d@s)#+I$cm zM{}k;XTA|megu9yg`E7K$)~gwe3PE?=je?)XP$niSJGeE-7&Xk=#%cMYo4O?;k(p% zk}>q%5q5D}8vnEX%drU}-vMkAO?%3Jk}=AD<0HN=<*7UH{n+Gxmvd*|9ofm#*!4V@ z?e^D|LGJL!E;ulAw}^6kvGY0Q&zt&pn(rzvzP5k)xMYg+`)@g;FM~JMcdzXNH&)sM zq+9S_CSCU)bVow__%w6D0sya`40KVbe+xlI88yNBC#EZ{h>N9hQ9d7@rnch6AZ<@>7ht1_QcP`idnYo0{?P&$4wT3sB zt6teY7~I)PIrU%d8o1E=Jlbdtqk9KeBsOd)e*m0t|2uZlm7RaxN{TNu_afS$1EPN_ zr~e>7pm{g>G~cqVBF{N6W#&mSRYu;WKSsG+d_L{L=acGR1@15H{N^F~q+2K-UN6=j zdIDOwy5uL@W<8rYgs+$8Z2ZK{!cUx2GHaXe1sqwry?%WPlxY* ze1T8e2nzA~F8Q3ZFWUQ6_Luz4PGp?ecVV;N_mav#NxH)s62ETQ!s9BJZ8vY#o-Fz4 zrUK`u&0Di5=h_<1^6+RX3@?x!-&@aI!>1j+lRCsp)!;*DKEBr>j7v=WdYXDo8n8?| zUOX-nqf2+GgLlL=M<&0ys~sDM4`A%mqtFG)U#&96KcL|?Od02k6LTWWXI8nB)685h zd?kRwZd-E?K z<~-lK@R4|uJm#)rx(fcBHSdCduzY^81HU(#=UUcZYbe_(cg)yzl=0hP4Z%$=PuKe6 zdC8aFyFY1uZyIrzU**idX;Z(C-(>aoH-^fh)OYIL>g0PXh{FL-l>RdGv;kj5@IHoD zHRUd*e^-)U<*VtNbDNbU_=u~^cHl2nU;37ayMI&HdvmO`Q-0b>(lo!v-$kd1t&Mn! z6z3?Lb9e$dU>Z4<=ZoZ4=6DHneG7BG7~jt~tIk~0AGL3Mov!fj;zpsRqkZ4$e^0>k znD1shKl10bH5}?R=NZ{A7f!-gGB*Df=fDK_nbn@NfH-f!gy^rq+p1@UUx)G_o80R_ zACGWP?&LPkH2YsGPfdp>YTRF*+W%O&wSQlE1ig6|ymX2?!KwY6v-UTZFDG7U6gk$# zj4{0kzE@=j%e+=@Q?9EqwEM_ck@uiGNH*rbB7VG^@*(tK7IoYEA1!ZhoZhE?n7)W_ zNdfaGAE&+%>C&&IXWm?L@)^EW?JKvd=qr7)kTt7M;GQ?rVFz7%r2WVYCwcN2YcF!M z-Bwitc{k8+{JLUG@Kfd^T}4bR#-%(l?%NF95h@#)Wv`XJUk_z<2U0%Og1*#De~c~L zNE~!Gx+D0}4~_rB1UPT~25G>ryxX7&&ACM;I(ZGKB|8RgMVqUJxLdO|u zITp_3teD}(V^4)W{L%$pE%Iq$H+-ga$MQ3%I6J1FqEmXW7o37Gnp~eb3thN8pI;t> ze@q>EcKJA3vJS-)Ke?1xiH)}Kh+Dsh*W7bn?r=HBB=C)=XHY#UUlxg6-0dTG!Q18Q z`UPP5I6UB%e}C}MG;oCY+9is^7Mk80mtDe)eQlBPf+OTB_WZX5?{0ngZI+y%hCGrh z5kG8qnzP_W@JVT1?YxpmR&zAq+oXj4cGtP~vRhWb57%%9SM>SQ@O`SUNZ&a>#I3LX zP`~xBGma@kZ2Be3;T3iFw=#G8R((GVpY%JQZ`WB_e7xwU>M?a>^E=&qZSwToxb8GP zT?gJ-_0hn@)%agAeGCD2%J15H?~-iMv#U3hq-0>an{{@bhYQaObI3u| zAHjp+mtNg$ui^Z$g9#h81>V|Nk zr^|G0ihW-?4tsGUJQlL@&W+&C2z7H0;=__F6!!+(Gw_0A!6$L|7T+&NE4{tp`e2N- z#gosoj$h+{+$DB0Ym$4O%N@<9kL->zsVBn$|IQ;WKz@8}$(QnPiPbozC6pf^E|kuB zgMB@W45!g*8Dm?Y3i&iwceRg)@$o*{a_?bvHCMWRjx^r-Vql0edKbTyo_S4Dait`C zLH?Fhy2|bI_x7rG&tG4Hwl$}29X?HO!k3*BpqV{66@Rx1o>wv2jc=jf587jnMTX+t zGdqrL<_U1uN%p(sU8+;}M5;4F%>~kbBr)QRDmt$<;`M?*de5Vn^sLI0E4>E9{ zFWEGL4~a&(Ck@^)Yp{Z|li@El7Q;sxxtP*kV-Jn@=Wn#{lEE3gto-^n>uKu#&-AG~ ztA269!he$ozqx~B+^;d>3$)RLfx)&ID=_QAh4C>OoGkZ{ z{SQ12lhHH#om-X2Jf9*1*~7G`p3uDIz{nU3g9tr9jHFEbl~%cO4d8K zR2RlK+raj)ey**(-}KX&f&azu)Vo%3z9`Au$a&1EE4jjr$FOK)QT^g0y^V__oHt4y z8h=ZBPs8Ga7e2MPpqwk&8@$$4{;;yro`)0tutk1s%JB+fP zMb_FL&Q%(B*Gg=-fHlosY8JS=>ygP0{*Yhazj3mBPanPszW$E*+LO~gIwg7V7jEi! z`6P6>FUQ(DaEApyWUV!8ZuY6_>v?;7L3_wrjPIqa1@N#27R=Z=bFQhtXIC|6#n81I zT{@W#_#WG&ea74v-(#k3owIDtS?a&q`2*|JKZ*E?%O~dCzOP= zMZSN2^y7%WO1>{l?09(}cWH}xS3cEc@x7XPGJSRX5b%HIJow-t^Q~xAZQtvZoid^0 zWqb-uR?KPn8d<>Jemm>+f}VFG({&!UrY(4&0~=pA&&Tj_eKG#<-8=^hkX`3a8K-{K z9uj=EQs1q#KN=h?WStfQ3qg431s}JKf-GRK& zj;v397TUDdVZP=&Ia&kz)~00*v`hc)O5xK*^CkJC#r$bbYJK=P1?-=i=ncVz&#(jH+HOIhB znbSAd^fxl`>BS{Qx34am*tC_qa#!6t)|!j_`OVMJ)=Qy|mk<1}Zw{`3fhEO4USG6q zwc(p|@5X#vh&`-)#uqhg+FI;*FjGPPYU;b!>Uc?eLID2()Z3Gv_XNhg)H6w`0ox*&NoNJr8j>&&3 za~)?L8;E<|!Cb42F7_?+>(Xn7JO@I~B4--@=�KKkcck*N(>%DZfiQ!D(mLd1rx< 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 tAkA{xkb*@H|XC7IZ-Mx&OiUgrDxGIg-V5 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 z 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/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ⅅ3Ib0df2}FJcKIYL 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

    m2sOdVrsKE!P`XvxPct0~K%8v4%Q+5tUvM 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

    k#iEf69fEE}TI9 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

    ;o@SokX|e`DkC>XEc**Fe6|G==d{xfns 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

    (gpg$J_oAT}P%&O;dfOaB>pC=(B3 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 !V~y3w)>LyZMX_wz{B`5 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≦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�g1OFbIeZx`dlft+>t=gFEj;2k4KqL4 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 z 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

    y&pj9(ChIms@(ZhkY-&tv4)rON>3{Y!z3tXD8 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

    ^an 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 Wfqny2UY07BUBwL>mio=pK_GcNs$;gK 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

    VAg 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%0D7HpWWd%zXvl4vn_bD|x=1Yco3WJN3W7 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%0A&zZG9H* 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�a zojA`U!^X`vFquz2)XxRPaq1Xegm81{gBQs>6Bk;e!X+=rh7B$raURB%7xY0CyaxW9 z;pKmZi5rK%;0hlx(3YR%jCk>B;L=0XX9Qf~Yy*>1@sl2Umh{2p7Xnr=x9d0g#B)#P z69ISP8Ok$9_Yi6@N&|my(K3bf1r~OWeXX%)Fj-b>(oBL3(51Z>_2qU=U*^6 z(Zn|}VxVnca)R+UFamV)QTxep{o+7Rr$)dVS$lZOUdd7m;U3xXJ`SMY}ilj0%@NB1}5%-IO_DXc6sB*$s5gn5hnt zlc*_6$iS3nl&yo_j0smALa#%+^rG4>v^%uiLww=VjmU}(?(lXjZl*7Z3YT7_e711e zrqo}240xTJUPSm8!KJ%S2fxJ)9}|8XIQ19;--}-SviPO+peZ&Qf2H>X{=$`>_>&E; z^av9buJn*sTe#Ar4DnImtH9|SBf?h;C;u$)wctu$_}y;!knm=3%9+drzYm-;MTKty zZy|l~M&=k78otN~Gi3`2SDE2sQnW&o_7sa2hjx{Ta)@@h#SM%CowBI@g-b3}|DqY4 z$9*cL+$A%>A*q}cv|FTm2>O+V$|ZOOep^qo`?i^X&;P@?zd;3S$5@nz18wfn-Qzh__ZB<=TR4|tNi z^j1!Y@QT~>;AM%f^TPvk*>^1eh74=TqnvFGun)U?24~PY%W;%<4tmbzo@>sNFX67? z8s3Zxum?H79^{%IScxfyUrJYL>I~2k(){|nA3j(#VadM0geA=j_>TOLH=yV1+yL)E zKIn#h)IW*$pt)Oa!jj%)@L%_1^<1ty-X}EoJQ(2Y^<~Z-9y)LE&Z@=iudZUB^&-w1 zT#XuV&#bf!&UN0LQr>aOFW9y=x4*62x8K3J%dl;kyLC@?NDkaechws(M5Br}^vOyB{Z?GbB3yk>=0Y5_fMl;hcM6-!H8)^qB76 z`M*j}>HM$KT5EBZi*l9^E#s-q&ZsQu<{T0e-+4~$>O=+SOuRA`@)qwDdrA{$)c03%rcY;%6WmRtc*6BoOxuxF2LmzQjpeSt z`Da@Xx1twnp}~Eh+dXsWo!ts>uFk9PP}+H{d~nG^y8nC5Yh9cF1&g}_!!Eyata+0^ z+6A6|Udqb1#-6ytNbROvcW+wg%7z2!{L9O?`b1~2wz{O&vM#o`TS)KRdUqA+OdPa0 z?^oEtFvnlj2K8PIciwsD7N>Q zEftipDDA&8?fggB=3X0r!zJPU9rL;lHq6W9JlPSyRhr4UG49zZ4RD`5Z{d~(a>Atx zkfp3(XYNf&YwXLDtkRiw!?>EzsHuUBX%}*re`z6c>ElWZiQ9cHP;qAv*9xx;-pP5C z;FGyU#O;}Fm98IUboX5DAtTKhe0AT?oLWa(y&tkl_np~LRT#>0)1FTn+^Ob-BYyAY zr0wOq5Wi7rev8xmuECG9l!{kOydz7~{FYgz@b-ai^mBsxI;fXaR(ZntN3VJ3G`swJ z=C%62H&5<*<(n=pZLNe%_fmN8Z!^)GpL(HfwjLFzAB8TgS|ZD zHj;3EOS@mp)7$@>bAvolpp3SwwsZ8Va{8(=`YKjR zk;TCA`>P7)wcb2Poy@*EoOmO1@8)!R?=pRIN07IZN8DGnchBydfBxyf)W8LIaW1O$ zX2R#DhyOPdJ{+*-PJU)fRsS)CpG^3sszU3%;XmW0&$}gopI44`(tbQvH9TFNxqgYW z$>L!(XSxEHey^%cbX;PM`#SbmM)27obSS*S(jMn_XFi*o@uvw)wVu4|{DePey%g?= zVdaopK5rWYkn?BpOYoijY+y(lPWsp$-FGyM`~D~1>({{fuzcw7bQZd!N^i#ueIwU> zH{kFlEAbNNwm*#Cebc;`TY-+lo|)6exjj#obRMwF*k29M-o4E2D|Oee=;_&NtS38?!&Up&p~v#=H4FOO<;n!+l+&J>^OZs5VSKJM}yiEQz9 z>nh&NE%&uJ<;k;losEsBxL#Qr)5lm zgS&5j=)BQWzi?-G(}v`X=GC0l-SF_eo44QDoYnknOVz!kbKgDT{r^Z7?;qs6e;xUK zan`+?zwm6!#+PS}-tyzenBU2Mdh`AK-*1m;&UWqqdxWVMEpSJ5Qh5N8Ap+KHjzO^V^BO%YBKi z%l(Pd-~8&quFFRxek#B6jKl@dL70}MG24-c{N>C0JGj4*ixQSB2w5%cJsSH8{h#i1 zy&wJdG`4tVrZsju)_{&@D(xj%k8n@Jr=J9$-u(ARM^AO){Bl^F-F9g)v|d4& z4T;fiI{#&tR-TYb$m7UCyEOBeja8ZBUAKks z^oroV+@?g@nva6t8da?0`dt|E>N% zdA7nS!+G|CbJs%>o9%3?zKwd-yX=|#FXewd|FWF}oa4=)z8EK0sZNTDvZe+(`>Q(i zY)||S%s7j;89cty=DapE|GTHx2dR@WybYdLZ1o*tTzo*;8lTIeO}>uZ~|_ zbk6BhZ{V)QSzld!u$(j1<)>5-MRYUqT1S$MX%}^bxX=y8T)0Vea2}k`H^~ zcS~pHeFv6Lf9$m*-+$`0_KW`Z+Kf9ox6HgFb4!su>Y*#}uec+yYmrW@lt>37lmmpf$&) zeF+Y=Pu;ha=T}>O70i7Hc;kEY%y43Iw!JTy|6$%h&qz$HS&$fWL3v{Qn2JP@cXE2T zFMmS*M|c;*8pxQuFcJJrSz_!(mn8yMUyj>p3ICTW6F>3$_6Mq&qw)Lu!pwEQi_C}z zURzmEyQ2R{o;8pcxB433&tPp~e}H~W^KvQwl=edZ=+3uhU<3F9osE2Z`T7g2fy9gz z+y@@)4EnMo!Rf~>pY76`-XpP`=WQA>CAd}Z)cx-dFzL_g zEZ&>kv|xL8)1~(4&Na5L^XYx5rl+^>?RbOt{5YSRaNQ#u!X?3vCZ z+=rj}@n<&eut#<-Sah`MUEY2FsXd}Iu;_Q4-M{oD8moS{X#wd5>`R*hPbNFNx!3Aa z@++_>b}LFb9&nZ~qjS?0 z|FP-o_Jq!L_TJ)2l_;OVTaPS#Kc za)BSY|M5-D(D9$6`kMaZivQ^R+L7OF+VJq0I{HJ)0U^9`C#oM~iN1A57{ro1qk^6V<)X288J74|u z?>AvTa&Js_=k=lg?p$!=3!4_4{YF#v=Z-bK$~`+f&wjS^4diLVr`~E>^Vt_VkMZ8# z6J9h{yw`Ru^{+DXHD=}(=qOE?VUt=1J5I;;eo%LdwF8SS$0DA zO!mx0u15G0dUI^d1%BGfh{Q{aGZGnBXC#hd7waCD@g=7vUZFkxm45HEt4AhY_fKt~ zIx3LRoi}HGDVWHt$xOV&y%xS{S&6^;N45v5t%1n}R?DQBR^k=x{&O6CyvS+iv~i~| z^z?OzwK3e7$Kh_ZFIn|HtTA|DBIvQ;gb|D8e~SAtSd$251QyM&wCXEazX(nkwP=2+ zRUc&SL-XDiYmS$sNG^W05F0g1!eRu}26i8Zm zSB|M?1_1w@`mR~>-v{3~%oL4ltKFqpfUMY~Z%DgKl*Ei_DXj*-T z^FOV=LHQNs*M~2Xe|~*~=qWm@K0I6hKqvpg`i43B2eMX~S2VM}LGD-1tZ!v~HLvJ` z`VPS>fl8<7qWabg1xxC~PI~j|^P#WOUQ?B42kYcl8FF#uR~d0}i!xS5T|8U>9y8%t zf31w0@N!SOc$dPb3=UnD_F58GEGX zt@fP$|3X^WThj2@FdEH$aSm_N>9bkyPEYUZv^1i_{8H(D!+0MV_Fs_}Hi_+#p2zMq zzkAZ~)oFNqSR5tu34dltvxHLRn4lYk~XJP3? z_{nK_Q5qf_#xo|cPQ=Md!&Ae`ml`G;(P93fVf?j+%Y|ukUU`y?+0%KR8b;Tr(`bnf zODjGsY&y@Dq{Ryj3#a>+y!`2OPT=YMxjxOEaove9p<(4OOY^hYpPgP7dl+wG!+0}0 zEpBRfgep)`;--c6jUsq$$TJm^p@4P*=FV8F6kpG2c8$w?wn^y4Avb#o|eiiFR z|47*zPv`FDSM81$#*FKDVSn)I=B4)7-erEq=I@pr)H`aLqn$s>>gyqY-(}&Q1s@6T zTx$92QjCYWt9SnZ_SAgt{(MsYXN6Z3oD*K*`12nMSoCH3q-f`8W&s2C}!*=~>Cx0`z%_Z%Hu@*6w2@C%G%e-rx6=IQXV0A7aS zWfWdo)7bqAFSFp~L)>o)Q#Q_ceQ?K3@N>i1ju*}gUI9O|d)K};xMagSWe5KOKVN~L zgS-tZem?Wz@Xm+%@_b_*e*S~`3-NQ1JJ-a|XU-0tfW1J5^pJqL4J0JAc zwc>sg{A?!wh5s1bks^MKc@y1by^Q;UGnsp@u>8%d%^jFM$du-Y*C0nTNMkkkd9o(L z+=hDxW;omaXvFHc#HM^9%2q_#icC^HyuDhRwD#*B!ba*My8f%%Kl|;~+tc6F`w?lr%zHcBf7zn9k1JokV`C9=kQs5~ z6-u^P|MO^=L3kMSnoV8`r#e&_H2+{{zc|lQT|leeQS)dmg4QBv4F)TlC%QT%rv|sN z;0=Tg5H>)XG190``>&>)%0o6lIL*CF?lJam7#H+;mbL4|TqNT#gIvK zvHF%n=00LK?=pB6VJ&b^8~@xFI8;ZAhKrcPOyyb3(^_+Cetbnqo}E+I#r~y$vCUuS z?%bX{-HUs2?~T&dzNqx~D77}_(R+ySy1yD-T;;tt+2}iCT=#CPbct{B+?sRBOKYc> zYyEp{?K%F^FBkhu=@Uwi{+GMHt94A}vBMfOr-pDf%r$!V4SRP|dh{urH%9gH=gjko z{N;ZtUh)3!j#kpn%lG${(RLcqhl%CYCAh`<#7Y z-d()xPinb^eGad)N6D)bj}GOTE|=o7l}}#N{C#`L%PGIftA@N(MlUamHUIe`fBhla zUJYRa_L)^qnD3RbPB^8i=6k+Uj~A;q+AB}&8KJ()SaX&wluk#XW%W+aFFytkmxL{= z8QM^7T(~=lRmttONOeM@GFobsx5OpK*})7>enOizr_f>(n*$ zy-U$U0saH*JK=uN1I)QKqmNs*qW{)FPhRbel3wPPH4j{5XEp0Tgufloo~z3eqP2!Q zwdaq>>Md+&+{_(K&OO?J*oMvBR{vv~3vFA*UObz7?bm*~KgC>(%G5K%PM~~t1j$$X z)7sbO^|zN>`{7GYdx5jZBe9S;?Q56zXQFrF{-ym%!gn!eGoA2`YBhwmC$-eA>rEAo~irp*)JF#_`@(gr~MsDL!a7&$3y;e-nS0U za_hi?pa1OruI>|WE^F?6BKyZOS_YuC4cnu8cH`zj>&%;j_SP3(v@&`Nzs5bN@VLSb zHtk(!J^B{&KyM=hdhg>1`|f(0GZP;Sgj)_TwFa&q|C!Q3EAQrin=~g;V>OHmWNgjt zzR%iKSiNMR$ogPQ5A%h=XVz2|@2%NYWCfdhviyl6E6~!j*cvGMW6iD^R$)so?>a1e zu%M-vd8rv)HM>UTtgE_m&$7~))~M!}na3Mdy|(HH1#@{vVpMat<}s`9Vh=%}S#Nn3 zp1H27{oD(RoPXwRD>fChXiev#wUc)aTGq|bRJDE2WbQ46uBFzlzb>=}{R~^Q!fE;f<_=-@n1;jXc{L(`@d9qVIF=MrAy8e;s~7U=c8E=RLQ3@#Ox- zDeJ0sFE8xh%|5@z+;!YrZT;-{((tYXZhxbGA6a|t&hWuSD=U7#Xl1~*vR3;7b%)TM zJN(z~mqdCC(USBu(PTr0PoEzTQxT<@_UfvcA-Wgn+X9wyVrdJ-@ z#ypMI>$iS@du4e8wg4Tl-mIHcY(O8Z>{`({vVYFjvZ7w;&NBD@>IYg^S#u;;lkLgv zJ9#fuZ;JE&?9Q#cg`v5@_0B!Y*d)*wsk4@N>tKOb@8Zl-pxNij*#i}n#nYkwPCNI5hzRA)( z57hj6nX?b7=GO(K`VZ3oXdUtxZKCxn@Cvy-jx3%DAH*xo%?H4{_V^s#6POp?7zq7t za{|A~cCh^$zG)YF{A`4uHvF_)+H$)5)0{RJI5)Yu4ZiI4*$dnJ7ZmZ1Vtv^%S2k*= zhc~t^FDj{J?K^>71Tf=8!|o}wmi+3$TN6$Gz&`Hn z?kne?xy`<1=(4535q*2Fu$H`zjqn!pu5YvcunReO176Kv<-Td6@>0IyK8lc3q#d%O9Zr*CF$fE z?1_p$j9uxa(@<+IQQeGz-r9G|56V4nA@}CpcG6x5)UGJWyVB}=95?mHj8u{vR28GEVBkD0W>@fB45^kdJ5%&3hhc@)~ zyX-yu;jIbgVSB4T!#X?pwXXH;SC}@^O!%+eNgupO^y%*P5mUmq>zu=rlwqFTnA=Ny z_W17n6>js7`|G>^IJm@1&-%Qz#7j$gbrH7Wm&;1;P@nLJ!He`>jM6U-hBuBsyK{44 z{TbtqAXCfznfqqk>0i7wyRxowR&#Dnc5vYi>Mu;+>9ws?9y$bh5}jQmvl5M&XN;rY z+gKRdySc_!*d)2027hk*?~!wML;G>)>rh$K@(hrt!YN0OSG)}kbw;6e9STa=iNbgAJc<)g*EVkzK zBQumICpcK)$V}UFHM=H%YVz!z&lT>%h8p__^t^<;iI$F!8Cnh$?rM8l{mRsFHeruY z#^L~bA0}ijEVeSUDz&E~+Zwl&dmHnE;oEygZp{tcIbv}jWQ`3>2yZ;Xy5EAc_wwF` z)mJ=WYwn=$%$tjNk0I|8`h~A=&CR2Z)qf;Nciz~>+*>H~@HTPCoW1F~>SUV`FVt?t zhplI_55Sz`u|DdC8E=noe*|8q^P!)*o_v+HLp*(O?X8Jz{*U)#kL{x^_6F#m(aXJG zzOZq##_7@*$37Vz_>RwN_H<{;=rQmA5MjitUm@Fq`i?nqC$=9l?-fc`YJ52hCC`7P zoF6iE+RvIB_1gD1>ntkobJVMJ&+nxNsMp6$y;>hpJxJF+w>ihoY2QJaeoo!K$+*Y7 zQ~N+yr8UQ{n_Z&)4!UDrbmZ{=*4D7Bu*>&}_Qdwb zppl1R#;OfT{sOd$^#uAIw^aP zz@ydJ6{5*E`lMZPoOQ)Q&Ko)XCF_K5W5+7bbo-(j`(iCTJDYWc)z}y5wna@P_q;FO~D|wi2 zkKj(a!6oys8|HsyM12LgbZ`KB;z{nMPhi{CaL>G_llQ`}X%iZA8{w1J|J3-baTUKT zD6Pq~7gy{qD4j=p_UgCuCxb)oss9dgw34_r$g1=qdTdecndm)i%v-pJ)_p~5*lO|uofx@7F~p1KTt z$gRto{P)%+YmttfxSo1EPQIE$WDn%V1)+nRn|#GhMfU2A57EYI*=xRlb}`$|%<^=O zMR}vxO0o(4Vb{(RU6SYPDJySw@IJk-<*1Q8`RUx$m$A>@L?-p0ZlAG78v9IdHwGM? z^}30txAD{#6#jbTBJayqePbNCm}W0VHtHGAX~Hik}Z_jb8SfvdvP1F)|0wF< zHuVjzY>ST9Nyi&=%l7&N_Lgk220P3fJma0VCOgb?SDXhd*Zz{dsIfvnyvQt|ze482 zldu<&_eLN#kt6TFL*6~PEkWjo(}0q{Na>dPa~5LfXLT8#2J)?OUcPx>fmfVKluexp zzZSr+qqCcGGa1(~?rB+k9qHCT1fwurMIPa_^;`I9bO$qx7~(Kww3vH zKWqEHTKn<-t$u&+gRK9zq6h!tpIof|NoUABo2#*`q`3|KrhRxjkdI$cH%fo=ao(1& z;4S|e*T}B=I&NwQ(l56WUg4w{ze>HyPMHS2fiMBaD1i~JH&^rqc6qkZc*ZZS%zfMR z6~1vNWzzF^{BZZ>yM8*S5h6Y1F(eHBzJilsQnZWrgu&kj4RY7l`WNe}ZpJ+9t9H(b z$u5?A{)WLN?ETNV9zFDF=-$M>xoMJP#vI}1!6g;d>;Yx3CH>mY0Pn{qXm5qJH6@bg zJD_b5alEmP(o_2xOM0^L7T{O0kFnTq7p*MPJQe&oj{6bbi(yW=F48!-M0z#QNI&bp zcBgEdt7s46uhL3yf0W;8e{$ES@x`yme-?RkW3T7kX(jUdEXP*##(zcZ!=HaAdq2dB zS(UffkarPr)b0w1hh19Lo!3zHN8GjlT zkaImyx~zvbFb-J6|I6SSBh3RBKSJ`C`+ebE(rvVJhd#}tUr&D50cE3I16*&yH8St$ zj6pR|*5|KJ(q_ja=NA!f3gOxwx-~Had?w+xvhU`mjAm@w%-+}idAx_7RlLD&&efZM z-OR5YN4NI;GQ6wSA6(duTr6bFF+Y1j-E77jmD%GLCj978#=S?ep;eBT(aF6F8MBQ) zt2AD4TOu*zOGSy!!d>lu=0kV39|EF37wjo0RsT^L;{6)CsHyFSoPj~!>ZxIktWah5 z1u_Gi4S3mCGItw#qr}Q$F0$-c4SQPK&>gKW)aN+@EYEy_U5yjB<|Y^~TJf3;U#mqaZ&zQj6p2BFJQBYsQX;vc6e6&q^oImaB zqF%f?=Arv8PiL*w-;%?8o#x5{nm3~j1(;Kt3?5*v&2fVlxy;vTzDNI@3r&-;$af z&cs1?o}J&<%Ksb73s(e!?mkSBP6$Unrg(V@xsaEdJSF820D4*!R1< z5M822=Xg9ida#S6OVZPwke06Y(5a2Tjov6?E`9IqwJWwV&N|F__al;P`k7*QueZ9k zUSjn%Vn?61>ZTRjnNK@!)yx(2nfr@5Q^}iF2eQa_Cf^mDw^Ez?G4rP9uloFoBiKcC z_UT!5EAtlD-G1KAzxzkG&tyH}X)Al*i}tAA-_F{w`4v06dAB{f_s6k&H^1zk*}lO( zz4=A*D}+BfSFs_(dU!4Kcf3D!;5X!{vyr>;@6kJFk#K!0{L()CN_6h@DUsVb&$ooO zcAyge^y+;x#v9vMr+gVb3e7E_ue+&adv6UDG%Z|p{)+mbwMhL(A8n$S{jIM8pJv|ei?lP0g!cUz z_TpFl7ZhLM82@Vnm$)bAy3HsNNjJa5Gw+#8WmZ2pTRhmy4*w)lGH5|5!*uf@Nb`jXxg z)Sh$ArwZ483F+N#KYiO+YgayQI_Hx9A0zxbtFB6t0a=uL6UEbH#Jv-Gld4g=mZ9Gvs`*LlgTE(rDTxS{nXGnq0k8coyUR72PXp zym?g8m(66>Kj0nnj;!+pGvJ}wcM-JNBV3zb668#*=<)XRdwNj$>n*iP=IORs!KSUy z7gxPyvzLFY_3-qT$gxV|7BOaC5YYU5MpGGXWfw$_O`jDxwiX_!4$PVi`}_jUSv5D5 zWZ9fS4_san3|gfMH}u?{`(~(U&{u2u_Ay`BJIZ;Z-Fi3-9TgVuWoL7afjtdJ zcsFw2tzX?(WBZ#MN+ZWQ$a@lH^4zvEHjA*Hwc7Ia27%Qhh-Z!OeH=UfHsXAX^*V37 z)MeITv7eoOL-`+Kz3?!)u8cH`sgpY9I(la}Z(dDXu3_##>8>Z;<;XX4;(bNnwd1V) zt2qO(jd5pW6lWC3?+`kRJ3d;LjI4n=Vb&^caQ#&tQh$eH5$ z(4Q6HUfjp^Z{lh!uDCY<8yTB5E-xriKHL-Gr0v6f8UG41JuS>(Y^_Ght?=GiWa|EY zz7~%L$-;0q?fsN{x}H$q=>2ndg(FAUp3a_Gg~dKNaeu_{^fcxi?xuY_|B9RDy*yfF zqk6dXkB2LN57&8D4?mWMOW%6#>FLN`_S|(2=| zw!)kx;lytCGwrx=^NI7!-nm)PcbKsG==(`l&O_5_OM}zHeciNquZ^X^^w8=Y!#mMc7HM4tLk0y}C%zhJDukPJQK#ux5pgj`DQha2|`6LBGxU zS)2VB-0!ikk{~gXaIRyUhiW25Rg!HaaO{r3b{?HZn7&^m<0M1u#Kr{cWk$JL!CL=g!=F zzpv^$ul-ni?X}ikd+oK?<~qQ)2;bB%dS>j(>RxjVJr9!3;Pnf9E8#t3Fuo|xzI&a! z{0!sq8LPDFQs{Es$x^--*?Sh+%%{Y~$Q#Ionfn)4_@*gk7aIW4$MCLk<-D# z|FXqqKcXG(3SVh_cHQGvM)R@Zw?|)~-pDD&K+*k#dLMV|wToO@cGJDj!Oz>s3^R5J zZjBuazgCsmIM1bzF6cq;_5UXQUCDdV$v1hwF}Psl81kYWI?*_+=NdiJCv&GQ>=>9n zyW?T-SQ1=#JaA^mNmGulAL#1szY(clfj%e2Vv)qsne$(k|oOY4RT@{>~Q1 z2iD4tAfMDHe<&V*Gv-&610Kiyy4^W})hm7V3m=+Ho34+fX!8Q`M+|MMeM6outa+^D z?CDi8_Ikz>hwKF-eK&ry>oc@vI=K7V6R`~Q&yhEvho9Mb2ZrtZu65AE^foKQJpIJ$ z&;$EddxuFsOdn7d{yk04l=1xc_LczSalGw-!7tV@@BWAMdvddVc~B zl+tI+lMd!lS1I3n--8DXKWgq!O+U~Ud@1Go=8ofj-cdXM@O0LQ`n9Owoql=#xu(h# zJt=Jiw5fKa>Fajn2R?Pj3vGKu>!F-y*HOt_Ajz53$}@lrHtQ3j;bd<7dk&9+d(BIY zKW!cHM@pE>$bT9Be5QnT^U9FxJBFR-yRtvo$ZpXNXLbVTHsoW5 zb!yf71^D0_z?$WGPhi2wQRXsxkkLngS?OQmsyJ(l&+a%`M_R$YZ7#MYuI3*@|JS|R zz9%q$q?kMxXpi2hfBgEQ&Vu(~b@He1n-wkgyq&vBysz~SQ?9-Z<;D{=;6U$A!z1Qf z5xgUrA-MET_G;t*srN<5P`!T$Sfw-TUi6$=8jwyfrpxYwxUw?Iq#;Cewg$<5oGVX($&PVbKKW?C4G0%H+DV`o$W^^rjVhHjGxu?X%Fv4(WCZpuW>NV_3J~i zgkT#R7hBwM@f-9ba5=V7;bQXty~fMQ`7Y#I*`Xy?r^ZWoEz(5U8k;rl>}PCN`}gr~ z5cpM39ln|V`o{Dcc-F6fD~*w5rjN`xEEy#m;K1)J?HfeB=V^10Cf#BzU>63 zqQ5Q3R@KHJOkgt84z4o1jcJxhU>i;0mnveL~H*q{CHXZi$(WBE&T!6>VdGKHZOlU4w zY&Un6(!LZpu7uXq#uBv=xz%3grm3-abrBOayV3ie2krIdTL(@0Qqq?aC$;@LH~lKo zr;sV4U6q%D2D__+CrU_T;4Wf+cX!*izGR!-*B$(2MRH!#YONK??^kIx_Z~}IZqf$b zv`f9T>zNPZi!gZ9qr3e-nKGWHiM`-T+p`duhg=v6NmB!@rk=I3sqgb|t&XNQ-x8G{)bJ~N7RL7O z`2_b{iWwVwreNQeZzT6lJAl88{03&5`3Luo4yku8UP8SWyfIAg20rvoIL(@@z7K+b ze;InGf87mkzFJ`Ixh|MU{2SM{pl{M8pqI`o+iy+y<0JAdl5}wF`sgOD@|6Z|Ctqt$ z=O8}mx<7x?PT*INO}0*TWy0oM_gWotuS>$tHAQ)gkQ-V0u>#pYn|bqK2QtT-%Mo|i z@u_aW58*WT(lbsoH>kuWpTI7e{+wv{TK1HU)9-KhuS*QT$6qZ)CU2|Dh)z#|2gm;d zy{W3y+VJ}3SoXj)t3&+e*tkpB3pQhV$Lo}JOtEt4ufS4k!=30#Y5WZTnmCR3BhNn* zn6WPZy1(x_WIy`m$n1_TtpiC%5xo1EHw+41<~=Rf0dHe0`&H_oLnDkAol3ijK0VFa zl+ueg25-I-UsZeL$Oo8nP)FzkZrP`2w|C8SU_f$1H4>}eyLY3H(Qt%G+E_w1*M{M~=QDZKk<9}VsPM9{kHJY&d3 z*5stCNVj^9b+VeEH7iwZMbEFtz9v4U4Wf;?XGWLn8dD7N?}IPoknSg>_tDaqys_y~ zu9_E?u%|CYzmLfm`SoD4*I1--ML$Ysa4Z^XNA^s}b9NoR{>U)X51+d;(aiJnL9H>z zvXTX|^@RD~435h9%VyVuY#squnsdF*n%pok7Hj?~w7Ygnc=y_mPutCYqq{DEyFqYx z5nS}3A0$0mPeS`fcR>$!?1AB#ti_)SN9nhP$l$2p-vpjj=LhJ+W6W1H2S`y*=%2#7 zFH*0@Gksseca=Q|u9VNP2yIBYhTaNgilgZRD@=3yw7Q zl4RSheMM8OzT~Qb)kWc^)ydr2zM|&VisI(SE0XJZ*Zf39GIs;-+A4^3o-J8`ygtD7 z#MDG_b35fK&CUvc|EcVxk!7B2V+>xI^yHr8qm#yiH)+Nu)-9d)tZVCP-9GOwnr?XG@h%8J9gx^JdT?E4OXoTtwZ$)3o!^RLDd()rqb`cb=d zbo|##B6}9j=G(8(c};muO6Td{P5WFuTlS_xYtBeBk?mVe%DY(!_(f8gxLs(>D3XKL`BM_su*F zoqy%vqboDozy4Zaj-&5?9b1CxPqw=F>h{?|BqR0R*mRUGjGmeRPT~%O@9;?8jXS$U zXZhj0j#4}Ccs{YuHZqR%0MlX7qaBkCUHlp0UUfx`ozqX-qwhiwE81hi`xs9B_oh#- zMwdmQfz`=;lsV`Y{(7$A+4J$A;9p?+wVJXu7f3P3Fnw1;zqmBz&M)=eKiBimA63rs z0b(+MgNGbCbn{G3WB6}!*+VW3M<(ujoWp!(3jW8r_>oOzop1`{Y!3S=g1u+Gxy_HN zW6{gO0Batuo~rseOCg(nn6@lptRm)rGM8~-nTzM9)}s~8t$)K<5a?@a{XZ*`#5PT{ zFHw8Hl{c9i>q|~0eLm^oiPR#>LFbn*nESn|&r*4d23A}2Tk6B`1NG>e|G$VcC3>)1 zHt?4$eE))~OLf@0obw7io^;E*rLRf#0bi5q19o&3>Kkv5S@Tj`2E4QbUfN^tNbB;u z(lXa@%I)^j_IPQ{UNlpGotLi8OIJ_2E8FiDJx84RFmv?==p*zWT$vQco~=2vXtQXV z-67gEyrMGweXeK!oLcg)23pm7{r$Y9XJjIEyR@Tc*_Zt^C;s!xV%d63S^lfxxrw&1 zao>@9q1Dl;`2M>*rTE?v&6j_9Bo_T8YnzAocG#2eMlL?gzM8Q*(4EDzn$y|boA;Vy zTx8AB&(Hd1GVc2!I6YJSWTg6@*RgT7#E8A;Gw}$uvwbn3=h&jD=lP|sU$e$LO zF@_hjzjO}o>+xGt8s|?w2UlKx;b-WmEA#S5t29aExa0!+e%3k9d^dPAaPn@F zyl`V!XOS0vS)shb)sH#92Z7hFRMEPV{4sHIOBK3cI}$)&>=Ox zEiMRjn7%UQj2@kG;_~Na!!Hr|hVjbVtFLrF*l(Xmwz_i}J-cI(&De4)|3Kdh@RjzM zif2vRy2&HHFwgCzX}7EuJ;9G-lEVHJTu|PfyS+~`yF2)g6_VKlQ)7K~Ev*%#$w+o@ zYIz*`LZ@qaqJlWonfjHIsjlDjM0)b z-%lYc{OL3&-wSU~mgmyB^li{5H~z%qcLEVRe6P9(kfD+fd$F19k*@@Nk8+JFPU${EDQPaZR`8(d{oRcTtRA>Ag{?;vtAZ6{OEcq?tD1NYX zT3$yP<*nsDjXW^?pgHYD)=2KAjxpPZ_B7g|;uFTh;z8J7NnS(z)A39sWHOlqF)9FLOX6&|| zQ*byq2gdHUatFrl;IkF4GIps?OueU`*Bvdfjj9}8G(+lJn_0@*Wf z%eIVQclIrM^X?z~S8KPmC7OvYA*Pt?TY^3_&X-?wblNqJ&fssu>pe%H6oJp26(qNL9Nd*M}f*jDN= z_=VOSKL!Ka7@n)IuD8Z7-*&Pm;I2RASwuz}WQ+e5Q@qb>7stb$VVbyT_y5(+4=mjk1MH*1y+y1MXBDr~dP zw6K<@^^RAk&+nK#zP%P$G}3gdJ1^5dG?nvf)`@i{D~^mktGQ*VtP?5M&5~s9QurKS?R)>0FD71KZy$0b`wB6Dly{K!D(~Lb?R|r-g^Xpt zsz|=ow0bbN%IUM6oF$ulE1n&^7|))BR_Y~(SbtbR-&PV2VbRj|u5fVC@k+-2iVw7R zr2`9``x5SrY%{S;o(nGOID{V$ah^6Dp1!Cfxmjbj8?OhRczUzt!eZiC2(F|%$8_Xl za*3-)=skXp*}JU;ls9iAMEvgz-{LbC;M?tvai%=Oi^}7acgi;g9-YE^3G+;^j^zHS zor9D!^4oxGb_vmuSqGm_O>Zy~=2S8@sK6_hoWzinM#cW$&V`Dy7f zyDCyAW7(eI9A|9m&PBgz{X5Pe`9?)*jovTFBwJ^6?rja8*hjxO@aC>@@>|tj{x{tG z8uy+2=qOJ9-QJiT%y;2Dl@DCG!0oNC=HBVT(dw0xA9vtLwqXMj95;C7unszgr`)*v z4co6%$Fgx4oiuH0oieSBUYSeXGA(otm1&`KIQf1!UZ#cZ%=w1x%=yNesN3#qT)2-G zI9G=*xgRp^**^`u1Ww!s?K%CBdyfm-kGyiWtL_DvZg8h`L$u#X*E-#~T5TV7>wVr! z|Gb;t#W(5cN7HVVF-Sj{K1jB@usJZ%ze;E7aq0lJLDK9apDE*F^_`CG$Yvjl-lg)Z z9DHL(j-)8tvUhy%pF3j2=%0(N(#lE({@vT7&!5*f(i_?}pqpOu?w^rqdx1-NO+Hh;(gsNTqDQOm z2J>V%96X{2NcS~m{vdcyxw*HneI#c$ulCY`qXo!bH}=h5FP(Tw>BLih+ewo*M^x;4 zKRlk7x=2c~H0{$N`XZ}I1XSZSxk=yq!&4BR8g+CBy1N4chV<-4D zb+~Q6rc-_Jm#rHzhrBWHFQ5IqqXYCnGdX<2_Wr!;5)S-u>)DU*BVOO<16vB3`+eo! zM7b)%(6IXdv*caHUNZ;39)Bb~ylwL6)sKhn+--d-qdWKur(a|TU4{M9lq-2P4;NakwX`A7P)8NZ*8XHxkAM-C~k!_V-T0|T%mbN__2 zz;agpI(KJMBX;&wW!&js2lqF}v!`x|JN~jM_}ciPDgWYsdGzE99z1#$ZufV5-qDfd zOQ?6|zxdQPhCBE9z0#HBF6apS^P|5v?c&!SIceqI;mV=yo*dff%Awy^kH#6L89h4N zu}^Rx(X;w>5ZoKtGmigxz1`>wq?zDzt~`dmlAdi~;yYKz(Yvd~jrHqhN|Qpb8?z5+ zZlQHcWOQgsyW@-Ot_`_!Dy=VGxHktI82X!cKB~&lf6$X}vVEVs^HywSwVu5u(BN;!`_@+GTxuEHMje0%>&e@c~BhP-=q^y8JqiL7;0$K z9DB|>)oJ9Gd{gzTzp>d*oVylaM|brVvzDNBM5XUph+hfwP1(~0uit*I`H0fAdubwk zzt^{}Frayh>|pS$sb79j^L*{od&7e|PmX7babb1mGq;21b>Mj|=Y`f{$9Le2G+`%{ z4_*tl!EWw{S_6IE+z++}9T{NGPIJqj=bS4xc`awWp7D66lWFN3bLg8{rzmcU_2CoQ zS44d6E{f7tltD!}WnTo;xb!^UGq@7yt@vm*Aj(Ysa z+K4GbzLX&kC$f9Weqro*vhUXT=r-ozVKQEwHCNVSRi^Q0bl0M4!9@+YSd*X~j=T`B z8eFJ8)9?Qiti~*)D+0fdZ{5icT^2@L6$*bfa z4djf3>7()dIx~A7e$Q^qbomsTGIdqV&pMAsB(s{mdwnxDftPqEo4_<^!PuZQhM0c# zr)}`k=8@Le5B&A1@3A*UrK4Q!JAQUiBdh)Pdt}81`5h>31Tir`pX6EaTGUs_b2rbj zpG(d<&-h;>kM5%G344MBi|AWdW1pKiCb)JI<9B@zcB+k+@m)oh*I#G+rJsF=zcgpq zb%0Podj!tFu zCFc#SR{QES2Jl>m{19C~j}5CE_|W&CuJY#R%BS@)aNyal<{b|qm*I1ruaI3w{6)?( z=*@rJ%EUiFoFHr%@VP6KJ^ZK){r9}>+J($IjIsGlwht<;u>tP{_aWjr)M68^WDkUB zTHjsS;>KQ(?rG}KRcH6F#c%>K_*8|x|i@f}%*zqo^Q{Mm)`B~7clTaH%j zZIKVkl)mm3d{D6Mr?-&K^F2>hS4FX1Zl%l(vK<(^c;P(1RdZAnXhrRLgn-wZw{WMlb>!+N3H`UNaPwOW$ejT^F zZHKc?<(?(`P1aWzmTP^;U3>k{&f05F@Dt9O>kobUxL}a~*-q9f#6zKyxD%r|gb$kH z=s&=DC9($>yx&UH(s!l!oZpWuFM_7fZ4a&^cHH$vFLgCz8^#8I0^Qc3Ny;7b$6;`H z{Be3nPycH?j)d{c=^?G|{W1Opj}3pL-;C|m#^3JgzcuzaSJuHhuHTJ#^TNFW#@?&@ zP&(`Oo*uW;=cl+F88Mr3@r&*}2V8ToKN}n2uEmPcKd1L07rrq*HNHXnX^(Ig24~tU zD;m^Tmq(lA6J0wk+)>IN{vu>vsc^=+tC^dG$QN?wXrkMQ-xp~k{`vO_SDb}3`P*dO z_E}&SuJk_%oCY8MbSCD%JD2eA6`XhmhbhBcjXvs!OW%_05xKJcaF688WO-=(n#@@n z<7M6A=yelq=GQP6$szW{6l^J0R(pRGpILhNP_CUAnh{9+Gd^l7kf-VctqY0XL(ZIT z_DC@?AlWmSCC0Kd-`mVL=b5z>#at=I$Nbm$0BG;U9&gR{7~_t<#o3o(VB2)5@ucxf zW$%Hr2O)G|AR*t+k2im#YfN}B(-F4?LZiT6>2?dD^-R_A?z zg&is{2ps{3GuA3@o6a)etd#5^wj%#nl>)c_T6p*Cbi37UVCuP0mk9%#g%&&Dn8lI;r~~lpBC`65j#*A zI&ERBmabynA-tV;iaprOI1PKI;*`GAJ#nPMqjl*_~cXe2YY${Nj~#f?K{`|4nwns3lWT4wwO`ke zXmVHjsLqrLOFwbq*=QWs`_z7$b7icokwM8*ZoiszN@Kq1e)8C>cblL|qeJM~j6Z&! z3SFDK9-WSOUmi~dC-SBAe=~-u4D(;?!D*fizfM@+?s3<(B#&y5DOE)^m)e1e^P@Tj z(WfW-K&q?|eX6(!4a7y*Nq?**E`sF$?K}Qv_u3sfI6`%)bmGf|6k80wxe#QpU)$8g=o0qQ?$1r6m#|(NioLn^a`j31VyD;0 z2H}p~=jda{uLhWZ3GH2c^_GNms9)~0I^~0Y5>*9$rNDj|L(mL&En_H*Yuo*oPlo zmAS}TlFsY;VSsX32e33hBE8z$?f7H6>9t<$q{*$q-hl3judL?(Oz(`q=i{gH z8tYe0@a`-4?JfY%7%C4Y!K>M$c#$~MOh8U-V|)Y?&+eMy(W8=(I4X|*T6^v*RU1nC?qCf4fopHr2V$Hqdz>AZ!KTTnjf;`Of&Nz3)&S;7jZ6` z^^GFu+_yZ=5L@e=jkcC^!PYVcmxb4Md<3}itYF8o*T3}4mN-7Kwtc1*S$Df_pJ+sm zm2kg|IEL%2{Nr0}tK&1AgQj)vx@rGZv3F);-(ONkkUAFgZ|2|4|CVd_-|>NKyYG1X z+P}Qx@&EAt&wiD{D5L;yZNr? zeE88|!N}{xe7HVjcRa=UOC9lL2Tn7#edbE;D$&zVuZ%8FQD-T1Y3eaFfE;@!WYuS! zIR>yCiUxlPy*Yb#Cdw%6Y|I&k+APkgCJySrA+3c%o9@^m9?P`igBFZ^FQ50&Lg$C6 z?^@!KMyR7_YV4VvoGpAm`fn-wG>YuPU-ck!(&#MpkEM@Q+H*$EgM-8Ppe?8Vi@c}& zT|E~bdu9}yRB}lmvF+_29vfxPNQ|-V66Gbmy;$e5V{FW|&NPv?NU+1-g~Y>1fTMXa zbko3xGof(ihp8j7NB+26^OGcPO){RN!#|^Xy5TwJd-I|4RNx^8A2xj}e3<dgf4;UHL2a6+6Djp_zNS>RVEo z@RZmyifdjeKT6&RffIkH1(MrT`2TBDZ?ZYC}f{iSdE7g#x(i!RDmne zrWudN^*7gMdDH7X7N1B%2L@uBfFKhajNy*0m|3CctKaAo13fj zJG&?r_4Y?i*yA$WiuE^M2Ttj$dd?<+Py0EOV(UK2ssWEy@kwVr134aX>MNt~i5qFk zc71%`;omz(*P``M6LWTGW{@)7xxqcmpYBdv{@e!EI;J?WOX^v-U~lEiiU(nQpB`$d zifW#1^nB+04!*^Q4K0D_9&E5`vzd!4j^081fo=M&*wY<<Z+j79QCL!P|c0RJstV0AqISn8PO z+;LzGp`WYYHLnoNf=fK4t8lEn#)d9*j;67}`Nv<%c4SqUa}Q)UDJqR!ih)11hjJ#+ zh00Xf^+)2-9`u*Gfb7?M#5WUK4{zJW)%z;iiDY8*%DUIqHih?I)>Z9Lcdh zIxsrALht-AUD@uguQ|Ns)l*JcA-g<-Zr9mAbxsF_;rKSgyicEl=6=B(soj~EE*QCw z_5QEZAB(UH>_#?<=Kj&6wY|XcD`4Fov`>5znJ$@a{0yXD)u0|B5V3+pCu+Oq+ByeS_xiVA$KKBc;f`MTWi9+t2EPo$FWQS(hc1$j z9#b%dIrn^*N2blOW=+qDC2ogrz7}T>*lND*$lI+L0g3^zkMZmu77z=Z*vvDh#WP!> z#p|m$Ge&(jl{5Ej;-SPX;)BiTEkM32UX0FPO1{14m}$c=$TMd`8|L)x^7K-{tUYm7 z7+sw`aYha`4q4k2ue+|Lt)i}_y`u5H05*1a&C$N*RSzX@~eq`b6R_t&tGfO=;H|nP~yMLA4$SfY4sQWY0dPj zk#i~L(DSh;gzb49oNth*yxUH!EVlYD((mP^R=;9Dr^t66n?fOaMc9)!0qPeV1~%z> zN^^no^sWwCYUk|eH0OBZi@$E}1}iZ;WYLd`o$2cKTKh2h&3LG1fBW>j33$z1RnHS+ zxs2~!*4W0_aZqX0-O*VjAmx=Ew7_RRLK zQ3e!0`6%emv`5#-!WZe7gN$K{xb^JVrGy(1s;_5D{VZ!xj&weCAP{SfaN z6W{T^g>q(H<$V=!X`O0vIr})^e9FSeqJ>t<{u;>$1bUNV^2Af4^_YrZtw+VE0K zb%OpHDMD@qImb$JZvpmi=7I-W_jt_M@smvSZsB(qzAhD za{X!4r%BIWck+9qyDH79;JgF(UE*AH*)HLWW7Ao0r7cF*D@}8DlyidTjV$5%66wk~ zw>%X7bys1yc4X0wPj+p(_}IyT7MI@+Bb(j2uMSgP?xGHTKjrzeIcYs!m7klQC6|c% ze^B<-c{cEI{<`cfRh-{$;2JoWyJ~ci73D1HZGyd!xZx$(M+JXsigi$NU{#h={(}?e z{d(uefhkk(i#eCQ68q~h&cbX5@3y_*xM`d4{TBV5q`X03^~-jr9?!Pw$G7}=Wpnk{ zw<);bz>(k5mPv3)ZmArnEO7Fh*{Wx5@Ba!MdY1t&<&581@KQO0efg(HH~il&+_Ijt3(MPs3(H;#aK0;NQ-+E| z>vdjDh`Rjw&HW4Lw2fo((Y0}!Z@Sv>_(P1xvY{HdB@Oe8w|LcKy$DhYPXf%)YUcPajULJZ=p2p@?#r1j8RYX5J6PWf!9>#uu z3|jo<7%kr8qs1J@7r@Y>I}W*c4*AA#bJq8~*>Dw_O!7{6TIA8B z^i(}#Sa+`fBhcjeH%C_pCi9PbH2A&$n`p3)p#rti-yW zc;W%;`q*0DbFAv*!F91Is(iTn~fAsrD|BiQU`rGrIfrJtIAQ<7NZdGzmE z^uOciO$Qiktx`<`PRob*2waB z-o}0Yw~L?3YvOG0Eer6UT3~e^xZbe$5me;@DRCv>#2y?+sXk8$RSuKFXN59)e9c+iz|gI>Y@vA%P#?|%nkJ9O1Pn|EZ7pQbfxa0g%EAf*+_;@0~nefZ(L<(DB31 zJkAhFek+(5-XBP`lSgZPbLg)Z0_;<+_Iv{OyE@eHGS2W-OgDT%+hdgCKU|Rkg zGp!RpXTFPrnS;BplJ9rW#u?}$d28&ELh}9f%%>J|Zqd4H$ahWA(|HAfg8ZM6?`Pzz zr2Zn#hg5sNLf)T~_aDf6g1n=)_4%*Ontj9KujP#()B4E!_sR>*1TJ;* zUhnncXE~4fxAydPKO_D0#b3?)iJh1K6zR36Pv^fhG2U^;ar8gZm#NLSpj*rzsXjZp z;Uas#=barrc;Vi7VsxDy9o=tjGxFc`hhN{(yW#41G_@ukO|Oe%3$k{p?cV|ZzXtyA zz6boK?emG>G!n3)`JAz={2zReHmJ=X6kTFN@5Y8VJe9Lwc1&F#p7y?*m3NCryTl`Z zp)j8@9GWXckF!XtaX#V9mx+6qXGPP~t>~xTMgI85L;t<%@Z;m%?*05BosoR(Y5O0M zcU^yE@ovc^-VKLC$1B730c%Qom-x2<86vxJLUPeJ&Iu>_PvFyU`S|nze9FGv34FRV zCo#Mv=T4KqiOhE`TiIlt-}XJ zdH*OL_4xY_<PBTZrb{<;mMKBc68alf**%JZAbIq!!r1=c8WbSANtU`n(Vkw!Ox#T9()#g z@HyncA>`RdX6{`0_x7}PeaNTRi@%bW(AWuY{}g$a-eO0?*dYbCpPy5ov!kZn+S6%# z%$3gHc0KEF))C~xp4nJ4ww_?hP#SapZaS}Q9VU(c-k(?Z6YY-Uv5iXJA5Rpq??CpP zWbU}{K{2-1^T^t}nUlzNac)UW@qnH6i|6t8*~fR4tN&hPSBA71@K}N@k^e-H?+MNn zTFlzQ0N<5Ad9ypVorfMYMmJ)QMK_IJLmN`Tc$77#sPfY{k<`@Kn>)E*X}5P>49s=* zsh1Qve$Cr7*OOk{K>B*}o4wzL_S#8bMV(>bJ{*V~AEw@Q_FUG~BOO~fhYK6afh2Ob zfU~>y%(1>JomKlSx|t(A(9qzV_f?ARTyfy!2eTKysHZJ+tnj zcm6&%eWW~ox={HlTj~FTHtDKZYCYgG1y0lG_`~S z_!8d!4`5B5ibcP}HRR$Z+t0nJw~2Sc+t@RBX!h!p4Us%AH(>ut;|EuZPRW?PRX8qP zv9qg}>oD|jYH2XBj5H&;$i}5p5@C2}ILQ9zX8TMMSk@6&ue8|etmhmP#pdoIpXfG} zV-d@YH3`f0R4K7D%OF2Q@XSd+!*(8cJU?XzOr zh-tU2y(|`GkM%fDdi1CA{r_gwwI&v=XPzd1`{ulOqLnpP(|^fomu?61S+lvfYAl9I zYIdx@9o^c@Wrg3=x8jNV>#W2>_t@;ExmEH%5+bg+{IiX%BMfbYEo|Y}pxaJ~JGy)g z<5x9sD82CWZs%+G$88h0Q*r(-`0N<|w&8npP(Fd*9KuIphHGE`I&J%q*G}D!)2_Q0 z^&8mI{v&G!32c%oYy7(#A3*Oodw6RZ{dF&U^M~>K+h{KwsVa_NYJu-%_fZUn;o$t^ zuLsL}53sgSVC8r8;nQ*`kawVoG=CMy>)e-)o5 z{A^ChM^EPpC{}><`%rMs@pk;N6M?x0TESNdFo^zzduaHsove%NoGw=`xOV(;_~$w2 zIhu2qjE)fe__mC>4{&e#UF|#{m~&u=b4j%aB}5w+bAQUmS4v}tSo>ryXX@ddW0#*y zqgtaI%(t++6VJ@k1C`%`-|(^6x)*$(!@d_m->j!C&oQSMTZg_}byDjup&Os;YEWNJ zBSt#yZ}4ofm0`}&XnwM*p7pmNb1JQOn0APMO&qYH8Jy9vzKXx)=q676z@V~ry+vGR z+7_d3h%NqJqK52rP`PK0i%xwkhTwpag*~GfJr)N66XWskm zuFta$X<#;R)$=Z7&pogo_?A| zyq?b7a0YWke2TZvOkAnXan_nHw%VQDr(9n@m9ZDN_i|pe*&6_zMUw1m7(do}EPH^>7CDi(Acy$Y1?=?3tfz%Ip1hyr68$j=Gau_7?QsZ|C)HqKv{|U~4mDw|JR# z%)2!9&>4}$sgISXJM3uU=*J$xe|B5?&FW10=Bb&)gC8$Xf5(pQeRW&H!DX;%bpl+b zS@#^KP0Cw1JFvBfF`oThcP+?|JrnijZ^DKChvB;(a5}emZkc=*qs+~YJ$CK-_Izu_ zvAY(`DzpPz53?s+POZ=3%%^qPu%?R^3$_!dE_ac6V)Goaje~}MfcI}*NM@(k#$7ToqXSf$DddO zT&+m{lKe8q$CUj{uVZI^ojzF${?8MaeeK>kz4+PovcIO^iRmhM&_f(N-Yl4I%j}#E zji4LX5c?53ug>Y+65es`dVEJ7O=I`3`?8hz;&jpmiK$1ty*eRwg3hNtyq!Lj9;ftZk81LR}ej)borC=UnRGbNMc$2WlDtX*k*p`Id* z%2m6B_u6x#%lFvxx7g=cr@3SPtbZi-=p523#@kQ5Hiv9GUwACFtrf`4Et{zCBJey+ z{3zkGhVqbg{YJOj32xHQ+R@!!{xsk9Ji5n@s(tD8Qy-D-ysRMBUt{IbPkCeg)D2xI zf4B&nbdgmm8{V>z`Za$`DSTJL*c4u%d~W|109Oaj~pxDUPGtxtPx&)vx!Wczr$B+h2UFVP;;0aNQ- zdDILp99g9?tkTuPq<2YH?d4ml61{Df6;+)x>6_$H@nbWw^5Dm6;`tx_Tdu7Y=|<%0 z8qS5B7waGX4zW#%n^D(7I^rDHwX{?)m*~I$uQYDRKf&D>>-XbP{}wJ_otUjHyEp81rr5oy|9u z6QT}izrT_?f5Ls~jZZGj`@l;JpQKKeYw8SDleady5 z6|4p!8uIw_>HVoCR_77#Tl&-J+pN76*`YG* zgN&bFKb*e4HB4HXEc`pPu>;YeK`2bhAQ@VOsO5wni>1d zeo}eGI`fI=ySg4?e8|F|kG`EfR*7F&jCRyhUWD?JvppJQ9aKJs=2-rrvo>nxiK3C(w;G?xV_%jtwocjERSHb^Q+CajJ;xgGLF&2d2fKCl3v1f_ z_23tuSe3C#^CRI&epHX%%Y1@*Hqqyd{Vz-Rb<*CL$@JLQtSnjogWaJ`!16HuM8FcJ zj0T-wdgH}R!V0a_H^#Y6_q;7@SB>Yh^Igg|zBv>1Js0QkJnNwFUSc_M(;Qk5OloU= zAkevhdg>PkIu~;N@VxlRMqsQ%cWKM zK*IwsKT3JA(H_V5k-44I4|BoQCDNAUTb&Kmdzro{xpMi~9?q$ZIcZ!N4BjtLN0$9c zuhKr_Ct=|I#L+{U3}yX7-@N(Z-*YdR4+Ap?%pJtfqO$=w%GF2ISHksUqkE3s{W&|k z;XylFvp>I6ayN8iLq_9+d<*Nh^z5E<0$m?mn{TFWgJWqush6|5qh^PkF%K_JSlF4yB0Ia$EY70!A%PDLSxw&qI7KVxGMO-zAN$CV$V-_r2J&9{(!RF}`;C{hm}$Pc=U6_>AjbJd8Ze zB45u?kNmC2{9!q>_`BVbvCM6p@7Of_-$O;{!s-cd_lwt0A6yL^p zXn-|wjgba-Pjaug5J|<^&m|TzW8+}ZlRX+6sUr!l&%IJxsy${GURztLG=S}rc0()Hq?jI&(WCD?yV%Hi(@wKLY4qq+>^Jk#2N$3NEMzalRLQmpe&Wj04D5B# zs@EsqRi7LIuUEEzg1jF`m;4y(a#I~2>>_;bYjUg==QdlN-J4zbdRjm6qVO~z{oZ@m zG&SU$kJGfaX*FY=BU7zq-q?n%Q}sIgB4gO;yzeDe_gy`UBZ(0Hjy=8D78b{%g6j(b zEBnx5x4)a6{z z?8MHuBMJHLweK6>8)(`HZk+jP4eLf>eB2hlhyU6Ta<(LNq-&=YJYI_bmTXcbH@d!U zW4Z}&y_av!#BpI;5DJ(FO@oG~ zlYRz#;Ot`^^lr{Ge?AaR)1Exuk1h+b4r*n~ z$djMbeb?{}_y}%9^LN!7 z;+j5HlgMM-2rtds9YvOe0@f1*|+yKivv{!7yy#WSt6ingMga}8{b;J0bM-3RP*Y%7`vP3xVWb=4Y;t`7i@t^w~^ z_ha(0TKiL2_w;=G_09i3n_Ek}-TfEX=)jG4@6n<0JDefU_inaAu ztp3s>o&8&oC@sRaxHO+DXUDSdx%3zDXvsg4=351&rA5`e3-j$3uAxNfulbhb+tR$! zlHYK>lX3=l_cwYsr?li7`21J%?%!2K%O0wVmON6${KD!l`4ZO$xw3C!cu9U~$>ThK z>wTpa?N!m0PgO-%?IP_h*inBO15fVWx50;*+rS62k?RJRvJZ|Pu(IdA&;LjKkMci` zy~5#xsnOA3ZZsu+sh-kVQ=FSgFUyT8Z+gj}B;NX$X^AW`_uhKL&R#leXEXa}IJi5H zPwOV|m8^E-{H4fi#a$o2k|OxJEx3)fuKv_)%Kp|G_9D*#U$=9e%XJ;sdElm&>wK;? zTo-Wt2-k&)^RHUj%neq5=G0X1b9ZT4@a3wU+e_2)xGv(qbZu$6kn0lucY?pATwmb| z?3W+p4_w$a`%|yl{TCn3jUIcnaDD1t(tMJ&j6i5zY7O_;&7Avn+;8;mKgs=r-u<22 zf9uan(;IW6PP+BEQOTd->fC5Pe3v5Ts?HTUyYzjDFft@doufAtCN3?R-pQOa%NURy z$>%!5&h~uk#>9E{$sam!Q=)r+@PzPde-hv0ixx1(`_m7vi4JdH6CHVQO%y#edp-4> zZnLweJIKE%*qFwliw6i7XljlzbvZ;RwWYKT4>5)Lz z)UA4wlosTrfJ+V@~)kGC;k-Wn6z5g z)qM}&Qv0X$>;6>hTnBdP@+O`CdLdYqEy70A)Yi1Rr1h3e>aBnygANyBBLfE+aBvPB zaJFjp>??Nm!mD<+scm3&EZAC+daEj16U@oH$e1gBWN*4t*Cp=72ie`XIJT;iK=hA*C_Uezkn0j_ff2?hNUyL&pVr}$WTV9{F$Q@@>s-O9u^+au-)zn&HH$7fqJ+YSi zCn^^GnU$FTr*>k_?dUf1(f69ZT#;%-2d>aKs&jp3Ic@mnaroo!sB(rTaDBi<9=JuDn}?Js;98ekr#xqRV^+(Q?QpSPVo(M8o-pPtv*_^7>A zb2WpLi}~^IU3>$2tG*^mM@{G}jI=s8BjU<O;x8#W&(kUs;sj>dRxwl8%s~Jk^1& zH=)cFb)B7^)30x%>#vDs&c?GBh`oKD7`^94bjC4aSm}Lglrm<{?wGd;8!2`!<_OtcZ?jeijk~gGhC}Dp z6W8>K=0ty@JA)&YaTt0UqK)cHJ&UhR|1GBfme7AKUn_9^#CuZJ1WhnG|*)OL+)c^|M7Z8^|;TTNe6ZZ2ij zat-x`*i)Ni&BVk2XeOWZ)Isv7y-mb1Z$frAw?1CcMC|gW)+Z{2tG7mMcm-L8tUq@V zS@ssRKWb;2Tfbbvx;}V7S6j+8H~zi!MeNw?bNVmco6|4YWLHz!>6Z4c(roORO3tZi zMvk8=#3yaYO56dQC9SRvY7`nuLqns;&@gn<$X>v`_=}~1p%fh@(;CR0YYU+JMLO?h z+)j5;=hsO8Y#`fxG;l)on1A;j*2;s7*JjMtd(Brjh~3$js=Vi*70CmQ(Wy!|Uw6ozYhCcto4S=I?WJK1Th#*`DPNitWjV0;(iKf5 zUF*G>de+ue&MxZGzCfpL#*QR3HR$oP-u>!`;&9FGoy%IFlg3BO=k~ksrM`vjk8;Aa zL$)QQQ=3zim7?ym9*mN+`j%{U=}f%wedd{FetRC+Q{clqE3Mj~GE6(W8{K%S-ECVP z+Pqn~qK|(Tq<^_Tv}8r%P;jp7k7Ka-`@rZM>c=6E?p06Io`KaWr>UihxNY}j;L%7J zyKC8I&N#V^*ci~)GRogl{ELMJ)>C)gj$Mz~Aos_hZRZST+7g0xE40jBpr>k!r8N`@>sIeS-%I{w8-h{5uBG9+yj0&vq1Vgb8F`1O)sZU6=>Zh zo7xl4wy$ChVRt;MIaTeNU~R8`nff;ipmXGY#4CI&ypTJ9c*X_|$Fb z&B6YWJ=3D6cTbCki(`pl_-hzFD}5aK^mF7BICvfY8Kp0z55JBcIQpuM4-m5WPdK+8 z-@Y1rAs%AS`@87^spGe86F*2VYR6tww8Z7-c3@ddJ5pSWxVBTK(rHYPpP2ey&-%yF zt5r^Nb9H~HDbyRfQgc%NWFhR_`rb|)59}!iOL*3LM-OF6CpLA}^DLb?^y8Y7;VU0I znf_7kHtSRKZ%)1%>_5ggmEmtwihTfIpiMi`&DU-jj|Fq^2zKtD#QJOL+fsDf(goH` z+2YT$MvpLCY2a-F-d|8(dzUXQ8wZqjuk?4xT z?^$@&(TUow=}Vm@k9@VjulPfFNqRc2#!vN=(&~L4?NHv-{hr!8d$K|EUPC9stFh%tC%m4y>gg@uNje{Mz|)L_uamzUopo<>YsI&lb28}O(3?`|O=g@J#fNz>XAWhtC!JjdpM03PPbG7z>UcJ@CZ4^tF7Avw!pG$qap{KH zJ?MkNpV4Pi`5tdA3Gbf$QRXF|vJ>+g*n5PHmRPe{!F-9eQ_24)(dAW^^a|;4XRo5e zNl%EaWG&jKKlty@f@|qSDo6jb$i}m@(TulEex1il8)9rh$8cn*KkdLxuACA)&oO5G zKG>4TY(Fgi`+p5w((TlS_kt_=cbo$SzZjUzm?-=_;K8bI_>ImxPamA4e=g*&iC&zs zCYqVOCd!^JXZQ*HPLh-X_oL`nqQh)%Jp8W-^dJ=n}inz zku#%b4Q;#eg0pYH!_2KNzWTn>%!5|{rB7S^$oGRQw%?qAk2{fvoyb-vZrvPY$EA@t zd+X61U%NSRs5O%LBIn=z3b|9h{Rq`8S zP?Y^tIaVL>I#%ans|aAr2-jHsdEcVjd}(*}cTI?fo#gA#?8070&r$ zFHq;N7F#F2etGnT9^Qwi&F)BFw6n5#jnYQ(t>C~8b>?z#&nL`t7F*nI7h zmF+)dvoCB)RYE)|yMviyI{5PB$YbY!%;iU`kk}C(+GLK_k=#A%#;QL2Oue}f8 z>Mr?M604Op*`}9g@DK3M@67vqk7QZa%qFdoh1dWtwRZvT@=nL+__M+32VT8#&wrVY zoPEunH!R!TbbNj*@tKZ+SHbrb`3hFXqfc_3N!|kT4$IF4U!*5lpAwwYk>Rhghwj9U z-{{(CS)VVT_0=x<+Q_c|Gkad|&ydN#MXst{vgJp&(rL@9{Ma(AF$+vDIE}-*{I1InTw`A15X5@FxPj@v^ z?~GYr>v{wKqZ`O0yWCFOn$^Rfb%9bVk2rlxuz5j~LtnF;3Zi-H-|WX&$k==VaV5 zYHn{9`|S`i`INV&Be?Z<>^qFVx|iJUnU(qB98d4k_&5*zIP1%-Q7bl&(g}C+4^oU_ zBQvyCv4=Rq@a+bTg&P?&#Gi(@2BGB=&XdE>Gh0~9+BWfkqCva!6O0+?09nNYQrWVF z3Jzl{74I}*!;!5t$#`e%F{$;p^rx5$T)Ov`ej_I}o;KkldYd0ct>+x>$-8c zyKlp{z~UR@Ug&mvY)w4$r2zN8dzm;w$R#(u;F(wF(u;hHGUz&Uud%YiWfI>r6SLyW zZ@I9~hV~3BW*tp-Bh7(jGiqnOK)6x4%yTw~zjd!z`yp&BS~FuTlTQ4CbYStT!QUQy z0+P}zNI%-TkT_qiue#c(cMwpg=1j*GU$NR7_rR%tOc8uryz$t~_w_CZd89J*PBul! zNSpDq7#}|4n=!N`r&BzwZ%S+4vwquo%9E$OAM-o%-xuLS;g3^U16^p%w3WIa=TBPp zHR!wm_O<|fNjLGuce(2g0pwEY)9@#HSXsA~UG@#mKR|!X3m@-VyElLL#s$`ypHjwJ zVl^*jj)lLebAGvGmF7IsYeV=hN-r#&l0R}Eb!)AMcaaC!`&3{T9Pgm40_(45DK_a5 z@P9ksOSaX&Sa7{n8VWJ)d`Nr2TwhCnyZrYfp6{bs_ciz-4gEFVHa$I{kZ|WBUC(?WJ;oRhAM8~tI&8{%)y=Q;Dz|4TdAu^;;mbvSVg_YZ7Pfe&UK4+5v^s## z(Nz2ofPcHY|Iv+6kN-@Q>n{(jjp?F_QAM23ZRTv%h-7G^oxnG!Gg@0L7ak64QR#n{jt7}Yj?>k<6;Yt&73=VoSK zW3u%yXFIrOCmEVDbSs=GFEZ%qD&&A$pYfFl;0HIp*Ruw^he;<}<&(_g*0E1HpP1?B z57&IKVN3Z_;b|RBcHysfp)1HwrI~psdUYr363;(RjLNUy6EFS7=VMXTp|M52X^bO% z+Amn@b4TASX(a=V^`@9aepje-8E;* zo`oxcPx(iQYp#PXPdU6Uxl~Vlq%XiX*O6Xu_|HMkY`m3o z!`w5MRG;}PcD=dRRqJDZI786WPGC*@V1*YPnXUA)1N;h~Kw<)HZH6aJS(5FOW3$)c z$7g88@3U^~&dTeiab@GXok1sAgD!T^)TRBGx)*O7{Og(6oZ0q(&h>Wvn-ue2b7qro z%&(5LO;fEt?PG0cU*0sq4lO6yTcY@c;#Gt5y}o*d^LFC@d>x!O(KZ+7?>rOF(1K|7 zYV9^K*P$;PdFvnFCh~?oB0JQa@Jo&lPk?*V9__2r{YCKc8ve9N@vwZ_Npk^P$;ALM zp!lwTlJjB*XtVb846p}=b%f4c{5eng%phaF(md?Q;2QD#gjk{a7J?@wALW;aU;i2S z1^-QtXD7w@I<+X9`3RzP#x>Ry!I zVSEz(vQ1;qg?pzU$MH$`#v<)CRhc$CRRr#8gVyrA4_1|yF)l4GUiT>SWkdKsv6r1Q zm}YYrG$dQ4~4vytsar_ek9c(cjDU(DINakX||&EH%6y?jHg zRAmj)hE?z9Jh~RfC;Zv<4*Tw^)ML5pkKI+$5tiM2VeFZa;Ht6$#WgQJ-c|a6SGpS1 zF0LExN8b$1+}V|44k`Y#n&*xAe^>KN8zc3Bc^$#xnrK~BF1Ef1_Ewz7=JqTRo%6*XKdnKRcgK{8nb(6kj~TJ?l_`vb=wfE{bj)v%|XuYnW%o=MH&wWul(L!8E3sK&*z@|^IkkR8Aj{Zw>mmN=u6kE4_C0a zj(I(_v(Sn!@7VNjTzu~Xw)&MWFB_QrFofuTi@Ad6#lOEG32zqWB^ z;U}?VJZ`CjFJxn}r}xC6r_lT3rS#2~#YMG`9-|EPQ9x&}J^nGqdDmCe^fCFJd5|A2 z{~SR3_SuKg8M;y(&4;!&GG{qVnRz)HlU!a8#pchF?OyhrA-+}GIcM&J)|95?Q}fp= zo#-({TVnjf?Df|ED1#HV!RT^Md+?joc?T_OKQUWFmZK9y_%_B@CD2HSxmD@6;|ck2 zmoZk9ekhiBin9PXBjxz@-S}t#cL{UgvafKC3g>2RDgH^|U2mW^Ovdgj~3 zKkX{8uYa;>XY7*3`0GD)OY|w)*=&a#`l_KFrSKWHz5bGLsH33A@lDTyuLyn4nCkk+ zj?>zh{Cg)}*)#BNF&#J2R<&K_f~S}3nL|si_}g4dOtea3qU|KDY!jw#*&A2 zwYk@~tL=f)d;Q<5-pMo{l3YUegr?w2hfLCZw*-9Ze4xePsRTTQ8ty9(vk!zm+0yK_ zsf0eC*sihpsoLwnELb)Y|Dl~c_BF&}EMPT4zRKY2YH=WJAI<-^-y5(0Pt`lQ zKWirSXO*u%#lQak%wt?tpWZUF=Fxv`zy7iPGdbT`MthWqV-q5NG~<>trb?0XzDXO|uLY>%{UtY%9Hsa9%%6OpR{_=wQ2g<+Ay75}-)z}&)jrM!i z+QAOV)o{W}XdI%BG1-Q^bLQYlVwwzk=c!J{g@IMqP1L39L>}|@txb|S!eMoHJkbcx z8XV5_aJZN@7<^bo<8zsR4L&?L#(27sF?ye5X#M8$Jof42=ft7~p;&Yy>+63pv-Z)) z`R@h(2IPG3FI`-y9l{f3P0}Y^+1g`eeyDo%H)BW+EnQe^vy6cU*|(o9nHE9^ zv`*CWY#-i;KH=^ec!+sf<3jCu_U49@aAxW4A-+ zyU|)Ii0sGSGq@<$5AqMHjWLh*H0MyiSzOJy_5YXiKNo&}Pv2)5o1H#4{cEo3XER1C zR<`KE{Oh0(lTPn?f`yqxD<0R#IR0a2j2iuKU$u22?yYH*Aj1op-=ry{6#HvQ?S18< zKlG!!SYwOIJ`_U744^NFu92ILj#?6e5D(cog1=sIE zXK;+&x9E&0_dFnTzK-@=UTvSH><)@sbsin4`#u+!-9zJL8JgAAwO@_zU!+V2Mn7!- z7j^F*ALVu4`@SS`4jl)iAX%7N=c0}AZk#QZ@ZtIb7k{OLthaixKi|2fQ z@B1$4m4LK8dw?`6H~@~me)_w_85EADb^rmWM~cKjLnov}as4B8RF_7It# z(_RV>Ud??N9=zjao?(lT+!kqR+f{$Dus=_`qAKSa_u~qT)t<1 zJ3jpe_7yi=iwyuDVhq|)H#pJuSAVT^qcI(0f*w}E9(naq`u6Z0oSU-E*%KH(zy5f& zn|Gm5epSje0}t_f>E6S4tcvlCt*b+4#(X65#Z0(wb^I^hb&stCzU#`c$~UZLt%q-*?&9T0~A7eY1gB&i#SUjy75IQ=7OZ2ij=j+f!rWdtI$_4l1rA zR9T6IvG`+=pm~aO~xycOCrkyo>^X=6T|#Xip#eGxV*#JMvWZR_ILa*#*oM<4@2}>1{7hv6hl=34ibGM)~Iy z6Y`IqdQAQLPHmWPmFG%xvxitPKQW-RCwuA(6^sE|SWwP52Wjt_&0Fko8h`14Jywk| zy4C;W=eO4IZ8>K?st;CP#nxiJ`551uadhG@(>F~4t5M}+*zlD<9l7ZNOy~pX469bXs;LT`xmt4f9_1>1O6d=WJie zbtm{aga0(~!)DL1Vk=MOMq>l`ilk4Q^KJweWG{S)1?adAZfXpAeu_5gw_A4ZfqHw5 zepc&7W3*|x%6YF@%VYYc-UUzGTPB^q1=#4`yq6CsxcDCXo%o*jo&BAMt{eI-U!#}4 zo98NjIoc)sJnho20q9p>_uXanuAkiWMc<1i9ecvkqz-ueO1m>)x93u<_2OIdVe_IrqRuuovZlkefy$iz5DLA?cA+TMPs7FE&HHP zt}n28Y9P|dxJ3I@k76?PFFKr{FUE#q*1hI-V&5EEu5a*@+jbg_Kg>CQvM+8F?RWKF zV>5Hw8J}-_04EdA?wMald(~Djr<#AS-)wUEOZkvg#)p1kd`2dh!@D-`zu33q<+I{< zVb0|fz7@09bOwavDdJhu^1I;MIeD0IRQX3=*?><&FsL7GdQo__{X?wb>5i-v1&)ln zV+U~OOh`K}sC_EA1Gj7#T~7{5e_qYm{nQf##?G2>%mL^^Kk`6-!#>s~ zZH%yv%cG9&l)yI>nig!2M4}P$*1g)4wK`QpU5vY+RdU#rK)Www^=oc?$YOdv@jRFD z94A5G6bjvH`>9$OZ)p0hW%wGG$=4KNyiHT-JM=dAl1<-E9)`YUn#ijSuD{zVd1{W0 zE4R=`!JV^JPwr!1iqZcDDWm5m_HP(mI)%MK{)M>v?pN-5NtCb`pZPwuB-*po#jOJV z9hxG!ZDJmhv-c9G(CVCFQOr0^eWSl2pYe(DzP$_m`jtzQn*8%p)r`mVPknRFvU1k! zFnr_G8saKAf6(N3j{|$7JF0x8J67*AJ)d|k(|C-E&SV;K&&g3a!8?Y(ZyvDLz4_G> z+uFwSKlNKnH-amhh&>%$@5c`ru;KkH8{Wtfp1jC)F5MF?H1+6Tb+LBff0BtDzdY+W ztymnrH+}cQVPgNu-*Pn2@$R#M*n0Ht^;cWzTZkK7U(0_z`GSz0k|k5@y;2R}o_r@i zpbw`Q>m$g=oE7mx6j?zzoJCLM1KYxwmLg-dkuOs8V1&IpH-di~a-xyAdv4kQxggZP z7V1o7JA8{cR|r+L6qcXmn`GVfOx&8s`k=Ft!d&-lj;4DbUlUto1z$Y@EWLB4b`;Bt-rV!I8=ZEA z>%Ru)f8(yJUiZ27=W8yA_g=dvFe_!T-k-fKdhiH5>nJ*+>eBDmeD@o7UH2k?i~jXe z#;kRfi9b;l^Y%k$d6TEAM{;WTLiRH7t6+Fjv}XZykeK71F2*s;*>yKi?i4t9jy0Y` z8NKUcK6RhC&W_c2Npq#|_3Sjy)c?b7|K7RNN-OUFN!Fz5q7Ma5ozXOV6?%j-vp!+P z3i4$Cy~CC>f|rm3oUz*TcG*}*@A!=V83JD;%y}ti40&S>m0t>cwDU@QiT%1b9!g|AU@s|W1rG9W4HSAlJVU7iY<(g_Z}PE zsLJS_Y*`zzWhuT@YedgYJ!aicuIq2zc8$#?D86t@^k7Kw46f`|gdf*?jwbaMOnxTX zSZ5VZ$Vrr7?VCC9!c_e-a5eFme)z2F^~PlmwBw_NrqsYs#Y-!ntUlWYeeks@AN_6i z9IGy`&t3POC4UqP70DJj(ZAl+>cG$Ftb38M6|*6o)AwI1Y~G~*;6oKX_^lh`&?(6v z!2{4E?3X)eJNTE#1E1R{yJvxX;Cka{C)n8)mwu+7rph$>GjzT4FOpS^sRhubx%ZN+xcE?TG(l3y6^mx-Zitv&(X)p zb<)qC->_Eo{kyJ=Y1c)+wZ1pdru+)@tj7>u;L~Ye)VW2A;o$78zLU+(gA)p%`^{ z?7@@0!}TZbW;~~6!2dW0M0m~mv-8Qev8PacCW)RbA9~v&_V6ITg+rFjAHsR~s_?ao zCv_HEwF{?+$5_i|xx7R9O}w~4Tu@rMAtb|UAE?GsbRn};=V6+A;Q+XJ<>t-f`(zjX zAQ}k=ZY_)Wdhd?p_1=w5{YlP(vCqzJ-_r1iIXn0Dvz+-t{R^|AJ+p|_&iH4gVw?jI zWS>-`(AANNTUEQ;7CL?c=?UIGvgaZFrt0X7Mg%LBRjxp-)xMF;0p&A2120id&Jp;L z_Am@{4&yA=1$$w8f~OxlzJT**HfAc1r-0iA;8qW9C3p0zib1I6yrFvF6U_6q2cdD1 z;63ecBj0v!-gdAsRvrn$XSd~B{kzF$&;Xpz+4ZX(wWoH~{`_v`n120q=D>Hrxo7w% z*Rs8bqL4O@%tOwYK^qNqD+(i=H%(6KLUN5C=A2ZG$IrcZ3Vgmy?=7Cw-ke&_>+;sK zPkVpedhVbdy<2*v^-}QnnFHV8{`HfY1Ie*=L#d6FPf|WYyOQ1XZjV2dYW`iOwo>nC z6Fy`6=r{Z}Q~MZgsz26mvzKpkulI6J>Lc!TFXyf{XLo zsdLH)k)`zA;BPXu$&!kg{Pm`e8ou+^aqQRGHa$^41{32j)_vkv*~=^Gm-HS3qZ;ap z{3^3lHk*NWfxTc2d{n;v-Rxz{D1YGBJXb$C^GM_FJdvsWFFcQfTPkO8tdVEEgVGP2 zb)|QP#^`#6zL6cHy&~qtcfHdu9?#VF#}Be<{+07{|0R35%9}pTqaKsLo9AOT6Vo^T3(U2?8)RNgd!~+{+gEeXzl{Ut zeh@mRZ_pXXY%k_IkFw@kdyl;3nBTE?8k;GnKACG9mY3+0a?`3V(}#Ds-|qPAF1g>M zLNuQ8_2?1Je&X}Dyrev>$Pmunj|6l(j&3YHxj|*8TNm*IFQ2)v%{hlnbqvg~dXRHV zb>_(i;t>rzjor=2XbJ`a(DPIhhP-u7=au%0wlBMa(!EY7$~_L2~=i`cLW{<$NE89R-c zOMMffK6qEhAhftTi(C|}eZ_<*HYdzFr>yK%YuCH+&pGuQS45D9^*qFLd_Su-hD+5w z*&c>Wc0ltQvUa5XaIh-ZBhO^OB zXBD)tG|!qjjWbui#k2N#xuvT61anI)Zds6LA)eKQu2@oDvC589Vyt6pwtT?pS2^d6 z?gLN4^v5ceZNrH>+0Ol2tb@gQ^Oqz8xpq#3hL7jq`fh%0$)okhPxH=euhM)hWe$jo zJUO(aZI|Lwq91=|R|5LQ9wz(zPwmayN5304Css5~@qPSDv>QY=(H;Xgmea-KeBz(S z)cQ!3? zR64hlepN%Ao*H-$aB;qI*Kf6bw`0y zxwXjlVfu(~mR&!NPVbff4NTPjrN*J>`t7A}hSus{aMr)UlS|ou^*&s8ds!G8(s#dj zdztRXe&A;x&vkz%_9gwxj`S<=M0V-nJF2iVRkH8L@rjOoN4XaIqBWssvU8%_*!AdM z{c>zfj_p_baE9-|2kYuHvik&y6O+B?2=(M6`{_H!_w4MoG4v@}B3*6V{~FQSpsaUp zsVg0_b#KL}I69M&G1`%ZZ%0mO3{7jV^A)~9JbhUZ`LPS#I9X_wA=lbGF2OmOU9JvI zUW754Swnj>8IQhEyQW`P@r=59lCCbiS8Ls+smRwCl~=zLKk~;i*Wq7dOyZxWym=Rt zAGQg)jjSym8VuREG}fm2V(L&|5}dJX?*ZKJjKSTkd^<4vODOce2d$#f{Tu1&} zU_ZdM{G0X6U4ZqgdDOpnww|}~yu|W#TC0ekaGU%IKF^$39cpm_CN?Fx5F%Ml#|lbT+l2af)8m`>pgbuFv0veV2Ef z?~r~Po09aNBgngL=p*Ogvkjb;RL(hHqL(#+1?>@J$%f4hD@rR?w(lVJf900V2gym& zxS4YrDqB8tb`iL+x^bJWBRA-pZ`Oc!jhh=+H2M~{uiVmTmzT`28lIs(*Kj>D)7D)& z-h~FALtjxp&p~^|tG3~T)VkV68)~bbTsG&iQE*-x^2NeN=Bl<0UxVHqqfPrAdjZGZ zai)>pCE8}VZe9jr<|GKyzAmxefeYBGO&~%b@`Rw+4U3pq&d3W{OHWc6Xa0f zYbb|0<+~qp`<8PJ`5yT`gnd-&#PpjOn^+yO6gt0^?+dh^M1zL-wx-yMDc0Gpll$f&nJ7kxexCdK(+Q2;NAKAA+{|%f^#5icv-Md{S-Vxwi;&=j% zJv!RlyHYf6^@pR8+o4l&@-vBMlM_Dj-hR$k3W#Pneoxh@pYgN$S@+!Aw#3Q%>%uyp zP`(0u{->a2L6@HIfQRHXY*-Ot-$@ZXqyXM!-kJLKZ{VzJVi#?{Sh1DgE*br5+SGU0 zIm%`e8$J1Z*{u}IEV)@W_)z_Z73IVqT%A|D_3FIOZ0)^}sV&CVDf!IQ^M~q)16QYx z0_xy<){wr}d07_i7#pd#4j=1_are6 z$&tOlM{~L!S+1FD!AAHj*hn^$9Cqd|A2N{k|AK!<9h&$V_6{Gwu1C)M12x#RWS`l` z_ch2cr40|Q5S&D(L;R}`g;$zA_t<5Tn}y#Y-gBO$z2Er;cR#T3-^Y7>qo1<|99fln zTURjaO7ADY{Rt~lPkYFl7s1_YGavjmeq;LFz*yH~GvA2KTypH9Z}}ug*n8ZIg3cay zgCA;Z;#sWDnJ#DC^##Px5uJ6JsDd`)7top>xGtKO95ixUv`72jckg3A0y$Xr(jM`{ z9VhmW^B9Y~b(%9r{#!l4?o0dl4;|h-7yab>zmCR!d~HSK#YNFbvLq`~NDR>+yl{Kt zBaTg){wg<0p_Sh#dYB=0s51Yqtqt_)70x1n*%l=5DQAco0-0;YM+$v&8fE7X^G@T{ zPy8eZ-$=MTq>0!a?A^7T`_Nwq&91~QDq5Z-jwSr475lL26}=~}N#hlb77doXHhH|g z;Hop;X!>t$oU@);sP7jePf}kOvW?D0F7z$1_kF4z#W6KAM&o~0A4PkIC|})T#cH@l zhOp&E(~sn0_PwYN&*7Wr9JnGM`_b8>9uCR>>zse%#VOT!DOxQ&uf+x;T;B-HR)g!S z!FAp1EI@sCDLjX^*my2{P?<~PxI^c?Yg%RX)A$r4q-(R5FBjV}%$%=aZ9byBlk|5M z^K=M1TcxYh8=4@#?SHan>kjcs53iQ|u9y(Tu^4^I^uv79#{4_;HqKA$AG2aM&-C!v z`i&0Xbm*+Jh7Fue%#_t^?&IpQruG8+EsSko-;3wU$wb%fi3fO`SaV6AKTdn&c1JFZY~9LwGq6%Dn0kp z*jDQtT~75CKtBbKdQbc6TisgXota1VrEYbVy+>d7>JP9fQ2b^65AU|)w%E^ITfeVz ztdBw7Nhhhp->h%6zUz)mx37cNoc0j;v_k7bySx3f+pF2riI2QpXHj_P(ZFBd2fNT0 z@!Li4HROiZ#csz(|B0)j=_|-{a7W~pSc30oV0(y6pVl6`=8D}BANx(OnL&JVF7;;H z@zB8))G>-psE>W4uS4tJWzP7nhBDZ)_)TlKs9(HfqOLRzIVNED{j=Bxp)qzGR3*5j z*emr<=b8-Pu?F3HHG9o#I6tNu9o+t=pl@SUItYFQ>2uT6U@FFUY4AAi=;-#kQ5*yM z-N_c7C zhXxwCT5TG9(Y4@$eaI85J+XY8oI1_q4>8~8;BTxUUQ2YZ`q8Er%gH~n9r&=H(Anqn zNMuwwDfBD^|A`PI5qTs$s`Yg#`lLQou)eGxIPs3X#QmFi$G98s7zZ~G?{n7N<>CNU z&*kiDqFw)?7*O<)|7;AX*Jg8J+jR1f1v(Tjrv7xcy63(H?zUsNg-82Z?;gd^VZT?I zO7N&28^{5kzZAIV;2?V=*INZC%}bZQ$8ITnkWb;`lsy!fKe~kf1na1J3g`!wQBoq6cW-5L|^>P%;9MQ^$|gRAT4 zyo0By6Mo((nzjdjO9?uXcO2gKiHRTW%zpHF^lb3!6E-cOZxis{=jOff>OY-NbN(0O z+2_J{@;4ga<#6HuYa8oio1d}kl`tRly8yeM{XbEbcg}MkljRpPUnjd-zFjfkStDD1QbSnlo!+yV)a~V2{Yl*w%iG zz3dfmtZjz%LO%IEV~eWD{ThtK7FF;+h5t(aLy?D&--7t@C2!|UM_=(ROzmgR8v?=h z#rRZSl`XBJto?J_8V|1b<)?~T@7j8d{zP1Rn)ss1MzFhS-WqgI?r>e#a6Om0i67`! zyu)1Thh`VdB`1VzZRi>H{U|iAJTS+$k(CFC8^mt^Iqbd3#nqAZzIly{o_2C?B(AH8 zl-u{!TO-Ju>!>41{GFa9THEG}H%PW$6yQB=&%^$vGph=DFPmFp4P~*-1*ciHd3-Aw z(Zu1PQ;+E(lIyz^Yv^guUT@fo8<;DNZRw=%jZLE-KYR{rU^PCvHtZQS=)S>F2sy9t zjX~)e0rITSmk>6JgXG*mF6rO7`H>ZZfplb@MJFA_l?`Km&!Ye8yLP^7viFNS-{>4z%|l^eVe0Vvb}T@T z&O{Ub*}4^a4EPc=_-DfmT}LqJL4FdyopeHwB zV{vTl&b9O+^ISTEkzu^F$;Wrad^g=4OY*3%BeuV6%uf-a?SYc)Sh6V;>)P+@PnHB( z0^@Ol;J0m)6C5tbFD0k{|4N5K?-2hty3|D4=E#euuu~{rPUF^ZfOR5yErCp|doNrv z=huVwBA_+GKKCbqemJeRhPjtp*}l|-NZ5q{f@Tw-MAHy2fu z?fH#^VLqt3+Uv+PIlef+oBRz?5!@^9+>9P!Fy^EU$h zf%f*D$zHCuTc}^$ zgHOf0=YR^wC5H?4TBA21*VemwV-Q~+XMfDhid1e*FwcqGte%DV-m1f{Ee_Z`{87r| zCklgOUjw(y7~gSo!lCnYC|>%j`+TBj$nlQ9L)Q(&w|o^pz<&omj}UJn`M}AE=Bxpg zDF*lA$O*3j3))G~gKlr3Y&m0ULyi-D8SE?dA z;r~PXv-yYrFAhc8N>{~#`2J+OS`7}_xcHneau$EsIsAsIdmngSF8>KJf&NBkPo4VX z*#8zb?f{-T|6P3%?G=5l|H71rY=YwDvI`DAbtu4*ILN)=X#Z zUSat4oW?%x#jj;QY~xyXiNtN-wET@WU!K!A$iBjA?1Soyepk~6XFrJpS9I_P%J8YF zUpg;2^;~7FnmETG_RY|5zy8!}bbINgb=VP19Z~HUKvxgGpG{ot{O+^J*V;cBK_=Qt zJqc`@)%Zb2?_u96G%0ach}^4{*hptYxbI1{`pcZTbLK6+A6n+lrP|P5gdpcojohbs zqJDf)=dO$P{E+^c>*u+ae@y<(+4#rwoxv3c=GOhm{kKIH*)}$09m=(#HwfNV-d$Up zZChOPYbC(Uj7#4M=YNSWOy6n_1V89W?L5kzacPz*uQk?iH+jGCOEoZ;4L|h7meMa9 zf8TKM*OdM07oBn+=KWp730mNYk*lubnaUZQDB(WN9*koC4Np*9t;&R=(J~f>&Q|XB zU9G%j}A|rIdLyz3+45lse5u;6KS3ko1yY|y1KcElPhAc%`5Pgedw5V z=;vl%$%ZQ`N5u>EO&2k8vF?i4bKuk&e0}6ejwPS-#WaTrbV<>Fl?yInCoxgPtJi9NmuPEU3AU<3vRjlk^%_Usamh_Dw!c~KTWTDe6z{7%rX z#neHph2qXTO1D&QQT&)>alQqm@l$m=|D}8z;oAu1g7R%m54A^Vmpv`%8vgnI0`DC+XsU!Lh~L+ z-!T2O?fo-)Z?5y>PbneBBu9O4_MC*fTw9=Uf-%v@F}d5w33~41c`>-))@j3ZqMg{W z`RM)Uz>~1c?-zk9?l<7|Ct}`jGOdn{_$=!~K5$b`{~Ck$UNkr%J0r5%C^A_e_IYDd zm0h_8nAkSnKVeUwZFhWpW#Ze}*d(XHQ{W}QYM|AT!>WO8V$;-!i5GVE+&gFFo?yZj23+?$=+i#dp04{o$X?z?T&4CIN*AmFe)?82SZNV3=Uc|dIlsYm zHmxY)Tr}U#`5IS{vaD}AFQ?$^^&y8?|K-q<9O?+>?c9~Kq9Qh}Ia)UT8_}{<;0pRc z&OO>_qOI-79CwgM{VVkKifLB*OUmEvo6*=y-e;}NV6#;=;~Q4lm*{6AFs*wUZR`94 z;Ykzu5adTqqW93Br?7dXqvRbG>_mU3k!Mu$tmT_lYJ7frXK1Icy*#CwIWV|#spqY< z$v4D%TskkO^c~T=Br;PDKA+O!oZZnWIzR7suN7LksSVVxcw(*j3dv~D#rz!(EpYtR zj(_h`cq*Dw;Ks1pR`8KA!{yw`e=?z*EA+Y$8*!J8`J3vJX_+H3O$n>VQ*;oQ!t4u2AV^wu?i zU1pFyAd%NAw@5Eu1WxCGLzTcJGL4);ho^L;&~s|2Ti1;)&&i=)^-XctJFg&q zDhJulrn_S?63+-0LCcn-Pcp`I)PozB@-H``D|b?+9@vS$DORwKdxLk*{5pH^!_=$s z)*ug*{-SbAh#axBSD@U7qRA%rA#y?^aK3D=Loc1Xu+7IxSbPIY>%FnzG-(|(L$6>78FSBAJA45-}yx^$kp8YF!T@zqjA0317C1sNV=0UOv z|C&3mY@#{Y=$RAcqtv|o@xPOY(mR)-`i2$d^6CA7xtyFA$&59@y6G}B1sm(?Job-5 z2g1d_MG~E93i8BH&8R6xIxL6e>n1 zcjvY)+d3foz^u$8Vgx4tpo_-Nu^Sj$9;I zXs=7IFWTe#^JpxG@xuSosWCd_;_cpvcspS57X8-r898B$4w+a)1M3Mm^T_zRoCv%B zh3l+lVt@aq)>)=T89B5a3OjkWn|Y?a z_&M}l^fKh~u$-&mVbYt)6`{H&$J?m=&se@!_kK`m$LzJS_sa^+9<$f<<$R`HYr*J( zmy0JXYIe>ExxpgWd^7q-+*yD1AHjFpdvnX`=9|AWm{r!c%S!JkwPMXv zn{VE;PxZU<$7SRj_0z;r>e`eKLnDECt!4Su=drmkK4dTa#h>(T1M)<9L--(mv&-hB zQ*IpDS@n%qX4CiO>_=*$O>D$HhQ|VPTR+k~wm7mHHW@3msHo~}J!PX7u}Gf&sUE@7 z8`EVOn}GUqscQody+< z&?~#EtZCDfaqDNk9r;D_sfnQuTG6NEH)zJDWu31$J|=HMzb{o!5I+k(`THw?t&z1$ ziz*^NL+(drxdD4-kAd}7%vBf9z0cIqaO@cq$|uS982o{gOMX3bLw&X0_Ep~=`2XbRl1~qzTOFHJ{usGwISXpeN7)B| z2YK)_zAGB{O)7H*-+uct?<6Drh5PQvr0;f6w{pql;BWjpetS5(Wh1!c?XPkR9r8_U zJi_zm!B6kIf3n|M_rHg&{}A5}5r4VUm$RA$x?FVaBh;zqll%LsTjzd!9HrP3)-$Hb zeLDsm|2yRb!^z(ZhLWKsKNk$KHCaB)(cqv(m_Lun#@QhK5Gveqx+ zr|W&bvgFb1>l+@x#(RDC!TNvom5t+ZfEcA5Vw8}FwizFvL!UyO*ni)(?jU2`%~tc{ zD+}a@S!c!K+4x@VSd{H6;|sWM$|h%J(6JlhFZ~W}p3Vef8Dv!DDm1o}x+Atd#g3venjX7?-@MpYADbTwK1$iQc=teHi}Axv<~5?F1+T+j z>c)M7^>f?;2`q|V6?=gNzM~|rlW);K~9%Xqtb`@`& zSAGy3NM{bhXZL}3I@1i=Y3n1w0xKON{#W{O@S2?6qAe}pbsKOa)?fRU?fq^^t`ivx z-<3miopzl)fQCNkTSH@XJ$bBpCOV^k{S5y!vVxvvd35Rxl=be{^x6PS-q+00kMygb z@&hX#E{?35Q}_7V%~t0FMZ~?wv!_3=xcB&j$hECgJLGo~9>tfp+#Fxha&vM&IbW1p zF_7P(vx6+o365uHJs*C(qO2O9T6F+eZK>!f^yO@pFEUYxJ*<5ydpw?8o2UwGSpuAf z1NbDVTmA1uZV4~UUKg2b&D^}`*sgNUBueJ*+_f4zZX0J9vBxyVn(o$_MWKil`#tNZ z>osT3UN7Ti0yzWPSwHvCb}sPOf87(+_E@mLB1<{%i>^~VBe{azwjX*0z2IM|i+wKd z1={9oKhR76P*D~pUY7lk>BwHrIu`7a>7-xjI@h0mWic}RP-9j)bzfFG`CwN1y=_*{ zo4)4P=32k|ePVw}*@L;amTj4FYgzq+6+I0P3l^cqu+_PCp%0&A)2)gn19rV{g*dZy znJ@UNjXNdtV2A)uxwc~fxln!G3U6rpVEysL)4rGbfcp;m*miAj_j=-YxL!Mp`8&OE^p)kj!v}Bs z*cWjvJJC1zsg6YJtv&JEXd9WauEST`Rx+IZytfcSf|H79} zzsNc5ulUkuf5N%gM}6txLzLScAVx6IQ#Uh6TTUEj-Nw+^_%y$XyZq_IHvF4MXO<=L zVTK>Qa$O?D^@E`;+UrnotfFlGHC3@Bx@`XcZqp*0u9$I}|9D{g%>&unZ;t0@r3dC@ zu?J)2X!X$OE6~xCrvgv!TAyp3JR2ads+*@yzV@K6pmZT;I>!S=HXPg-yJsvn|Fr7X zdA;!fFw6#qM}gr_p((jszuI#1SD!=274Et|&V=AOFizvoZt|y-CAX31*PlMs=ufBb z^JAyU@3^Z4UCD*{`9MKgwczl!KRx^o2? z(@Fli;FaL>g~0t$#f3eZy^aI4XQl$-Qt&=6xi-@NVf4a}5a0V8=dpe3nxE}z^iAuI z@UQdOB6;n*BG|Pt8WfDpM^%XpQ{CHfde|GnK4J=rt)B9TMIJ-!DM>5+tB`HievP(I z_Pv>5e@3udd2T}&ZadyEGt^#6yPV_x)O++r?dvS4)z|dx5`7Kx-$eT%?A`KDC5icv z?y~2Dz)AFi+8rN^*U`?Ia_vkOx>PX5@MLjqO@gW7fC8rO<3kr&$ zHSRjpd&z%^rpk1JGfwVYVD&#et9fk&ApH2{d3guabPHUVb<4!>zcVY@KnA&?Xg&5S!MN)k(XhbRd&Ob z)+2Ff`T#UtJn9s5eH?FC5BF}rIq@{~?l{lgwXXWa(YVUag(&^M>#^Xv9qhlj zAU{&c^giQ`yYpH_dxqW)-?z#>Z+nFL(p=lPxF9Q?D9lP{ zO85`po2t0IO!T;owuarlynD2WIL+}f`iL)3*$`!=?-xxfD>`rBu~&Rr^(Nun*v%7} zO5`2*-AfM76TD^tuRZJqw=y^gQOd3>k?%6;IyHf1+eny6;+_Eo&thZ?bSzdKu?EYk&Kh#mH3H!em#K zf92Gz(Sz%B-XZ?c24KGVk7le(VSC&B>C*PqA7TG|S@rSNoCAlyW#+ev*RB4ti}SWT z!Sh1!Jq)haU&vlQg8j}~(|dDg;5#dWyO9e5vq!b|!;CTEu6w~~-~_Pw8*(mQ+qX;S z=5i##Rm_=RrwjV==}ZG^rw79X3x*_TsF zj+Z>06RtQC>^F99mj>RkZ>N;lyAJ3^{+uZ_t5v7TO>Npc?Vpuv$?oaS>F3X9UQ#)7 zg>{_2i7^waYx?&z>$@7g<{5vm6hc){|3{n&2ruqs4Jx-(1^rYUO&ju=^dfWJI~CcT zI-@*)#=qeDdaV`s_)h;-*O&XkjkUgK=9@Cj$cFk38E>gwzj9Vlzw}| zgBFq}v_1IgXr9KWdTDprapD@y_w}@+=dAbT>pagx&D)(ese5VOGxKeI!1|^QCzThi z&_Bl;=M?%1HWz6<0dqamPccOnu-gl6*MU0$&USxyk>ADKkPX;H`C zqyB!~x51kp0;Yx2KlDJ9dIZ~Y-_phb;Kaa}tBihe|A%aNseIv-g%89j8;S2(+u#r7 z3<2|{pCfo8sck@^jMM4#fG@&=}H7oKL!Cg-a1 zt@gq%TZmoMxYZ7}nVy%r|Psl##3fXq<-#j+&4FVY`jdFg#3OIHT@%&bJo6ps^6F(JihF8*V@~HET z!D-E>#eAxs_;08)<-Cud;(Elne#bvQRRO-ALN2fWAL!08#S0_5$WDVCGJ+hEK~|9L zlhfksNM%=~-^;B?C%#>gp3T{w@9=e`wRxj>rqi$Qa!&Zu*mNZKwhf^#yYl2U+3=Z7x5Y+*hxCNRb+^Wn z9(c?G25QU3UCj~mlW47i*Aw&bL{)lt!EHS`_$U)cv(iI91^%xhfBbx+yjLWeLvDiL zHE$q4u^qv?BtLUZO27hHwl`a`yhfMh( zc>7#d`cUi4(L=5Iwl61+ykO(ba^xN6J;}TeG4FadDjE2RKspI5ha?9-9Y~-4iwfe% z^E-0(BI^&3kM+5%Sg3`6<}`O=EB4)jzZ&v zC)!UVTC|RM0q=WkW8IxD-_n|w-16glbtcN4qX%2pjvfR*V}W&}%6*ngJy(?AoBCzt zmfOqr?S98MEd}jG{>|;4!8_t3I{tox)$xm-XiV`r{hW_m?w^s0gJ(tC?mOt)df&nK zDTB<`7{wP$5FTxwaL_fuMqZ7V%kTN0KinEvadj1b^f0lA-m3QmO zP=~%b=gJ1+v*8&9?FAKC&@(4*%p$&hL^epqU-%L7I3V9^{fOrIm}|RDbcWO5Qyyh? z-;6zZ7V#yAKFZk=S-x7?FB!AiOY_PkbSyL-e3>?@eZdYZ zJ?iHE49}Ql_v1X{IlU>`)9e?Gc4+E<1s3nmK)$`o>d$a)eGEMK89!pI&>`D)WoB6? zlfE6he*3XiG3CkW=J|Wj_;z3Wt^_&g|Aeyt^zj|LUjF#bUElwB`>xZ>nfiT}eqt}R z$7E#GQRtcS(w}AP$)!ZZ94sVK298bgwDiH9qJM`ikaQ)RlFe#^en zO~0e`Te`Ju_`vE4}F2Y>Ux;@KYec{_AbdN<7eiCz|s2OKYF~7*!wzgtD3%cZ*3S|18zbGUs&U_ z(noH`X3akF2>2K*w)z!I7r%#buMgNV#i>pF-^B@CA<-~~wtOw?!*EI#^q&m@~>d_sJ{hySVZf}vJy${^1JFwf~#q(1k-A^I5tmMG% zg?pp1dE}%h`yg{bI)~XKRmNV}KP4tC<>H`pbsw^Gv8w~5!66_1q4J=0awB`$!q6bC z`7ro9xhy_)JNJb4>MEwalvn}y7`C$Op23Y>9dK(8%BJja|bR0OQlR&=VXhw^_8yNh6GRZN7l z%3TD{T;}eV)`1XkjlE%!Ki$`Tj&(5``t)W_uze0=Je7m|hVFcrpYqTZG2Z>aRyq5% zR`gD}t={p^O${K+NxzCS9<`@u@6KFz*2nW|XI}fOnOAp?`!&ZJ_bGVt$osd%zRO-F zGqz4wr!r&zW9n6%=3dthEauuepn=61#$V^^<<0oF&%#?rs9)o<;bMR1>&^%FXM?YA zpmS_s3~~68>cp1V|6S%weNvvp5$5a+I@3+G|DSZs<1*RpyQ+iA<|9U657J?6*+^f9sSaOg0sn|Ka(|39&xl#Q* z%Q=(MFSR$?+=~}Z{;tmbPHlMSM)TpF9|ITqWb3$I`1=%l#gFy+0(OG*z7ngpv&!GE z{+&nfyj}fuWgG8Yx%I!G`S&k!=##!1aQ8&H{dqyS;xBgUH2Y#zx3>?{@kXJEiA~sM zX9U}^ap1?$T>kDUVhU1q(3CabjE*+3){BtwzJwmJ$43lM4|YG+_m@Ien%v6Hvx8Rc zf8*J7o_%>1IeYj)OH#$a|0{XX^bCIg4c_nz_VJwL_dN8a(4W^>2fdiaH>#UD`&FlS zSe)_ec|Fg8QGY$x*0u+2on+p&C8G&f{}QY$8&=MqFxl7*txy?aq*K@rYBhH48`Jz+ z=phDPrmTDdNy-nX9;^#g@}L_dgs9xA;f*!c)XoRG0Y3gXsR!KXiWz z7#{z-%u5NLhsx+PcG+V581cY0w)}Snnk1UlcSW#WyoUw(B%4q=h{1W1J^CH<_%GvM zJmwvEd=z;1Ap@yy@tZlUxqQ~#67<9K;J5t_I%V`Yo#|ohOww~sxNCAgcB^`qe$;~# zs&D&s^y^2f(gX0>6E5D&$EWxp>vze8%u8=9a%A{_0VbyyPd$5y8{lO=cv&a%o9a+L zsrv1{j)v}AV~yf-JQFWX!b^vcCsMB7pU=1+^o&#G?6T)K(o9?UnL*$;AFr$c|{F$Vc~w9jQ2m|+KdO?pvs|J5B`*WD0H zFc-3=d&e}JF`2n2x3G7D^JVCUs$V(~{J&J!l@nm**n`wR;Su}18;j{<{lDH)HU}HW zBmZ`5>^!t@IrzROupo70KXhi>*AJ>5Yun0$--lL@Ad@VIR+_ps4)5CZQ@7+Svv$?a zn~bX-ShFWKEqhA?^McPWRSkaE--s-U{-yfjfub=PG7+fmQA~kkM){dEZ{I@}y_R)Q zWEH($;O5x&yZ<`hSaN$2`5%pJx{UH?Cd;O_Zj*1fmpJaUA=)b&hVXYU?MXH*mfTC9 zPCbEag`J^p^MRFb$S*^EB*W>@x*O)3QQm7_-uSn#A5So!%fO9!K4SW2V8^H4IpF&I zZ$={v$n&lG-nG}c;4=>!-F!R8t)9P8iL3|RT!!68_xfef$uiQ%kgYfPr(zp)@Jsqv z5}8(IQpmN9$nmmY>3#?uFN1z(ziY*Z%UEWk^XT5l920Ce^dDTcZ3_c|+j>+^c2%PT zwz_Ld&lNYKzUW$Y4BGSM_6b-N`sSyKJD5{)+CFr5RRmhTw1NDwLk|~Tzj-QqMxI@j zUhRX%;HQ+nqeR!m7nrxmLLm=-=8Q>}L_|r77%EU&4<1 z9<~?R_DXqIQ+#Zf!BgqMvh~Rp^EG_UuRz1n{^(yhHZo_8%SP4}vJT8=+&UvJ$=FX} zFO%)gwi}{X4xv|OSZ7IWb4E`TEX7-7H$<1T?N4VKX$u?gxxj+b_=zAn>&AWjQRc2W zlfAr&IE$dZlU=a|-xqqs`V#Bp_CH3SpbyF`5eE)Ke)d(6+Xve~qqPM;4l;pcuW;i{ zE0inyC#^GAXy3YM^loAz_hVaApY+3bwKRckFo_KjduHRtr)su#Q77}0cbM`jbBKTZ z2ul+`amw`ZK5?j`M`LN@nmNsTnKJngQszfanWFn`UvS=E@;sfpDh*N|V1wc40P{7- ze0831c$)0n8oSR2jd1O_S`Uf0E$!91|F`VtQvbSw*3wh-QS<;`NB17u4)9L>O9Z}H z7A9AnY+-@Cs6DpCi;U?Nr;qj5x6N(Z_RN&mMn%qXldY9E_hx^hq?u z`UeqGOGLo*8P8v&B?5RAZq}*?bG?-^)Pd#IdY%n&ElEz z2Q>L-HI`t*HFnpoz-Lw@fL+&7fBzg8cA6W-$mu*Qb1td)oa|~Q$AMtZ+)seH#-!)+ z{S635-1!iFbiQ?T`tkb$>UV63`j#B3jXOMZB>O{>aSSmIy^p|u6|b@y+tO;TlRxqC zj`<7}*z&?sJqygTua|MHeBT3sRcRkG!C>|(n-`h!;QzqyN#0@dnM|ICSAcmTF>=$9 zOHR?g@Xg?RJvd`{zKwVI|1{27z-}CF^*p@K1f2NP7J=JH=kLJv!Bl7RqJnak218Y+2dx-Ur(z+!kdUMOp`RE&s zH7z^lmqRzgEp78To3qF6ue%O?$dSd^J&cT`ciY`~E-%gv?XT#m0r#lK&WBNrJ!q!- z4eX&62a>>EeKfp14DA#x7Y|K{=fmq&x60fpU4j20c%SXNIhxgTseWwCc4Qo_^DwkY zJU}#kHF%z4oYlltDo3gCU$*`r^s*~33;W@`)ZROhZ72(mcujp&|AwGZUfW`dzNsH6 zk4!Q|KNW8Sf0=1yY?aYZ@UA9SLw0oWf;%^mLxer8vNw&ePHY}^-7y5bPq@(wmsyY8k%?8m(xf6C8UFR%JJhaS9r8(xFH zbqarV;zVWot22Y`yBPzx@Z^XefA1KdoRunqPyXrM(O4S!N8|pY}J=bY+S3 zdw5YvamR^PBzBF3wKo8d)V1`RyKTFi6N?}?OMbD(qq696<2<)2eV%%n*;5uTq3w^+ z_L{7;^t}lE62ECcPL|FWf$x+fUmgJ`RM#8CE+C8iUe~jTYnuyw&R{FgY?97%t=+HT zD*SP`IsK9jZ+r}0t!ocTKeSjUF9+5gJoEEl&unD*0`S4C*%R&@*m@p(%C{80gB{+? zjeN)(=+{R28ZWupZZENBRl1&>lQr~xS@D~@GT7`hdyr?*J&>hN>ipy&`c{&8&oJ-9 z%=>9%-eG(~r{4kQC-_HS??D!j?{b(vBwfFeY$~Szi61$Mnl_sXmS<5!AjLTL}(qH)C zSS*wG+Td&RP3}6_E-D^F)48ILt^QL6Yju2xr@<9dbt_a*y z4m*`4r+^)!F&kX`8oFnKz9;GT5M%T5T9p;9>0j|7@Tmiu2j%1p04pzksf>Q|XPNSS zu1#mGujswz8a4%(Wdxo-uSKPG41r?CXbJnxlL3{>?Mu^W*Uwrp?!Q zZstSJlxxj>XYaK%^FF}d3-gWHCpid=^60Z;V{u|_CYRCp{?L0912%w7;8N|H`Y!cO zzH-w)#qND>63+6?gfV#Q_>W#=k7O^BW$%SeLepZzt(be&p|~mOLh{)rv8Nhb7?Y{M z851+(w)u>KpZ0s2{+oA`|Bo;x*>B7ob%HZSr=qMqKKGlkYqf1?uc^6E_}3t zI?P_&$=?=yV-<0rj!s>-NNu~`!$ae#G;vg~zP z_xNXQn^xW9cf}SlUd8ZhZtAA4b)T7YL6dA(*wPaJ2o=a@sdl=%znR1 zeFMP8zIkJ#)j`~S|92*RCs{k-*qA5mIaM1k@_n?`%cP-V@}yq}m)V*D&B z?Yo$Z9Z~4sX$(&gxcO*o!5j_3xrhZ1NpN_)1L7x$Ko@54Lcn zn(z3=#tY7odLc@^!6L~NAF}KEfPIX6T^tI3p7^d}>ty9+@Ih^B+y)=)d(XJ#ThQKa zi#7`9vEPk)3a@g{EOO(C)ffFHPkD5D`A*luZT%a#ng7Z2DceuM>+53Q1umaK z&gk>6KS=z_{Tl07egufR zW9KsmRF}%=T;)1)H;vJPBNni^Z9<+|^5?0I0^-YKIrzj^7jyO|dAhvgI!8S!Lr#yf zWBBkB%%hL|I{47b$cx!n0>|up&6&WI{`2?cu^)LRbRr)( zWpxN2hB==&&QJZ-9@?%GSFJd7^r}ZXpLWLCj7=fTd8#d&!zj%&4{x|cIH*;_OCkAlcT+UpbkmZSgNfc~Rg6lQI<{g52aTOtP~2Qyc8 zo}nE%R{CM|i#KLl9bfa0=imsRXWuFCYGbU0MdVBRI_HRf-5>MKwbEKUo;}PL@pPS$ zdgiVy#xQNoH_wDS% zHhs{%S>U8aUfDQnE0`6HF<0Vu=yJ+yak$InFVB=Ov>xbX9fq^4Plv9`UKeEVjbnFW zKM?zg67JsR(5E8pi`~7;^}b+tn7zx@+UE>BBE?5`t)9!7!IU4$-?1x#P8R%>v)6eC z`<&Uw)1AXPglZEV9avmRzd4^^8#vPH@E_v`%RZ;8f?jH0q_&^UBs+t*dfdBebCXX?dh?D-G29G~7$yduY!)BcHKt86E0 z7+Y}1j#4MrZSD(y6w7ZZJZQ%oP>-$+tuQtiGp+%~=*<^-VcQkJHqh}d@rJ{UEPHP71&DfMo`&DlHDnEeDT>s{o>Axwv$y2t)wd7E%KNYL-rket8MDT}$lTgBy=1T8bk6@m?y2O= z2|d$qF6}B-r!9wlGQ?d&pZeS2IXj3^Ue3Ny@jMfc9{+&6*6w$z4>Em8{5A9yjI13*Q1( zrHxw;=D0lZZem9z(~2j)MLni(l4rg0Dt#<4GA`Hu?)>^FQ;Z*G(beO8&CH=w*CEbP z`$0GJLujjl~*%pKBdxlSyttVDB30?%*qY@5sKg~KR9v1w%v-jEXH}4$(N3IS3 z9JFPGah=wdZZS6>sGMX%)7Ap!XdAePz+n3wB+o}B&)YGo1*}bnzG^*2*vq-u zvmRB4`~eGtPE5)pzaEE!V!-uY{upCZ)_pXvuvGuQ=DUafVZ3}DJbE&ZH}p;ArK9WL z`8n4r?;RuW3NlBh^e0QM{IX>7v-i&A%)xx*#R6oVS;#uGkrAfYGN<;f-uchbSollm zDbOYE({0zmqOQO$XZ^L7R=iN1Gk98isr;F#?O014L|AO`eu*+{pE$WwbR)49J3%c)rHJYrAw1CuY1T7yjz;?OPt1 z9NLL2Grzsut!VZOETHzCvDlY%GySb9V3i=%-?lyqxx(j8EreMu^?t z`IK`l-*}QS6_8u+7;p^%*Cp^W#XbLu`S>32m*2C^or5;ud12d~;N54yzgqBc9r)_Clff?Hk_$#%iMOnIzQMRDkg8z0^*(mD@&&#|F@HCBy!C^ z?@}J6Apg=ml)ot#aazC$RSF zE(5kc=A8YmxR?#(!!APiQ{Ia0@PFwj%KM^o*0nFBf$^7asXMqBxoYv2qJyRM!N9@G zcfHpW&zW-c(=*KXsH;B}Tf{J<>ml!TY^Q$Z;xcPC0sZLY?9_OmWo7aXVr=u#4e>b- z!}mrPb9OYc{KL?`1i5?7o=54B@%_FIANCl{pL{IC_ZC%+gIfIdXy(F$T55>YkoP@k)SP|Q6{<>Chxg&6W0NAoqN%MJg2fo7fvvSg?q78 zwOAb~zG-5gBY0dZ|GRt`=kWPKhiexOQ0B1J(Zt@!7T#+Q>rW^HUKcd7XYy^XQ>^o| z*t%4|_Erf#l4rFBO>UKu#+=w`ct{&`F~Tod!kKFPE9Y>!igTlY#{mDT;|wr8e;e

    >^(G*~B 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 Fin@&M0JK9--#Wv&7H9)I47uQ+m77i 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 JL9p! zTrZa969FN4GP=CUjINN^3THvz*Ah`%>SG`n;;GS!1al$v$8IFXJs`r zMn<^u;ZM$}7$J=fW#obE%6W@^znKdk4zHJCPf^JKqO4C}RlS3R(YwYS(zQp4%l*mFr&Ji#TubM^3e!`S$SZ&MfPkN8A*z0Rpma3oB9V*E4lR4>JQE2T}) zSsd)7gME;0-V>OX(MbaIl~kR?!91MvTT-!BS1*}tKc0)PvozM?{Rc)p%;iDaL;18* z?_tU!o4I57XZQ#D!ZG@SzUlwvbG}#yeOr2mZ29%AD1&vh49&IN_ecar^;>Syx#w z9FDzrx+a#}7!EzfJgI3DvQz$S$yfV!ZMz_%H1)RBzOOIjb5riI}hUc@Xm*$K*hhFx4gJ43kF?cS$dbAfi7j%&g3r>Y& zLFx){w(>IlB^!FZ!PsyD-t0SPQ{Nn?zJKm7SfzL2E@wU4yJKLF`lfQ9*vR=kPQ43O z3C}b(Ax~1jHy9rb#-w#>mFpkj>G%JY^AuRCW*=E7*j;tx{C>N8O}Bj{@FC9bI%Xdk z;$3Mgj_mnV&tb}y@rB@?z!%=azB@2di+#6vvCv*H(uJ+g|HIwe$5(Y-ci!jRE6}|X zwt11jyu^}F5+q2PIDP>oa=DV6Sb$wOHnEd9EdtVsFzIAS;=1 z1WamOx%zaHLSmYE24Q77SahC*&?Yl!JHC=|e1)7zWP{P=#d^NKz0a18gm9+wnZKSt z&gY!7-(S{Vd#$zCT3dbql;=|_AGy)>jQ=I}uTFSS$u1;2QhYx$Prcpa&hraMFPdQ( z`R(O(z**1+7w>chazC$0_j4ZlW}pX<9LEa_hZ|W3+IPITXnrf7Y`|WtgZ)UjqtoC^ zqnlVn{RY=gUDs3TdDqT<>UjjZOaEb-od2S8;9l`NCs_ZY%_@Kac%4(w`-kJr8&*Bc z96_sXHEZr`Po*E>OwZj#mb@}%_N%F7PS=i_V9mNVn7Z%%&zvXV>%VRSjumgy*uCMZ zy(BdLj)#lEOCeV^=T=L-h+wZsbiaJFhwuDTxs|2xPJaAkgn1RO5Cd1meE;MIWEL^# z{D&C>=yvRPy>7|tB$LT5OQhEp`=U9xzeT(SXKBpW>#U1EL5_9|+yEY3e?2_DbV=^P z_9)>e@A$pAmn*|}(^`13Y;;zacy94!?0311%;&_uZGDGoPm#@#+9{drzmR_FSiT94 zm265n(@Ix#x3v@QWKXp)V&!F1^C|6gbMQ`nbKQP-1YQr{t7grr9Avlz36|`6_+-BB zI_A^ru-x`Z;iJoBxP}Dc-vSMnuD~Ao9VyGcTWlTzAl*e+&*yi z$R^-OcuhFc#rF@Y9t+=YEh{dQKO;Q`-XFupE6d!9#*HDX{cwJ){UhMGChW*K8(zQN z;8DBBB=WuV25{l0H=8pL<8$!m^gl+sHgL|aIGw*BV;HYLvw(euedYW^(ex-ZUyeIl zlwR}$=jmqM36{Whhh3ZXzOwxu;S-}vq%)fV#>Uu;(MHAhzxL7eKL7()t$~EsRzvxN z0iM|ZdtRFRJf3jtK{^EP{)~9Q!>#VPVPrFO5B|2>3h#k`!RB6d{2Ex&`{siGw&;T| zUAOq=Pi=dA+o_VrXa83%6i*+E|MB#v`ZMxPOz~wLeC+vtP&SfRYr|X)`vhpY%rr>rFHLku%6j6?Z5&?;Xoepm%fi{jf^o;?CV$OIEEA!}|K~2e;Fi_3CE~nVoE$*;CEB z7X2tZ)3}s#S@3lubCf-ez7zAk?(mkx<9nKW}o8M2$v8Ifd{7vS;Y(6L{6yXJKEsp9s=rM7QshxWTB@NpDBp!#=q zTUEVY8~F5;bRplO4Doxh8T0VZxS%Tw9UZ$;b9(osrqh)(9yl4BvBcnjS#x@R@#cy| z&W&qJ{*u-$*vkxoOO4L$9C$JORK5P@jC4t%H`0s0%@}p8;p_w0*jmTGbfUk)eZ3Ej z)tr7T|AE%}=zRR!Ciad+iiSOWjdwt|wnP`4TzF4$`&Xbj)n+~aOy9oEf5YdB+nvuz zaQsNm^4g1a%+r3(HCt|J-={OmUiOejN!JuzGW?63f4;8>`N&S>EpIYsuDr&%MXie8 zLfUi7>X2v8>r&s&a=szB9;Tgt%=;KH{W|OL0Pq)MKJHHap@DgY?Z*bNeom`_hqB#X zcj=6OU)_S9&Z5dA?Je&=(!L?Oa5!&H&Bcw}0ik*|#`9+^=z9IlkEY!iexI>_3qO#D zd8-ZQfEBgl^>W|?TIWY|@4i^dntB;tY&mOKFf$ai=VkV+<*Zp3h8zaH7H`|hxy}0; zSht&4vo)<=cOpMkT{GiI`|Y1P(yn`JAAMrg=-pdZtI#iMVVGZKytuQ* zhU;77_sek^!%XdkMdAM|+buma8l3?Q=W%yu)a;k_J>UaqfkohhOW>4Ia7WWFZ=@VK zyzQ09;^E#B_GID6 zdl$9iPrBot0AUA?yW8cNSjl71By?<@?wj zyu|v{7;KCdpG?l3->UP~QR>gK7dMtKGPrsOI%O+1WlFb}GE~0KDYvjE-^N%pMT>`1 z$bDZ;Sz7iCc=0i0h~g1b)TOc5%)FcZ!i~j!8ixXN2f_-*Kx5(NPV=;aHfStd*ymYe zs<(-;D4g@mzQPYojKxOAqJgovF*?hPg=D~E)Y-t?D^CG+x^b%^Z9-{TcN&iijEDG$ z;`|$14~~z;jVGU-Tilv0M9vu+1COzvZVZ}``9{&*R{uUqSxw-_L&!oJ>*TjPHk{)7 z3Gi+Ocs(}bq1NZX-H-A#m2me2ZB&`zXE*D0RNUI%o0nfjRlGDKvD2X*2et#x_Ui)hD0<;;i?x zz|Phc@%D!!g{`eTpPGRU3Tyh0c^q78j{lxD`^P*kOmP0+=03BpgK@^rp}PaPP2#`g z9$@2oo@3D1zY5m-J-~+eNf-8~z{j^gm2N+MPr6++<1xybHD}MhBxN1 z-3|<&`YS*2OiNj1JB<4&>258={uNkhTf?&*x(OKC7=J$w@o=}lgd$>X3XrUO489`fPw;k1>z?U!F%>r$z`}t=3tEK}6~?$eCtkLhF#SUV zKPQ>Q#^C=~{EK#bfwA4q6ULdG7v=WwIGp*giJ!okFA(>69=FDXFV&AQzT8dx!#plb zZFpqvv*?k*YUWpKPLWn zrohb~6aPCQxDlNE-kjb01bf%d`O|$L0A>{Sg*o5Y_Z#w_;wg#D8U9Vs=HHO_6pss2 z+Dh7{{P_6ZSAu`Xvy^j^{Na0p%UZz0_zFz`kF~&1SuE0BIxBfc1OK8I%37k`r8g$; zDCJ-Hy(~7PyY$`3JB*yB?&`Z=V|g`I;Dg(Xz&S80+|A@6^Y^;Ge0`14snR^@k$#-s zV}-~M%CD9mfFlow<2$Cv7mzKCoQ^c_I~++GddtZ)I%ndy^s;n~y=NbWJ`^9-0sSl( zyTy;4T<^zP2f+zb`9OCr!9I_iqX?a|D7t`F*Jfj+_@rbR$+`RYIX-c+>|{2&rg?4W zp(l`$m^(&PfA$dkGB9}XCg{vEyXH7?&Hc?%b57OPgpUZ})Fbf56@JUUEOKn+acR-N zH)C)C`C>oxeZTS|r_KyoS?Q&_61k1+C*{!59mvcg!I}HTI^?pxTHwe7?|fuo%j=E8k&M49KcEsc3?;=Pr2JS@12P+^hiLbLXjPxN{% z^o8U!qYpqku}5|0#tw_dJyu?ozJPr87(Svnz_WcqE``7UBQfA)!Smc{#Tr}n2Lxfxf*lI+$_v8XRO?_UZbs^{O6`P@NSa-4b z%lmdedBXU@*~or*9vmj!yAOLeww`+`)}G}&XNdpKU>&XZi(WWn&I-W?!8wm>&vDL& zoE&+mye54+c(XkcJ2{4~9y-D6U0-$smj(FjcD~_?q3w=hJod$=!Cc`s1zbCfCG!{on0erz`@!A~ZCp~?RQ`JXWPkujM3 z!M)@r|E00R(!VnK`4;V5iH)ntf5SxnbU~u(W$q{{N!s1jg5gDy|*J* zkRKkCKeC{8zGw0BV4xTO7mUr4^J9mlhveohoPX+FxS8^3I$ny+5c29F&K%D|zq@?e zuSBoQhr||rL&pzcAEENx*|^i4ldT1316}Yn1_$GBU_`b|&KBe9J=in%#(#UMy(hjW zurc@<^Qm(T$y!~z8=kH)GGP9%vQ<)=By^YFZoig%LI0N+gUNfhU1RgHiFqL3yY)iU z|K4MBzWIjkM`i6BecIfc9==k%Z+jNNj`dS-(1- zF!zA2o|D*?p&zTu65BfTZYExD?1&DKzc14B>9ySRTkz1sFP>fP9lhP3zgBmV-bNcP z|J+NT=N#kG4PI`b+`?4y;@GXs<5jpvG@8~OG6Car$*sNV#z|ucKRI_HV^GBy=Jyxey{xlH?4yc4k*M7F)OGi7SnO@G{ge?0pm3$_mI{lr&l!Aa0NbKE(>d2oc)rJdj9qZ^|(oJUV)h`Hnrz-_(Q zI95cGdrxqd9pC89iI=~;Xt`fhu+lFs*x)bN+QXRbk5oR~&%4quUcMSzF@47ta-IU7 z(3oVSmCK)t#Fh_Grph;Upr@v@=-?%;ZT70RGHkZ`H z%-YwOkY|Xzg6Y=@KTBTfYx{Mb-}ajn;2`Z(K0QN(4TW%7CH*=l`!ejhvZUqy>9nJBl|C$gyt2Ir z8lSr$#yo@Tq$_vTbsmg~OVUe?2!>$qQ>uu8(V#IL`FzOQ7S zi{3Y9(Je!q&$I5~^CH_eQNQ>N@hrlTCvKB1XX&;Ud}BoXNUP#r!l$hCQFh;4$T@?z zQfK?F&+jE({S~d&2oJ0D>Vt3<^qzce9IeM57`XgmY~KETjQL2MIY%zgCjM=AbpO8W z^VkRWqATzL(wB1vMLzJ$H{+zqZWfHqG<&K36)suK(4qYF<>6TR@>m=l4eN8fADT&R z>EXVGk|_SF^7k)NyYr}>o{Mlvv8g%C!9Mxvg-(EJ*bR^ zfZqE9`Z|w3Y3!VCpkQ=7FMH&b?dvD$@{7+`8SZ>m-vjhZZ^|)iP2b_O?iYZ^_jlH$ z-v>|gJLqcswRio=3i#j>WZ?1UukU*WUizEJHb(GO+vpdxmiW=(0cflG#>Q2h?>Vur z9ywq=GL_e&v%AK;8N;=}z)&>5>n=aPbqrq&1HjTUba
    +_I_&o~S8Ow6%vlrQXM9 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

    DL37oM=uEcphpeDBg&Ah(oN1fM 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�EdKYVR>qNYme>U$f@V7NQv%8Xbu`1%l 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

    1uh}Zqm^+Day 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

  1. p2x1+nNY{Y_(c=^r96r6 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%0AN3rL{Y<1cTX^icU@VtWk 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 z≀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
  2. ~_+WY&}?3}CxY4ZfSVq<4boIT4zq=+X?$l5Es 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%0A<9$YOG?;LqPB0@ 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

    $lt^e58T&a4N}zdh{JWO$kFwC&yVpGnN~0&t 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 jK}C>Y3xcJ?NAxaf8N+K%{iBy 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.Y7}kE94HcgLCo)R zFElX8xaoEHg;!Iw)AR=X-J>0z!TcQDscm@_nqq=W;@gYnaF*(;)eB>30gLn5Euquf z@M*xi6hDx8*0?i7rTm7Us`xDT|3&OkIq2rY>HoHgnkDy!xbz>ss_wp!`g3V}BX@B~ z9dh>_X{O5$MK*Nn9_c=nAY*XfyZ50a-i=rUu78)uEmKZ;_pU_A`(W^1wxni{&BuoE zozce4Gd2u$`kW1Kc6o0nymu`&DxG!EKFOvhQfF5NvUy{`55C}+)X?nS06i85>17gCX|`K7&n)|AVuB^FKcgimwErvKSg&3}#e!{q|G8>vDA z&+dTcgJ0d8Lm17maj-Lo`&DKFpIJ8ig1p~NeYH+|ZcKpqt)-o^WGy7}3O3?}We?(S z8;4(=vq@zP(ic}=NSya1?AR`>{@9$~tQx}_@zy*2Rq|38ek1*r`>KUjNcDn>N%P0MG{4dVjuD&L3akdWUuJERQ9C;DQ*$(TtJALm?v;Ow zZ=o#XU%pOK?Yi*D-x#{D@hgrYGQi@)bLB908MDCif z;TU4hxHCh}mh~f_Mk*czA4>v$_7eM_{SU#vFRS(6GaFfUGv6Kywy1h`*!A?$-)io+ zl0N;=qlI2^>Zx_=simHMo%S6(AJX^OXznD^?Y`uu+jU4Ex%b=nH{K7YDT#P6h_{X& zDQ$+iyH4Z>1rz9VEwUzk0EV`YK=K7&U3j@PX?QzQF8C*Cmz0rbIQ}N$`CSZYqYFTL&kS_qcheC zWqK&{&-G9RG20s_2GrijHfU3{Mz1fYy!6Se393F!mwf6}{o}prFaK5Q{FmQ1t5zv| z<~L?LyN;1)rIeMYZN2D4ftQGZFshN6-F&f&*mn}z_tjEIz1*ue;Psqm-`jt=^$wXK zp4A6zqhkx>*_k$flGt)$Z{G9W2({L2ve(g=Y1qBUpQcaUvvFh94QX@iY5k?gz1$6q zY}E(7ku!Y7{$g?N&{_S||CTbG)v(8RbIgHC?swJJbIuNQQO@mGea63?%N;9Y^(lMg zyg)hIxsSCdFEIVu400(t}Hol zR2!uob?*yGywlE=@uZJF=_6wndQkzL5_vbY(!QV5gRjeNd)|6`-rZQ>*ru}iwV#Aq zQ>Sa^Q@yEs%uUnhcY0FminGB*=E!%$cfj;;hp!%ZDId9zJuBz(uqTvz=vR2}LOuM_ z!U?~fV`SZY$dG+2DdCB6Id?vV^_j;y&0}17&=jrBbKaHja>oR$3g+sw+@+n*`&k