主题
XHIM Electron SDK
Electron 适配由三层组成:
- Main Process 加载签名的
xhim_napi.node和xhim_core_v1; - Preload 用
contextBridge暴露固定白名单; - Renderer 不启用 Node integration,也不接触数据库路径、凭证或 Native handle。
ts
// main.ts
const client = await XHIMElectronClient.connect({
server: 'https://im.example.com',
userId: account.userId,
storageRoot: app.getPath('userData'),
credentialProvider: accountService.fetchXHIMCredential
})
const unregister = registerXHIMIpc(
ipcMain,
client,
() => BrowserWindow.getAllWindows()
)ts
// preload.ts
import { exposeXHIM } from '@xihansoftware/xhim-electron/preload'
exposeXHIM()ts
// renderer.ts
const conversationId = await window.xhim.directConversation('bob')
await window.xhim.sendText(conversationId, 'Hello from Electron')主进程 client.raw 是由共享 Node-API 桥生成的完整强类型 Core API,覆盖消息、 会话、社交、群组、附件任务、离线读取、在线状态、输入状态、设备会话、诊断和 请求取消。Renderer 默认只暴露会话页需要的最小白名单;购买方扩展 IPC 时应继续 逐方法校验参数,不能把 raw 或任意方法名透传给网页。
Native 制品布局
正式 npm 包按 Electron ABI/平台/架构提供 prebuilds,并携带匹配版本的动态库:
text
prebuilds/
├── darwin-arm64/
├── darwin-x64/
├── win32-x64/
└── linux-x64/源码联调可设置 node-gyp 的 xhim_native_root 指向包含 include/xhim/xhim_v1.h 和 lib/ 的 XHIM 安装目录。npm Stable 发布前必须用目标 Electron ABI 逐个 rebuild、签名并在空白 App 验证;普通 Node 编译通过不等于 Electron ABI 已验收。
以 macOS arm64 和 Electron 43.2.0 为例,发行人员执行:
bash
npm ci
npm run build:native -- \
--target=43.2.0 \
--dist-url=https://electronjs.org/headers \
--xhim_native_root=/absolute/path/to/xhim-install
npm run stage:prebuild -- /absolute/path/to/xhim-install
npm run smoke:native
npm pack --dry-runstage:prebuild 会把 N-API 模块及它实际依赖的 XHIM 动态库放到同一 prebuilds/<platform>-<arch> 目录。prepack 会在发布前检查当前目标的 prebuild 和法律文件,缺少任意一项都会失败,避免生成“能安装但一运行就找不到 Native 模块”的残缺 npm 包。
当前开发基线锁定 Electron 43.2.0;正式应用只允许使用 Electron 官方仍在维护 的三个 Stable major,并锁定已经修复已知安全公告的 patch 版本。