37 lines
1.6 KiB
JavaScript
37 lines
1.6 KiB
JavaScript
/**
|
||
* AgentMail Electron preload —— 通过 contextBridge 暴露安全 API 给渲染进程。
|
||
*
|
||
* 渲染进程是 client/electron/src 的 React,跑在 sandbox: true 下(无 nodeIntegration)。
|
||
* 需要桌面能力时(文件选择、通知、托盘角标、SSE 转发)走这里暴露的桥。
|
||
*
|
||
* Phase 1 只暴露最小集;后续 Phase 逐步加。
|
||
*/
|
||
|
||
const { contextBridge, ipcRenderer } = require('electron');
|
||
|
||
// 注入 API 基地址与 token:渲染进程的 config.ts 在读 window.__AGENTMAIL_API_BASE__
|
||
// 与 __AGENTMAIL_TOKEN__ 时拿到它们,于是现有 client.ts/sse.ts **零改动**复用。
|
||
// 这两个值由主进程在创建窗口时通过附加参数传进来(见 main.cjs 的 additionalArguments)。
|
||
function getInjected(name) {
|
||
const prefix = `--agentmail-${name}=`;
|
||
const arg = process.argv.find(a => a.startsWith(prefix));
|
||
return arg ? arg.slice(prefix.length) : undefined;
|
||
}
|
||
|
||
contextBridge.exposeInMainWorld('__AGENTMAIL_API_BASE__', getInjected('api-base') || 'http://127.0.0.1:8180/api/v1');
|
||
contextBridge.exposeInMainWorld('__AGENTMAIL_TOKEN__', getInjected('token') || undefined);
|
||
|
||
contextBridge.exposeInMainWorld('agentmail', {
|
||
/** Gateway 基础地址(主进程 env 或默认 127.0.0.1:8180) */
|
||
gatewayUrl: () => ipcRenderer.invoke('get-gateway-url'),
|
||
|
||
/** 版本信息(渲染进程可显示在 About 页) */
|
||
versions: {
|
||
electron: process.versions.electron,
|
||
chrome: process.versions.chrome,
|
||
node: process.versions.node,
|
||
},
|
||
|
||
/** 平台标识:win32 / linux / darwin */
|
||
platform: process.platform,
|
||
}); |