Skip to content

XHIM Electron SDK

Electron 适配由三层组成:

  1. Main Process 加载签名的 xhim_napi.nodexhim_core_v1
  2. Preload 用 contextBridge 暴露固定白名单;
  3. 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.hlib/ 的 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-run

stage:prebuild 会把 N-API 模块及它实际依赖的 XHIM 动态库放到同一 prebuilds/<platform>-<arch> 目录。prepack 会在发布前检查当前目标的 prebuild 和法律文件,缺少任意一项都会失败,避免生成“能安装但一运行就找不到 Native 模块”的残缺 npm 包。

当前开发基线锁定 Electron 43.2.0;正式应用只允许使用 Electron 官方仍在维护 的三个 Stable major,并锁定已经修复已知安全公告的 patch 版本。

XHIM 客户端 SDK 与服务端文档