优化: 跨端链路协议对齐
- miniapp 配置域旧端点强制重置 - df-tunnel 隧道协议与 relay 现网对齐 - relay e2e 例程入 examples
This commit is contained in:
@@ -1,18 +1,18 @@
|
||||
/**
|
||||
* miniapp 运行时配置(host/device_id/token 占位,由用户在设置页或 build env 填)
|
||||
* miniapp 运行时配置(channel_id/token 占位,由用户在设置页或 build env 填)
|
||||
*
|
||||
* 这些值在真实部署前是占位:
|
||||
* - RELAY_HOST:ws/wss 地址,需替换为实际部署的 df-relay 地址
|
||||
* - DEVICE_ID:用户首次配置桌面端时生成的设备 ID
|
||||
* - TOKEN:对齐 df-relay 的 DF_RELAY_TOKEN(生产建议每 device 独立 token)
|
||||
* - RELAY_HOST:ws/wss 地址,需替换为实际部署的 u-relay 地址
|
||||
* - CHANNEL_ID:u-relay 配对通道 ID(与桌面端 df-tunnel 共享同键)
|
||||
* - TOKEN:对齐 u-relay 的 U_RELAY_TOKEN(生产建议 per-channel 独立 token,Phase3)
|
||||
*/
|
||||
|
||||
export interface MiniappConfig {
|
||||
/** relay WS 地址(含协议),如 'ws://192.168.1.100:8080/ws/miniapp' 或 'wss://relay.example.com/ws/miniapp' */
|
||||
/** relay WS 地址(含协议),如 'ws://192.168.1.100:9180/ws/commander' 或 'wss://relay.example.com/ws/commander' */
|
||||
relayHost: string
|
||||
/** 配对绑定的设备 ID */
|
||||
deviceId: string
|
||||
/** 配对 token(对齐 df-relay DF_RELAY_TOKEN) */
|
||||
/** 配对绑定的通道 ID(u-relay channel_id,与桌面端共享同键配对) */
|
||||
channelId: string
|
||||
/** 配对 token(对齐 u-relay U_RELAY_TOKEN) */
|
||||
token: string
|
||||
/** 心跳间隔(ms) */
|
||||
heartbeatInterval: number
|
||||
@@ -29,17 +29,17 @@ export interface MiniappConfig {
|
||||
/**
|
||||
* 默认配置(占位值,需替换)
|
||||
*
|
||||
* 真实部署:用户在设置页填 relayHost/deviceId/token,或通过 build-time env 注入。
|
||||
* 真实部署:用户在设置页填 relayHost/channelId/token,或通过 build-time env 注入。
|
||||
* MVP 阶段留占位让类型自洽,实际连接会失败(token 校验不通过 → relay 关连接,
|
||||
* 这符合预期,提示用户配置)。
|
||||
*/
|
||||
export const defaultConfig: MiniappConfig = {
|
||||
// 测试服 wss(u-work.1216.top → nginx 终止 TLS → df-relay :9180 明文 ws)
|
||||
// u-relay 现行协议 commander 端点:wss://u-work.1216.top → nginx 终止 TLS → u-relay :9180 明文 ws
|
||||
// 微信小程序真机要求 wss + socket 合法域名白名单(微信公众平台→开发设置→服务器域名)
|
||||
relayHost: 'wss://u-work.1216.top/ws/miniapp',
|
||||
// 配对桌面端 device_id(查桌面端 KV app_settings:device_id;填错则握手过但路由无对端)
|
||||
// 当前填本机桌面端 device_id(联调期硬编码,后续做配对绑定流程)
|
||||
deviceId: '1b92cbbd-d03e-4a0c-b226-9fadf8dcf0f0',
|
||||
relayHost: 'wss://u-work.1216.top/ws/commander',
|
||||
// 配对桌面端 channel_id(查桌面端 KV app_settings:channel_id;填错则握手过但路由无对端)
|
||||
// 当前填本机桌面端 channel_id(联调期硬编码,后续做配对绑定流程)
|
||||
channelId: '1b92cbbd-d03e-4a0c-b226-9fadf8dcf0f0',
|
||||
token: 'devflow-relay-default-token',
|
||||
heartbeatInterval: 30000,
|
||||
reconnectBaseDelay: 1000,
|
||||
@@ -54,6 +54,23 @@ const STORAGE_KEY = 'df-miniapp-config'
|
||||
/** 单例配置(null 表示尚未从 storage 加载) */
|
||||
let _config: MiniappConfig | null = null
|
||||
|
||||
/**
|
||||
* 旧版字段迁移(df-relay 一代 → u-relay):
|
||||
* storage 里的旧 JSON 含 deviceId 字段,映射为 channelId,避免老用户升级后配置丢失。
|
||||
*/
|
||||
function migrateLegacyFields(parsed: Record<string, unknown>): Partial<MiniappConfig> {
|
||||
const out = { ...parsed } as Record<string, unknown>
|
||||
if (out.deviceId !== undefined && out.channelId === undefined) {
|
||||
out.channelId = out.deviceId
|
||||
}
|
||||
delete out.deviceId
|
||||
// 旧 relayHost 指向已下线的 /ws/miniapp 端点,升级后强制重置为新端点
|
||||
if (typeof out.relayHost === 'string' && out.relayHost.includes('/ws/miniapp')) {
|
||||
out.relayHost = defaultConfig.relayHost
|
||||
}
|
||||
return out as Partial<MiniappConfig>
|
||||
}
|
||||
|
||||
/**
|
||||
* 从 storage 读取并合并默认配置
|
||||
*
|
||||
@@ -64,9 +81,10 @@ function loadFromStorage(): MiniappConfig {
|
||||
try {
|
||||
const raw = uni.getStorageSync(STORAGE_KEY)
|
||||
if (!raw) return { ...defaultConfig }
|
||||
const parsed = JSON.parse(raw) as Partial<MiniappConfig>
|
||||
// 合并默认值,避免旧版本字段缺失导致 undefined
|
||||
return { ...defaultConfig, ...parsed }
|
||||
const parsed = JSON.parse(raw) as Record<string, unknown>
|
||||
// 合并默认值 + 旧字段迁移,避免旧版本字段缺失/更名导致 undefined
|
||||
const migrated = migrateLegacyFields(parsed)
|
||||
return { ...defaultConfig, ...migrated }
|
||||
} catch (e) {
|
||||
console.warn('[df-miniapp] load config from storage failed:', e)
|
||||
return { ...defaultConfig }
|
||||
|
||||
Reference in New Issue
Block a user