收口移动网络桥接响应边界

将 Expo network.status 成功响应包装收口到 network 模块

让移动 dispatch 只委托网络状态请求

同步移动壳配置门禁和共享记忆
This commit is contained in:
2026-06-20 00:06:30 +08:00
parent 3d4657432a
commit e51d92f0d5
4 changed files with 13 additions and 6 deletions
+5 -2
View File
@@ -1962,14 +1962,17 @@ if (!hostBridgeNavigationSource.includes('openMobileShellExternalNavigation(Link
}
if (
!dispatchSource.includes('getMobileHostBridgeNetworkStatus()') ||
!dispatchSource.includes('getMobileHostBridgeNetworkStatus(request)') ||
dispatchSource.includes('../shell/network') ||
dispatchSource.includes('getMobileNetworkStatus()')
dispatchSource.includes('getMobileNetworkStatus()') ||
dispatchSource.includes('ok(request, await getMobileHostBridgeNetworkStatus())')
) {
throw new Error('mobile shell network HostBridge method must delegate to network module');
}
for (const snippet of [
'getMobileHostBridgeNetworkStatus',
'request: HostBridgeRequest',
'ok(request, await getMobileNetworkStatus())',
'getMobileNetworkStatus()',
]) {
if (!hostBridgeNetworkSource.includes(snippet)) {
@@ -58,7 +58,7 @@ export async function dispatchMobileHostBridgeRequest(
case 'app.reloadWebView':
return ok(request, reloadMobileHostBridgeWebView(navigation));
case 'network.status':
return ok(request, await getMobileHostBridgeNetworkStatus());
return getMobileHostBridgeNetworkStatus(request);
case 'clipboard.writeText':
return ok(request, await writeMobileHostBridgeClipboardText(request.payload));
case 'clipboard.readText':
+6 -2
View File
@@ -1,5 +1,9 @@
import { getMobileNetworkStatus } from '../shell/network';
import { type HostBridgeRequest } from '../../../../packages/shared/src/contracts/hostBridge';
import { ok } from './protocol';
export function getMobileHostBridgeNetworkStatus() {
return getMobileNetworkStatus();
export async function getMobileHostBridgeNetworkStatus(
request: HostBridgeRequest,
) {
return ok(request, await getMobileNetworkStatus());
}
@@ -2801,6 +2801,6 @@
## 2026-06-19 原生壳网络查询桥接边界
- 背景:`network.status` 已由 Expo shell network 和 Tauri shell network 承接真实系统 / 主站可达性查询,但两端 HostBridge `dispatch` 仍直接调用底层 network helper 或异步阻塞包装,继续补壳能力时容易让分发层重新承接宿主细节。
- 决策:Expo 移动壳新增 `apps/mobile-shell/src/host-bridge/network.ts`,统一承接 `network.status` HostBridge 查询并复用 `src/shell/network.ts`Tauri 桌面壳新增 `apps/desktop-shell/src-tauri/src/host_bridge/network.rs`,统一承接 `network.status` HostBridge 查询、成功响应和 `host_error` 失败映射,并复用 `shell::network::resolve_desktop_network_status`。两端 `dispatch` 只保留 method 委托,配置检查会拒绝分发层直接导入 shell network、直接执行 `resolve_desktop_network_status` 或重新映射桌面网络错误。
- 决策:Expo 移动壳新增 `apps/mobile-shell/src/host-bridge/network.ts`,统一承接 `network.status` HostBridge 查询和成功响应包装,并复用 `src/shell/network.ts`Tauri 桌面壳新增 `apps/desktop-shell/src-tauri/src/host_bridge/network.rs`,统一承接 `network.status` HostBridge 查询、成功响应和 `host_error` 失败映射,并复用 `shell::network::resolve_desktop_network_status`。两端 `dispatch` 只保留 method 委托,配置检查会拒绝分发层直接导入 shell network、直接执行 `resolve_desktop_network_status`、包装移动网络成功响应或重新映射桌面网络错误。
- 影响范围:`apps/mobile-shell/src/host-bridge/network.ts``apps/mobile-shell/src/host-bridge/dispatch.ts``apps/mobile-shell/scripts/check-config.mjs``apps/desktop-shell/src-tauri/src/host_bridge/network.rs``apps/desktop-shell/src-tauri/src/host_bridge/dispatch.rs``apps/desktop-shell/scripts/check-config.mjs``scripts/check-native-shells.mjs`、宿主壳能力统一协议文档、Expo / Tauri HostBridge 方案文档。
- 验证方式:`npm run mobile-shell:typecheck``npm run mobile-shell:test -- src/host-bridge/bridge.test.ts``npm run desktop-shell:typecheck``cargo test --manifest-path apps/desktop-shell/src-tauri/Cargo.toml``npm run check:native-shells``npm run check:encoding``git diff --check`