UNPKG

@discreted/vue-browser-tabs

Version:
2 lines (1 loc) 2.1 kB
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class o{constructor(){this.requestId=0,this.pendingRequests=new Map,this.tools=new Map,this.isConnected=!1,this.handleMessage=e=>{if(e.source!==this.parentWindow)return;const t=e.data;if(t&&t.type==="MCP_PROXY_RESPONSE"){const{id:r,result:s,error:i}=t.data,n=this.pendingRequests.get(r);n&&(this.pendingRequests.delete(r),i?n.reject(new Error(i)):n.resolve(s))}if(t&&t.type==="MCP_PROXY_TOOL_CALL"){const{id:r,toolName:s,args:i}=t.data;this.handleToolCall(r,s,i)}},this.parentWindow=window.parent||window.opener||window,this.targetOrigin="*",window.addEventListener("message",this.handleMessage)}sendRequest(e,t={}){return!this.isConnected&&e!=="ping"?Promise.reject(new Error("MCP代理客户端未连接到父应用")):new Promise((r,s)=>{const i=++this.requestId;this.pendingRequests.set(i,{resolve:r,reject:s});const n={type:"MCP_PROXY_REQUEST",data:{id:i,method:e,params:t}};this.parentWindow.postMessage(n,this.targetOrigin),setTimeout(()=>{this.pendingRequests.has(i)&&(this.pendingRequests.delete(i),s(new Error(`Request timeout: ${e}`)))},5e3)})}async handleToolCall(e,t,r){try{const s=this.tools.get(t);if(!s){this.parentWindow.postMessage({type:"MCP_PROXY_TOOL_CALL_RESPONSE",data:{id:e,error:`Tool not found: ${t}`}},this.targetOrigin);return}const i=await s.implementation(r);this.parentWindow.postMessage({type:"MCP_PROXY_TOOL_CALL_RESPONSE",data:{id:e,result:i}},this.targetOrigin)}catch(s){this.parentWindow.postMessage({type:"MCP_PROXY_TOOL_CALL_RESPONSE",data:{id:e,error:s.message||"Unknown error occurred"}},this.targetOrigin)}}async registerTool(e,t){const{description:r,parameters:s}=t;this.tools.set(e,t);try{await this.sendRequest("registerTool",{name:e,description:r,parameters:s})}catch(i){throw this.tools.delete(e),i}}async callTool(e,t={}){return await this.sendRequest("callTool",{name:e,arguments:t})}async listTools(){return await this.sendRequest("listTools")}setTargetOrigin(e){this.targetOrigin=e,this.isConnected=!0}get connected(){return this.isConnected}}exports.McpProxyClient=o;