Commit Graph

  • 7f829dcbaa iOS: deterministic Tor recovery + 100% gating; BLE-first; session rebuild jack 2025-09-10 13:45:03 +02:00
  • 37d655d065 feat(tor): Tor-by-default scaffold and integration jack 2025-09-07 13:52:07 +02:00
  • 0ce68bc762 Perf/optimizations (#563) 2025-09-06 12:47:32 +02:00
  • acc5bdf5ec Fix: move ParsedInbound + parseInboundMessage to file scope (non-isolated) to satisfy Swift 6; update detached tasks to call free function perf/optimizations jack 2025-09-05 11:07:11 +02:00
  • fcd82c28c6 Fix: Swift 6 concurrency - avoid capturing self in detached tasks; deliver parsed Nostr messages via MainActor singleton jack 2025-09-05 10:57:01 +02:00
  • 4e51c83914 Nostr: parse inbound messages off-main, then update state on main; BLE: debounce peer snapshot publishing to reduce churn jack 2025-09-04 23:52:05 +02:00
  • d9884eaf87 Compression: revert to zlib per request (compatibility) jack 2025-09-04 23:18:26 +02:00
  • a486644b7f Perf: reduce hot‑path overhead (logger autoclosure, zero‑copy BinaryProtocol.decode, prealloc encoders) jack 2025-09-04 23:17:00 +02:00
  • 5273f13512 Fix critical routing and buffer issues\n\n- Preserve unsent items in MessageRouter outbox (no data loss)\n- Drain and bound Nostr send queue; flush on relay connect\n- Cap BLE pending write buffers per peripheral to avoid OOM\n- Enable Nostr fallback for short peer IDs via favorites mapping\n- Route favorite notifications via MessageRouter (mesh/Nostr) (#559) 2025-09-04 21:26:58 +02:00
  • be722aa170 Fix critical routing and buffer issues\n\n- Preserve unsent items in MessageRouter outbox (no data loss)\n- Drain and bound Nostr send queue; flush on relay connect\n- Cap BLE pending write buffers per peripheral to avoid OOM\n- Enable Nostr fallback for short peer IDs via favorites mapping\n- Route favorite notifications via MessageRouter (mesh/Nostr) fix/top3-critical-routing-buffers jack 2025-09-04 21:20:49 +02:00
  • 749d80aa85 Adjust PoW policy defaults (finalize 16/15/14 mapping) feature/pow-geohash-mining-ui jack 2025-08-31 17:10:05 +02:00
  • 29976f4e19 Apply PoW to geohash system/raw sends\n\n- Use same mining/signing path for screenshot and sendPublicRaw in geohash\n- Factor helper mineAndSendGeohashEvent(...) in ChatViewModel jack 2025-08-30 20:53:24 +02:00
  • bb67ababaf Add NIP-13 PoW for geohash with body-only mining animation\n\n- Implement PoW core and defaults (16/15/14 by precision)\n- Wire PoW into geohash send path; hide timestamp while mining\n- Use combined animated text so long messages wrap under name\n- Enforce receive-side PoW filtering for geohash events\n- Filter geohash peer list by observed PoW bits; track per pubkey\n- Stabilize miner memory (autoreleasepool + sched_yield)\n- Add unit tests for PoW jack 2025-08-30 16:43:13 +02:00
  • e79bcf531b Feature/screenshot privacy warning (#541) 2025-08-28 13:37:17 +01:00
  • ebfceb21bb Fix duplicate messages after channel switch\n\n- Dedup on per-geohash append (skip if ID exists)\n- Dedup and sort timeline by timestamp when switching into a geohash\n- Keep content/layout unchanged; add lightweight debug logs for empty rows feature/screenshot-privacy-warning jack 2025-08-28 14:36:29 +02:00
  • b2685e5156 Screenshot privacy: warn on location sheet; gate screenshot broadcasts to chat only\n\n- Track sheet presentation in ChatViewModel\n- Show privacy alert when screenshot taken on location channels\n- Ignore screenshots for App Info and Location sheet for broadcast\n- ContentView wires sheet onAppear/onDisappear and presents alert\n- Fix location sheet subtitle wrapping: render as single Text to avoid orphaned bullets jack 2025-08-28 14:03:05 +02:00
  • 3e5043f875 Harden text formatting against Unicode range mismatches v1.3.3 jack 2025-08-28 09:22:34 +01:00
  • 11cd5527ed Fix crash in formatMessageAsText: use NSString length for NSRanges and guard slicing before matches to avoid invalid ranges with multi-byte content jack 2025-08-28 09:18:11 +01:00
  • cf1bfdac6b Geohash Bookmarks + Rising‑Edge Notifications + Friendly Names (#538) 2025-08-28 09:10:15 +01:00
  • 2b363b7062 Resolve merge conflicts in ChatViewModel.swift (geohash sampling comments and removed background nudge) feature/geohash-bookmarks jack 2025-08-28 09:09:55 +01:00
  • 7d672f2d69 Geohash notifications: ensure triggering message appears\n\n- On zero→alive sampling, pre-populate geoTimelines[gh] with the triggering message\n- Dedup on per-geohash timeline and UI messages by message ID to avoid duplicates after subscribe\n- Keeps participant update, block/self checks, and cooldown intact jack 2025-08-28 08:58:12 +01:00
  • d35d3f9612 Notifications: remove background 'new chats!' nudge; geohash activity only on zero→alive; mesh 'nearby' only on zero→alive\n\n- Geohash sampling: notify only when previous participant count in last 5m was zero, with 30s freshness gate\n- Suppress old sampled events after (re)subscribe\n- Remove channel inactivity nudge\n- Mesh: reset rising-edge gate immediately when peer list goes empty (strict zero→alive) jack 2025-08-28 08:54:55 +01:00
  • 9e79b18dcb Add geohash bookmarks: persistence, sampling integration, and UI\n\n- Add GeohashBookmarksStore with UserDefaults persistence and toggle API\n- Sample union of regional + bookmarked geohashes for activity notifications\n- LocationChannelsSheet: bookmark icons on nearby rows and a Bookmarked section\n- Header toolbar: toggle bookmark for current geohash\n- Tests: GeohashBookmarksStoreTests for normalization and persistence\n\nRationale: Bookmarked geohashes are always sampled for new activity notifications and quickly selectable from the sheet. jack 2025-08-28 00:44:42 +01:00
  • b63a595b04 Fix geohash UX: rising-edge notify, correct teleport, sort timeline (#537) 2025-08-28 00:08:01 +01:00
  • d2f20195c3 Fix geohash UX: rising-edge notify, correct teleport, sort timeline fix/geohash-ux jack 2025-08-27 23:33:42 +01:00
  • ed105f311a refactor(router): make MessageRouter depend on NostrOutboxService; update ChatViewModel wiring refactor/various jack 2025-08-26 21:27:55 +02:00
  • 8ebb7411a7 fix(nostr-inbox): initialize NostrInboxService inside @MainActor initializers to satisfy actor isolation jack 2025-08-26 21:20:51 +02:00
  • fb60c929eb refactor(nostr-outbox): add NostrOutboxService and migrate ChatViewModel geohash PM/ACK sends to it jack 2025-08-26 21:19:49 +02:00
  • 678795adcf fix(nostr): mark NostrInboxService @MainActor and use NostrEvent type; resolve Swift 6 actor isolation errors jack 2025-08-26 21:13:40 +02:00
  • 37e973bf9f refactor(nostr): add NostrInboxService and route geohash/DM subscriptions through it; move de-dup away from ChatViewModel jack 2025-08-26 21:01:13 +02:00
  • 8c002b8942 fix(init): initialize autocompleteService in DI initializer to satisfy Swift init rules jack 2025-08-26 20:15:03 +02:00
  • 6533629362 refactor(init): add dependency-injected initializer for ChatViewModel to enable composition/testing jack 2025-08-26 20:11:59 +02:00
  • dd4e2f6e86 refactor(hex+fingerprint): centralize SHA256 fingerprint helper; reuse PeerIDResolver in ID checks jack 2025-08-26 19:47:51 +02:00
  • 55187ac5c6 refactor(read-receipts): add ReadReceiptTracker and unify across VM + manager jack 2025-08-26 18:50:52 +02:00
  • d7b7f1f673 UI: diversify peer colors; smarter geo notifications; 21m live location (#531) 2025-08-26 18:43:22 +02:00
  • 7aa3622349 Update README to explain hybrid messaging architecture (#530) JDandGitHub 2025-08-26 12:42:21 -04:00
  • 4d4c596a17 UI: diversify peer colors; smarter geo notifications; 21m live location fix/minor-ui jack 2025-08-26 18:39:48 +02:00
  • 96c6fc0c0d Improve mesh relaying, presence, and DM robustness; signed public msgs; reachability UI; quicker announces; store-and-forward (#527) 2025-08-26 17:28:08 +02:00
  • 06791ce218 Peer icons: faster, accurate reachability\n\n- Run connectivity checks every maintenance tick (5s)\n- Publish peer snapshots on central unsubscribe for instant UI refresh\n- Lower inactivity timeout to 8s and disconnect debounce to 0.9s\n- Gate reachability on mesh-attached (>=1 direct link); no links => no reachable peers\n- Keep 21s retention for verified/unverified, but only when attached to mesh\n\nImproves list responsiveness when walking out of range and prevents stale 'reachable' states when isolated. fix/relaying jack 2025-08-26 17:27:19 +02:00
  • 95af23a8f6 Logs/robustness: debounce disconnect notifications (1.5s), debounce 'reconnected' logs (2s), add weak-link cooldown after timeouts on very weak RSSI (<= -90) jack 2025-08-26 13:38:15 +02:00
  • b919b3ff0a UI: unread envelope uses orange; hasUnreadMessages checks Nostr conv key for peers with known Nostr pubkeys (geohash DM consistency) jack 2025-08-26 13:21:13 +02:00
  • ae2b247834 Peer list: real-time icon updates by publishing snapshots on connectivity checks; add unread message indicator (envelope) next to peers with unread DMs jack 2025-08-26 13:15:22 +02:00
  • c6ed3cd665 Announces: TTL 7 (sparse only) via RelayController; no fanout subset for announces; neighbor-change rebroadcast of last 2–3 announces. Fragments: faster pacing (5ms global, 4ms directed). jack 2025-08-26 13:03:47 +02:00
  • 08eceab7cd Fix warnings: remove unused msgID and unused mutable var in directed spool flush jack 2025-08-26 12:46:07 +02:00
  • 11950a7fe4 Range/robustness: store-and-forward for directed packets (15s) with flush on new links + periodic; announces: no subset + afterglow re-announce on first-seen; adaptive scanning: force ON when <=2 neighbors or recent traffic jack 2025-08-26 12:43:04 +02:00
  • 86bdb1af27 Relay: increase broadcast TTL cap in sparse graphs to 6; tighten jitter for handshake (10–35ms) and directed (20–60ms) relays jack 2025-08-26 12:17:23 +02:00
  • 744e87f924 Announce cadence: faster discovery (4s), sparse 15±4s, dense 30±8s; initial 0.6s; post-subscribe 50ms; min-force 150ms; maintenance 5s; proactive announces on handshake + recent-traffic nudge jack 2025-08-26 12:09:54 +02:00
  • 0d1450df4d Verification sheet: compute encryption status and fingerprint using short mesh ID mapping (fix 'not encrypted/handshake' for DMs with stable key) jack 2025-08-26 12:01:01 +02:00
  • 89175e2065 mesh DMs/acks: route to reachable peers; queue READ/DELIVERED until handshake; add Transport.isPeerReachable; UI: hide offline non-mutuals; DM header: better name fallback + show transport + encryption icons; fix NostrTransport conformance jack 2025-08-26 11:58:41 +02:00
  • bc383cb02f Reachability: reduce retention to 21s for all peers (verified and unverified) to minimize stale presence jack 2025-08-26 10:53:27 +02:00
  • 1913719662 UI: switch to 'point.3.filled.connected.trianglepath.dotted' for mesh-reachable icons in list and header jack 2025-08-26 02:40:40 +02:00
  • fc690fc0ac UI: use 'point.3.connected.trianglepath.dotted' for mesh-reachable; change people count to include connected+reachable (exclude Nostr-only) jack 2025-08-26 02:39:16 +02:00
  • 35e4ad8914 Fix syntax error: remove stray else/log inserted into writeOrEnqueue; keep logs clean jack 2025-08-26 02:28:21 +02:00
  • f251c5333c Logs: tag relayed announces as 'Reachable via mesh' and annotate public message logs with (direct|mesh) path for easier field analysis jack 2025-08-26 02:26:15 +02:00
  • 92a0204368 ContentView: handle new .meshReachable connection state in header icon switch (exhaustive switch fix) jack 2025-08-26 02:13:33 +02:00
  • acfce858ec Add connected vs reachable model: retain peers after link drop, expire after reachability window; expose all peers in snapshots; compute isReachable in UI; add meshReachable state and sorting; avoid removing peers on link events; notify UI on stale removals jack 2025-08-26 02:11:30 +02:00
  • dc9b9e996d Sign public broadcasts; verify relayed messages via persisted signing keys; keep scheduled relays in sparse graphs and speed their jitter; persist announce signing key for offline auth; add short backoff after disconnect errors to reduce reconnect thrash jack 2025-08-26 01:52:34 +02:00
  • a7d5b2d7d9 Centralize remaining magic numbers; finalize logging hygiene across UI/BLE/Nostr (#522) 2025-08-25 21:18:51 +02:00
  • 6550a64676 project: add TransportConfig.swift to Share Extension target to fix build refactor/quick-wins jack 2025-08-25 21:17:57 +02:00
  • 7e9d573f6d refactor(config): centralize remaining magic numbers and finalize log hygiene jack 2025-08-25 21:13:17 +02:00
  • ed3583f2ff chore: centralize more BLE/Nostr delays; tighten NostrRelayManager logs to concise summaries; adopt config for location/geohash/relays jack 2025-08-25 20:57:52 +02:00
  • 2251afa360 chore: centralize compression, dedup, verification QR, relay backoff, georelay fetch constants; adopt across modules jack 2025-08-25 20:51:12 +02:00
  • c39df29b25 chore: centralize location + geohash constants (filters, lookback, relay count) and adopt in LocationChannelManager/ChatViewModel jack 2025-08-25 20:17:09 +02:00
  • 43e159df0e chore: centralize more constants in TransportConfig (BLE thresholds, Nostr read-ack, UI caps) and adopt in BLEService/ChatViewModel/NostrTransport jack 2025-08-25 20:04:37 +02:00
  • adab49154b project: remove duplicate TransportConfig.swift entries from Sources build phases jack 2025-08-25 19:59:08 +02:00
  • 62d259cd9c chore(BLE): trim raw hex dump on central decode failure to length+prefix jack 2025-08-25 19:56:27 +02:00
  • 131db9c569 chore(NostrTransport): factor recipient npub resolution into helper; reduce duplication jack 2025-08-25 19:50:45 +02:00
  • f5a2a1e29a chore(BLE): move connect/duty/announce constants to TransportConfig and reference them jack 2025-08-25 18:59:47 +02:00
  • 3a8cf4d37f project: fix TransportConfig reference path; remove recovered reference; hook correct fileRef in iOS/macOS sources jack 2025-08-25 18:58:19 +02:00
  • b243b930c4 chore: remove unnecessary UserDefaults.synchronize() calls (extension/app/VM) jack 2025-08-25 18:54:42 +02:00
  • c803f862d5 project: add TransportConfig.swift and PeerDisplayNameResolver.swift to iOS/macOS targets (no xcodegen) jack 2025-08-25 18:52:54 +02:00
  • 58c516075c docs(plans): add refactor plan; chore(config): introduce TransportConfig and use in BLEService/ChatViewModel/PrivateChatManager; feat: add PeerDisplayNameResolver and apply in BLEService; chore: make TransportPeerSnapshot Equatable/Hashable; perf: simplify read-receipt persistence (no synchronize) jack 2025-08-25 18:48:02 +02:00
  • 680a390b2d Nostr: sign events directly with Schnorr keys; update call sites to use Schnorr and remove temporary Signing.PrivateKey conversions (#521) 2025-08-25 18:31:53 +02:00
  • e2fafe766e Nostr: sign events directly with Schnorr keys; update call sites to use Schnorr and remove temporary Signing.PrivateKey conversions feature/nostr-schnorr-signing jack 2025-08-25 18:24:20 +02:00
  • 60b0deee7b Cleanup: remove dead code, normalize fingerprints, modernize share extension, trim test noise, and drop ‘preparing to share…’ message (#520) 2025-08-25 18:01:19 +02:00
  • 334c6271b6 Inline comment cleanup: drop legacy 'removed' breadcrumbs across protocols, services, view model, and views cleanup/dead-code-sweep jack 2025-08-25 17:57:21 +02:00
  • 6f4da62e4e Remove 'preparing to share …' system message; send shared content immediately jack 2025-08-25 17:53:25 +02:00
  • d946c01bfc Share Extension: migrate to UIKit + UTTypes; drop Social/SLComposeServiceViewController jack 2025-08-25 17:44:07 +02:00
  • ce48720e9a Tests: gate verbose prints under DEBUG; ChatViewModel: remove legacy fingerprint helper and rely on UnifiedPeerService jack 2025-08-25 17:42:41 +02:00
  • e0db8a2bc8 Remove dead code and artifacts: drop PeerManager, unused views/types; delete LegacyTestProtocolTypes; update .gitignore; purge TestResult.xcresult and build.log jack 2025-08-25 17:03:48 +02:00
  • 2f7c0aaaf7 Delete TestResult.xcresult directory jackandGitHub 2025-08-25 16:36:36 +02:00
  • 7c4c3f1391 macOS geohash parity: shared LocationChannelsSheet with permission CTA, enable CoreLocation on macOS, unify geohash participants/DMs, update ContentView (unread + QR on macOS), commands: hide/block /fav & /unfav in geohash, remove /help, make /who show geohash participants, fix ViewBuilder mutation+sheet toolbar, entitlements for mac location (#519) 2025-08-25 16:29:52 +02:00
  • 19da74d724 macOS geohash parity: shared LocationChannelsSheet with permission CTA, enable CoreLocation on macOS, unify geohash participants/DMs, update ContentView (unread + QR on macOS), commands: hide/block /fav & /unfav in geohash, remove /help, make /who show geohash participants, fix ViewBuilder mutation+sheet toolbar, entitlements for mac location feature/macos-geohash jack 2025-08-25 16:27:16 +02:00
  • 3c06bd6386 Improve BLE mesh flooding: last-hop suppression, K-of-N fanout, and backpressure (#517) 2025-08-25 11:51:50 +02:00
  • ec955751c8 Tests: stabilize FragmentationTests and InputValidatorTests feat/ble-relay-optimizations jack 2025-08-25 11:46:43 +02:00
  • fcfe32b754 Improve BLE mesh relay and flooding jack 2025-08-25 11:03:07 +02:00
  • acc11101ad Fix geohash linking: avoid links in @mentions v1.3.2 jack 2025-08-25 09:31:41 +02:00
  • 5fd9140ffa QR verification: live challenge/response over Noise; persistence, offline badges, and UX/perf polish (#510) 2025-08-24 23:19:58 +02:00
  • 0bc5cbe0b7 QR verification: speed + persistence + UX feat/qr-verification jack 2025-08-24 23:11:20 +02:00
  • 77f0fa46c7 QR: make NoisePayloadType exhaustive in ChatViewModel switches by ignoring verifyChallenge/verifyResponse for now (placeholder) jack 2025-08-24 18:26:19 +02:00
  • 81fa77b761 QR: add iOS camera scanner using AVFoundation; integrate into Scan view; add NSCameraUsageDescription to Info.plist jack 2025-08-24 18:23:37 +02:00
  • 0c7054ce30 QR: fix SwiftUI modifiers — apply .interpolation(.none) and .resizable() to platform Image inside ImageWrapper; remove from wrapper usage jack 2025-08-24 18:16:42 +02:00
  • 921b9f1be6 QR: render actual QR images with CoreImage; add copy button; keep scanner placeholder for now jack 2025-08-24 18:13:55 +02:00
  • e86dbc8d38 QR: fix VerificationQR mutability (sigHex var) and remove duplicate Data hex helpers to resolve redeclaration; wire signed payload assembly jack 2025-08-24 18:09:24 +02:00
  • 652deab8a5 QR verification scaffold: add Noise verify payload types, VerificationService with QR schema/signing, placeholder MyQR/Scan views, and UI entry points in header jack 2025-08-24 18:06:22 +02:00
  • e6903456ab NIP‑17/44: XChaCha20 v2 gift wraps, DM kind=14, receipts + UI fixes (#506) 2025-08-24 17:56:43 +02:00
  • 02252b6a91 UI: MeshPeerList shows transport state icon: radio for mesh-connected, purple globe for mutual favorite/Nostr; fallback dim person for others feat/nip17-nip44-geohashdm jack 2025-08-24 17:33:04 +02:00
  • 2c76a3c03e UI: fix string interpolation in DM/geohash context keys (remove escaped interpolation) to resolve 'unused ch' warnings and ensure proper IDs jack 2025-08-24 17:26:52 +02:00
  • fe098cdae9 UI: fix DM autoscroll IDs by using dm:<peer>|<id> for private chat item IDs and preserve anchors, ensuring scrollTo targets exist when opening/switching/new messages jack 2025-08-24 17:16:31 +02:00
  • 605bff3249 Tests: add NIP-44 v2 ACK round-trip tests (delivered/read) using bitchat1 embedding and gift-wrap decrypt path jack 2025-08-24 17:14:00 +02:00