Skip to main content
Glama
preload.ts4.46 kB
import { contextBridge, ipcRenderer } from 'electron' // Electron API를 안전하게 노출 contextBridge.exposeInMainWorld('electronAPI', { // IPC 통신 ping: () => ipcRenderer.invoke('ping'), getAppInfo: () => ipcRenderer.invoke('get-app-info'), // Database API getServers: () => ipcRenderer.invoke('api:servers'), getServerMessages: (serverId: number) => ipcRenderer.invoke('api:servers:messages', serverId), getEngineResults: () => ipcRenderer.invoke('api:engine-results'), getEngineResultsByEvent: (rawEventId: number) => ipcRenderer.invoke('api:engine-results:by-event', rawEventId), // WebSocket events - subscribe to real-time updates onWebSocketUpdate: (callback: (message: any) => void) => { const subscription = (_event: any, message: any) => callback(message) ipcRenderer.on('websocket:update', subscription) // Return unsubscribe function return () => { ipcRenderer.removeListener('websocket:update', subscription) } }, // Blocking decision - send user's decision back to server sendBlockingDecision: (requestId: string, decision: 'allow' | 'block') => ipcRenderer.invoke('blocking:decision', requestId, decision), // Blocking window APIs getBlockingData: () => ipcRenderer.invoke('blocking:get-data'), closeBlockingWindow: () => ipcRenderer.invoke('blocking:close'), resizeBlockingWindow: (width: number, height: number) => ipcRenderer.invoke('blocking:resize', width, height), // Tool safety API updateToolSafety: (mcpTag: string, toolName: string, safety: number) => ipcRenderer.invoke('api:tool:update-safety', mcpTag, toolName, safety), // Config APIs getConfig: () => ipcRenderer.invoke('config:get'), saveConfig: (config: any) => ipcRenderer.invoke('config:save', config), // Env APIs getEnv: () => ipcRenderer.invoke('env:get'), saveEnv: (env: any) => ipcRenderer.invoke('env:save', env), // App control restartApp: () => ipcRenderer.invoke('app:restart'), // Database management exportDatabase: () => ipcRenderer.invoke('database:export'), deleteDatabase: () => ipcRenderer.invoke('database:delete'), // Custom Rules APIs getCustomRules: (engineName: string) => ipcRenderer.invoke('api:custom-rules:get', engineName), addCustomRule: (data: any) => ipcRenderer.invoke('api:custom-rules:add', data), deleteCustomRule: (ruleId: number) => ipcRenderer.invoke('api:custom-rules:delete', ruleId), toggleCustomRule: (ruleId: number, enabled: boolean) => ipcRenderer.invoke('api:custom-rules:toggle', ruleId, enabled), // 필요에 따라 추가 API 노출 platform: process.platform, versions: { node: process.versions.node, chrome: process.versions.chrome, electron: process.versions.electron, }, }) // TypeScript 타입 정의를 위한 전역 인터페이스 declare global { interface Window { electronAPI: { ping: () => Promise<string> getAppInfo: () => Promise<{ version: string name: string platform: string }> getServers: () => Promise<any[]> getServerMessages: (serverId: number) => Promise<any[]> getEngineResults: () => Promise<any[]> getEngineResultsByEvent: (rawEventId: number) => Promise<any[]> onWebSocketUpdate: (callback: (message: any) => void) => () => void sendBlockingDecision: (requestId: string, decision: 'allow' | 'block') => Promise<void> getBlockingData: () => Promise<any> closeBlockingWindow: () => Promise<void> resizeBlockingWindow: (width: number, height: number) => Promise<void> updateToolSafety: (mcpTag: string, toolName: string, safety: number) => Promise<boolean> getConfig: () => Promise<any> saveConfig: (config: any) => Promise<boolean> getEnv: () => Promise<any> saveEnv: (env: any) => Promise<boolean> restartApp: () => Promise<void> exportDatabase: () => Promise<{ success: boolean; filePath?: string; canceled?: boolean; error?: string }> deleteDatabase: () => Promise<{ success: boolean; message?: string; error?: string }> getCustomRules: (engineName: string) => Promise<any> addCustomRule: (data: any) => Promise<any> deleteCustomRule: (ruleId: number) => Promise<any> toggleCustomRule: (ruleId: number, enabled: boolean) => Promise<any> platform: string versions: { node: string chrome: string electron: string } } } } export {}

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/seungwon9201/MCP-Dandan'

If you have feedback or need assistance with the MCP directory API, please join our Discord server