UNPKG

levisnkyyy-browser-use-mcp

Version:

MCP server for Browser-Use API

96 lines 3.27 kB
import axios from 'axios'; import WebSocket from 'ws'; export class BrowserUseClient { api; constructor(baseURL, apiKey) { this.api = axios.create({ baseURL, headers: apiKey ? { 'X-API-Key': apiKey } : {}, }); } async createTask(params) { const { data } = await this.api.post('/api/v1/tasks', params); return data; } async createTaskSync(params) { const { data } = await this.api.post('/api/v1/tasks/sync', params); return data; } async getTask(taskId) { const { data } = await this.api.get(`/api/v1/tasks/${taskId}`); return data; } async listTasks() { const { data } = await this.api.get('/api/v1/tasks'); return data.tasks; } async cancelTask(taskId) { await this.api.post(`/api/v1/tasks/${taskId}/cancel`); } async pauseTask(taskId) { await this.api.post(`/api/v1/tasks/${taskId}/pause`); } async getTaskHistory(taskId) { const { data } = await this.api.get(`/api/v1/tasks/${taskId}/history`); return data.history; } async getScreenshot(taskId, params) { const { data } = await this.api.post(`/api/v1/tasks/${taskId}/screenshot`, params); return data; } async createBrowserSession(config) { const { data } = await this.api.post('/api/v1/browsers', config); return data; } async closeBrowserSession(sessionId) { await this.api.delete(`/api/v1/browsers/${sessionId}`); } async streamTask(taskId, onMessage) { return new Promise((resolve, reject) => { const wsUrl = this.api.defaults.baseURL.replace('http', 'ws') + `/api/v1/tasks/${taskId}/stream`; const ws = new WebSocket(wsUrl, { headers: this.api.defaults.headers, }); ws.on('message', (data) => { try { const message = JSON.parse(data.toString()); onMessage(message); if (message.type === 'result' || message.type === 'error') { ws.close(); } } catch (error) { console.error('Failed to parse WebSocket message:', error); } }); ws.on('close', () => { resolve(); }); ws.on('error', (error) => { reject(error); }); // Send ping every 30 seconds to keep connection alive const pingInterval = setInterval(() => { if (ws.readyState === WebSocket.OPEN) { ws.ping(); } }, 30000); ws.on('close', () => { clearInterval(pingInterval); }); }); } async checkHealth() { const { data } = await this.api.get('/api/v1/health'); return data; } async scanUrl(params) { const { data } = await this.api.post('/api/v1/scan', params); return data; } async getSnapshot(taskId) { const { data } = await this.api.get(`/api/v1/tasks/${taskId}/snapshot`); return data; } } //# sourceMappingURL=client.js.map