mirror of
https://github.com/meshtastic/Meshtastic-Android.git
synced 2026-09-21 11:15:18 -04:00
core:network is the largest module tackled so far in this effort: BLE radio transport, TCP radio transport, MQTT (TCP + WebSocket transports), USB/Serial, mDNS/NSD discovery, and HTTP data sources for api.meshtastic.org all live here. BLE and Mock/Replay radio transports already work unchanged -- BaseRadioTransportFactory handles BLE directly via core:ble's Web Bluetooth actuals, and Mock/Replay are already commonMain-portable. A new WasmJsRadioTransportFactory implements the platform seam, failing loudly for TCP and Serial/USB addresses (no browser equivalent for raw sockets; WebSerial/WebUSB out of scope this pass). Raw TCP sockets are a permanent browser sandbox limitation, not a library gap (confirmed via Ktor's own docs/KTOR-6690, recorded earlier this session). TcpTransport/TcpRadioTransport move to nonWebMain. MQTT's transport composition becomes a real per-platform expect/actual (MqttTransportSelection.kt): nonWebMain composes TCP+WebSocket as before, wasmJs registers WebSocket only -- mqtt-client-transport-ws publishes a wasmJs Gradle variant, mqtt-client-transport-tcp does not (confirmed via Maven Central's module metadata directly, not assumed). New wasmJs actuals: WebNetworkMonitor (real navigator.onLine plus window online/offline events, via kotlinx-browser -- no custom JS interop needed), MqttTlsTrust.wasmJs.kt (null -- a browser page cannot influence TLS trust at all, the platform decision is the only one available), ConnectionFailures.wasmJs.kt (false -- Ktor's Js engine surfaces failures through the same IOException family the shared predicate already covers). CoreNetworkWasmJsModule wires a real HttpClient(Js) engine for the HTTP data sources; deliberately no @ComponentScan since commonMain's CoreNetworkModule scan already reaches this target's @Single classes. Like core:database's SingleDatabaseProvider and core:prefs's CorePrefsWasmJsModule, it's not registered anywhere yet -- no webApp module exists this pass. core:network's own applyHierarchyTemplate call (needed for the nonWeb/wasmJs split) can't coexist with the separate meshtastic.kmp.jvm.android convention plugin, which makes its own call -- Gradle only allows one per project. Replaced with a nested jvmAndroid group inside the custom nonWeb group; ConnectionFailures's existing jvmAndroidMain source set needed no changes. One small upstream fix: core:ble's classifyBleException() had no wasmJs counterpart, blocking core:network's commonMain BleRadioTransport.kt. Added as an honest `= null` (Kable doesn't exist on wasmJs at all, so nothing is ever a recognized Kable exception there) -- same disjoint-compilation shape as BleServiceExtensions.kt. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>