Files
MailUI4Agents/client/harmony
JianFeeeee 1571eb2ec4 跨端: 出厂默认地址改成 example.com(原来是开发者自己的生产域名)
用户 2026-09-21:「为什么现在登陆页面默认填写我们的服务器地址?不应该是 example 地址吗」

★ 用户的直觉是对的:**这确实是错的**,而且比"预填"更彻底。

## 现状:三处互相打脸

  ① 输入框的 placeholder:
       TextInput({ placeholder: 'https://example.com/api/v1', text: this.serverAddr })
                            ↑ 「请填你自己的」
  ② 同一个输入框的 text 预填:
       @State serverAddr: string = DEFAULT_API_BASE
       export const DEFAULT_API_BASE = 'https://mail.jianfgit.xyz/api/v1'
                            ↑ 「就是这个」—— 与 ① 直接矛盾
  ③ 校验失败的 5 条提示文案全在教用户填同一个生产域名:
       '请填写服务器地址,例如 https://mail.jianfgit.xyz/api/v1'
                            ↑ 用户是照着它填的

通用客户端把**某一个人的后端**写成出厂默认,等于宣称"本产品只有一个后端";
更坏的是用户会以为"直接登录就行",而连的其实是别人的机器。

## WebUI 的做法(对照)

它**一个域名都不写死**(`api/config.ts:30`):
    const base = (runtime || build || '/api/v1').trim();
因为 WebUI 跑在服务端自己发出来的页面上,"同源"天然正确。
**鸿蒙是独立 App,没有"同源"可依** —— 所以只能要求用户填,而默认值只能是格式示例。

## 改法

· `DEFAULT_API_BASE` → `https://example.com/api/v1`(与 placeholder 同一句话);
· `ApiBase.ts` 里 5 条面向用户的 error 文案 → 同样换成 `example.com`。

★ 注释里的 `mail.jianfgit.xyz` **保留不动** —— 那是"当时线上发生了什么"的取证
  (那段讲的是 2026-09-15 用户报"连不上服务器"的两个坑),删掉就销毁了依据。
  判据因此是**剥注释后再扫**代码。

★ 为什么不留空串:这个字段必须填对,留空用户不知道格式;
  而预填一个**看起来能用的真域名**更坏。

## 判据:原先只钉"格式",抓不到"值是谁的"

原来的断言是「https + 带 /api/v1」—— 而 `https://mail.jianfgit.xyz/api/v1`
**两条都满足** ⇒ 全绿。**格式判据抓不到语义事故**:那个值可以完全合法却仍然是错的。

⇒ 新增两条**语义**判据:
  ① 出厂默认必须落在 **RFC 2606 保留域名**(`example.com/net/org`、`.test`、`.invalid`);
  ② 面向用户的**提示文案**里不许出现真实域名(剥注释后扫)。

变异逐条验过会红:
    默认值改回生产域名                        → 红 ✓
    把某条 error 文案换成 my-real-server.com  → 红 ✓
    两者都在                                  → 13/13 全绿 ✓

★ 期间修了判据自己的一个 bug:我用了 `code('model/ApiBase.ts')`,
  而 `code()` 是相对 **electron 包**解析的 ⇒ `ENOENT .../client/electron/model/ApiBase.ts`
  —— **判据自己崩了**(整条不跑、退出码 1)。已改用本文件既有的 `read(rel)`。

## 设备验证

清掉 preferences 里的旧地址后冷启,`uitest dumpLayout`:
    text  'https://example.com/api/v1'
    hint  'https://example.com/api/v1'
⇒ 预填与提示**同话**,不再互相矛盾。

(老装机 preferences 里已有的地址**保持不动** —— 那是用户自己配的服务器,不该被清。)
2026-09-21 17:26:58 +08:00
..