IM 用户 Web 客户端(React + TypeScript + Vite),与 iOS 客户端共用 IMServer 协议。
src/
├── logging/ 统一日志、HTTP 正文脱敏
├── sdk/ 协议 SDK、HTTP/WS、本地存储
├── App.tsx UI(只调用 SDK)
├── main.tsx
└── styles.css
SDK 与 UI 分层:聊天能力沉淀在 sdk/,界面不直接拼协议帧。
# 一条命令起全套(后端 :8080 + 本仓 dev server :5173,先杀后起、幂等)
cd ../IMServer && ./scripts/dev.sh --no-tail
# 或只起 Web(后端已在跑时)
cd ../im-web
npm install
npm run dev
npm test
npm run build开发服务器会把 /api、/uploads 和 /ws 代理到 http://localhost:8080。
完整规则见 docs/LOGGING.md,跨端共同契约见
../IMServer/docs/LOGGING.md。
浏览器日志统一使用 IM.APP、IM.HTTP、IM.WS、IM.STORE、IM.UI Tag。所有 API
请求自动携带 X-Request-ID,请求与响应使用同一个 req 关联,并记录方法、路径、状态码、
耗时、字节数和经过脱敏的正文。
- password、token、Authorization、cookie、phone、secret 始终隐藏。
- JSON 内嵌 Data URI、上传文件和二进制只记录类型与大小。
- 单条正文最多 16 KB。
- Debug 输出脱敏后的业务正文;生产构建默认只输出 warn/error,且隐藏业务正文。
- 内存中最多保留最近 500 条日志,不写入 localStorage。
开发时可在浏览器控制台执行:
await IMDiagnostics.copyLogs() // 复制诊断日志
IMDiagnostics.exportLogs() // 返回 JSON Lines 文本
IMDiagnostics.clearLogs() // 清空内存日志