{"version":3,"file":"plugin.mjs","sources":["esm/index.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\r\nconst CorsBypass = registerPlugin('CorsBypass', {\r\n    web: () => import('./web').then(m => new m.CorsBypassWeb()),\r\n});\r\nexport * from './definitions';\r\nexport { CorsBypass };\r\n","import { WebPlugin } from '@capacitor/core';\r\n// MCP SDK imports with type assertions\r\nconst { Client } = require('@modelcontextprotocol/sdk/client/index.js');\r\nconst { SSEClientTransport } = require('@modelcontextprotocol/sdk/client/sse.js');\r\nexport class CorsBypassWeb extends WebPlugin {\r\n    constructor() {\r\n        super();\r\n        this.sseConnections = new Map();\r\n        this.wsConnections = new Map();\r\n        this.mcpClients = new Map();\r\n        this.mcpTransports = new Map();\r\n        this.connectionCounter = 0;\r\n        this.proxyServerUrl = null;\r\n        // Try to detect if a proxy server is available\r\n        this.detectProxyServer();\r\n    }\r\n    async detectProxyServer() {\r\n        const possibleUrls = [\r\n            'http://localhost:3002',\r\n            'http://127.0.0.1:3002',\r\n            'http://localhost:3001',\r\n            'http://127.0.0.1:3001',\r\n            'http://localhost:8080',\r\n            'http://127.0.0.1:8080'\r\n        ];\r\n        for (const url of possibleUrls) {\r\n            try {\r\n                const controller = new AbortController();\r\n                const timeoutId = setTimeout(() => controller.abort(), 1000);\r\n                const response = await fetch(`${url}/health`, {\r\n                    method: 'GET',\r\n                    signal: controller.signal\r\n                });\r\n                clearTimeout(timeoutId);\r\n                if (response.ok) {\r\n                    this.proxyServerUrl = url;\r\n                    console.log(`🔧 CORS Proxy server detected at: ${url}`);\r\n                    break;\r\n                }\r\n            }\r\n            catch (error) {\r\n                // Ignore errors, continue checking\r\n            }\r\n        }\r\n        if (!this.proxyServerUrl) {\r\n            console.warn('⚠️ No CORS proxy server detected. Some requests may fail due to CORS.');\r\n            console.log('💡 To enable full functionality, run: node web-proxy-server.js');\r\n        }\r\n    }\r\n    /**\r\n     * Set custom proxy server URL\r\n     */\r\n    setProxyServer(url) {\r\n        this.proxyServerUrl = url;\r\n        console.log(`🔧 Proxy server set to: ${url}`);\r\n    }\r\n    async request(options) {\r\n        const { url, method = 'GET', headers = {}, data, params, timeout = 30000, responseType = 'json', followRedirects = true, } = options;\r\n        // Build URL with query parameters\r\n        let requestUrl = url;\r\n        if (params) {\r\n            const urlParams = new URLSearchParams(params);\r\n            requestUrl += (url.includes('?') ? '&' : '?') + urlParams.toString();\r\n        }\r\n        // Use proxy server if available and URL is cross-origin\r\n        let finalUrl = requestUrl;\r\n        let fetchOptions = {\r\n            method,\r\n            headers,\r\n            redirect: followRedirects ? 'follow' : 'manual',\r\n        };\r\n        if (this.proxyServerUrl && this.isCrossOrigin(requestUrl)) {\r\n            console.log(`🔧 Using proxy server for: ${requestUrl}`);\r\n            finalUrl = `${this.proxyServerUrl}/proxy/${encodeURIComponent(requestUrl)}`;\r\n        }\r\n        // Create AbortController for timeout\r\n        const controller = new AbortController();\r\n        const timeoutId = setTimeout(() => controller.abort(), timeout);\r\n        fetchOptions.signal = controller.signal;\r\n        try {\r\n            // Add body for methods that support it\r\n            if (data && ['POST', 'PUT', 'PATCH'].includes(method)) {\r\n                if (typeof data === 'string') {\r\n                    fetchOptions.body = data;\r\n                }\r\n                else {\r\n                    fetchOptions.body = JSON.stringify(data);\r\n                    if (!headers['Content-Type']) {\r\n                        headers['Content-Type'] = 'application/json';\r\n                    }\r\n                }\r\n            }\r\n            const response = await fetch(finalUrl, fetchOptions);\r\n            clearTimeout(timeoutId);\r\n            // Parse response based on responseType\r\n            let responseData;\r\n            switch (responseType) {\r\n                case 'text':\r\n                    responseData = await response.text();\r\n                    break;\r\n                case 'blob':\r\n                    responseData = await response.blob();\r\n                    break;\r\n                case 'arraybuffer':\r\n                    responseData = await response.arrayBuffer();\r\n                    break;\r\n                case 'json':\r\n                default:\r\n                    try {\r\n                        responseData = await response.json();\r\n                    }\r\n                    catch {\r\n                        responseData = await response.text();\r\n                    }\r\n                    break;\r\n            }\r\n            // Convert Headers to plain object\r\n            const responseHeaders = {};\r\n            response.headers.forEach((value, key) => {\r\n                responseHeaders[key] = value;\r\n            });\r\n            return {\r\n                status: response.status,\r\n                statusText: response.statusText,\r\n                headers: responseHeaders,\r\n                data: responseData,\r\n                url: response.url,\r\n            };\r\n        }\r\n        catch (error) {\r\n            clearTimeout(timeoutId);\r\n            // If proxy failed and we have a proxy server, try direct request as fallback\r\n            if (this.proxyServerUrl && finalUrl.includes(this.proxyServerUrl)) {\r\n                console.warn(`⚠️ Proxy request failed, trying direct request: ${error}`);\r\n                return this.request({ ...options, url: requestUrl });\r\n            }\r\n            throw error;\r\n        }\r\n    }\r\n    async get(options) {\r\n        return this.request({ ...options, method: 'GET' });\r\n    }\r\n    async post(options) {\r\n        return this.request({ ...options, method: 'POST' });\r\n    }\r\n    async put(options) {\r\n        return this.request({ ...options, method: 'PUT' });\r\n    }\r\n    async patch(options) {\r\n        return this.request({ ...options, method: 'PATCH' });\r\n    }\r\n    async delete(options) {\r\n        return this.request({ ...options, method: 'DELETE' });\r\n    }\r\n    async startSSE(options) {\r\n        const connectionId = `sse_${++this.connectionCounter}`;\r\n        const { url, headers = {}, withCredentials = false, reconnectTimeout = 3000 } = options;\r\n        // Use proxy server for SSE if available and cross-origin\r\n        let sseUrl = url;\r\n        if (this.proxyServerUrl && this.isCrossOrigin(url)) {\r\n            console.log(`🔧 Using SSE proxy for: ${url}`);\r\n            sseUrl = `${this.proxyServerUrl}/sse-proxy/${encodeURIComponent(url)}`;\r\n        }\r\n        const eventSource = new EventSource(sseUrl);\r\n        this.sseConnections.set(connectionId, eventSource);\r\n        eventSource.onopen = () => {\r\n            this.notifyListeners('sseOpen', {\r\n                connectionId,\r\n                status: 'connected',\r\n            });\r\n        };\r\n        eventSource.onmessage = (event) => {\r\n            this.notifyListeners('sseMessage', {\r\n                connectionId,\r\n                type: 'message',\r\n                data: event.data,\r\n                id: event.lastEventId,\r\n            });\r\n        };\r\n        eventSource.onerror = () => {\r\n            this.notifyListeners('sseError', {\r\n                connectionId,\r\n                error: 'Connection error',\r\n            });\r\n        };\r\n        return { connectionId };\r\n    }\r\n    async stopSSE(options) {\r\n        const { connectionId } = options;\r\n        const connection = this.sseConnections.get(connectionId);\r\n        if (connection) {\r\n            connection.close();\r\n            this.sseConnections.delete(connectionId);\r\n            this.notifyListeners('sseClose', {\r\n                connectionId,\r\n                status: 'disconnected',\r\n            });\r\n        }\r\n    }\r\n    isCrossOrigin(url) {\r\n        try {\r\n            const targetUrl = new URL(url);\r\n            const currentUrl = new URL(window.location.href);\r\n            return targetUrl.origin !== currentUrl.origin;\r\n        }\r\n        catch {\r\n            return false;\r\n        }\r\n    }\r\n    async createSSEConnection(options) {\r\n        const connectionId = `sse_${++this.connectionCounter}`;\r\n        const { url, headers = {}, reconnect = {} } = options;\r\n        const { enabled: reconnectEnabled = true, initialDelay = 1000, maxDelay = 30000, maxAttempts = 10, } = reconnect;\r\n        let retryCount = 0;\r\n        let retryDelay = initialDelay;\r\n        const createConnection = () => {\r\n            // Use proxy server for SSE if available and cross-origin\r\n            let sseUrl = url;\r\n            if (this.proxyServerUrl && this.isCrossOrigin(url)) {\r\n                console.log(`🔧 Using SSE proxy for: ${url}`);\r\n                sseUrl = `${this.proxyServerUrl}/sse-proxy/${encodeURIComponent(url)}`;\r\n            }\r\n            const eventSource = new EventSource(sseUrl);\r\n            this.sseConnections.set(connectionId, eventSource);\r\n            eventSource.onopen = () => {\r\n                retryCount = 0;\r\n                retryDelay = initialDelay;\r\n                this.notifyListeners('sseConnectionChange', {\r\n                    connectionId,\r\n                    status: 'connected',\r\n                });\r\n            };\r\n            eventSource.onmessage = (event) => {\r\n                this.notifyListeners('sseMessage', {\r\n                    connectionId,\r\n                    type: 'message',\r\n                    data: event.data,\r\n                    id: event.lastEventId,\r\n                });\r\n            };\r\n            eventSource.onerror = () => {\r\n                this.notifyListeners('sseConnectionChange', {\r\n                    connectionId,\r\n                    status: 'error',\r\n                    error: 'Connection error',\r\n                });\r\n                if (reconnectEnabled && retryCount < maxAttempts) {\r\n                    setTimeout(() => {\r\n                        retryCount++;\r\n                        retryDelay = Math.min(retryDelay * 2, maxDelay);\r\n                        eventSource.close();\r\n                        createConnection();\r\n                    }, retryDelay);\r\n                }\r\n                else {\r\n                    this.sseConnections.delete(connectionId);\r\n                }\r\n            };\r\n            // Add custom event listeners\r\n            eventSource.addEventListener('error', (event) => {\r\n                this.notifyListeners('sseMessage', {\r\n                    connectionId,\r\n                    type: 'error',\r\n                    data: 'Connection error',\r\n                });\r\n            });\r\n        };\r\n        this.notifyListeners('sseConnectionChange', {\r\n            connectionId,\r\n            status: 'connecting',\r\n        });\r\n        createConnection();\r\n        return {\r\n            connectionId,\r\n            status: 'connecting',\r\n        };\r\n    }\r\n    async closeSSEConnection(options) {\r\n        const { connectionId } = options;\r\n        const connection = this.sseConnections.get(connectionId);\r\n        if (connection) {\r\n            connection.close();\r\n            this.sseConnections.delete(connectionId);\r\n            this.notifyListeners('sseConnectionChange', {\r\n                connectionId,\r\n                status: 'disconnected',\r\n            });\r\n        }\r\n    }\r\n    async createWebSocketConnection(options) {\r\n        const connectionId = `ws_${++this.connectionCounter}`;\r\n        const { url, protocols, headers, timeout = 10000 } = options;\r\n        return new Promise((resolve, reject) => {\r\n            const ws = new WebSocket(url, protocols);\r\n            this.wsConnections.set(connectionId, ws);\r\n            const timeoutId = setTimeout(() => {\r\n                ws.close();\r\n                this.wsConnections.delete(connectionId);\r\n                reject(new Error('WebSocket connection timeout'));\r\n            }, timeout);\r\n            ws.onopen = () => {\r\n                clearTimeout(timeoutId);\r\n                this.notifyListeners('webSocketConnectionChange', {\r\n                    connectionId,\r\n                    status: 'connected',\r\n                });\r\n                resolve({\r\n                    connectionId,\r\n                    status: 'connected',\r\n                });\r\n            };\r\n            ws.onmessage = (event) => {\r\n                this.notifyListeners('webSocketMessage', {\r\n                    connectionId,\r\n                    data: event.data,\r\n                    type: typeof event.data === 'string' ? 'text' : 'binary',\r\n                });\r\n            };\r\n            ws.onerror = () => {\r\n                clearTimeout(timeoutId);\r\n                this.notifyListeners('webSocketConnectionChange', {\r\n                    connectionId,\r\n                    status: 'error',\r\n                    error: 'WebSocket connection error',\r\n                });\r\n            };\r\n            ws.onclose = () => {\r\n                this.wsConnections.delete(connectionId);\r\n                this.notifyListeners('webSocketConnectionChange', {\r\n                    connectionId,\r\n                    status: 'disconnected',\r\n                });\r\n            };\r\n            this.notifyListeners('webSocketConnectionChange', {\r\n                connectionId,\r\n                status: 'connecting',\r\n            });\r\n        });\r\n    }\r\n    async closeWebSocketConnection(options) {\r\n        const { connectionId } = options;\r\n        const connection = this.wsConnections.get(connectionId);\r\n        if (connection) {\r\n            connection.close();\r\n            this.wsConnections.delete(connectionId);\r\n        }\r\n    }\r\n    async sendWebSocketMessage(options) {\r\n        const { connectionId, message } = options;\r\n        const connection = this.wsConnections.get(connectionId);\r\n        if (connection && connection.readyState === WebSocket.OPEN) {\r\n            connection.send(message);\r\n        }\r\n        else {\r\n            throw new Error('WebSocket connection not found or not open');\r\n        }\r\n    }\r\n    // ===== MCP Protocol Methods =====\r\n    async createMCPClient(options) {\r\n        const connectionId = `mcp_${++this.connectionCounter}`;\r\n        try {\r\n            // 创建SSE传输层\r\n            let transport;\r\n            if (this.proxyServerUrl && this.isCrossOrigin(options.sseUrl)) {\r\n                // 使用代理服务器\r\n                const proxyUrl = `${this.proxyServerUrl}/sse-proxy/${encodeURIComponent(options.sseUrl)}`;\r\n                transport = new SSEClientTransport(new URL(proxyUrl));\r\n            }\r\n            else {\r\n                // 直接连接\r\n                transport = new SSEClientTransport(new URL(options.sseUrl));\r\n            }\r\n            // 创建MCP客户端\r\n            const client = new Client({\r\n                name: options.clientInfo.name,\r\n                version: options.clientInfo.version,\r\n            }, {\r\n                capabilities: {\r\n                    roots: options.capabilities?.roots ? { listChanged: true } : undefined,\r\n                    sampling: options.capabilities?.sampling ? {} : undefined,\r\n                }\r\n            });\r\n            // 连接到服务器\r\n            await client.connect(transport);\r\n            // 存储客户端和传输层\r\n            this.mcpClients.set(connectionId, client);\r\n            this.mcpTransports.set(connectionId, transport);\r\n            console.log(`✅ MCP客户端已连接: ${connectionId}`);\r\n            return {\r\n                connectionId,\r\n                status: 'connected',\r\n                serverCapabilities: client.getServerCapabilities(),\r\n                protocolVersion: '2025-03-26'\r\n            };\r\n        }\r\n        catch (error) {\r\n            console.error(`❌ MCP客户端连接失败:`, error);\r\n            throw new Error(`Failed to create MCP client: ${error}`);\r\n        }\r\n    }\r\n    async listMCPResources(options) {\r\n        const client = this.mcpClients.get(options.connectionId);\r\n        if (!client) {\r\n            throw new Error('MCP client not found');\r\n        }\r\n        try {\r\n            const result = await client.listResources(options.cursor ? { cursor: options.cursor } : {});\r\n            return {\r\n                resources: result.resources || [],\r\n                nextCursor: result.nextCursor\r\n            };\r\n        }\r\n        catch (error) {\r\n            throw new Error(`Failed to list MCP resources: ${error}`);\r\n        }\r\n    }\r\n    async readMCPResource(options) {\r\n        const client = this.mcpClients.get(options.connectionId);\r\n        if (!client) {\r\n            throw new Error('MCP client not found');\r\n        }\r\n        try {\r\n            const result = await client.readResource({ uri: options.uri });\r\n            return {\r\n                uri: options.uri,\r\n                mimeType: result.contents?.[0]?.mimeType || 'text/plain',\r\n                text: result.contents?.[0]?.text || '',\r\n                blob: result.contents?.[0]?.data\r\n            };\r\n        }\r\n        catch (error) {\r\n            throw new Error(`Failed to read MCP resource: ${error}`);\r\n        }\r\n    }\r\n    async listMCPTools(options) {\r\n        const client = this.mcpClients.get(options.connectionId);\r\n        if (!client) {\r\n            throw new Error('MCP client not found');\r\n        }\r\n        try {\r\n            const result = await client.listTools(options.cursor ? { cursor: options.cursor } : {});\r\n            return {\r\n                tools: result.tools || [],\r\n                nextCursor: result.nextCursor\r\n            };\r\n        }\r\n        catch (error) {\r\n            throw new Error(`Failed to list MCP tools: ${error}`);\r\n        }\r\n    }\r\n    async callMCPTool(options) {\r\n        const client = this.mcpClients.get(options.connectionId);\r\n        if (!client) {\r\n            throw new Error('MCP client not found');\r\n        }\r\n        try {\r\n            const result = await client.callTool({\r\n                name: options.name,\r\n                arguments: options.arguments || {}\r\n            });\r\n            return {\r\n                content: result.content || [],\r\n                isError: result.isError || false\r\n            };\r\n        }\r\n        catch (error) {\r\n            throw new Error(`Failed to call MCP tool: ${error}`);\r\n        }\r\n    }\r\n    async listMCPPrompts(options) {\r\n        const client = this.mcpClients.get(options.connectionId);\r\n        if (!client) {\r\n            throw new Error('MCP client not found');\r\n        }\r\n        try {\r\n            const result = await client.listPrompts(options.cursor ? { cursor: options.cursor } : {});\r\n            return {\r\n                prompts: result.prompts || [],\r\n                nextCursor: result.nextCursor\r\n            };\r\n        }\r\n        catch (error) {\r\n            throw new Error(`Failed to list MCP prompts: ${error}`);\r\n        }\r\n    }\r\n    async getMCPPrompt(options) {\r\n        const client = this.mcpClients.get(options.connectionId);\r\n        if (!client) {\r\n            throw new Error('MCP client not found');\r\n        }\r\n        try {\r\n            const result = await client.getPrompt({\r\n                name: options.name,\r\n                arguments: options.arguments || {}\r\n            });\r\n            return {\r\n                description: result.description || '',\r\n                messages: result.messages || []\r\n            };\r\n        }\r\n        catch (error) {\r\n            throw new Error(`Failed to get MCP prompt: ${error}`);\r\n        }\r\n    }\r\n    async sendMCPSampling(options) {\r\n        // MCP SDK doesn't directly support sampling, this would need to be implemented\r\n        // based on the specific server's sampling capabilities\r\n        throw new Error('MCP sampling not yet implemented with SDK');\r\n    }\r\n}\r\n"],"names":[],"mappings":"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"}