mcp2service 1.0.6 → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.js +4 -4
- package/dist/cjs/index.js.map +6 -5
- package/dist/esm/index.js +4 -4
- package/dist/esm/index.js.map +6 -5
- package/dist/types/adapters/transformer.d.ts +13 -0
- package/dist/types/tests/transformer.test.d.ts +1 -0
- package/dist/types/types.d.ts +6 -1
- package/dist/types/validation.d.ts +50 -0
- package/package.json +1 -1
package/dist/cjs/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
var
|
|
1
|
+
var st=Object.create;var{getPrototypeOf:ot,defineProperty:_,getOwnPropertyNames:Y,getOwnPropertyDescriptor:ft}=Object,Z=Object.prototype.hasOwnProperty;var A=(t,e,n)=>{n=t!=null?st(ot(t)):{};let i=e||!t||!t.__esModule?_(n,"default",{value:t,enumerable:!0}):n;for(let s of Y(t))if(!Z.call(i,s))_(i,s,{get:()=>t[s],enumerable:!0});return i},X=new WeakMap,ut=(t)=>{var e=X.get(t),n;if(e)return e;if(e=_({},"__esModule",{value:!0}),t&&typeof t==="object"||typeof t==="function")Y(t).map((i)=>!Z.call(e,i)&&_(e,i,{get:()=>t[i],enumerable:!(n=ft(t,i))||n.enumerable}));return X.set(t,e),e};var dt=(t,e)=>{for(var n in e)_(t,n,{get:e[n],enumerable:!0,configurable:!0,set:(i)=>e[n]=()=>i})};var At={};dt(At,{grpcAdapterConfigSchema:()=>et,graphqlAdapterConfigSchema:()=>z,defaultAdapterFactory:()=>B,McpProxy:()=>it,HttpAdapter:()=>b,GrpcAdapter:()=>S,GraphQLAdapter:()=>Q,DefaultAdapterFactory:()=>D});module.exports=ut(At);var rt=require("@kingecg/fastmcp");class T extends Error{code;statusCode;details;constructor(t,e,n,i){super(t);this.code=e;this.statusCode=n;this.details=i;this.name="MCPError"}}class g extends T{constructor(t,e){super(t,"VALIDATION_ERROR",400,e);this.name="ValidationError"}}class p extends T{constructor(t,e){super(t,"CONFIGURATION_ERROR",500,e);this.name="ConfigurationError"}}class d extends T{adapterName;constructor(t,e,n){super(t,"ADAPTER_ERROR",502,{adapterName:e,...n});this.adapterName=e;this.name="AdapterError"}}var qt=require("axios"),W=A(require("axios"));var r=require("zod");var ct=r.z.custom((t)=>typeof t==="function",{message:"authedFn must be a function that returns a Promise"}),at=r.z.custom((t)=>typeof t==="function",{message:"execute must be a function"}),y=r.z.union([r.z.literal("string"),r.z.literal("number"),r.z.literal("boolean"),r.z.literal("any")]),F=r.z.string().regex(/^(string|number|boolean|any):/),q=r.z.object({type:y,description:r.z.string().optional()}),k=r.z.lazy(()=>r.z.object({type:r.z.literal("object"),description:r.z.string().optional(),properties:r.z.record(r.z.string(),r.z.union([y,q,k,G,F,r.z.record(r.z.string(),y),r.z.array(y)]))})),G=r.z.lazy(()=>r.z.object({type:r.z.literal("array"),description:r.z.string().optional(),items:r.z.union([y,q,k,G,F,r.z.record(r.z.string(),y),r.z.array(y)])})),N=r.z.lazy(()=>r.z.union([q,k,G,F])),U=r.z.union([y,q,k,G,r.z.record(r.z.string(),y),r.z.array(y)]),ht=r.z.object({type:r.z.string().min(1,"Tool type is required"),description:r.z.string().optional(),params:U.optional(),outputs:U.optional(),options:r.z.record(r.z.string(),r.z.any()),execute:at.optional(),resultProcessRule:r.z.object({resultType:r.z.enum(["audio","image","resource","resourceLink","text","struct"]),processMethod:r.z.enum(["passThrough","selector","fixedText","transform"]),transforms:r.z.array(r.z.union([r.z.object({name:r.z.string(),params:r.z.record(r.z.string(),r.z.any()).optional()}),r.z.function({input:r.z.any(),output:r.z.any()})])).optional(),selector:r.z.union([r.z.string().optional(),r.z.record(r.z.string(),r.z.string())]).optional(),fixedResponse:r.z.object({success:r.z.string(),error:r.z.string()}).optional()}).optional()}),j=r.z.object({name:r.z.string().min(1,"Name is required"),version:r.z.string().regex(/^\d+\.\d+\.\d+$/,"Version must be in format x.y.z"),headers:r.z.array(r.z.string()).optional(),authedFn:ct.optional(),transport:r.z.object({httpStream:r.z.object({enableJsonResponse:r.z.boolean().optional(),endpoint:r.z.string().regex(/^\/\w+/,"Endpoint must start with /").optional(),eventStore:r.z.any().optional(),host:r.z.string().optional(),port:r.z.number().int().min(1).max(65535),stateless:r.z.boolean().optional()}).optional(),transportType:r.z.enum(["httpStream","stdio"]).optional()}).partial(),tools:r.z.record(r.z.string(),ht)}).strict(),It=r.z.object({}).passthrough(),P=r.z.object({url:r.z.string().url("Valid URL is required"),method:r.z.enum(["GET","POST","PUT","DELETE","PATCH"]).default("POST"),headers:r.z.record(r.z.string(),r.z.string()).default({}),timeout:r.z.number().int().positive().optional(),retry:r.z.object({attempts:r.z.number().int().min(1).max(10).default(3),backoff:r.z.number().positive().default(1000)}).optional()});function C(t,e,n){let i=t.safeParse(e);if(!i.success){let s=i.error.issues.map((f)=>({path:f.path.join("."),message:f.message,code:f.code,receivedValue:f.received,expected:f.expected})),o=n?`${n} validation failed:
|
|
2
2
|
`:`Validation failed:
|
|
3
|
-
`;throw o+=
|
|
4
|
-
`),new C(o,{details:r})}return n.data}var L=I(require("lodash"));function q(t,e){switch(e.resultType){case"text":return ct(t,e);case"struct":return ft(t,e);default:return}}function ft(t,e){let i={type:"struct",structuredContent:{}};if(e.processMethod==="passThrough")i.structuredContent=t;if(e.processMethod==="selector"){if(typeof e.selector==="string")i.structuredContent=L.get(t,e.selector,null);else if(typeof e.selector==="object"&&e.selector)for(let n in e.selector){let r=e.selector[n]||".",o=L.get(t,r);L.set(i.structuredContent,n,o)}}return i}function ct(t,e){let i={text:t,type:"text"};if(e.processMethod==="selector")if(typeof e.selector!=="string")i.text="Error:For text content, selector must be a string";else{let n=L.get(t,e.selector);if(n)i.text=n;else i.text="Error:Selector not found"}else if(e.processMethod==="passThrough")i.text=typeof t==="string"?t:JSON.stringify(t);else if(e.processMethod==="fixedText"){if(e.fixedResponse)i.text=t instanceof Error?e.fixedResponse.error:e.fixedResponse.success}return i}class Q{url="";method="POST";headers={};axiosConfig={};timeout;retryConfig;resultRule;config(t,e=void 0){this.resultRule=e;let i=x(Z,t,"HTTP adapter configuration");this.url=i.url,this.method=i.method,this.headers=i.headers,this.timeout=i.timeout,this.retryConfig=i.retry,this.axiosConfig={method:this.method,url:this.url,headers:this.headers,timeout:this.timeout}}async executeWithRetry(t){if(!this.retryConfig)return t();let{attempts:e,backoff:i}=this.retryConfig,n;for(let r=1;r<=e;r++)try{return await t()}catch(o){if(n=o,r<e)await new Promise((u)=>setTimeout(u,i*r))}throw n}async call(t,e){let i=async()=>{let n={...this.axiosConfig};if(this.method.toUpperCase()==="GET")n.params=t;else n.data=t;try{let o=(await S.default.request(n)).data;if(this.resultRule)return o=q(o,this.resultRule),o;return}catch(r){if(S.default.isAxiosError(r))throw new f(`HTTP request failed: ${r.message}`,"http",{url:this.url,method:this.method,statusCode:r.response?.status,responseData:r.response?.data});throw new f(`Request failed: ${r.message}`,"http",{url:this.url,method:this.method})}};return this.executeWithRetry(i)}}var H=I(require("axios"));var c=require("zod");var U=c.z.object({endpoint:c.z.string().url("Valid GraphQL endpoint URL is required"),headers:c.z.record(c.z.string(),c.z.string()).default({}),timeout:c.z.number().int().positive().optional(),operationName:c.z.string().optional(),variables:c.z.record(c.z.string(),c.z.any()).optional(),retry:c.z.object({attempts:c.z.number().int().min(1).max(10).default(3),backoff:c.z.number().positive().default(1000)}).optional()});class T{adapterConfig=null;endpoint="";headers={};timeout;retryConfig;operationName;defaultVariables;resultRule;config(t,e=void 0){this.resultRule=e,this.adapterConfig=x(U,t,"GraphQL adapter configuration"),this.endpoint=this.adapterConfig.endpoint,this.headers=this.adapterConfig.headers,this.timeout=this.adapterConfig.timeout,this.retryConfig=this.adapterConfig.retry,this.operationName=this.adapterConfig.operationName,this.defaultVariables=this.adapterConfig.variables}async executeWithRetry(t){if(!this.retryConfig)return t();let{attempts:e,backoff:i}=this.retryConfig,n;for(let r=1;r<=e;r++)try{return await t()}catch(o){if(n=o,r<e)await new Promise((u)=>setTimeout(u,i*r))}throw n}async call(t,e){if(!this.adapterConfig)throw new f("GraphQL adapter not configured","graphql");let i=async()=>{try{let n=t.query||t.body||t.data;if(!n)throw new C("GraphQL query is required",{args:t});let r=t.variables||this.defaultVariables||{},o=t.operationName||this.operationName,u={query:typeof n==="string"?n:JSON.stringify(n),variables:r,operationName:o},d=await H.default.post(this.endpoint,u,{headers:{"Content-Type":"application/json",...this.headers},timeout:this.timeout});if(d.data.errors&&Array.isArray(d.data.errors)&&d.data.errors.length>0)throw new f(`GraphQL errors: ${d.data.errors.map((R)=>R.message).join(", ")}`,"graphql",{endpoint:this.endpoint,errors:d.data.errors});let g=d.data.data||d.data;if(this.resultRule)return g=q(g,this.resultRule),g;return}catch(n){if(H.default.isAxiosError(n))throw new f(`GraphQL request failed: ${n.message}`,"graphql",{endpoint:this.endpoint,statusCode:n.response?.status,responseData:n.response?.data});if(n instanceof C||n instanceof f)throw n;throw new f(`GraphQL request failed: ${n.message}`,"graphql",{endpoint:this.endpoint})}};return this.executeWithRetry(i)}}var y=I(require("@grpc/grpc-js")),N=I(require("@grpc/proto-loader"));var h=require("zod");var j=h.z.object({protoPath:h.z.string().min(1,"Proto file path is required"),serviceName:h.z.string().min(1,"Service name is required"),methodName:h.z.string().min(1,"Method name is required"),address:h.z.string().min(1,"gRPC server address is required"),credentials:h.z.enum(["insecure","ssl"]).default("insecure"),timeout:h.z.number().int().positive().optional(),metadata:h.z.record(h.z.string(),h.z.string()).optional(),retry:h.z.object({attempts:h.z.number().int().min(1).max(10).default(3),backoff:h.z.number().positive().default(1000)}).optional()});class V{adapterConfig=null;client=null;packageDefinition=null;proto=null;resultRule;config(t,e=void 0){this.resultRule=e,this.adapterConfig=x(j,t,"gRPC adapter configuration"),this._loadProto()}_loadProto(){if(!this.adapterConfig)throw new f("gRPC adapter not configured","grpc");try{let{protoPath:t}=this.adapterConfig,e=N.loadSync(t,{keepCase:!0,longs:String,enums:String,defaults:!0,oneofs:!0}),i=y.loadPackageDefinition(e);this.packageDefinition=i}catch(t){throw new f(`Failed to load proto file: ${t.message}`,"grpc",{protoPath:this.adapterConfig.protoPath})}}_getClient(){if(!this.adapterConfig||!this.packageDefinition)throw new f("gRPC adapter not properly configured","grpc");if(this.client)return this.client;let{serviceName:t,address:e,credentials:i}=this.adapterConfig;try{let n=t.split("."),r=this.packageDefinition;for(let u of n)if(r=r[u],!r)throw Error(`Service part '${u}' not found in proto definition`);let o=i==="ssl"?y.credentials.createSsl():y.credentials.createInsecure();return this.client=new r(e,o),this.client}catch(n){throw new f(`Failed to create gRPC client: ${n.message}`,"grpc",{serviceName:t,address:e})}}async executeWithRetry(t){if(!this.adapterConfig?.retry)return t();let{attempts:e,backoff:i}=this.adapterConfig.retry,n;for(let r=1;r<=e;r++)try{return await t()}catch(o){if(n=o,r<e)await new Promise((u)=>setTimeout(u,i*r))}throw n}async call(t,e){if(!this.adapterConfig)throw new f("gRPC adapter not configured","grpc");let i=async()=>{try{let r=this._getClient(),{methodName:o,metadata:u,timeout:d}=this.adapterConfig,g=new y.Metadata;if(u)Object.entries(u).forEach(([A,E])=>{g.add(A,E)});let R=r[o];if(typeof R!=="function")throw Error(`Method '${o}' not found on service`);return new Promise((A,E)=>{let $=d?Date.now()+d:void 0;R.call(r,t,g,{deadline:$},(G,M)=>{if(G)E(new f(`gRPC call failed: ${G.message}`,"grpc",{methodName:o,code:G.code,details:G.details}));else try{A(M)}catch(Rt){A(String(M))}})})}catch(r){if(r instanceof f||r instanceof C)throw r;throw new f(`gRPC request failed: ${r.message}`,"grpc",{methodName:this.adapterConfig?.methodName,serviceName:this.adapterConfig?.serviceName})}},n=await this.executeWithRetry(i);if(this.resultRule)return n=q(n,this.resultRule),n;return}}class W{adapterRegistry=new Map;constructor(){this.registerDefaultAdapters()}registerDefaultAdapters(){this.registerAdapter("http",Q),this.registerAdapter("graphql",T),this.registerAdapter("grpc",V)}createAdapter(t,e,i){let n=this.adapterRegistry.get(t);if(!n)throw new p(`Unsupported adapter type: ${t}`,{supportedTypes:this.getSupportedTypes()});try{let r=new n;return r.config(e,i),r}catch(r){if(r instanceof p)throw r;throw new p(`Failed to create adapter of type '${t}': ${r.message}`,{adapterType:t,options:e})}}registerAdapter(t,e){if(this.adapterRegistry.has(t))throw new p(`Adapter type '${t}' is already registered`);this.adapterRegistry.set(t,e)}getSupportedTypes(){return Array.from(this.adapterRegistry.keys())}}var F=new W;var l=I(require("zod"));function P(t){let{name:e,version:i,headers:n,authedFn:r,transport:o,tools:u}=t,d={};if(u&&Object.keys(u).length>0)for(let R in u){let{params:A,outputs:E,...$}=u[R];if(d[R]={...$},A)d[R].params=w(A);if(E)d[R].outputs=w(E)}let g={transportType:"stdio"};if(o&&o.httpStream){if(!o.httpStream.endpoint)throw Error("transport.httpStream.endpoint is required");let R=o.httpStream.endpoint;if(!R.startsWith("/"))g={...o,httpStream:{...o.httpStream,endpoint:`/${R}`}};else g={...o,httpStream:{...o.httpStream,endpoint:R}}}return{name:e,version:i,headers:n,authedFn:r,transport:g,tools:d}}function w(t){if(Array.isArray(t)){if(t.length!==1)throw Error("Only one param is supported for array define");let n=w(t[0]);return l.default.array(n)}if(typeof t==="object"&&t!==null){if("type"in t)try{let r=X.parse(t),{type:o}=r;if(o==="object"){let u=t;return w(u.properties).describe(u.description||"")}else if(o==="array"){let u=t;return w(u.items).describe(u.description||"")}else return w(o).describe(t.description||"")}catch(r){throw Error(`Invalid param type: ${JSON.stringify(t)}`)}let n={};for(let r in t){let o=r.endsWith("?")?r.slice(0,-1):r,u=t[r],d=w(u);if(r.endsWith("?"))n[o]=d.optional();else n[o]=d}return l.default.object(n)}let e=t,i="";if(e.startsWith("string"))return i=e.slice(7),l.default.string().describe(i);if(e.startsWith("number"))return i=e.slice(7),l.default.number().describe(i);if(e.startsWith("boolean"))return i=e.slice(8),l.default.boolean().describe(i);if(e.startsWith("any"))return i=e.slice(4),l.default.any().describe(i);throw Error(`Unsupported param type: ${t}`)}class tt{server=void 0;_toolhandlers={};validatedOptions;constructor(t){this.validatedOptions=P(x(Y,t,"MCP configuration")),this._createMcpServer()}_createMcpServer(){let t=this.validatedOptions.version;this.server=new z.FastMCP({name:this.validatedOptions.name,version:t,authenticate:async(e)=>{let i={};if(this.validatedOptions.authedFn)i=await this.validatedOptions.authedFn(e);if(this.validatedOptions.headers)i.headers=this.validatedOptions.headers.map((n)=>e.headers[n]);return i}});for(let e in this.validatedOptions.tools){let i=this.validatedOptions.tools[e];if(i)this._registerTool(e,i)}}_registerTool(t,e){if(!e.type)throw new p(`Tool '${t}' must have a type`);try{if(!e.execute){let i=F.createAdapter(e.type,e.options,e.resultProcessRule);this._toolhandlers[t]=i}this.server.addTool({name:t,description:e.description,parameters:e.params,execute:async(i,n)=>{if(e.defaultParams&&typeof i==="object")i={...e.defaultParams,...i};if(e.execute)return await e.execute(i,n);if(this._toolhandlers[t])return await this._toolhandlers[t].call(i,n);return}})}catch(i){if(i instanceof C||i instanceof p)throw new p(`Invalid configuration for tool '${t}': ${i.message}`,i.details);throw i}}_convertTransportForFastMCP(){let t={...this.validatedOptions.transport};if(t.httpStream){let e={...t.httpStream};if(e.endpoint)e.endpoint=e.endpoint;if(e.eventStore)e.eventStore=e.eventStore;return{...t,httpStream:e}}return t}async start(){if(!this.server)throw new p("Server not created");let t=this._convertTransportForFastMCP();await this.server.start(t)}}
|
|
3
|
+
`;throw o+=i.error.issues.map((f,u)=>` ${u+1}. Field "${f.path.join(".")}" - ${f.message}`).join(`
|
|
4
|
+
`),new g(o,{details:s})}return i.data}var v=A(require("lodash"));var l=A(require("lodash"));function H(t,e){if(e==="*")return t;if(typeof t!=="object")return;if(e.indexOf("[$el]")===-1)return l.get(t,e);let[n,i]=e.split("[$el]"),s=!n?t:l.get(t,n.substring(0,n.length));if(!Array.isArray(s))return;let o=i?i.substring(1):"";if(!o)return s;let f=s.map((u)=>H(u,o)).filter((u)=>!!u);if(Array.isArray(f[0]))return l.flatten(f);return f}function pt(t,e){if(typeof t!=="object"&&!Array.isArray(t))return;if(typeof e==="string")return H(t,e);let n={};for(let[i,s]of Object.entries(e)){let o=H(t,s);l.set(n,i,o)}return n}function Rt(t){return t}function gt(t,e){if(Array.isArray(t))return t.map(e);return e(t)}function yt(t){if(Array.isArray(t))return t.map((e)=>{if(typeof e==="string")return e;else return JSON.stringify(e)});else if(typeof t==="string")return t;else return JSON.stringify(t)}var $={pick:pt,passthru:Rt,map:gt,ensureString:yt};function M(t,e){let n=e;for(let i of t)if(typeof i==="object"){let{name:s,params:o}=i,f=$[s];if(typeof f==="function")console.log(`Running transform ${s} with params ${o}`),n=f(n,o);else throw Error(`Transformer ${s} not found`)}else if(typeof i==="function")n=i(n);else throw Error(`Invalid transform ${i}`);return n}function L(t,e){switch(e.resultType){case"text":return xt(t,e);case"struct":return Ct(t,e);default:return}}function Ct(t,e){let n={type:"struct",structuredContent:{}};if(e.processMethod==="passThrough")n.structuredContent=t;else if(e.processMethod==="selector"){if(typeof e.selector==="string")n.structuredContent=$.pick(t,e.selector);else if(typeof e.selector==="object"&&e.selector)for(let i in e.selector){let s=e.selector[i]||".",o=$.pick(t,s);v.set(n.structuredContent,i,o)}}else if(e.processMethod==="transform"){if(!e.transforms)throw Error("Transforms must be provided for transform process method");n.structuredContent=M(e.transforms,t)}return n}function xt(t,e){let n={text:t,type:"text"};if(e.processMethod==="selector")if(typeof e.selector!=="string")n.text="Error:For text content, selector must be a string";else{let i=v.get(t,e.selector);if(i)n.text=i;else n.text="Error:Selector not found"}else if(e.processMethod==="passThrough")n.text=typeof t==="string"?t:JSON.stringify(t);else if(e.processMethod==="fixedText"){if(e.fixedResponse)n.text=t instanceof Error?e.fixedResponse.error:e.fixedResponse.success}else if(e.processMethod==="transform"){if(!e.transforms)throw Error("Transforms must be provided for transform process method");n.text=M(e.transforms,t)}return n}class b{url="";method="POST";headers={};axiosConfig={};timeout;retryConfig;resultRule;config(t,e=void 0){this.resultRule=e;let n=C(P,t,"HTTP adapter configuration");this.url=n.url,this.method=n.method,this.headers=n.headers,this.timeout=n.timeout,this.retryConfig=n.retry,this.axiosConfig={method:this.method,url:this.url,headers:this.headers,timeout:this.timeout}}async executeWithRetry(t){if(!this.retryConfig)return t();let{attempts:e,backoff:n}=this.retryConfig,i;for(let s=1;s<=e;s++)try{return await t()}catch(o){if(i=o,s<e)await new Promise((f)=>setTimeout(f,n*s))}throw i}async call(t,e){let n=async()=>{let i={...this.axiosConfig};if(this.method.toUpperCase()==="GET")i.params=t;else i.data=t;try{let o=(await W.default.request(i)).data;if(this.resultRule)return o=L(o,this.resultRule),o;return}catch(s){if(W.default.isAxiosError(s))throw new d(`HTTP request failed: ${s.message}`,"http",{url:this.url,method:this.method,statusCode:s.response?.status,responseData:s.response?.data});throw new d(`Request failed: ${s.message}`,"http",{url:this.url,method:this.method})}};return this.executeWithRetry(n)}}var J=A(require("axios"));var c=require("zod");var z=c.z.object({endpoint:c.z.string().url("Valid GraphQL endpoint URL is required"),headers:c.z.record(c.z.string(),c.z.string()).default({}),timeout:c.z.number().int().positive().optional(),operationName:c.z.string().optional(),variables:c.z.record(c.z.string(),c.z.any()).optional(),retry:c.z.object({attempts:c.z.number().int().min(1).max(10).default(3),backoff:c.z.number().positive().default(1000)}).optional()});class Q{adapterConfig=null;endpoint="";headers={};timeout;retryConfig;operationName;defaultVariables;resultRule;config(t,e=void 0){this.resultRule=e,this.adapterConfig=C(z,t,"GraphQL adapter configuration"),this.endpoint=this.adapterConfig.endpoint,this.headers=this.adapterConfig.headers,this.timeout=this.adapterConfig.timeout,this.retryConfig=this.adapterConfig.retry,this.operationName=this.adapterConfig.operationName,this.defaultVariables=this.adapterConfig.variables}async executeWithRetry(t){if(!this.retryConfig)return t();let{attempts:e,backoff:n}=this.retryConfig,i;for(let s=1;s<=e;s++)try{return await t()}catch(o){if(i=o,s<e)await new Promise((f)=>setTimeout(f,n*s))}throw i}async call(t,e){if(!this.adapterConfig)throw new d("GraphQL adapter not configured","graphql");let n=async()=>{try{let i=t.query||t.body||t.data;if(!i)throw new g("GraphQL query is required",{args:t});let s=t.variables||this.defaultVariables||{},o=t.operationName||this.operationName,f={query:typeof i==="string"?i:JSON.stringify(i),variables:s,operationName:o},u=await J.default.post(this.endpoint,f,{headers:{"Content-Type":"application/json",...this.headers},timeout:this.timeout});if(u.data.errors&&Array.isArray(u.data.errors)&&u.data.errors.length>0)throw new d(`GraphQL errors: ${u.data.errors.map((h)=>h.message).join(", ")}`,"graphql",{endpoint:this.endpoint,errors:u.data.errors});let R=u.data.data||u.data;if(this.resultRule)return R=L(R,this.resultRule),R;return}catch(i){if(J.default.isAxiosError(i))throw new d(`GraphQL request failed: ${i.message}`,"graphql",{endpoint:this.endpoint,statusCode:i.response?.status,responseData:i.response?.data});if(i instanceof g||i instanceof d)throw i;throw new d(`GraphQL request failed: ${i.message}`,"graphql",{endpoint:this.endpoint})}};return this.executeWithRetry(n)}}var m=A(require("@grpc/grpc-js")),tt=A(require("@grpc/proto-loader"));var a=require("zod");var et=a.z.object({protoPath:a.z.string().min(1,"Proto file path is required"),serviceName:a.z.string().min(1,"Service name is required"),methodName:a.z.string().min(1,"Method name is required"),address:a.z.string().min(1,"gRPC server address is required"),credentials:a.z.enum(["insecure","ssl"]).default("insecure"),timeout:a.z.number().int().positive().optional(),metadata:a.z.record(a.z.string(),a.z.string()).optional(),retry:a.z.object({attempts:a.z.number().int().min(1).max(10).default(3),backoff:a.z.number().positive().default(1000)}).optional()});class S{adapterConfig=null;client=null;packageDefinition=null;proto=null;resultRule;config(t,e=void 0){this.resultRule=e,this.adapterConfig=C(et,t,"gRPC adapter configuration"),this._loadProto()}_loadProto(){if(!this.adapterConfig)throw new d("gRPC adapter not configured","grpc");try{let{protoPath:t}=this.adapterConfig,e=tt.loadSync(t,{keepCase:!0,longs:String,enums:String,defaults:!0,oneofs:!0}),n=m.loadPackageDefinition(e);this.packageDefinition=n}catch(t){throw new d(`Failed to load proto file: ${t.message}`,"grpc",{protoPath:this.adapterConfig.protoPath})}}_getClient(){if(!this.adapterConfig||!this.packageDefinition)throw new d("gRPC adapter not properly configured","grpc");if(this.client)return this.client;let{serviceName:t,address:e,credentials:n}=this.adapterConfig;try{let i=t.split("."),s=this.packageDefinition;for(let f of i)if(s=s[f],!s)throw Error(`Service part '${f}' not found in proto definition`);let o=n==="ssl"?m.credentials.createSsl():m.credentials.createInsecure();return this.client=new s(e,o),this.client}catch(i){throw new d(`Failed to create gRPC client: ${i.message}`,"grpc",{serviceName:t,address:e})}}async executeWithRetry(t){if(!this.adapterConfig?.retry)return t();let{attempts:e,backoff:n}=this.adapterConfig.retry,i;for(let s=1;s<=e;s++)try{return await t()}catch(o){if(i=o,s<e)await new Promise((f)=>setTimeout(f,n*s))}throw i}async call(t,e){if(!this.adapterConfig)throw new d("gRPC adapter not configured","grpc");let n=async()=>{try{let s=this._getClient(),{methodName:o,metadata:f,timeout:u}=this.adapterConfig,R=new m.Metadata;if(f)Object.entries(f).forEach(([x,I])=>{R.add(x,I)});let h=s[o];if(typeof h!=="function")throw Error(`Method '${o}' not found on service`);return new Promise((x,I)=>{let V=u?Date.now()+u:void 0;h.call(s,t,R,{deadline:V},(O,K)=>{if(O)I(new d(`gRPC call failed: ${O.message}`,"grpc",{methodName:o,code:O.code,details:O.details}));else try{x(K)}catch(lt){x(String(K))}})})}catch(s){if(s instanceof d||s instanceof g)throw s;throw new d(`gRPC request failed: ${s.message}`,"grpc",{methodName:this.adapterConfig?.methodName,serviceName:this.adapterConfig?.serviceName})}},i=await this.executeWithRetry(n);if(this.resultRule)return i=L(i,this.resultRule),i;return}}class D{adapterRegistry=new Map;constructor(){this.registerDefaultAdapters()}registerDefaultAdapters(){this.registerAdapter("http",b),this.registerAdapter("graphql",Q),this.registerAdapter("grpc",S)}createAdapter(t,e,n){let i=this.adapterRegistry.get(t);if(!i)throw new p(`Unsupported adapter type: ${t}`,{supportedTypes:this.getSupportedTypes()});try{let s=new i;return s.config(e,n),s}catch(s){if(s instanceof p)throw s;throw new p(`Failed to create adapter of type '${t}': ${s.message}`,{adapterType:t,options:e})}}registerAdapter(t,e){if(this.adapterRegistry.has(t))throw new p(`Adapter type '${t}' is already registered`);this.adapterRegistry.set(t,e)}getSupportedTypes(){return Array.from(this.adapterRegistry.keys())}}var B=new D;var w=A(require("zod"));function nt(t){let{name:e,version:n,headers:i,authedFn:s,transport:o,tools:f}=t,u={};if(f&&Object.keys(f).length>0)for(let h in f){let{params:x,outputs:I,...V}=f[h];if(u[h]={...V},x)u[h].params=E(x);if(I)u[h].outputs=E(I)}let R={transportType:"stdio"};if(o&&o.httpStream){if(!o.httpStream.endpoint)throw Error("transport.httpStream.endpoint is required");let h=o.httpStream.endpoint;if(!h.startsWith("/"))R={...o,httpStream:{...o.httpStream,endpoint:`/${h}`}};else R={...o,httpStream:{...o.httpStream,endpoint:h}}}return{name:e,version:n,headers:i,authedFn:s,transport:R,tools:u}}function E(t){if(Array.isArray(t)){if(t.length!==1)throw Error("Only one param is supported for array define");let i=E(t[0]);return w.default.array(i)}if(typeof t==="object"&&t!==null){if("type"in t)try{let s=N.parse(t),{type:o}=s;if(o==="object"){let f=t;return E(f.properties).describe(f.description||"")}else if(o==="array"){let f=t;return E(f.items).describe(f.description||"")}else return E(o).describe(t.description||"")}catch(s){throw Error(`Invalid param type: ${JSON.stringify(t)}`)}let i={};for(let s in t){let o=s.endsWith("?")?s.slice(0,-1):s,f=t[s],u=E(f);if(s.endsWith("?"))i[o]=u.optional();else i[o]=u}return w.default.object(i)}let e=t,n="";if(e.startsWith("string"))return n=e.slice(7),w.default.string().describe(n);if(e.startsWith("number"))return n=e.slice(7),w.default.number().describe(n);if(e.startsWith("boolean"))return n=e.slice(8),w.default.boolean().describe(n);if(e.startsWith("any"))return n=e.slice(4),w.default.any().describe(n);throw Error(`Unsupported param type: ${t}`)}class it{server=void 0;_toolhandlers={};validatedOptions;constructor(t){this.validatedOptions=nt(C(j,t,"MCP configuration")),this._createMcpServer()}_createMcpServer(){let t=this.validatedOptions.version;this.server=new rt.FastMCP({name:this.validatedOptions.name,version:t,authenticate:async(e)=>{let n={};if(this.validatedOptions.authedFn)n=await this.validatedOptions.authedFn(e);if(this.validatedOptions.headers)n.headers=this.validatedOptions.headers.map((i)=>e.headers[i]);return n}});for(let e in this.validatedOptions.tools){let n=this.validatedOptions.tools[e];if(n)this._registerTool(e,n)}}_registerTool(t,e){if(!e.type)throw new p(`Tool '${t}' must have a type`);try{if(!e.execute){let n=B.createAdapter(e.type,e.options,e.resultProcessRule);this._toolhandlers[t]=n}this.server.addTool({name:t,description:e.description,parameters:e.params,execute:async(n,i)=>{if(e.defaultParams&&typeof n==="object")n={...e.defaultParams,...n};if(e.execute)return await e.execute(n,i);if(this._toolhandlers[t])return await this._toolhandlers[t].call(n,i);return}})}catch(n){if(n instanceof g||n instanceof p)throw new p(`Invalid configuration for tool '${t}': ${n.message}`,n.details);throw n}}_convertTransportForFastMCP(){let t={...this.validatedOptions.transport};if(t.httpStream){let e={...t.httpStream};if(e.endpoint)e.endpoint=e.endpoint;if(e.eventStore)e.eventStore=e.eventStore;return{...t,httpStream:e}}return t}async start(){if(!this.server)throw new p("Server not created");let t=this._convertTransportForFastMCP();await this.server.start(t)}}
|
|
5
5
|
|
|
6
|
-
//# debugId=
|
|
6
|
+
//# debugId=DCA98897580E001C64756E2164756E21
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../mpc-proxy.ts", "../../errors.ts", "../../adapters/http.ts", "../../validation.ts", "../../adapters/result.ts", "../../adapters/graphql.ts", "../../adapters/grpc.ts", "../../adapters/factory.ts", "../../config.ts"],
|
|
3
|
+
"sources": ["../../mpc-proxy.ts", "../../errors.ts", "../../adapters/http.ts", "../../validation.ts", "../../adapters/result.ts", "../../adapters/transformer.ts", "../../adapters/graphql.ts", "../../adapters/grpc.ts", "../../adapters/factory.ts", "../../config.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import { FastMCP } from '@kingecg/fastmcp';\nimport { IncomingMessage } from 'http'\nimport * as types from './types';\nimport { defaultAdapterFactory } from './adapters/factory';\nimport { mcpOptionsSchema, validate, type ValidatedMcpOptions } from './validation';\nimport { ConfigurationError, ValidationError } from './errors';\nimport type { EventStore } from \"@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js\";\nimport { convertParamsInConfig } from './config';\nimport type z from 'zod';\nexport class McpProxy {\n server: FastMCP|undefined = undefined\n private _toolhandlers: Record<string, types.ServiceAdapter> = {}\n private validatedOptions: ValidatedMcpOptions;\n \n constructor(options: z.infer<typeof mcpOptionsSchema>) {\n this.validatedOptions = convertParamsInConfig(validate(mcpOptionsSchema, options, 'MCP configuration'));\n this._createMcpServer()\n } \n \n _createMcpServer() { \n // 类型断言:验证已经确保version格式正确\n const version = this.validatedOptions.version as `${number}.${number}.${number}`;\n \n this.server = new FastMCP({\n name: this.validatedOptions.name,\n version: version,\n authenticate: async (req: IncomingMessage) => {\n let ret: Record<string, any> = {};\n if (this.validatedOptions.authedFn) {\n ret = await this.validatedOptions.authedFn(req);\n }\n if (this.validatedOptions.headers) {\n ret.headers = this.validatedOptions.headers.map(h => req.headers[h]);\n }\n return ret;\n }\n })\n \n for (const toolName in this.validatedOptions.tools) {\n const tool = this.validatedOptions.tools[toolName];\n if (tool) {\n this._registerTool(toolName, tool as types.ToolDefine);\n }\n }\n }\n \n private _registerTool(toolName: string, tool: types.ToolDefine) {\n if (!tool.type) {\n throw new ConfigurationError(`Tool '${toolName}' must have a type`);\n }\n \n try {\n if(!tool.execute){\n const adapter = defaultAdapterFactory.createAdapter(tool.type, tool.options, tool.resultProcessRule);\n this._toolhandlers[toolName] = adapter;\n }\n \n \n this.server!.addTool({\n name: toolName,\n description: tool.description,\n parameters: tool.params,\n execute: async (args, context) => {\n if(tool.defaultParams && typeof args === 'object'){\n args = {...tool.defaultParams, ...args};\n }\n if(tool.execute){\n return await tool.execute(args, context);\n }\n if( this._toolhandlers[toolName]){\n const adapter = this._toolhandlers[toolName];\n return await adapter.call(args, context);\n }\n return\n } \n });\n } catch (error) {\n if (error instanceof ValidationError || error instanceof ConfigurationError) {\n throw new ConfigurationError(\n `Invalid configuration for tool '${toolName}': ${error.message}`,\n (error as any).details\n );\n }\n throw error;\n }\n }\n \n private _convertTransportForFastMCP(): Partial<{\n httpStream: {\n enableJsonResponse?: boolean;\n endpoint?: `/${string}`;\n eventStore?: EventStore;\n host?: string;\n port: number;\n stateless?: boolean;\n };\n transportType: \"httpStream\" | \"stdio\";\n }> {\n const transport = { ...this.validatedOptions.transport };\n \n if (transport.httpStream) {\n const httpStream = { ...transport.httpStream };\n if (httpStream.endpoint) {\n // 类型转换:验证已经确保endpoint以/开头\n httpStream.endpoint = httpStream.endpoint as `/${string}`;\n }\n if (httpStream.eventStore) {\n httpStream.eventStore = httpStream.eventStore as EventStore;\n }\n \n return {\n ...transport,\n httpStream: httpStream as {\n enableJsonResponse?: boolean;\n endpoint?: `/${string}`;\n eventStore?: EventStore;\n host?: string;\n port: number;\n stateless?: boolean;\n }\n };\n }\n \n return transport as any;\n }\n \n async start() {\n if(!this.server){\n throw new ConfigurationError('Server not created');\n }\n const convertedTransport = this._convertTransportForFastMCP();\n await this.server.start(convertedTransport);\n }\n}",
|
|
6
6
|
"export class MCPError extends Error {\n constructor(\n message: string,\n public readonly code: string,\n public readonly statusCode?: number,\n public readonly details?: Record<string, any>\n ) {\n super(message);\n this.name = 'MCPError';\n }\n}\n\nexport class ValidationError extends MCPError {\n constructor(message: string, details?: Record<string, any>) {\n super(message, 'VALIDATION_ERROR', 400, details);\n this.name = 'ValidationError';\n }\n}\n\nexport class ConfigurationError extends MCPError {\n constructor(message: string, details?: Record<string, any>) {\n super(message, 'CONFIGURATION_ERROR', 500, details);\n this.name = 'ConfigurationError';\n }\n}\n\nexport class AdapterError extends MCPError {\n constructor(message: string, public readonly adapterName: string, details?: Record<string, any>) {\n super(message, 'ADAPTER_ERROR', 502, { adapterName, ...details });\n this.name = 'AdapterError';\n }\n}\n\nexport class AuthenticationError extends MCPError {\n constructor(message: string, details?: Record<string, any>) {\n super(message, 'AUTHENTICATION_ERROR', 401, details);\n this.name = 'AuthenticationError';\n }\n}\n\nexport class RateLimitError extends MCPError {\n constructor(message: string, details?: Record<string, any>) {\n super(message, 'RATE_LIMIT_ERROR', 429, details);\n this.name = 'RateLimitError';\n }\n}\n\nexport type ErrorType = \n | 'VALIDATION_ERROR'\n | 'CONFIGURATION_ERROR'\n | 'ADAPTER_ERROR'\n | 'AUTHENTICATION_ERROR'\n | 'RATE_LIMIT_ERROR'\n | 'INTERNAL_ERROR';",
|
|
7
7
|
"import \"axios\";\nimport type {\n AudioContent,\n ContentResult,\n Context,\n ImageContent,\n ResourceContent,\n ResourceLink,\n TextContent,\n ToolParameters,\n} from \"@kingecg/fastmcp\";\nimport type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport type { ResultProcessRule, ServiceAdapter } from \"../types\";\nimport type { AxiosRequestConfig } from \"axios\";\nimport axios from \"axios\";\nimport { httpAdapterConfigSchema, validate } from \"../validation\";\nimport { AdapterError } from \"../errors\";\nimport { makeResponseContent } from \"./result\";\n\nexport class HttpAdapter implements ServiceAdapter {\n private url: string = \"\";\n private method = \"POST\";\n private headers: Record<string, string> = {};\n private axiosConfig: AxiosRequestConfig = {};\n private timeout?: number;\n private retryConfig?: { attempts: number; backoff: number };\n private resultRule?: ResultProcessRule;\n config(\n option: Record<string, any>,\n rule: ResultProcessRule | undefined = undefined,\n ) {\n this.resultRule = rule;\n const validatedConfig = validate(\n httpAdapterConfigSchema,\n option,\n \"HTTP adapter configuration\",\n );\n\n this.url = validatedConfig.url;\n this.method = validatedConfig.method;\n this.headers = validatedConfig.headers;\n this.timeout = validatedConfig.timeout;\n this.retryConfig = validatedConfig.retry;\n\n this.axiosConfig = {\n method: this.method,\n url: this.url,\n headers: this.headers,\n timeout: this.timeout,\n };\n }\n\n private async executeWithRetry<T>(fn: () => Promise<T>): Promise<T> {\n if (!this.retryConfig) {\n return fn();\n }\n\n const { attempts, backoff } = this.retryConfig;\n let lastError: Error;\n\n for (let attempt = 1; attempt <= attempts; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error as Error;\n\n if (attempt < attempts) {\n await new Promise((resolve) =>\n setTimeout(resolve, backoff * attempt),\n );\n }\n }\n }\n\n throw lastError!;\n }\n\n async call(\n args: StandardSchemaV1.InferOutput<any>,\n context: Context<any>,\n ): Promise<\n | AudioContent\n | ContentResult\n | ImageContent\n | ResourceContent\n | ResourceLink\n | string\n | TextContent\n | void\n > {\n const executeRequest = async () => {\n const axiosConfig = { ...this.axiosConfig };\n\n if (this.method.toUpperCase() === \"GET\") {\n axiosConfig.params = args;\n } else {\n axiosConfig.data = args;\n }\n\n try {\n const response = await axios.request(axiosConfig);\n let result = response.data;\n if (this.resultRule) {\n result = makeResponseContent(result, this.resultRule);\n return result;\n }\n return;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n throw new AdapterError(\n `HTTP request failed: ${error.message}`,\n \"http\",\n {\n url: this.url,\n method: this.method,\n statusCode: error.response?.status,\n responseData: error.response?.data,\n },\n );\n }\n throw new AdapterError(\n `Request failed: ${(error as Error).message}`,\n \"http\",\n { url: this.url, method: this.method },\n );\n }\n };\n\n return this.executeWithRetry(executeRequest);\n }\n}\n",
|
|
8
|
-
"import { z } from 'zod';\nimport { ValidationError } from './errors';\nimport type { IncomingMessage } from 'http';\n\n// 自定义验证器用于authenticate函数\nconst authenticateSchema = z.custom<\n (request: IncomingMessage) => Promise<Record<string, any>>\n>((val) => typeof val === 'function', {\n message: 'authedFn must be a function that returns a Promise',\n});\n\n// 自定义验证器用于工具执行函数\nconst toolExecuteSchema = z.custom<\n (args: any, context: any) => Promise<any>\n>((val) => typeof val === 'function', {\n message: 'execute must be a function',\n});\nexport const ParamTypeUnion:z.ZodType= z.union([\n z.literal('string'),\n z.literal('number'),\n z.literal('boolean'),\n z.literal('any')\n])\nexport const AbbToolParamType:z.ZodType= z.string().regex(/^(string|number|boolean|any):/)\nexport const ParamTypObject:z.ZodType= z.object({\n type: ParamTypeUnion,\n description: z.string().optional()\n})\nexport const ParamObjectType:z.ZodType= z.lazy(()=>z.object({\n type: z.literal('object'),\n description: z.string().optional(),\n properties: z.record(z.string(), z.union([ ParamTypeUnion,\n ParamTypObject, \n ParamObjectType,\n ParamArrayType,\n AbbToolParamType,\n z.record(z.string(),ParamTypeUnion),\n z.array(ParamTypeUnion)]))\n}) )\nexport const ParamArrayType:z.ZodType= z.lazy(()=>z.object({\n type: z.literal('array'),\n description: z.string().optional(),\n items: z.union([ ParamTypeUnion,\n ParamTypObject, \n ParamObjectType,\n ParamArrayType,\n AbbToolParamType,\n z.record(z.string(),ParamTypeUnion),\n z.array(ParamTypeUnion)])}));\n\nexport const RegularDefineSchema = z.lazy(()=>z.union([\n ParamTypObject,\n ParamObjectType,\n ParamArrayType,\n AbbToolParamType\n]))\nexport const ToolParamSchema = z.union([\n ParamTypeUnion,\n ParamTypObject, \n ParamObjectType,\n ParamArrayType,\n z.record(z.string(),ParamTypeUnion),\n z.array(ParamTypeUnion)\n])\nexport const ToolDefineSchema = z.object({\n type: z.string().min(1, 'Tool type is required'),\n description: z.string().optional(),\n params: ToolParamSchema.optional(), // ToolParameters from fastmcp\n outputs: ToolParamSchema.optional(),\n options: z.record(z.string(), z.any()),\n execute: toolExecuteSchema.optional(),\n});\n// MCP配置验证\nexport const mcpOptionsSchema = z.object({\n name: z.string().min(1, 'Name is required'),\n version: z.string().regex(/^\\d+\\.\\d+\\.\\d+$/, 'Version must be in format x.y.z'),\n headers: z.array(z.string()).optional(),\n authedFn: authenticateSchema.optional(),\n transport: z.object({\n httpStream: z.object({\n enableJsonResponse: z.boolean().optional(),\n endpoint: z.string().regex(/^\\/\\w+/, 'Endpoint must start with /').optional(),\n eventStore: z.any().optional(),\n host: z.string().optional(),\n port: z.number().int().min(1).max(65535),\n stateless: z.boolean().optional(),\n }).optional(),\n transportType: z.enum(['httpStream', 'stdio']).optional(),\n }).partial(),\n tools: z.record(z.string(), ToolDefineSchema),\n}).strict();\n\n// 工具参数验证基础模式\nexport const toolParamsSchema = z.object({}).passthrough(); // 允许任意参数,但可以进一步约束\n\n// HTTP适配器配置验证\nexport const httpAdapterConfigSchema = z.object({\n url: z.string().url('Valid URL is required'),\n method: z.enum(['GET', 'POST', 'PUT', 'DELETE', 'PATCH']).default('POST'),\n headers: z.record(z.string(), z.string()).default({}),\n timeout: z.number().int().positive().optional(),\n retry: z.object({\n attempts: z.number().int().min(1).max(10).default(3),\n backoff: z.number().positive().default(1000),\n }).optional(),\n});\n\n// 通用验证函数\nexport function validate<T>(schema: z.ZodSchema<T>, data: unknown, context?: string): T {\n const result = schema.safeParse(data);\n \n if (!result.success) {\n const details = result.error.issues.map((err: any) => ({\n path: err.path.join('.'),\n message: err.message,\n code: err.code,\n receivedValue: err.received,\n expected: err.expected,\n }));\n \n // 构建更友好的错误消息,包含所有错误细节\n let message = context \n ? `${context} validation failed:\\n`\n : 'Validation failed:\\n';\n \n message += result.error.issues.map((err: any, index: number) => \n ` ${index + 1}. Field \"${err.path.join('.')}\" - ${err.message}`\n ).join('\\n');\n \n throw new ValidationError(message, { details });\n }\n \n return result.data;\n}\n\n// 类型推断\nexport type ValidatedMcpOptions = z.infer<typeof mcpOptionsSchema>;\nexport type ValidatedHttpAdapterConfig = z.infer<typeof httpAdapterConfigSchema>;",
|
|
9
|
-
"import type {\n AudioContent,\n ContentResult,\n TextContent,\n StructContent,\n ImageContent,\n} from \"@kingecg/fastmcp\";\nimport type { ResultProcessRule } from \"../types\";\nimport * as _ from \"lodash\";\
|
|
8
|
+
"import { z } from 'zod';\nimport { ValidationError } from './errors';\nimport type { IncomingMessage } from 'http';\n\n// 自定义验证器用于authenticate函数\nconst authenticateSchema = z.custom<\n (request: IncomingMessage) => Promise<Record<string, any>>\n>((val) => typeof val === 'function', {\n message: 'authedFn must be a function that returns a Promise',\n});\n\n// 自定义验证器用于工具执行函数\nconst toolExecuteSchema = z.custom<\n (args: any, context: any) => Promise<any>\n>((val) => typeof val === 'function', {\n message: 'execute must be a function',\n});\nexport const ParamTypeUnion:z.ZodType= z.union([\n z.literal('string'),\n z.literal('number'),\n z.literal('boolean'),\n z.literal('any')\n])\nexport const AbbToolParamType:z.ZodType= z.string().regex(/^(string|number|boolean|any):/)\nexport const ParamTypObject:z.ZodType= z.object({\n type: ParamTypeUnion,\n description: z.string().optional()\n})\nexport const ParamObjectType:z.ZodType= z.lazy(()=>z.object({\n type: z.literal('object'),\n description: z.string().optional(),\n properties: z.record(z.string(), z.union([ ParamTypeUnion,\n ParamTypObject, \n ParamObjectType,\n ParamArrayType,\n AbbToolParamType,\n z.record(z.string(),ParamTypeUnion),\n z.array(ParamTypeUnion)]))\n}) )\nexport const ParamArrayType:z.ZodType= z.lazy(()=>z.object({\n type: z.literal('array'),\n description: z.string().optional(),\n items: z.union([ ParamTypeUnion,\n ParamTypObject, \n ParamObjectType,\n ParamArrayType,\n AbbToolParamType,\n z.record(z.string(),ParamTypeUnion),\n z.array(ParamTypeUnion)])}));\n\nexport const RegularDefineSchema = z.lazy(()=>z.union([\n ParamTypObject,\n ParamObjectType,\n ParamArrayType,\n AbbToolParamType\n]))\nexport const ToolParamSchema = z.union([\n ParamTypeUnion,\n ParamTypObject, \n ParamObjectType,\n ParamArrayType,\n z.record(z.string(),ParamTypeUnion),\n z.array(ParamTypeUnion)\n])\nexport const ToolDefineSchema = z.object({\n type: z.string().min(1, 'Tool type is required'),\n description: z.string().optional(),\n params: ToolParamSchema.optional(), // ToolParameters from fastmcp\n outputs: ToolParamSchema.optional(),\n options: z.record(z.string(), z.any()),\n execute: toolExecuteSchema.optional(),\n resultProcessRule: z.object({\n resultType: z.enum(['audio', 'image', 'resource', 'resourceLink', 'text', 'struct']),\n processMethod: z.enum(['passThrough', 'selector', 'fixedText', 'transform']),\n transforms: z.array(z.union([\n z.object({\n name: z.string(),\n params: z.record(z.string(), z.any()).optional(),\n }),\n z.function({\n input: z.any(),\n output: z.any(),\n })\n ])).optional(),\n selector: z.union([z.string().optional(),z.record(z.string(), z.string())]).optional(),\n fixedResponse: z.object({\n success: z.string(),\n error: z.string(),\n }).optional(),\n }).optional(),\n});\n// MCP配置验证\nexport const mcpOptionsSchema = z.object({\n name: z.string().min(1, 'Name is required'),\n version: z.string().regex(/^\\d+\\.\\d+\\.\\d+$/, 'Version must be in format x.y.z'),\n headers: z.array(z.string()).optional(),\n authedFn: authenticateSchema.optional(),\n transport: z.object({\n httpStream: z.object({\n enableJsonResponse: z.boolean().optional(),\n endpoint: z.string().regex(/^\\/\\w+/, 'Endpoint must start with /').optional(),\n eventStore: z.any().optional(),\n host: z.string().optional(),\n port: z.number().int().min(1).max(65535),\n stateless: z.boolean().optional(),\n }).optional(),\n transportType: z.enum(['httpStream', 'stdio']).optional(),\n }).partial(),\n tools: z.record(z.string(), ToolDefineSchema),\n}).strict();\n\n// 工具参数验证基础模式\nexport const toolParamsSchema = z.object({}).passthrough(); // 允许任意参数,但可以进一步约束\n\n// HTTP适配器配置验证\nexport const httpAdapterConfigSchema = z.object({\n url: z.string().url('Valid URL is required'),\n method: z.enum(['GET', 'POST', 'PUT', 'DELETE', 'PATCH']).default('POST'),\n headers: z.record(z.string(), z.string()).default({}),\n timeout: z.number().int().positive().optional(),\n retry: z.object({\n attempts: z.number().int().min(1).max(10).default(3),\n backoff: z.number().positive().default(1000),\n }).optional(),\n});\n\n// 通用验证函数\nexport function validate<T>(schema: z.ZodSchema<T>, data: unknown, context?: string): T {\n const result = schema.safeParse(data);\n \n if (!result.success) {\n const details = result.error.issues.map((err: any) => ({\n path: err.path.join('.'),\n message: err.message,\n code: err.code,\n receivedValue: err.received,\n expected: err.expected,\n }));\n \n // 构建更友好的错误消息,包含所有错误细节\n let message = context \n ? `${context} validation failed:\\n`\n : 'Validation failed:\\n';\n \n message += result.error.issues.map((err: any, index: number) => \n ` ${index + 1}. Field \"${err.path.join('.')}\" - ${err.message}`\n ).join('\\n');\n \n throw new ValidationError(message, { details });\n }\n \n return result.data;\n}\n\n// 类型推断\nexport type ValidatedMcpOptions = z.infer<typeof mcpOptionsSchema>;\nexport type ValidatedHttpAdapterConfig = z.infer<typeof httpAdapterConfigSchema>;",
|
|
9
|
+
"import type {\n AudioContent,\n ContentResult,\n TextContent,\n StructContent,\n ImageContent,\n} from \"@kingecg/fastmcp\";\nimport type { ResultProcessRule } from \"../types\";\nimport * as _ from \"lodash\";\nimport {transformers, runTransforms} from \"./transformer\";\nexport function makeMediaContent(\n result: string | Buffer,\n mimeType: string,\n): AudioContent | ImageContent {\n return result instanceof Buffer\n ? {\n data: result.toString(\"base64\"),\n mimeType,\n type: mimeType.startsWith(\"image\") ? \"image\" : \"audio\",\n }\n : {\n data: result as string,\n mimeType,\n type: mimeType.startsWith(\"image\") ? \"image\" : \"audio\",\n };\n}\nexport function makeResponseContent(\n result: any,\n rule: ResultProcessRule,\n): TextContent | StructContent | void {\n switch (rule.resultType) {\n case \"text\":\n return makeTextContent(result, rule);\n case \"struct\":\n return makeStructContent(result, rule);\n default:\n return;\n }\n}\nfunction makeStructContent(result: any, rule: ResultProcessRule) {\n const content: StructContent = {\n type: \"struct\",\n structuredContent: {},\n };\n if (rule.processMethod === \"passThrough\") {\n content.structuredContent = result;\n } else if (rule.processMethod === \"selector\") {\n if (typeof rule.selector === \"string\") {\n content.structuredContent = transformers.pick(result, rule.selector);\n } else if (typeof rule.selector === \"object\" && rule.selector) {\n for (const key in rule.selector) {\n const propertyPath = rule.selector[key] || \".\";\n const value = transformers.pick(result, propertyPath);\n _.set(content.structuredContent, key, value);\n }\n }\n } else if (rule.processMethod === \"transform\") {\n if(!rule.transforms){\n throw new Error(\"Transforms must be provided for transform process method\");\n }\n content.structuredContent = runTransforms(rule.transforms, result);\n }\n return content;\n}\n\nfunction makeTextContent(result: any, rule: ResultProcessRule): TextContent {\n let content: TextContent = {\n text: result,\n type: \"text\" as const,\n };\n if (rule.processMethod === \"selector\") {\n if (typeof rule.selector !== \"string\") {\n content.text = \"Error:For text content, selector must be a string\";\n } else {\n const selector = _.get(result, rule.selector);\n if (selector) {\n content.text = selector;\n } else {\n content.text = \"Error:Selector not found\";\n }\n }\n } else if (rule.processMethod === \"passThrough\") {\n content.text = typeof result === \"string\" ? result : JSON.stringify(result);\n } else if (rule.processMethod === \"fixedText\") {\n if (rule.fixedResponse) {\n content.text =\n result instanceof Error\n ? rule.fixedResponse.error\n : rule.fixedResponse.success;\n }\n } else if (rule.processMethod === \"transform\") {\n if(!rule.transforms){\n throw new Error(\"Transforms must be provided for transform process method\");\n }\n content.text = runTransforms(rule.transforms, result);\n }\n return content;\n}\n",
|
|
10
|
+
"import * as _ from 'lodash'\nimport type { Transform } from '../types'\n\nfunction _pic(obj:Object,selector:string){\n if(selector === '*'){\n return obj\n }\n if(typeof obj !== 'object'){\n \n return undefined\n }\n if(selector.indexOf('[$el]') === -1){\n \n return _.get(obj,selector)\n }\n const [aselector,el] = selector.split('[$el]')\n const arr = !aselector? obj : _.get(obj,aselector.substring(0,aselector.length))\n if(!Array.isArray(arr)){\n \n return undefined\n }\n const elSelector = el? el.substring(1):''\n\n if(!elSelector){\n return arr\n }\n const result:Array<any> = arr.map(el=>_pic(el,elSelector)).filter(el=>!!el)\n \n if(Array.isArray(result[0])){\n // flat \n return _.flatten(result)\n }\n return result\n}\nfunction pick(obj:any, selectors:string|Record<string, string>):any{\n if(typeof obj !== 'object' && !Array.isArray(obj)){\n return undefined\n }\n if(typeof selectors === 'string'){\n return _pic(obj,selectors)\n }\n let result:any = {}\n for(const [key,selector] of Object.entries(selectors)){\n const value = _pic(obj,selector)\n _.set(result,key,value)\n }\n return result\n}\n\nfunction passthru(obj:any):any {\n return obj\n}\n\nfunction map(obj:any, mpfn:(el:any)=>any):any{\n if(Array.isArray(obj)){\n return obj.map(mpfn)\n }\n return mpfn(obj)\n}\n\nfunction ensureString(obj:any): string | Array<string> {\n if(Array.isArray(obj)){\n return obj.map(el=>{\n if(typeof el === 'string'){\n return el\n } else {\n return JSON.stringify(el)\n }\n })\n } else {\n if(typeof obj === 'string'){\n return obj\n } else {\n return JSON.stringify(obj)\n }\n }\n}\n\ntype TransformerFunction = (obj: any, params?: any) => any;\n\nexport const transformers = {\n pick,\n passthru,\n map,\n ensureString\n}\n\nexport function runTransforms(transforms:Transform[], obj:any):any{\n let v = obj\n for(const t of transforms){\n if(typeof t === 'object'){\n const {name,params} = t\n const fn = (transformers as Record<string, TransformerFunction>)[name]\n if(typeof fn === 'function'){\n console.log(`Running transform ${name} with params ${params}`)\n v = fn(v,params)\n } else {\n throw new Error(`Transformer ${name} not found`)\n }\n } else if(typeof t === 'function'){\n v = t(v)\n } else {\n throw new Error(`Invalid transform ${t}`)\n }\n }\n return v;\n}",
|
|
10
11
|
"import type {\n AudioContent,\n ContentResult,\n Context,\n ImageContent,\n ResourceContent,\n ResourceLink,\n TextContent,\n} from \"@kingecg/fastmcp\";\nimport type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport type { ResultProcessRule, ServiceAdapter } from \"../types\";\nimport axios from \"axios\";\nimport { validate } from \"../validation\";\nimport { AdapterError, ValidationError } from \"../errors\";\nimport { z } from \"zod\";\nimport { makeResponseContent } from \"./result\";\n\n// GraphQL适配器配置验证\nexport const graphqlAdapterConfigSchema = z.object({\n endpoint: z.string().url(\"Valid GraphQL endpoint URL is required\"),\n headers: z.record(z.string(), z.string()).default({}),\n timeout: z.number().int().positive().optional(),\n // GraphQL特定配置\n operationName: z.string().optional(),\n variables: z.record(z.string(), z.any()).optional(),\n // 重试配置\n retry: z\n .object({\n attempts: z.number().int().min(1).max(10).default(3),\n backoff: z.number().positive().default(1000),\n })\n .optional(),\n});\n\nexport type GraphQLAdapterConfig = z.infer<typeof graphqlAdapterConfigSchema>;\n\nexport class GraphQLAdapter implements ServiceAdapter {\n private adapterConfig: GraphQLAdapterConfig | null = null;\n private endpoint: string = \"\";\n private headers: Record<string, string> = {};\n private timeout?: number;\n private retryConfig?: { attempts: number; backoff: number };\n private operationName?: string;\n private defaultVariables?: Record<string, any>;\n private resultRule?: ResultProcessRule;\n\n config(\n options: Record<string, any>,\n rule: ResultProcessRule | undefined = undefined,\n ): void {\n this.resultRule = rule;\n this.adapterConfig = validate(\n graphqlAdapterConfigSchema,\n options,\n \"GraphQL adapter configuration\",\n );\n\n this.endpoint = this.adapterConfig.endpoint;\n this.headers = this.adapterConfig.headers;\n this.timeout = this.adapterConfig.timeout;\n this.retryConfig = this.adapterConfig.retry;\n this.operationName = this.adapterConfig.operationName;\n this.defaultVariables = this.adapterConfig.variables;\n }\n\n private async executeWithRetry<T>(fn: () => Promise<T>): Promise<T> {\n if (!this.retryConfig) {\n return fn();\n }\n\n const { attempts, backoff } = this.retryConfig;\n let lastError: Error;\n\n for (let attempt = 1; attempt <= attempts; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error as Error;\n\n if (attempt < attempts) {\n await new Promise((resolve) =>\n setTimeout(resolve, backoff * attempt),\n );\n }\n }\n }\n\n throw lastError!;\n }\n\n async call(\n args: StandardSchemaV1.InferOutput<any>,\n context: Context<any>,\n ): Promise<\n | AudioContent\n | ContentResult\n | ImageContent\n | ResourceContent\n | ResourceLink\n | string\n | TextContent\n | void\n > {\n if (!this.adapterConfig) {\n throw new AdapterError(\"GraphQL adapter not configured\", \"graphql\");\n }\n\n const executeRequest = async () => {\n try {\n // 解析GraphQL查询和变量\n const query = args.query || args.body || args.data;\n if (!query) {\n throw new ValidationError(\"GraphQL query is required\", { args });\n }\n\n const variables = args.variables || this.defaultVariables || {};\n const operationName = args.operationName || this.operationName;\n\n const graphqlRequest = {\n query: typeof query === \"string\" ? query : JSON.stringify(query),\n variables,\n operationName,\n };\n\n const response = await axios.post(this.endpoint, graphqlRequest, {\n headers: {\n \"Content-Type\": \"application/json\",\n ...this.headers,\n },\n timeout: this.timeout,\n });\n\n // 检查GraphQL错误\n if (\n response.data.errors &&\n Array.isArray(response.data.errors) &&\n response.data.errors.length > 0\n ) {\n throw new AdapterError(\n `GraphQL errors: ${response.data.errors.map((e: any) => e.message).join(\", \")}`,\n \"graphql\",\n {\n endpoint: this.endpoint,\n errors: response.data.errors,\n },\n );\n }\n\n let result = response.data.data || response.data;\n if (this.resultRule) {\n result = makeResponseContent(result, this.resultRule);\n return result;\n }\n return\n } catch (error) {\n if (axios.isAxiosError(error)) {\n throw new AdapterError(\n `GraphQL request failed: ${error.message}`,\n \"graphql\",\n {\n endpoint: this.endpoint,\n statusCode: error.response?.status,\n responseData: error.response?.data,\n },\n );\n }\n\n if (error instanceof ValidationError || error instanceof AdapterError) {\n throw error;\n }\n\n throw new AdapterError(\n `GraphQL request failed: ${(error as Error).message}`,\n \"graphql\",\n { endpoint: this.endpoint },\n );\n }\n };\n\n return this.executeWithRetry(executeRequest);\n }\n}\n",
|
|
11
12
|
"import type {\n AudioContent,\n ContentResult,\n Context,\n ImageContent,\n ResourceContent,\n ResourceLink,\n TextContent,\n} from \"@kingecg/fastmcp\";\nimport type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport type { ResultProcessRule, ServiceAdapter } from \"../types\";\nimport * as grpc from \"@grpc/grpc-js\";\nimport * as protoLoader from \"@grpc/proto-loader\";\nimport { validate } from \"../validation\";\nimport { AdapterError, ValidationError } from \"../errors\";\nimport { z } from \"zod\";\nimport { makeResponseContent } from \"./result\";\n\n// gRPC适配器配置验证\nexport const grpcAdapterConfigSchema = z.object({\n protoPath: z.string().min(1, \"Proto file path is required\"),\n serviceName: z.string().min(1, \"Service name is required\"),\n methodName: z.string().min(1, \"Method name is required\"),\n address: z.string().min(1, \"gRPC server address is required\"),\n // 连接选项\n credentials: z.enum([\"insecure\", \"ssl\"]).default(\"insecure\"),\n timeout: z.number().int().positive().optional(),\n // 元数据\n metadata: z.record(z.string(), z.string()).optional(),\n // 重试配置\n retry: z\n .object({\n attempts: z.number().int().min(1).max(10).default(3),\n backoff: z.number().positive().default(1000),\n })\n .optional(),\n});\n\nexport type GrpcAdapterConfig = z.infer<typeof grpcAdapterConfigSchema>;\n\nexport class GrpcAdapter implements ServiceAdapter {\n private adapterConfig: GrpcAdapterConfig | null = null;\n private client: any = null;\n private packageDefinition: any = null;\n private proto: any = null;\n private resultRule?: ResultProcessRule;\n\n config(\n options: Record<string, any>,\n rule: ResultProcessRule | undefined = undefined,\n ): void {\n this.resultRule = rule;\n this.adapterConfig = validate(\n grpcAdapterConfigSchema,\n options,\n \"gRPC adapter configuration\",\n );\n this._loadProto();\n }\n\n private _loadProto(): void {\n if (!this.adapterConfig) {\n throw new AdapterError(\"gRPC adapter not configured\", \"grpc\");\n }\n\n try {\n const { protoPath } = this.adapterConfig;\n const packageDefinition = protoLoader.loadSync(protoPath, {\n keepCase: true,\n longs: String,\n enums: String,\n defaults: true,\n oneofs: true,\n });\n\n const protoDescriptor = grpc.loadPackageDefinition(packageDefinition);\n this.packageDefinition = protoDescriptor;\n } catch (error) {\n throw new AdapterError(\n `Failed to load proto file: ${(error as Error).message}`,\n \"grpc\",\n { protoPath: this.adapterConfig.protoPath },\n );\n }\n }\n\n private _getClient(): any {\n if (!this.adapterConfig || !this.packageDefinition) {\n throw new AdapterError(\"gRPC adapter not properly configured\", \"grpc\");\n }\n\n if (this.client) {\n return this.client;\n }\n\n const { serviceName, address, credentials } = this.adapterConfig;\n\n try {\n // 解析服务名称(格式:package.Service)\n const servicePath = serviceName.split(\".\");\n let service = this.packageDefinition;\n\n for (const part of servicePath) {\n service = service[part];\n if (!service) {\n throw new Error(\n `Service part '${part}' not found in proto definition`,\n );\n }\n }\n\n // 创建gRPC客户端\n const credentialsType =\n credentials === \"ssl\"\n ? grpc.credentials.createSsl()\n : grpc.credentials.createInsecure();\n\n this.client = new service(address, credentialsType);\n return this.client;\n } catch (error) {\n throw new AdapterError(\n `Failed to create gRPC client: ${(error as Error).message}`,\n \"grpc\",\n { serviceName, address },\n );\n }\n }\n\n private async executeWithRetry<T>(fn: () => Promise<T>): Promise<T> {\n if (!this.adapterConfig?.retry) {\n return fn();\n }\n\n const { attempts, backoff } = this.adapterConfig.retry;\n let lastError: Error;\n\n for (let attempt = 1; attempt <= attempts; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error as Error;\n\n if (attempt < attempts) {\n await new Promise((resolve) =>\n setTimeout(resolve, backoff * attempt),\n );\n }\n }\n }\n\n throw lastError!;\n }\n\n async call(\n args: StandardSchemaV1.InferOutput<any>,\n context: Context<any>,\n ): Promise<\n | AudioContent\n | ContentResult\n | ImageContent\n | ResourceContent\n | ResourceLink\n | string\n | TextContent\n | void\n > {\n if (!this.adapterConfig) {\n throw new AdapterError(\"gRPC adapter not configured\", \"grpc\");\n }\n\n const executeRequest = async () => {\n try {\n const client = this._getClient();\n const { methodName, metadata, timeout } = this.adapterConfig!;\n\n // 准备请求元数据\n const grpcMetadata = new grpc.Metadata();\n if (metadata) {\n Object.entries(metadata).forEach(([key, value]) => {\n grpcMetadata.add(key, value);\n });\n }\n\n // 查找方法\n const method = client[methodName];\n if (typeof method !== \"function\") {\n throw new Error(`Method '${methodName}' not found on service`);\n }\n\n // 执行gRPC调用\n return new Promise<any>((resolve, reject) => {\n const deadline = timeout ? Date.now() + timeout : undefined;\n\n method.call(\n client,\n args,\n grpcMetadata,\n { deadline },\n (error: any, response: any) => {\n if (error) {\n reject(\n new AdapterError(\n `gRPC call failed: ${error.message}`,\n \"grpc\",\n {\n methodName,\n code: error.code,\n details: error.details,\n },\n ),\n );\n } else {\n // 尝试将响应转换为可序列化的格式\n try {\n // 如果是普通对象或数组,直接返回\n resolve(response);\n } catch (serializationError) {\n // 如果无法序列化,返回字符串表示\n resolve(String(response));\n }\n }\n },\n );\n });\n } catch (error) {\n if (error instanceof AdapterError || error instanceof ValidationError) {\n throw error;\n }\n\n throw new AdapterError(\n `gRPC request failed: ${(error as Error).message}`,\n \"grpc\",\n {\n methodName: this.adapterConfig?.methodName,\n serviceName: this.adapterConfig?.serviceName,\n },\n );\n }\n };\n\n let result = await this.executeWithRetry(executeRequest);\n if (this.resultRule) {\n result = makeResponseContent(result, this.resultRule);\n return result;\n }\n return ;\n }\n}\n",
|
|
12
13
|
"import type { ServiceAdapter, AdapterFactory, ResultProcessRule } from '../types';\nimport { ConfigurationError } from '../errors';\nimport { HttpAdapter } from './http';\nimport { GraphQLAdapter } from './graphql';\nimport { GrpcAdapter } from './grpc';\n\nexport class DefaultAdapterFactory implements AdapterFactory {\n private adapterRegistry: Map<string, new () => ServiceAdapter> = new Map();\n \n constructor() {\n this.registerDefaultAdapters();\n }\n \n private registerDefaultAdapters() {\n // 默认注册HTTP适配器\n this.registerAdapter('http', HttpAdapter);\n // 注册GraphQL适配器\n this.registerAdapter('graphql', GraphQLAdapter);\n // 注册gRPC适配器\n this.registerAdapter('grpc', GrpcAdapter);\n }\n \n createAdapter(type: string, options: Record<string, any>, rule: ResultProcessRule|undefined): ServiceAdapter {\n const AdapterClass = this.adapterRegistry.get(type);\n \n if (!AdapterClass) {\n throw new ConfigurationError(\n `Unsupported adapter type: ${type}`,\n { supportedTypes: this.getSupportedTypes() }\n );\n }\n \n try {\n const adapter = new AdapterClass();\n adapter.config(options, rule);\n return adapter;\n } catch (error) {\n if (error instanceof ConfigurationError) {\n throw error;\n }\n throw new ConfigurationError(\n `Failed to create adapter of type '${type}': ${(error as Error).message}`,\n { adapterType: type, options }\n );\n }\n }\n \n registerAdapter(type: string, adapterClass: new () => ServiceAdapter): void {\n if (this.adapterRegistry.has(type)) {\n throw new ConfigurationError(`Adapter type '${type}' is already registered`);\n }\n this.adapterRegistry.set(type, adapterClass);\n }\n \n getSupportedTypes(): string[] {\n return Array.from(this.adapterRegistry.keys());\n }\n}\n\n// 默认工厂实例\nexport const defaultAdapterFactory = new DefaultAdapterFactory();",
|
|
13
14
|
"import z from \"zod\";\nimport { mcpOptionsSchema, RegularDefineSchema, ToolDefineSchema, ToolParamSchema } from \"./validation\";\nimport type { McpOptions } from \"./types\";\nimport type { ToolParameters } from \"@kingecg/fastmcp\";\n\n\nexport function convertParamsInConfig(config: z.infer<typeof mcpOptionsSchema>): McpOptions {\n const { name, version, headers, authedFn, transport, tools } = config;\n const ntools: any = {}\n if (tools && Object.keys(tools).length > 0) {\n for (const toolName in tools) {\n const { params, outputs, ...remainDef } = (tools[toolName] as z.infer<typeof ToolDefineSchema>)\n ntools[toolName] = {\n ...remainDef\n }\n if (params) {\n ntools[toolName].params = convertParams(params)\n }\n if (outputs) {\n ntools[toolName].outputs = convertParams(outputs)\n }\n }\n }\n\n // 处理 transport 对象,确保 endpoint 符合类型要求\n let processedTransport: any = {\n transportType: 'stdio'\n };\n if (transport && transport.httpStream) {\n if (!transport.httpStream.endpoint) {\n throw new Error('transport.httpStream.endpoint is required');\n }\n // 确保 endpoint 是以 \"/\" 开头的字符串格式\n const endpoint = transport.httpStream.endpoint as string;\n if (!endpoint.startsWith('/')) {\n processedTransport = {\n ...transport,\n httpStream: {\n ...transport.httpStream,\n endpoint: `/${endpoint}` as `/${string}`\n }\n };\n } else {\n processedTransport = {\n ...transport,\n httpStream: {\n ...transport.httpStream,\n endpoint: endpoint as `/${string}`\n }\n };\n }\n }\n\n return {\n name,\n version: version as `${number}.${number}.${number}`,\n headers,\n authedFn,\n transport: processedTransport,\n tools: ntools\n }\n}\n\nexport function convertParams(params: z.infer<typeof ToolParamSchema>): ToolParameters {\n if (Array.isArray(params)) {\n if (params.length !== 1) {\n throw new Error('Only one param is supported for array define');\n }\n const zType = convertParams(params[0]);\n return z.array(zType as z.ZodType)\n }\n if (typeof params === 'object' && params !== null) {\n\n // 处理对象类型定义\n if ('type' in params) {\n try {\n const parsedparams = RegularDefineSchema.parse(params)\n const { type } = (parsedparams as any)\n\n if (type === 'object') {\n \n const objParam = params as { type: 'object', properties: Record<string, any>,description?:string }\n const p = convertParams(objParam.properties);\n \n return (p as z.ZodObject).describe(objParam.description||'');\n } else if (type === 'array') {\n \n const arrParam = params as { type: 'array', items: any,description?:string }\n const p = convertParams(arrParam.items);\n \n return (p as z.ZodType).describe(arrParam.description||'');\n } else {\n const p = convertParams(type);\n return (p as z.ZodType).describe((params as any).description||'');\n }\n } catch (e) {\n throw new Error(`Invalid param type: ${JSON.stringify(params)}`)\n }\n\n\n }\n\n // 处理普通对象(参数定义)\n const rshape: any = {}\n for (const paramName in params) {\n let pname = paramName.endsWith('?') ? paramName.slice(0, -1) : paramName\n const param = (params as any)[paramName]\n const p = convertParams(param)\n if (paramName.endsWith('?')) {\n rshape[pname] = (p as z.ZodType).optional()\n } else {\n rshape[pname] = p\n }\n }\n return z.object(rshape)\n }\n\n const typeStr = params as string // type string maybe '<type>' or '<type>:<description>'\n let desc = ''\n if (typeStr.startsWith('string')) {\n desc = typeStr.slice(7)\n return z.string().describe(desc)\n }\n if (typeStr.startsWith('number')) {\n desc = typeStr.slice(7)\n return z.number().describe(desc)\n }\n if (typeStr.startsWith('boolean')) {\n desc = typeStr.slice(8)\n return z.boolean().describe(desc)\n }\n if(typeStr.startsWith('any')){\n desc = typeStr.slice(4)\n return z.any().describe(desc)\n }\n throw new Error(`Unsupported param type: ${params}`)\n}"
|
|
14
15
|
],
|
|
15
|
-
"mappings": "o5BAAyB,IAAzB,8BCAO,MAAM,UAAiB,KAAM,CAGhB,KACA,WACA,QAJlB,WAAW,CACT,EACgB,EACA,EACA,EAChB,CACA,MAAM,CAAO,EAJG,YACA,kBACA,eAGhB,KAAK,KAAO,WAEhB,CAEO,MAAM,UAAwB,CAAS,CAC5C,WAAW,CAAC,EAAiB,EAA+B,CAC1D,MAAM,EAAS,mBAAoB,IAAK,CAAO,EAC/C,KAAK,KAAO,kBAEhB,CAEO,MAAM,UAA2B,CAAS,CAC/C,WAAW,CAAC,EAAiB,EAA+B,CAC1D,MAAM,EAAS,sBAAuB,IAAK,CAAO,EAClD,KAAK,KAAO,qBAEhB,CAEO,MAAM,UAAqB,CAAS,CACI,YAA7C,WAAW,CAAC,EAAiC,EAAqB,EAA+B,CAC/F,MAAM,EAAS,gBAAiB,IAAK,CAAE,iBAAgB,CAAQ,CAAC,EADrB,mBAE3C,KAAK,KAAO,eAEhB,CC/BO,IAAP,oBAcA,sBCdkB,IAAlB,iBAKA,IAAM,GAAqB,IAAE,OAE3B,CAAC,IAAQ,OAAO,IAAQ,WAAY,CACpC,QAAS,oDACX,CAAC,EAGK,GAAoB,IAAE,OAE1B,CAAC,IAAQ,OAAO,IAAQ,WAAY,CACpC,QAAS,4BACX,CAAC,EACY,EAA0B,IAAE,MAAM,CAC7C,IAAE,QAAQ,QAAQ,EAClB,IAAE,QAAQ,QAAQ,EAClB,IAAE,QAAQ,SAAS,EACnB,IAAE,QAAQ,KAAK,CACjB,CAAC,EACY,EAA4B,IAAE,OAAO,EAAE,MAAM,+BAA+B,EAC5E,EAA0B,IAAE,OAAO,CAC9C,KAAM,EACN,YAAa,IAAE,OAAO,EAAE,SAAS,CACnC,CAAC,EACY,EAA2B,IAAE,KAAK,IAAI,IAAE,OAAO,CAC1D,KAAM,IAAE,QAAQ,QAAQ,EACxB,YAAa,IAAE,OAAO,EAAE,SAAS,EACjC,WAAY,IAAE,OAAO,IAAE,OAAO,EAAG,IAAE,MAAM,CAAE,EAC3C,EACA,EACA,EACA,EACA,IAAE,OAAO,IAAE,OAAO,EAAE,CAAc,EAClC,IAAE,MAAM,CAAc,CAAC,CAAC,CAAC,CAC3B,CAAC,CAAE,EACU,EAA0B,IAAE,KAAK,IAAI,IAAE,OAAO,CACzD,KAAM,IAAE,QAAQ,OAAO,EACvB,YAAa,IAAE,OAAO,EAAE,SAAS,EACjC,MAAO,IAAE,MAAM,CAAE,EACjB,EACA,EACA,EACA,EACA,IAAE,OAAO,IAAE,OAAO,EAAE,CAAc,EAClC,IAAE,MAAM,CAAc,CAAC,CAAC,CAAC,CAAC,CAAC,EAEhB,EAAsB,IAAE,KAAK,IAAI,IAAE,MAAM,CACpD,EACA,EACA,EACA,CACF,CAAC,CAAC,EACW,EAAkB,IAAE,MAAM,CACrC,EACA,EACA,EACA,EACA,IAAE,OAAO,IAAE,OAAO,EAAE,CAAc,EAClC,IAAE,MAAM,CAAc,CACxB,CAAC,EACY,GAAmB,IAAE,OAAO,CACvC,KAAM,IAAE,OAAO,EAAE,IAAI,EAAG,uBAAuB,EAC/C,YAAa,IAAE,OAAO,EAAE,SAAS,EACjC,OAAQ,EAAgB,SAAS,EACjC,QAAS,EAAgB,SAAS,EAClC,QAAS,IAAE,OAAO,IAAE,OAAO,EAAG,IAAE,IAAI,CAAC,EACrC,QAAS,GAAkB,SAAS,CACtC,CAAC,EAEY,EAAmB,IAAE,OAAO,CACvC,KAAM,IAAE,OAAO,EAAE,IAAI,EAAG,kBAAkB,EAC1C,QAAS,IAAE,OAAO,EAAE,MAAM,kBAAmB,iCAAiC,EAC9E,QAAS,IAAE,MAAM,IAAE,OAAO,CAAC,EAAE,SAAS,EACtC,SAAU,GAAmB,SAAS,EACtC,UAAW,IAAE,OAAO,CAClB,WAAY,IAAE,OAAO,CACnB,mBAAoB,IAAE,QAAQ,EAAE,SAAS,EACzC,SAAU,IAAE,OAAO,EAAE,MAAM,SAAU,4BAA4B,EAAE,SAAS,EAC5E,WAAY,IAAE,IAAI,EAAE,SAAS,EAC7B,KAAM,IAAE,OAAO,EAAE,SAAS,EAC1B,KAAM,IAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,KAAK,EACvC,UAAW,IAAE,QAAQ,EAAE,SAAS,CAClC,CAAC,EAAE,SAAS,EACZ,cAAe,IAAE,KAAK,CAAC,aAAc,OAAO,CAAC,EAAE,SAAS,CAC1D,CAAC,EAAE,QAAQ,EACX,MAAO,IAAE,OAAO,IAAE,OAAO,EAAG,EAAgB,CAC9C,CAAC,EAAE,OAAO,EAGG,GAAmB,IAAE,OAAO,CAAC,CAAC,EAAE,YAAY,EAG5C,EAA0B,IAAE,OAAO,CAC9C,IAAK,IAAE,OAAO,EAAE,IAAI,uBAAuB,EAC3C,OAAQ,IAAE,KAAK,CAAC,MAAO,OAAQ,MAAO,SAAU,OAAO,CAAC,EAAE,QAAQ,MAAM,EACxE,QAAS,IAAE,OAAO,IAAE,OAAO,EAAG,IAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC,EACpD,QAAS,IAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAC9C,MAAO,IAAE,OAAO,CACd,SAAU,IAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,QAAQ,CAAC,EACnD,QAAS,IAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI,CAC7C,CAAC,EAAE,SAAS,CACd,CAAC,EAGM,SAAS,CAAW,CAAC,EAAwB,EAAe,EAAqB,CACtF,IAAM,EAAS,EAAO,UAAU,CAAI,EAEpC,GAAI,CAAC,EAAO,QAAS,CACnB,IAAM,EAAU,EAAO,MAAM,OAAO,IAAI,CAAC,KAAc,CACrD,KAAM,EAAI,KAAK,KAAK,GAAG,EACvB,QAAS,EAAI,QACb,KAAM,EAAI,KACV,cAAe,EAAI,SACnB,SAAU,EAAI,QAChB,EAAE,EAGE,EAAU,EACV,GAAG;AAAA,EACH;AAAA,EAMJ,MAJA,GAAW,EAAO,MAAM,OAAO,IAAI,CAAC,EAAU,IAC5C,KAAK,EAAQ,aAAa,EAAI,KAAK,KAAK,GAAG,QAAQ,EAAI,SACzD,EAAE,KAAK;AAAA,CAAI,EAEL,IAAI,EAAgB,EAAS,CAAE,SAAQ,CAAC,EAGhD,OAAO,EAAO,KC5HG,IAAnB,uBAkBO,SAAS,CAAmB,CACjC,EACA,EACoC,CACpC,OAAQ,EAAK,gBACN,OACH,OAAO,GAAgB,EAAQ,CAAI,MAChC,SACH,OAAO,GAAkB,EAAQ,CAAI,UAErC,QAGN,SAAS,EAAiB,CAAC,EAAa,EAAyB,CAC/D,IAAM,EAAyB,CAC7B,KAAM,SACN,kBAAmB,CAAC,CACtB,EACA,GAAI,EAAK,gBAAkB,cACzB,EAAQ,kBAAoB,EAE9B,GAAI,EAAK,gBAAkB,YACzB,GAAI,OAAO,EAAK,WAAa,SAC3B,EAAQ,kBAAsB,MAAI,EAAQ,EAAK,SAAU,IAAI,EACxD,QAAI,OAAO,EAAK,WAAa,UAAY,EAAK,SACnD,QAAW,KAAO,EAAK,SAAU,CAC/B,IAAM,EAAe,EAAK,SAAS,IAAQ,IACrC,EAAU,MAAI,EAAQ,CAAY,EACtC,MAAI,EAAQ,kBAAmB,EAAK,CAAK,GAIjD,OAAO,EAGT,SAAS,EAAe,CAAC,EAAa,EAAsC,CAC1E,IAAI,EAAuB,CACzB,KAAM,EACN,KAAM,MACR,EACA,GAAI,EAAK,gBAAkB,WACzB,GAAI,OAAO,EAAK,WAAa,SAC3B,EAAQ,KAAO,oDACV,KACL,IAAM,EAAa,MAAI,EAAQ,EAAK,QAAQ,EAC5C,GAAI,EACF,EAAQ,KAAO,EAEf,OAAQ,KAAO,2BAGd,QAAI,EAAK,gBAAkB,cAChC,EAAQ,KAAO,OAAO,IAAW,SAAW,EAAS,KAAK,UAAU,CAAM,EACrE,QAAI,EAAK,gBAAkB,aAChC,GAAI,EAAK,cACP,EAAQ,KACN,aAAkB,MACd,EAAK,cAAc,MACnB,EAAK,cAAc,QAG7B,OAAO,EFpEF,MAAM,CAAsC,CACzC,IAAc,GACd,OAAS,OACT,QAAkC,CAAC,EACnC,YAAkC,CAAC,EACnC,QACA,YACA,WACR,MAAM,CACJ,EACA,EAAsC,OACtC,CACA,KAAK,WAAa,EAClB,IAAM,EAAkB,EACtB,EACA,EACA,4BACF,EAEA,KAAK,IAAM,EAAgB,IAC3B,KAAK,OAAS,EAAgB,OAC9B,KAAK,QAAU,EAAgB,QAC/B,KAAK,QAAU,EAAgB,QAC/B,KAAK,YAAc,EAAgB,MAEnC,KAAK,YAAc,CACjB,OAAQ,KAAK,OACb,IAAK,KAAK,IACV,QAAS,KAAK,QACd,QAAS,KAAK,OAChB,OAGY,iBAAmB,CAAC,EAAkC,CAClE,GAAI,CAAC,KAAK,YACR,OAAO,EAAG,EAGZ,IAAQ,WAAU,WAAY,KAAK,YAC/B,EAEJ,QAAS,EAAU,EAAG,GAAW,EAAU,IACzC,GAAI,CACF,OAAO,MAAM,EAAG,EAChB,MAAO,EAAO,CAGd,GAFA,EAAY,EAER,EAAU,EACZ,MAAM,IAAI,QAAQ,CAAC,IACjB,WAAW,EAAS,EAAU,CAAO,CACvC,EAKN,MAAM,OAGF,KAAI,CACR,EACA,EAUA,CACA,IAAM,EAAiB,SAAY,CACjC,IAAM,EAAc,IAAK,KAAK,WAAY,EAE1C,GAAI,KAAK,OAAO,YAAY,IAAM,MAChC,EAAY,OAAS,EAErB,OAAY,KAAO,EAGrB,GAAI,CAEF,IAAI,GADa,MAAM,UAAM,QAAQ,CAAW,GAC1B,KACtB,GAAI,KAAK,WAEP,OADA,EAAS,EAAoB,EAAQ,KAAK,UAAU,EAC7C,EAET,OACA,MAAO,EAAO,CACd,GAAI,UAAM,aAAa,CAAK,EAC1B,MAAM,IAAI,EACR,wBAAwB,EAAM,UAC9B,OACA,CACE,IAAK,KAAK,IACV,OAAQ,KAAK,OACb,WAAY,EAAM,UAAU,OAC5B,aAAc,EAAM,UAAU,IAChC,CACF,EAEF,MAAM,IAAI,EACR,mBAAoB,EAAgB,UACpC,OACA,CAAE,IAAK,KAAK,IAAK,OAAQ,KAAK,MAAO,CACvC,IAIJ,OAAO,KAAK,iBAAiB,CAAc,EAE/C,CGvHkB,IAAlB,sBAGkB,IAAlB,iBAIO,IAAM,EAA6B,IAAE,OAAO,CACjD,SAAU,IAAE,OAAO,EAAE,IAAI,wCAAwC,EACjE,QAAS,IAAE,OAAO,IAAE,OAAO,EAAG,IAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC,EACpD,QAAS,IAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAE9C,cAAe,IAAE,OAAO,EAAE,SAAS,EACnC,UAAW,IAAE,OAAO,IAAE,OAAO,EAAG,IAAE,IAAI,CAAC,EAAE,SAAS,EAElD,MAAO,IACJ,OAAO,CACN,SAAU,IAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,QAAQ,CAAC,EACnD,QAAS,IAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI,CAC7C,CAAC,EACA,SAAS,CACd,CAAC,EAIM,MAAM,CAAyC,CAC5C,cAA6C,KAC7C,SAAmB,GACnB,QAAkC,CAAC,EACnC,QACA,YACA,cACA,iBACA,WAER,MAAM,CACJ,EACA,EAAsC,OAChC,CACN,KAAK,WAAa,EAClB,KAAK,cAAgB,EACnB,EACA,EACA,+BACF,EAEA,KAAK,SAAW,KAAK,cAAc,SACnC,KAAK,QAAU,KAAK,cAAc,QAClC,KAAK,QAAU,KAAK,cAAc,QAClC,KAAK,YAAc,KAAK,cAAc,MACtC,KAAK,cAAgB,KAAK,cAAc,cACxC,KAAK,iBAAmB,KAAK,cAAc,eAG/B,iBAAmB,CAAC,EAAkC,CAClE,GAAI,CAAC,KAAK,YACR,OAAO,EAAG,EAGZ,IAAQ,WAAU,WAAY,KAAK,YAC/B,EAEJ,QAAS,EAAU,EAAG,GAAW,EAAU,IACzC,GAAI,CACF,OAAO,MAAM,EAAG,EAChB,MAAO,EAAO,CAGd,GAFA,EAAY,EAER,EAAU,EACZ,MAAM,IAAI,QAAQ,CAAC,IACjB,WAAW,EAAS,EAAU,CAAO,CACvC,EAKN,MAAM,OAGF,KAAI,CACR,EACA,EAUA,CACA,GAAI,CAAC,KAAK,cACR,MAAM,IAAI,EAAa,iCAAkC,SAAS,EAGpE,IAAM,EAAiB,SAAY,CACjC,GAAI,CAEF,IAAM,EAAQ,EAAK,OAAS,EAAK,MAAQ,EAAK,KAC9C,GAAI,CAAC,EACH,MAAM,IAAI,EAAgB,4BAA6B,CAAE,MAAK,CAAC,EAGjE,IAAM,EAAY,EAAK,WAAa,KAAK,kBAAoB,CAAC,EACxD,EAAgB,EAAK,eAAiB,KAAK,cAE3C,EAAiB,CACrB,MAAO,OAAO,IAAU,SAAW,EAAQ,KAAK,UAAU,CAAK,EAC/D,YACA,eACF,EAEM,EAAW,MAAM,UAAM,KAAK,KAAK,SAAU,EAAgB,CAC/D,QAAS,CACP,eAAgB,sBACb,KAAK,OACV,EACA,QAAS,KAAK,OAChB,CAAC,EAGD,GACE,EAAS,KAAK,QACd,MAAM,QAAQ,EAAS,KAAK,MAAM,GAClC,EAAS,KAAK,OAAO,OAAS,EAE9B,MAAM,IAAI,EACR,mBAAmB,EAAS,KAAK,OAAO,IAAI,CAAC,IAAW,EAAE,OAAO,EAAE,KAAK,IAAI,IAC5E,UACA,CACE,SAAU,KAAK,SACf,OAAQ,EAAS,KAAK,MACxB,CACF,EAGF,IAAI,EAAS,EAAS,KAAK,MAAQ,EAAS,KAC5C,GAAI,KAAK,WAEP,OADA,EAAS,EAAoB,EAAQ,KAAK,UAAU,EAC7C,EAET,OACA,MAAO,EAAO,CACd,GAAI,UAAM,aAAa,CAAK,EAC1B,MAAM,IAAI,EACR,2BAA2B,EAAM,UACjC,UACA,CACE,SAAU,KAAK,SACf,WAAY,EAAM,UAAU,OAC5B,aAAc,EAAM,UAAU,IAChC,CACF,EAGF,GAAI,aAAiB,GAAmB,aAAiB,EACvD,MAAM,EAGR,MAAM,IAAI,EACR,2BAA4B,EAAgB,UAC5C,UACA,CAAE,SAAU,KAAK,QAAS,CAC5B,IAIJ,OAAO,KAAK,iBAAiB,CAAc,EAE/C,CC1KsB,IAAtB,8BACA,mCAGkB,IAAlB,iBAIO,IAAM,EAA0B,IAAE,OAAO,CAC9C,UAAW,IAAE,OAAO,EAAE,IAAI,EAAG,6BAA6B,EAC1D,YAAa,IAAE,OAAO,EAAE,IAAI,EAAG,0BAA0B,EACzD,WAAY,IAAE,OAAO,EAAE,IAAI,EAAG,yBAAyB,EACvD,QAAS,IAAE,OAAO,EAAE,IAAI,EAAG,iCAAiC,EAE5D,YAAa,IAAE,KAAK,CAAC,WAAY,KAAK,CAAC,EAAE,QAAQ,UAAU,EAC3D,QAAS,IAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAE9C,SAAU,IAAE,OAAO,IAAE,OAAO,EAAG,IAAE,OAAO,CAAC,EAAE,SAAS,EAEpD,MAAO,IACJ,OAAO,CACN,SAAU,IAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,QAAQ,CAAC,EACnD,QAAS,IAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI,CAC7C,CAAC,EACA,SAAS,CACd,CAAC,EAIM,MAAM,CAAsC,CACzC,cAA0C,KAC1C,OAAc,KACd,kBAAyB,KACzB,MAAa,KACb,WAER,MAAM,CACJ,EACA,EAAsC,OAChC,CACN,KAAK,WAAa,EAClB,KAAK,cAAgB,EACnB,EACA,EACA,4BACF,EACA,KAAK,WAAW,EAGV,UAAU,EAAS,CACzB,GAAI,CAAC,KAAK,cACR,MAAM,IAAI,EAAa,8BAA+B,MAAM,EAG9D,GAAI,CACF,IAAQ,aAAc,KAAK,cACrB,EAAgC,WAAS,EAAW,CACxD,SAAU,GACV,MAAO,OACP,MAAO,OACP,SAAU,GACV,OAAQ,EACV,CAAC,EAEK,EAAuB,wBAAsB,CAAiB,EACpE,KAAK,kBAAoB,EACzB,MAAO,EAAO,CACd,MAAM,IAAI,EACR,8BAA+B,EAAgB,UAC/C,OACA,CAAE,UAAW,KAAK,cAAc,SAAU,CAC5C,GAII,UAAU,EAAQ,CACxB,GAAI,CAAC,KAAK,eAAiB,CAAC,KAAK,kBAC/B,MAAM,IAAI,EAAa,uCAAwC,MAAM,EAGvE,GAAI,KAAK,OACP,OAAO,KAAK,OAGd,IAAQ,cAAa,UAAS,eAAgB,KAAK,cAEnD,GAAI,CAEF,IAAM,EAAc,EAAY,MAAM,GAAG,EACrC,EAAU,KAAK,kBAEnB,QAAW,KAAQ,EAEjB,GADA,EAAU,EAAQ,GACd,CAAC,EACH,MAAU,MACR,iBAAiB,kCACnB,EAKJ,IAAM,EACJ,IAAgB,MACP,cAAY,UAAU,EACtB,cAAY,eAAe,EAGtC,OADA,KAAK,OAAS,IAAI,EAAQ,EAAS,CAAe,EAC3C,KAAK,OACZ,MAAO,EAAO,CACd,MAAM,IAAI,EACR,iCAAkC,EAAgB,UAClD,OACA,CAAE,cAAa,SAAQ,CACzB,QAIU,iBAAmB,CAAC,EAAkC,CAClE,GAAI,CAAC,KAAK,eAAe,MACvB,OAAO,EAAG,EAGZ,IAAQ,WAAU,WAAY,KAAK,cAAc,MAC7C,EAEJ,QAAS,EAAU,EAAG,GAAW,EAAU,IACzC,GAAI,CACF,OAAO,MAAM,EAAG,EAChB,MAAO,EAAO,CAGd,GAFA,EAAY,EAER,EAAU,EACZ,MAAM,IAAI,QAAQ,CAAC,IACjB,WAAW,EAAS,EAAU,CAAO,CACvC,EAKN,MAAM,OAGF,KAAI,CACR,EACA,EAUA,CACA,GAAI,CAAC,KAAK,cACR,MAAM,IAAI,EAAa,8BAA+B,MAAM,EAG9D,IAAM,EAAiB,SAAY,CACjC,GAAI,CACF,IAAM,EAAS,KAAK,WAAW,GACvB,aAAY,WAAU,WAAY,KAAK,cAGzC,EAAe,IAAS,WAC9B,GAAI,EACF,OAAO,QAAQ,CAAQ,EAAE,QAAQ,EAAE,EAAK,KAAW,CACjD,EAAa,IAAI,EAAK,CAAK,EAC5B,EAIH,IAAM,EAAS,EAAO,GACtB,GAAI,OAAO,IAAW,WACpB,MAAU,MAAM,WAAW,yBAAkC,EAI/D,OAAO,IAAI,QAAa,CAAC,EAAS,IAAW,CAC3C,IAAM,EAAW,EAAU,KAAK,IAAI,EAAI,EAAU,OAElD,EAAO,KACL,EACA,EACA,EACA,CAAE,UAAS,EACX,CAAC,EAAY,IAAkB,CAC7B,GAAI,EACF,EACE,IAAI,EACF,qBAAqB,EAAM,UAC3B,OACA,CACE,aACA,KAAM,EAAM,KACZ,QAAS,EAAM,OACjB,CACF,CACF,EAGA,QAAI,CAEF,EAAQ,CAAQ,EAChB,MAAO,GAAoB,CAE3B,EAAQ,OAAO,CAAQ,CAAC,GAIhC,EACD,EACD,MAAO,EAAO,CACd,GAAI,aAAiB,GAAgB,aAAiB,EACpD,MAAM,EAGR,MAAM,IAAI,EACR,wBAAyB,EAAgB,UACzC,OACA,CACE,WAAY,KAAK,eAAe,WAChC,YAAa,KAAK,eAAe,WACnC,CACF,IAIA,EAAS,MAAM,KAAK,iBAAiB,CAAc,EACvD,GAAI,KAAK,WAEP,OADA,EAAS,EAAoB,EAAQ,KAAK,UAAU,EAC7C,EAET,OAEJ,CCjPO,MAAM,CAAgD,CACjD,gBAAyD,IAAI,IAErE,WAAW,EAAG,CACV,KAAK,wBAAwB,EAGzB,uBAAuB,EAAG,CAE9B,KAAK,gBAAgB,OAAQ,CAAW,EAExC,KAAK,gBAAgB,UAAW,CAAc,EAE9C,KAAK,gBAAgB,OAAQ,CAAW,EAG5C,aAAa,CAAC,EAAc,EAA8B,EAAmD,CACzG,IAAM,EAAe,KAAK,gBAAgB,IAAI,CAAI,EAElD,GAAI,CAAC,EACD,MAAM,IAAI,EACN,6BAA6B,IAC7B,CAAE,eAAgB,KAAK,kBAAkB,CAAE,CAC/C,EAGJ,GAAI,CACA,IAAM,EAAU,IAAI,EAEpB,OADA,EAAQ,OAAO,EAAS,CAAI,EACrB,EACT,MAAO,EAAO,CACZ,GAAI,aAAiB,EACjB,MAAM,EAEV,MAAM,IAAI,EACN,qCAAqC,OAAW,EAAgB,UAChE,CAAE,YAAa,EAAM,SAAQ,CACjC,GAIR,eAAe,CAAC,EAAc,EAA8C,CACxE,GAAI,KAAK,gBAAgB,IAAI,CAAI,EAC7B,MAAM,IAAI,EAAmB,iBAAiB,0BAA6B,EAE/E,KAAK,gBAAgB,IAAI,EAAM,CAAY,EAG/C,iBAAiB,EAAa,CAC1B,OAAO,MAAM,KAAK,KAAK,gBAAgB,KAAK,CAAC,EAErD,CAGO,IAAM,EAAwB,IAAI,EC5D3B,IAAd,oBAMO,SAAS,CAAqB,CAAC,EAAsD,CACxF,IAAQ,OAAM,UAAS,UAAS,WAAU,YAAW,SAAU,EACzD,EAAc,CAAC,EACrB,GAAI,GAAS,OAAO,KAAK,CAAK,EAAE,OAAS,EACrC,QAAW,KAAY,EAAO,CAC1B,IAAQ,SAAQ,aAAY,GAAe,EAAM,GAIjD,GAHA,EAAO,GAAY,IACZ,CACP,EACI,EACA,EAAO,GAAU,OAAS,EAAc,CAAM,EAElD,GAAI,EACA,EAAO,GAAU,QAAU,EAAc,CAAO,EAM5D,IAAI,EAA0B,CAC1B,cAAe,OACnB,EACA,GAAI,GAAa,EAAU,WAAY,CACnC,GAAI,CAAC,EAAU,WAAW,SACtB,MAAU,MAAM,2CAA2C,EAG/D,IAAM,EAAW,EAAU,WAAW,SACtC,GAAI,CAAC,EAAS,WAAW,GAAG,EACxB,EAAqB,IACd,EACH,WAAY,IACL,EAAU,WACb,SAAU,IAAI,GAClB,CACJ,EAEA,OAAqB,IACd,EACH,WAAY,IACL,EAAU,WACb,SAAU,CACd,CACJ,EAIR,MAAO,CACH,OACA,QAAS,EACT,UACA,WACA,UAAW,EACX,MAAO,CACX,EAGG,SAAS,CAAa,CAAC,EAAyD,CACnF,GAAI,MAAM,QAAQ,CAAM,EAAG,CACvB,GAAI,EAAO,SAAW,EAClB,MAAU,MAAM,8CAA8C,EAElE,IAAM,EAAQ,EAAc,EAAO,EAAE,EACrC,OAAO,UAAE,MAAM,CAAkB,EAErC,GAAI,OAAO,IAAW,UAAY,IAAW,KAAM,CAG/C,GAAI,SAAU,EACV,GAAI,CACA,IAAM,EAAe,EAAoB,MAAM,CAAM,GAC7C,QAAU,EAElB,GAAI,IAAS,SAAU,CAEnB,IAAM,EAAW,EAGjB,OAFU,EAAc,EAAS,UAAU,EAEjB,SAAS,EAAS,aAAa,EAAE,EACxD,QAAI,IAAS,QAAS,CAEzB,IAAM,EAAW,EAGjB,OAFU,EAAc,EAAS,KAAK,EAEd,SAAS,EAAS,aAAa,EAAE,EAGzD,YADU,EAAc,CAAI,EACJ,SAAU,EAAe,aAAa,EAAE,EAEtE,MAAO,EAAG,CACR,MAAU,MAAM,uBAAuB,KAAK,UAAU,CAAM,GAAG,EAOvE,IAAM,EAAc,CAAC,EACrB,QAAW,KAAa,EAAQ,CAC5B,IAAI,EAAQ,EAAU,SAAS,GAAG,EAAI,EAAU,MAAM,EAAG,EAAE,EAAI,EACzD,EAAS,EAAe,GACxB,EAAI,EAAc,CAAK,EAC7B,GAAI,EAAU,SAAS,GAAG,EACtB,EAAO,GAAU,EAAgB,SAAS,EAE1C,OAAO,GAAS,EAGxB,OAAO,UAAE,OAAO,CAAM,EAG1B,IAAM,EAAU,EACZ,EAAO,GACX,GAAI,EAAQ,WAAW,QAAQ,EAE3B,OADA,EAAO,EAAQ,MAAM,CAAC,EACf,UAAE,OAAO,EAAE,SAAS,CAAI,EAEnC,GAAI,EAAQ,WAAW,QAAQ,EAE3B,OADA,EAAO,EAAQ,MAAM,CAAC,EACf,UAAE,OAAO,EAAE,SAAS,CAAI,EAEnC,GAAI,EAAQ,WAAW,SAAS,EAE5B,OADA,EAAO,EAAQ,MAAM,CAAC,EACf,UAAE,QAAQ,EAAE,SAAS,CAAI,EAEpC,GAAG,EAAQ,WAAW,KAAK,EAEvB,OADA,EAAO,EAAQ,MAAM,CAAC,EACf,UAAE,IAAI,EAAE,SAAS,CAAI,EAEhC,MAAU,MAAM,2BAA2B,GAAQ,ER9HhD,MAAM,EAAS,CAClB,OAA4B,OACpB,cAAsD,CAAC,EACvD,iBAER,WAAW,CAAC,EAA2C,CACnD,KAAK,iBAAmB,EAAsB,EAAS,EAAkB,EAAS,mBAAmB,CAAC,EACtG,KAAK,iBAAiB,EAG1B,gBAAgB,EAAG,CAEf,IAAM,EAAU,KAAK,iBAAiB,QAEtC,KAAK,OAAS,IAAI,UAAQ,CACtB,KAAM,KAAK,iBAAiB,KAC5B,QAAS,EACT,aAAc,MAAO,IAAyB,CAC1C,IAAI,EAA2B,CAAC,EAChC,GAAI,KAAK,iBAAiB,SACtB,EAAM,MAAM,KAAK,iBAAiB,SAAS,CAAG,EAElD,GAAI,KAAK,iBAAiB,QACtB,EAAI,QAAU,KAAK,iBAAiB,QAAQ,IAAI,KAAK,EAAI,QAAQ,EAAE,EAEvE,OAAO,EAEf,CAAC,EAED,QAAW,KAAY,KAAK,iBAAiB,MAAO,CAChD,IAAM,EAAO,KAAK,iBAAiB,MAAM,GACzC,GAAI,EACA,KAAK,cAAc,EAAU,CAAwB,GAKzD,aAAa,CAAC,EAAkB,EAAwB,CAC5D,GAAI,CAAC,EAAK,KACN,MAAM,IAAI,EAAmB,SAAS,qBAA4B,EAGtE,GAAI,CACA,GAAG,CAAC,EAAK,QAAQ,CACb,IAAM,EAAU,EAAsB,cAAc,EAAK,KAAM,EAAK,QAAS,EAAK,iBAAiB,EACnG,KAAK,cAAc,GAAY,EAInC,KAAK,OAAQ,QAAQ,CACjB,KAAM,EACN,YAAa,EAAK,YAClB,WAAY,EAAK,OACjB,QAAS,MAAO,EAAM,IAAY,CAC9B,GAAG,EAAK,eAAiB,OAAO,IAAS,SACrC,EAAO,IAAI,EAAK,iBAAkB,CAAI,EAE1C,GAAG,EAAK,QACJ,OAAO,MAAM,EAAK,QAAQ,EAAM,CAAO,EAE3C,GAAI,KAAK,cAAc,GAEnB,OAAO,MADS,KAAK,cAAc,GACd,KAAK,EAAM,CAAO,EAE3C,OAER,CAAC,EACH,MAAO,EAAO,CACZ,GAAI,aAAiB,GAAmB,aAAiB,EACrD,MAAM,IAAI,EACN,mCAAmC,OAAc,EAAM,UACtD,EAAc,OACnB,EAEJ,MAAM,GAIN,2BAA2B,EAUhC,CACC,IAAM,EAAY,IAAK,KAAK,iBAAiB,SAAU,EAEvD,GAAI,EAAU,WAAY,CACtB,IAAM,EAAa,IAAK,EAAU,UAAW,EAC7C,GAAI,EAAW,SAEX,EAAW,SAAW,EAAW,SAErC,GAAI,EAAW,WACX,EAAW,WAAa,EAAW,WAGvC,MAAO,IACA,EACH,WAAY,CAQhB,EAGJ,OAAO,OAGL,MAAK,EAAG,CACV,GAAG,CAAC,KAAK,OACL,MAAM,IAAI,EAAmB,oBAAoB,EAErD,IAAM,EAAqB,KAAK,4BAA4B,EAC5D,MAAM,KAAK,OAAO,MAAM,CAAkB,EAElD",
|
|
16
|
-
"debugId": "
|
|
16
|
+
"mappings": "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",
|
|
17
|
+
"debugId": "DCA98897580E001C64756E2164756E21",
|
|
17
18
|
"names": []
|
|
18
19
|
}
|
package/dist/esm/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import{FastMCP as
|
|
1
|
+
import{FastMCP as ft}from"@kingecg/fastmcp";class _ extends Error{code;statusCode;details;constructor(t,e,n,i){super(t);this.code=e;this.statusCode=n;this.details=i;this.name="MCPError"}}class g extends _{constructor(t,e){super(t,"VALIDATION_ERROR",400,e);this.name="ValidationError"}}class p extends _{constructor(t,e){super(t,"CONFIGURATION_ERROR",500,e);this.name="ConfigurationError"}}class d extends _{adapterName;constructor(t,e,n){super(t,"ADAPTER_ERROR",502,{adapterName:e,...n});this.adapterName=e;this.name="AdapterError"}}import"axios";import B from"axios";import{z as r}from"zod";var N=r.custom((t)=>typeof t==="function",{message:"authedFn must be a function that returns a Promise"}),j=r.custom((t)=>typeof t==="function",{message:"execute must be a function"}),y=r.union([r.literal("string"),r.literal("number"),r.literal("boolean"),r.literal("any")]),v=r.string().regex(/^(string|number|boolean|any):/),O=r.object({type:y,description:r.string().optional()}),T=r.lazy(()=>r.object({type:r.literal("object"),description:r.string().optional(),properties:r.record(r.string(),r.union([y,O,T,q,v,r.record(r.string(),y),r.array(y)]))})),q=r.lazy(()=>r.object({type:r.literal("array"),description:r.string().optional(),items:r.union([y,O,T,q,v,r.record(r.string(),y),r.array(y)])})),W=r.lazy(()=>r.union([O,T,q,v])),M=r.union([y,O,T,q,r.record(r.string(),y),r.array(y)]),P=r.object({type:r.string().min(1,"Tool type is required"),description:r.string().optional(),params:M.optional(),outputs:M.optional(),options:r.record(r.string(),r.any()),execute:j.optional(),resultProcessRule:r.object({resultType:r.enum(["audio","image","resource","resourceLink","text","struct"]),processMethod:r.enum(["passThrough","selector","fixedText","transform"]),transforms:r.array(r.union([r.object({name:r.string(),params:r.record(r.string(),r.any()).optional()}),r.function({input:r.any(),output:r.any()})])).optional(),selector:r.union([r.string().optional(),r.record(r.string(),r.string())]).optional(),fixedResponse:r.object({success:r.string(),error:r.string()}).optional()}).optional()}),J=r.object({name:r.string().min(1,"Name is required"),version:r.string().regex(/^\d+\.\d+\.\d+$/,"Version must be in format x.y.z"),headers:r.array(r.string()).optional(),authedFn:N.optional(),transport:r.object({httpStream:r.object({enableJsonResponse:r.boolean().optional(),endpoint:r.string().regex(/^\/\w+/,"Endpoint must start with /").optional(),eventStore:r.any().optional(),host:r.string().optional(),port:r.number().int().min(1).max(65535),stateless:r.boolean().optional()}).optional(),transportType:r.enum(["httpStream","stdio"]).optional()}).partial(),tools:r.record(r.string(),P)}).strict(),pt=r.object({}).passthrough(),D=r.object({url:r.string().url("Valid URL is required"),method:r.enum(["GET","POST","PUT","DELETE","PATCH"]).default("POST"),headers:r.record(r.string(),r.string()).default({}),timeout:r.number().int().positive().optional(),retry:r.object({attempts:r.number().int().min(1).max(10).default(3),backoff:r.number().positive().default(1000)}).optional()});function C(t,e,n){let i=t.safeParse(e);if(!i.success){let s=i.error.issues.map((f)=>({path:f.path.join("."),message:f.message,code:f.code,receivedValue:f.received,expected:f.expected})),o=n?`${n} validation failed:
|
|
2
2
|
`:`Validation failed:
|
|
3
|
-
`;throw o+=
|
|
4
|
-
`),new C(o,{details:r})}return s.data}import*as E from"lodash";function I(t,e){switch(e.resultType){case"text":return N(t,e);case"struct":return U(t,e);default:return}}function U(t,e){let i={type:"struct",structuredContent:{}};if(e.processMethod==="passThrough")i.structuredContent=t;if(e.processMethod==="selector"){if(typeof e.selector==="string")i.structuredContent=E.get(t,e.selector,null);else if(typeof e.selector==="object"&&e.selector)for(let s in e.selector){let r=e.selector[s]||".",o=E.get(t,r);E.set(i.structuredContent,s,o)}}return i}function N(t,e){let i={text:t,type:"text"};if(e.processMethod==="selector")if(typeof e.selector!=="string")i.text="Error:For text content, selector must be a string";else{let s=E.get(t,e.selector);if(s)i.text=s;else i.text="Error:Selector not found"}else if(e.processMethod==="passThrough")i.text=typeof t==="string"?t:JSON.stringify(t);else if(e.processMethod==="fixedText"){if(e.fixedResponse)i.text=t instanceof Error?e.fixedResponse.error:e.fixedResponse.success}return i}class Q{url="";method="POST";headers={};axiosConfig={};timeout;retryConfig;resultRule;config(t,e=void 0){this.resultRule=e;let i=x(W,t,"HTTP adapter configuration");this.url=i.url,this.method=i.method,this.headers=i.headers,this.timeout=i.timeout,this.retryConfig=i.retry,this.axiosConfig={method:this.method,url:this.url,headers:this.headers,timeout:this.timeout}}async executeWithRetry(t){if(!this.retryConfig)return t();let{attempts:e,backoff:i}=this.retryConfig,s;for(let r=1;r<=e;r++)try{return await t()}catch(o){if(s=o,r<e)await new Promise((u)=>setTimeout(u,i*r))}throw s}async call(t,e){let i=async()=>{let s={...this.axiosConfig};if(this.method.toUpperCase()==="GET")s.params=t;else s.data=t;try{let o=(await F.request(s)).data;if(this.resultRule)return o=I(o,this.resultRule),o;return}catch(r){if(F.isAxiosError(r))throw new f(`HTTP request failed: ${r.message}`,"http",{url:this.url,method:this.method,statusCode:r.response?.status,responseData:r.response?.data});throw new f(`Request failed: ${r.message}`,"http",{url:this.url,method:this.method})}};return this.executeWithRetry(i)}}import M from"axios";import{z as h}from"zod";var j=h.object({endpoint:h.string().url("Valid GraphQL endpoint URL is required"),headers:h.record(h.string(),h.string()).default({}),timeout:h.number().int().positive().optional(),operationName:h.string().optional(),variables:h.record(h.string(),h.any()).optional(),retry:h.object({attempts:h.number().int().min(1).max(10).default(3),backoff:h.number().positive().default(1000)}).optional()});class T{adapterConfig=null;endpoint="";headers={};timeout;retryConfig;operationName;defaultVariables;resultRule;config(t,e=void 0){this.resultRule=e,this.adapterConfig=x(j,t,"GraphQL adapter configuration"),this.endpoint=this.adapterConfig.endpoint,this.headers=this.adapterConfig.headers,this.timeout=this.adapterConfig.timeout,this.retryConfig=this.adapterConfig.retry,this.operationName=this.adapterConfig.operationName,this.defaultVariables=this.adapterConfig.variables}async executeWithRetry(t){if(!this.retryConfig)return t();let{attempts:e,backoff:i}=this.retryConfig,s;for(let r=1;r<=e;r++)try{return await t()}catch(o){if(s=o,r<e)await new Promise((u)=>setTimeout(u,i*r))}throw s}async call(t,e){if(!this.adapterConfig)throw new f("GraphQL adapter not configured","graphql");let i=async()=>{try{let s=t.query||t.body||t.data;if(!s)throw new C("GraphQL query is required",{args:t});let r=t.variables||this.defaultVariables||{},o=t.operationName||this.operationName,u={query:typeof s==="string"?s:JSON.stringify(s),variables:r,operationName:o},d=await M.post(this.endpoint,u,{headers:{"Content-Type":"application/json",...this.headers},timeout:this.timeout});if(d.data.errors&&Array.isArray(d.data.errors)&&d.data.errors.length>0)throw new f(`GraphQL errors: ${d.data.errors.map((c)=>c.message).join(", ")}`,"graphql",{endpoint:this.endpoint,errors:d.data.errors});let g=d.data.data||d.data;if(this.resultRule)return g=I(g,this.resultRule),g;return}catch(s){if(M.isAxiosError(s))throw new f(`GraphQL request failed: ${s.message}`,"graphql",{endpoint:this.endpoint,statusCode:s.response?.status,responseData:s.response?.data});if(s instanceof C||s instanceof f)throw s;throw new f(`GraphQL request failed: ${s.message}`,"graphql",{endpoint:this.endpoint})}};return this.executeWithRetry(i)}}import*as y from"@grpc/grpc-js";import*as D from"@grpc/proto-loader";import{z as R}from"zod";var P=R.object({protoPath:R.string().min(1,"Proto file path is required"),serviceName:R.string().min(1,"Service name is required"),methodName:R.string().min(1,"Method name is required"),address:R.string().min(1,"gRPC server address is required"),credentials:R.enum(["insecure","ssl"]).default("insecure"),timeout:R.number().int().positive().optional(),metadata:R.record(R.string(),R.string()).optional(),retry:R.object({attempts:R.number().int().min(1).max(10).default(3),backoff:R.number().positive().default(1000)}).optional()});class V{adapterConfig=null;client=null;packageDefinition=null;proto=null;resultRule;config(t,e=void 0){this.resultRule=e,this.adapterConfig=x(P,t,"gRPC adapter configuration"),this._loadProto()}_loadProto(){if(!this.adapterConfig)throw new f("gRPC adapter not configured","grpc");try{let{protoPath:t}=this.adapterConfig,e=D.loadSync(t,{keepCase:!0,longs:String,enums:String,defaults:!0,oneofs:!0}),i=y.loadPackageDefinition(e);this.packageDefinition=i}catch(t){throw new f(`Failed to load proto file: ${t.message}`,"grpc",{protoPath:this.adapterConfig.protoPath})}}_getClient(){if(!this.adapterConfig||!this.packageDefinition)throw new f("gRPC adapter not properly configured","grpc");if(this.client)return this.client;let{serviceName:t,address:e,credentials:i}=this.adapterConfig;try{let s=t.split("."),r=this.packageDefinition;for(let u of s)if(r=r[u],!r)throw Error(`Service part '${u}' not found in proto definition`);let o=i==="ssl"?y.credentials.createSsl():y.credentials.createInsecure();return this.client=new r(e,o),this.client}catch(s){throw new f(`Failed to create gRPC client: ${s.message}`,"grpc",{serviceName:t,address:e})}}async executeWithRetry(t){if(!this.adapterConfig?.retry)return t();let{attempts:e,backoff:i}=this.adapterConfig.retry,s;for(let r=1;r<=e;r++)try{return await t()}catch(o){if(s=o,r<e)await new Promise((u)=>setTimeout(u,i*r))}throw s}async call(t,e){if(!this.adapterConfig)throw new f("gRPC adapter not configured","grpc");let i=async()=>{try{let r=this._getClient(),{methodName:o,metadata:u,timeout:d}=this.adapterConfig,g=new y.Metadata;if(u)Object.entries(u).forEach(([A,w])=>{g.add(A,w)});let c=r[o];if(typeof c!=="function")throw Error(`Method '${o}' not found on service`);return new Promise((A,w)=>{let k=d?Date.now()+d:void 0;c.call(r,t,g,{deadline:k},(q,$)=>{if(q)w(new f(`gRPC call failed: ${q.message}`,"grpc",{methodName:o,code:q.code,details:q.details}));else try{A($)}catch(et){A(String($))}})})}catch(r){if(r instanceof f||r instanceof C)throw r;throw new f(`gRPC request failed: ${r.message}`,"grpc",{methodName:this.adapterConfig?.methodName,serviceName:this.adapterConfig?.serviceName})}},s=await this.executeWithRetry(i);if(this.resultRule)return s=I(s,this.resultRule),s;return}}class B{adapterRegistry=new Map;constructor(){this.registerDefaultAdapters()}registerDefaultAdapters(){this.registerAdapter("http",Q),this.registerAdapter("graphql",T),this.registerAdapter("grpc",V)}createAdapter(t,e,i){let s=this.adapterRegistry.get(t);if(!s)throw new p(`Unsupported adapter type: ${t}`,{supportedTypes:this.getSupportedTypes()});try{let r=new s;return r.config(e,i),r}catch(r){if(r instanceof p)throw r;throw new p(`Failed to create adapter of type '${t}': ${r.message}`,{adapterType:t,options:e})}}registerAdapter(t,e){if(this.adapterRegistry.has(t))throw new p(`Adapter type '${t}' is already registered`);this.adapterRegistry.set(t,e)}getSupportedTypes(){return Array.from(this.adapterRegistry.keys())}}var J=new B;import L from"zod";function K(t){let{name:e,version:i,headers:s,authedFn:r,transport:o,tools:u}=t,d={};if(u&&Object.keys(u).length>0)for(let c in u){let{params:A,outputs:w,...k}=u[c];if(d[c]={...k},A)d[c].params=l(A);if(w)d[c].outputs=l(w)}let g={transportType:"stdio"};if(o&&o.httpStream){if(!o.httpStream.endpoint)throw Error("transport.httpStream.endpoint is required");let c=o.httpStream.endpoint;if(!c.startsWith("/"))g={...o,httpStream:{...o.httpStream,endpoint:`/${c}`}};else g={...o,httpStream:{...o.httpStream,endpoint:c}}}return{name:e,version:i,headers:s,authedFn:r,transport:g,tools:d}}function l(t){if(Array.isArray(t)){if(t.length!==1)throw Error("Only one param is supported for array define");let s=l(t[0]);return L.array(s)}if(typeof t==="object"&&t!==null){if("type"in t)try{let r=S.parse(t),{type:o}=r;if(o==="object"){let u=t;return l(u.properties).describe(u.description||"")}else if(o==="array"){let u=t;return l(u.items).describe(u.description||"")}else return l(o).describe(t.description||"")}catch(r){throw Error(`Invalid param type: ${JSON.stringify(t)}`)}let s={};for(let r in t){let o=r.endsWith("?")?r.slice(0,-1):r,u=t[r],d=l(u);if(r.endsWith("?"))s[o]=d.optional();else s[o]=d}return L.object(s)}let e=t,i="";if(e.startsWith("string"))return i=e.slice(7),L.string().describe(i);if(e.startsWith("number"))return i=e.slice(7),L.number().describe(i);if(e.startsWith("boolean"))return i=e.slice(8),L.boolean().describe(i);if(e.startsWith("any"))return i=e.slice(4),L.any().describe(i);throw Error(`Unsupported param type: ${t}`)}class tt{server=void 0;_toolhandlers={};validatedOptions;constructor(t){this.validatedOptions=K(x(H,t,"MCP configuration")),this._createMcpServer()}_createMcpServer(){let t=this.validatedOptions.version;this.server=new z({name:this.validatedOptions.name,version:t,authenticate:async(e)=>{let i={};if(this.validatedOptions.authedFn)i=await this.validatedOptions.authedFn(e);if(this.validatedOptions.headers)i.headers=this.validatedOptions.headers.map((s)=>e.headers[s]);return i}});for(let e in this.validatedOptions.tools){let i=this.validatedOptions.tools[e];if(i)this._registerTool(e,i)}}_registerTool(t,e){if(!e.type)throw new p(`Tool '${t}' must have a type`);try{if(!e.execute){let i=J.createAdapter(e.type,e.options,e.resultProcessRule);this._toolhandlers[t]=i}this.server.addTool({name:t,description:e.description,parameters:e.params,execute:async(i,s)=>{if(e.defaultParams&&typeof i==="object")i={...e.defaultParams,...i};if(e.execute)return await e.execute(i,s);if(this._toolhandlers[t])return await this._toolhandlers[t].call(i,s);return}})}catch(i){if(i instanceof C||i instanceof p)throw new p(`Invalid configuration for tool '${t}': ${i.message}`,i.details);throw i}}_convertTransportForFastMCP(){let t={...this.validatedOptions.transport};if(t.httpStream){let e={...t.httpStream};if(e.endpoint)e.endpoint=e.endpoint;if(e.eventStore)e.eventStore=e.eventStore;return{...t,httpStream:e}}return t}async start(){if(!this.server)throw new p("Server not created");let t=this._convertTransportForFastMCP();await this.server.start(t)}}export{P as grpcAdapterConfigSchema,j as graphqlAdapterConfigSchema,J as defaultAdapterFactory,tt as McpProxy,Q as HttpAdapter,V as GrpcAdapter,T as GraphQLAdapter,B as DefaultAdapterFactory};
|
|
3
|
+
`;throw o+=i.error.issues.map((f,u)=>` ${u+1}. Field "${f.path.join(".")}" - ${f.message}`).join(`
|
|
4
|
+
`),new g(o,{details:s})}return i.data}import*as G from"lodash";import*as A from"lodash";function b(t,e){if(e==="*")return t;if(typeof t!=="object")return;if(e.indexOf("[$el]")===-1)return A.get(t,e);let[n,i]=e.split("[$el]"),s=!n?t:A.get(t,n.substring(0,n.length));if(!Array.isArray(s))return;let o=i?i.substring(1):"";if(!o)return s;let f=s.map((u)=>b(u,o)).filter((u)=>!!u);if(Array.isArray(f[0]))return A.flatten(f);return f}function z(t,e){if(typeof t!=="object"&&!Array.isArray(t))return;if(typeof e==="string")return b(t,e);let n={};for(let[i,s]of Object.entries(e)){let o=b(t,s);A.set(n,i,o)}return n}function tt(t){return t}function et(t,e){if(Array.isArray(t))return t.map(e);return e(t)}function nt(t){if(Array.isArray(t))return t.map((e)=>{if(typeof e==="string")return e;else return JSON.stringify(e)});else if(typeof t==="string")return t;else return JSON.stringify(t)}var k={pick:z,passthru:tt,map:et,ensureString:nt};function Q(t,e){let n=e;for(let i of t)if(typeof i==="object"){let{name:s,params:o}=i,f=k[s];if(typeof f==="function")console.log(`Running transform ${s} with params ${o}`),n=f(n,o);else throw Error(`Transformer ${s} not found`)}else if(typeof i==="function")n=i(n);else throw Error(`Invalid transform ${i}`);return n}function E(t,e){switch(e.resultType){case"text":return it(t,e);case"struct":return rt(t,e);default:return}}function rt(t,e){let n={type:"struct",structuredContent:{}};if(e.processMethod==="passThrough")n.structuredContent=t;else if(e.processMethod==="selector"){if(typeof e.selector==="string")n.structuredContent=k.pick(t,e.selector);else if(typeof e.selector==="object"&&e.selector)for(let i in e.selector){let s=e.selector[i]||".",o=k.pick(t,s);G.set(n.structuredContent,i,o)}}else if(e.processMethod==="transform"){if(!e.transforms)throw Error("Transforms must be provided for transform process method");n.structuredContent=Q(e.transforms,t)}return n}function it(t,e){let n={text:t,type:"text"};if(e.processMethod==="selector")if(typeof e.selector!=="string")n.text="Error:For text content, selector must be a string";else{let i=G.get(t,e.selector);if(i)n.text=i;else n.text="Error:Selector not found"}else if(e.processMethod==="passThrough")n.text=typeof t==="string"?t:JSON.stringify(t);else if(e.processMethod==="fixedText"){if(e.fixedResponse)n.text=t instanceof Error?e.fixedResponse.error:e.fixedResponse.success}else if(e.processMethod==="transform"){if(!e.transforms)throw Error("Transforms must be provided for transform process method");n.text=Q(e.transforms,t)}return n}class S{url="";method="POST";headers={};axiosConfig={};timeout;retryConfig;resultRule;config(t,e=void 0){this.resultRule=e;let n=C(D,t,"HTTP adapter configuration");this.url=n.url,this.method=n.method,this.headers=n.headers,this.timeout=n.timeout,this.retryConfig=n.retry,this.axiosConfig={method:this.method,url:this.url,headers:this.headers,timeout:this.timeout}}async executeWithRetry(t){if(!this.retryConfig)return t();let{attempts:e,backoff:n}=this.retryConfig,i;for(let s=1;s<=e;s++)try{return await t()}catch(o){if(i=o,s<e)await new Promise((f)=>setTimeout(f,n*s))}throw i}async call(t,e){let n=async()=>{let i={...this.axiosConfig};if(this.method.toUpperCase()==="GET")i.params=t;else i.data=t;try{let o=(await B.request(i)).data;if(this.resultRule)return o=E(o,this.resultRule),o;return}catch(s){if(B.isAxiosError(s))throw new d(`HTTP request failed: ${s.message}`,"http",{url:this.url,method:this.method,statusCode:s.response?.status,responseData:s.response?.data});throw new d(`Request failed: ${s.message}`,"http",{url:this.url,method:this.method})}};return this.executeWithRetry(n)}}import K from"axios";import{z as a}from"zod";var st=a.object({endpoint:a.string().url("Valid GraphQL endpoint URL is required"),headers:a.record(a.string(),a.string()).default({}),timeout:a.number().int().positive().optional(),operationName:a.string().optional(),variables:a.record(a.string(),a.any()).optional(),retry:a.object({attempts:a.number().int().min(1).max(10).default(3),backoff:a.number().positive().default(1000)}).optional()});class V{adapterConfig=null;endpoint="";headers={};timeout;retryConfig;operationName;defaultVariables;resultRule;config(t,e=void 0){this.resultRule=e,this.adapterConfig=C(st,t,"GraphQL adapter configuration"),this.endpoint=this.adapterConfig.endpoint,this.headers=this.adapterConfig.headers,this.timeout=this.adapterConfig.timeout,this.retryConfig=this.adapterConfig.retry,this.operationName=this.adapterConfig.operationName,this.defaultVariables=this.adapterConfig.variables}async executeWithRetry(t){if(!this.retryConfig)return t();let{attempts:e,backoff:n}=this.retryConfig,i;for(let s=1;s<=e;s++)try{return await t()}catch(o){if(i=o,s<e)await new Promise((f)=>setTimeout(f,n*s))}throw i}async call(t,e){if(!this.adapterConfig)throw new d("GraphQL adapter not configured","graphql");let n=async()=>{try{let i=t.query||t.body||t.data;if(!i)throw new g("GraphQL query is required",{args:t});let s=t.variables||this.defaultVariables||{},o=t.operationName||this.operationName,f={query:typeof i==="string"?i:JSON.stringify(i),variables:s,operationName:o},u=await K.post(this.endpoint,f,{headers:{"Content-Type":"application/json",...this.headers},timeout:this.timeout});if(u.data.errors&&Array.isArray(u.data.errors)&&u.data.errors.length>0)throw new d(`GraphQL errors: ${u.data.errors.map((c)=>c.message).join(", ")}`,"graphql",{endpoint:this.endpoint,errors:u.data.errors});let R=u.data.data||u.data;if(this.resultRule)return R=E(R,this.resultRule),R;return}catch(i){if(K.isAxiosError(i))throw new d(`GraphQL request failed: ${i.message}`,"graphql",{endpoint:this.endpoint,statusCode:i.response?.status,responseData:i.response?.data});if(i instanceof g||i instanceof d)throw i;throw new d(`GraphQL request failed: ${i.message}`,"graphql",{endpoint:this.endpoint})}};return this.executeWithRetry(n)}}import*as l from"@grpc/grpc-js";import*as X from"@grpc/proto-loader";import{z as h}from"zod";var ot=h.object({protoPath:h.string().min(1,"Proto file path is required"),serviceName:h.string().min(1,"Service name is required"),methodName:h.string().min(1,"Method name is required"),address:h.string().min(1,"gRPC server address is required"),credentials:h.enum(["insecure","ssl"]).default("insecure"),timeout:h.number().int().positive().optional(),metadata:h.record(h.string(),h.string()).optional(),retry:h.object({attempts:h.number().int().min(1).max(10).default(3),backoff:h.number().positive().default(1000)}).optional()});class F{adapterConfig=null;client=null;packageDefinition=null;proto=null;resultRule;config(t,e=void 0){this.resultRule=e,this.adapterConfig=C(ot,t,"gRPC adapter configuration"),this._loadProto()}_loadProto(){if(!this.adapterConfig)throw new d("gRPC adapter not configured","grpc");try{let{protoPath:t}=this.adapterConfig,e=X.loadSync(t,{keepCase:!0,longs:String,enums:String,defaults:!0,oneofs:!0}),n=l.loadPackageDefinition(e);this.packageDefinition=n}catch(t){throw new d(`Failed to load proto file: ${t.message}`,"grpc",{protoPath:this.adapterConfig.protoPath})}}_getClient(){if(!this.adapterConfig||!this.packageDefinition)throw new d("gRPC adapter not properly configured","grpc");if(this.client)return this.client;let{serviceName:t,address:e,credentials:n}=this.adapterConfig;try{let i=t.split("."),s=this.packageDefinition;for(let f of i)if(s=s[f],!s)throw Error(`Service part '${f}' not found in proto definition`);let o=n==="ssl"?l.credentials.createSsl():l.credentials.createInsecure();return this.client=new s(e,o),this.client}catch(i){throw new d(`Failed to create gRPC client: ${i.message}`,"grpc",{serviceName:t,address:e})}}async executeWithRetry(t){if(!this.adapterConfig?.retry)return t();let{attempts:e,backoff:n}=this.adapterConfig.retry,i;for(let s=1;s<=e;s++)try{return await t()}catch(o){if(i=o,s<e)await new Promise((f)=>setTimeout(f,n*s))}throw i}async call(t,e){if(!this.adapterConfig)throw new d("gRPC adapter not configured","grpc");let n=async()=>{try{let s=this._getClient(),{methodName:o,metadata:f,timeout:u}=this.adapterConfig,R=new l.Metadata;if(f)Object.entries(f).forEach(([x,w])=>{R.add(x,w)});let c=s[o];if(typeof c!=="function")throw Error(`Method '${o}' not found on service`);return new Promise((x,w)=>{let $=u?Date.now()+u:void 0;c.call(s,t,R,{deadline:$},(L,H)=>{if(L)w(new d(`gRPC call failed: ${L.message}`,"grpc",{methodName:o,code:L.code,details:L.details}));else try{x(H)}catch(dt){x(String(H))}})})}catch(s){if(s instanceof d||s instanceof g)throw s;throw new d(`gRPC request failed: ${s.message}`,"grpc",{methodName:this.adapterConfig?.methodName,serviceName:this.adapterConfig?.serviceName})}},i=await this.executeWithRetry(n);if(this.resultRule)return i=E(i,this.resultRule),i;return}}class Y{adapterRegistry=new Map;constructor(){this.registerDefaultAdapters()}registerDefaultAdapters(){this.registerAdapter("http",S),this.registerAdapter("graphql",V),this.registerAdapter("grpc",F)}createAdapter(t,e,n){let i=this.adapterRegistry.get(t);if(!i)throw new p(`Unsupported adapter type: ${t}`,{supportedTypes:this.getSupportedTypes()});try{let s=new i;return s.config(e,n),s}catch(s){if(s instanceof p)throw s;throw new p(`Failed to create adapter of type '${t}': ${s.message}`,{adapterType:t,options:e})}}registerAdapter(t,e){if(this.adapterRegistry.has(t))throw new p(`Adapter type '${t}' is already registered`);this.adapterRegistry.set(t,e)}getSupportedTypes(){return Array.from(this.adapterRegistry.keys())}}var Z=new Y;import I from"zod";function U(t){let{name:e,version:n,headers:i,authedFn:s,transport:o,tools:f}=t,u={};if(f&&Object.keys(f).length>0)for(let c in f){let{params:x,outputs:w,...$}=f[c];if(u[c]={...$},x)u[c].params=m(x);if(w)u[c].outputs=m(w)}let R={transportType:"stdio"};if(o&&o.httpStream){if(!o.httpStream.endpoint)throw Error("transport.httpStream.endpoint is required");let c=o.httpStream.endpoint;if(!c.startsWith("/"))R={...o,httpStream:{...o.httpStream,endpoint:`/${c}`}};else R={...o,httpStream:{...o.httpStream,endpoint:c}}}return{name:e,version:n,headers:i,authedFn:s,transport:R,tools:u}}function m(t){if(Array.isArray(t)){if(t.length!==1)throw Error("Only one param is supported for array define");let i=m(t[0]);return I.array(i)}if(typeof t==="object"&&t!==null){if("type"in t)try{let s=W.parse(t),{type:o}=s;if(o==="object"){let f=t;return m(f.properties).describe(f.description||"")}else if(o==="array"){let f=t;return m(f.items).describe(f.description||"")}else return m(o).describe(t.description||"")}catch(s){throw Error(`Invalid param type: ${JSON.stringify(t)}`)}let i={};for(let s in t){let o=s.endsWith("?")?s.slice(0,-1):s,f=t[s],u=m(f);if(s.endsWith("?"))i[o]=u.optional();else i[o]=u}return I.object(i)}let e=t,n="";if(e.startsWith("string"))return n=e.slice(7),I.string().describe(n);if(e.startsWith("number"))return n=e.slice(7),I.number().describe(n);if(e.startsWith("boolean"))return n=e.slice(8),I.boolean().describe(n);if(e.startsWith("any"))return n=e.slice(4),I.any().describe(n);throw Error(`Unsupported param type: ${t}`)}class ut{server=void 0;_toolhandlers={};validatedOptions;constructor(t){this.validatedOptions=U(C(J,t,"MCP configuration")),this._createMcpServer()}_createMcpServer(){let t=this.validatedOptions.version;this.server=new ft({name:this.validatedOptions.name,version:t,authenticate:async(e)=>{let n={};if(this.validatedOptions.authedFn)n=await this.validatedOptions.authedFn(e);if(this.validatedOptions.headers)n.headers=this.validatedOptions.headers.map((i)=>e.headers[i]);return n}});for(let e in this.validatedOptions.tools){let n=this.validatedOptions.tools[e];if(n)this._registerTool(e,n)}}_registerTool(t,e){if(!e.type)throw new p(`Tool '${t}' must have a type`);try{if(!e.execute){let n=Z.createAdapter(e.type,e.options,e.resultProcessRule);this._toolhandlers[t]=n}this.server.addTool({name:t,description:e.description,parameters:e.params,execute:async(n,i)=>{if(e.defaultParams&&typeof n==="object")n={...e.defaultParams,...n};if(e.execute)return await e.execute(n,i);if(this._toolhandlers[t])return await this._toolhandlers[t].call(n,i);return}})}catch(n){if(n instanceof g||n instanceof p)throw new p(`Invalid configuration for tool '${t}': ${n.message}`,n.details);throw n}}_convertTransportForFastMCP(){let t={...this.validatedOptions.transport};if(t.httpStream){let e={...t.httpStream};if(e.endpoint)e.endpoint=e.endpoint;if(e.eventStore)e.eventStore=e.eventStore;return{...t,httpStream:e}}return t}async start(){if(!this.server)throw new p("Server not created");let t=this._convertTransportForFastMCP();await this.server.start(t)}}export{ot as grpcAdapterConfigSchema,st as graphqlAdapterConfigSchema,Z as defaultAdapterFactory,ut as McpProxy,S as HttpAdapter,F as GrpcAdapter,V as GraphQLAdapter,Y as DefaultAdapterFactory};
|
|
5
5
|
|
|
6
|
-
//# debugId=
|
|
6
|
+
//# debugId=4C932906252FA62664756E2164756E21
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../mpc-proxy.ts", "../../errors.ts", "../../adapters/http.ts", "../../validation.ts", "../../adapters/result.ts", "../../adapters/graphql.ts", "../../adapters/grpc.ts", "../../adapters/factory.ts", "../../config.ts"],
|
|
3
|
+
"sources": ["../../mpc-proxy.ts", "../../errors.ts", "../../adapters/http.ts", "../../validation.ts", "../../adapters/result.ts", "../../adapters/transformer.ts", "../../adapters/graphql.ts", "../../adapters/grpc.ts", "../../adapters/factory.ts", "../../config.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import { FastMCP } from '@kingecg/fastmcp';\nimport { IncomingMessage } from 'http'\nimport * as types from './types';\nimport { defaultAdapterFactory } from './adapters/factory';\nimport { mcpOptionsSchema, validate, type ValidatedMcpOptions } from './validation';\nimport { ConfigurationError, ValidationError } from './errors';\nimport type { EventStore } from \"@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js\";\nimport { convertParamsInConfig } from './config';\nimport type z from 'zod';\nexport class McpProxy {\n server: FastMCP|undefined = undefined\n private _toolhandlers: Record<string, types.ServiceAdapter> = {}\n private validatedOptions: ValidatedMcpOptions;\n \n constructor(options: z.infer<typeof mcpOptionsSchema>) {\n this.validatedOptions = convertParamsInConfig(validate(mcpOptionsSchema, options, 'MCP configuration'));\n this._createMcpServer()\n } \n \n _createMcpServer() { \n // 类型断言:验证已经确保version格式正确\n const version = this.validatedOptions.version as `${number}.${number}.${number}`;\n \n this.server = new FastMCP({\n name: this.validatedOptions.name,\n version: version,\n authenticate: async (req: IncomingMessage) => {\n let ret: Record<string, any> = {};\n if (this.validatedOptions.authedFn) {\n ret = await this.validatedOptions.authedFn(req);\n }\n if (this.validatedOptions.headers) {\n ret.headers = this.validatedOptions.headers.map(h => req.headers[h]);\n }\n return ret;\n }\n })\n \n for (const toolName in this.validatedOptions.tools) {\n const tool = this.validatedOptions.tools[toolName];\n if (tool) {\n this._registerTool(toolName, tool as types.ToolDefine);\n }\n }\n }\n \n private _registerTool(toolName: string, tool: types.ToolDefine) {\n if (!tool.type) {\n throw new ConfigurationError(`Tool '${toolName}' must have a type`);\n }\n \n try {\n if(!tool.execute){\n const adapter = defaultAdapterFactory.createAdapter(tool.type, tool.options, tool.resultProcessRule);\n this._toolhandlers[toolName] = adapter;\n }\n \n \n this.server!.addTool({\n name: toolName,\n description: tool.description,\n parameters: tool.params,\n execute: async (args, context) => {\n if(tool.defaultParams && typeof args === 'object'){\n args = {...tool.defaultParams, ...args};\n }\n if(tool.execute){\n return await tool.execute(args, context);\n }\n if( this._toolhandlers[toolName]){\n const adapter = this._toolhandlers[toolName];\n return await adapter.call(args, context);\n }\n return\n } \n });\n } catch (error) {\n if (error instanceof ValidationError || error instanceof ConfigurationError) {\n throw new ConfigurationError(\n `Invalid configuration for tool '${toolName}': ${error.message}`,\n (error as any).details\n );\n }\n throw error;\n }\n }\n \n private _convertTransportForFastMCP(): Partial<{\n httpStream: {\n enableJsonResponse?: boolean;\n endpoint?: `/${string}`;\n eventStore?: EventStore;\n host?: string;\n port: number;\n stateless?: boolean;\n };\n transportType: \"httpStream\" | \"stdio\";\n }> {\n const transport = { ...this.validatedOptions.transport };\n \n if (transport.httpStream) {\n const httpStream = { ...transport.httpStream };\n if (httpStream.endpoint) {\n // 类型转换:验证已经确保endpoint以/开头\n httpStream.endpoint = httpStream.endpoint as `/${string}`;\n }\n if (httpStream.eventStore) {\n httpStream.eventStore = httpStream.eventStore as EventStore;\n }\n \n return {\n ...transport,\n httpStream: httpStream as {\n enableJsonResponse?: boolean;\n endpoint?: `/${string}`;\n eventStore?: EventStore;\n host?: string;\n port: number;\n stateless?: boolean;\n }\n };\n }\n \n return transport as any;\n }\n \n async start() {\n if(!this.server){\n throw new ConfigurationError('Server not created');\n }\n const convertedTransport = this._convertTransportForFastMCP();\n await this.server.start(convertedTransport);\n }\n}",
|
|
6
6
|
"export class MCPError extends Error {\n constructor(\n message: string,\n public readonly code: string,\n public readonly statusCode?: number,\n public readonly details?: Record<string, any>\n ) {\n super(message);\n this.name = 'MCPError';\n }\n}\n\nexport class ValidationError extends MCPError {\n constructor(message: string, details?: Record<string, any>) {\n super(message, 'VALIDATION_ERROR', 400, details);\n this.name = 'ValidationError';\n }\n}\n\nexport class ConfigurationError extends MCPError {\n constructor(message: string, details?: Record<string, any>) {\n super(message, 'CONFIGURATION_ERROR', 500, details);\n this.name = 'ConfigurationError';\n }\n}\n\nexport class AdapterError extends MCPError {\n constructor(message: string, public readonly adapterName: string, details?: Record<string, any>) {\n super(message, 'ADAPTER_ERROR', 502, { adapterName, ...details });\n this.name = 'AdapterError';\n }\n}\n\nexport class AuthenticationError extends MCPError {\n constructor(message: string, details?: Record<string, any>) {\n super(message, 'AUTHENTICATION_ERROR', 401, details);\n this.name = 'AuthenticationError';\n }\n}\n\nexport class RateLimitError extends MCPError {\n constructor(message: string, details?: Record<string, any>) {\n super(message, 'RATE_LIMIT_ERROR', 429, details);\n this.name = 'RateLimitError';\n }\n}\n\nexport type ErrorType = \n | 'VALIDATION_ERROR'\n | 'CONFIGURATION_ERROR'\n | 'ADAPTER_ERROR'\n | 'AUTHENTICATION_ERROR'\n | 'RATE_LIMIT_ERROR'\n | 'INTERNAL_ERROR';",
|
|
7
7
|
"import \"axios\";\nimport type {\n AudioContent,\n ContentResult,\n Context,\n ImageContent,\n ResourceContent,\n ResourceLink,\n TextContent,\n ToolParameters,\n} from \"@kingecg/fastmcp\";\nimport type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport type { ResultProcessRule, ServiceAdapter } from \"../types\";\nimport type { AxiosRequestConfig } from \"axios\";\nimport axios from \"axios\";\nimport { httpAdapterConfigSchema, validate } from \"../validation\";\nimport { AdapterError } from \"../errors\";\nimport { makeResponseContent } from \"./result\";\n\nexport class HttpAdapter implements ServiceAdapter {\n private url: string = \"\";\n private method = \"POST\";\n private headers: Record<string, string> = {};\n private axiosConfig: AxiosRequestConfig = {};\n private timeout?: number;\n private retryConfig?: { attempts: number; backoff: number };\n private resultRule?: ResultProcessRule;\n config(\n option: Record<string, any>,\n rule: ResultProcessRule | undefined = undefined,\n ) {\n this.resultRule = rule;\n const validatedConfig = validate(\n httpAdapterConfigSchema,\n option,\n \"HTTP adapter configuration\",\n );\n\n this.url = validatedConfig.url;\n this.method = validatedConfig.method;\n this.headers = validatedConfig.headers;\n this.timeout = validatedConfig.timeout;\n this.retryConfig = validatedConfig.retry;\n\n this.axiosConfig = {\n method: this.method,\n url: this.url,\n headers: this.headers,\n timeout: this.timeout,\n };\n }\n\n private async executeWithRetry<T>(fn: () => Promise<T>): Promise<T> {\n if (!this.retryConfig) {\n return fn();\n }\n\n const { attempts, backoff } = this.retryConfig;\n let lastError: Error;\n\n for (let attempt = 1; attempt <= attempts; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error as Error;\n\n if (attempt < attempts) {\n await new Promise((resolve) =>\n setTimeout(resolve, backoff * attempt),\n );\n }\n }\n }\n\n throw lastError!;\n }\n\n async call(\n args: StandardSchemaV1.InferOutput<any>,\n context: Context<any>,\n ): Promise<\n | AudioContent\n | ContentResult\n | ImageContent\n | ResourceContent\n | ResourceLink\n | string\n | TextContent\n | void\n > {\n const executeRequest = async () => {\n const axiosConfig = { ...this.axiosConfig };\n\n if (this.method.toUpperCase() === \"GET\") {\n axiosConfig.params = args;\n } else {\n axiosConfig.data = args;\n }\n\n try {\n const response = await axios.request(axiosConfig);\n let result = response.data;\n if (this.resultRule) {\n result = makeResponseContent(result, this.resultRule);\n return result;\n }\n return;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n throw new AdapterError(\n `HTTP request failed: ${error.message}`,\n \"http\",\n {\n url: this.url,\n method: this.method,\n statusCode: error.response?.status,\n responseData: error.response?.data,\n },\n );\n }\n throw new AdapterError(\n `Request failed: ${(error as Error).message}`,\n \"http\",\n { url: this.url, method: this.method },\n );\n }\n };\n\n return this.executeWithRetry(executeRequest);\n }\n}\n",
|
|
8
|
-
"import { z } from 'zod';\nimport { ValidationError } from './errors';\nimport type { IncomingMessage } from 'http';\n\n// 自定义验证器用于authenticate函数\nconst authenticateSchema = z.custom<\n (request: IncomingMessage) => Promise<Record<string, any>>\n>((val) => typeof val === 'function', {\n message: 'authedFn must be a function that returns a Promise',\n});\n\n// 自定义验证器用于工具执行函数\nconst toolExecuteSchema = z.custom<\n (args: any, context: any) => Promise<any>\n>((val) => typeof val === 'function', {\n message: 'execute must be a function',\n});\nexport const ParamTypeUnion:z.ZodType= z.union([\n z.literal('string'),\n z.literal('number'),\n z.literal('boolean'),\n z.literal('any')\n])\nexport const AbbToolParamType:z.ZodType= z.string().regex(/^(string|number|boolean|any):/)\nexport const ParamTypObject:z.ZodType= z.object({\n type: ParamTypeUnion,\n description: z.string().optional()\n})\nexport const ParamObjectType:z.ZodType= z.lazy(()=>z.object({\n type: z.literal('object'),\n description: z.string().optional(),\n properties: z.record(z.string(), z.union([ ParamTypeUnion,\n ParamTypObject, \n ParamObjectType,\n ParamArrayType,\n AbbToolParamType,\n z.record(z.string(),ParamTypeUnion),\n z.array(ParamTypeUnion)]))\n}) )\nexport const ParamArrayType:z.ZodType= z.lazy(()=>z.object({\n type: z.literal('array'),\n description: z.string().optional(),\n items: z.union([ ParamTypeUnion,\n ParamTypObject, \n ParamObjectType,\n ParamArrayType,\n AbbToolParamType,\n z.record(z.string(),ParamTypeUnion),\n z.array(ParamTypeUnion)])}));\n\nexport const RegularDefineSchema = z.lazy(()=>z.union([\n ParamTypObject,\n ParamObjectType,\n ParamArrayType,\n AbbToolParamType\n]))\nexport const ToolParamSchema = z.union([\n ParamTypeUnion,\n ParamTypObject, \n ParamObjectType,\n ParamArrayType,\n z.record(z.string(),ParamTypeUnion),\n z.array(ParamTypeUnion)\n])\nexport const ToolDefineSchema = z.object({\n type: z.string().min(1, 'Tool type is required'),\n description: z.string().optional(),\n params: ToolParamSchema.optional(), // ToolParameters from fastmcp\n outputs: ToolParamSchema.optional(),\n options: z.record(z.string(), z.any()),\n execute: toolExecuteSchema.optional(),\n});\n// MCP配置验证\nexport const mcpOptionsSchema = z.object({\n name: z.string().min(1, 'Name is required'),\n version: z.string().regex(/^\\d+\\.\\d+\\.\\d+$/, 'Version must be in format x.y.z'),\n headers: z.array(z.string()).optional(),\n authedFn: authenticateSchema.optional(),\n transport: z.object({\n httpStream: z.object({\n enableJsonResponse: z.boolean().optional(),\n endpoint: z.string().regex(/^\\/\\w+/, 'Endpoint must start with /').optional(),\n eventStore: z.any().optional(),\n host: z.string().optional(),\n port: z.number().int().min(1).max(65535),\n stateless: z.boolean().optional(),\n }).optional(),\n transportType: z.enum(['httpStream', 'stdio']).optional(),\n }).partial(),\n tools: z.record(z.string(), ToolDefineSchema),\n}).strict();\n\n// 工具参数验证基础模式\nexport const toolParamsSchema = z.object({}).passthrough(); // 允许任意参数,但可以进一步约束\n\n// HTTP适配器配置验证\nexport const httpAdapterConfigSchema = z.object({\n url: z.string().url('Valid URL is required'),\n method: z.enum(['GET', 'POST', 'PUT', 'DELETE', 'PATCH']).default('POST'),\n headers: z.record(z.string(), z.string()).default({}),\n timeout: z.number().int().positive().optional(),\n retry: z.object({\n attempts: z.number().int().min(1).max(10).default(3),\n backoff: z.number().positive().default(1000),\n }).optional(),\n});\n\n// 通用验证函数\nexport function validate<T>(schema: z.ZodSchema<T>, data: unknown, context?: string): T {\n const result = schema.safeParse(data);\n \n if (!result.success) {\n const details = result.error.issues.map((err: any) => ({\n path: err.path.join('.'),\n message: err.message,\n code: err.code,\n receivedValue: err.received,\n expected: err.expected,\n }));\n \n // 构建更友好的错误消息,包含所有错误细节\n let message = context \n ? `${context} validation failed:\\n`\n : 'Validation failed:\\n';\n \n message += result.error.issues.map((err: any, index: number) => \n ` ${index + 1}. Field \"${err.path.join('.')}\" - ${err.message}`\n ).join('\\n');\n \n throw new ValidationError(message, { details });\n }\n \n return result.data;\n}\n\n// 类型推断\nexport type ValidatedMcpOptions = z.infer<typeof mcpOptionsSchema>;\nexport type ValidatedHttpAdapterConfig = z.infer<typeof httpAdapterConfigSchema>;",
|
|
9
|
-
"import type {\n AudioContent,\n ContentResult,\n TextContent,\n StructContent,\n ImageContent,\n} from \"@kingecg/fastmcp\";\nimport type { ResultProcessRule } from \"../types\";\nimport * as _ from \"lodash\";\
|
|
8
|
+
"import { z } from 'zod';\nimport { ValidationError } from './errors';\nimport type { IncomingMessage } from 'http';\n\n// 自定义验证器用于authenticate函数\nconst authenticateSchema = z.custom<\n (request: IncomingMessage) => Promise<Record<string, any>>\n>((val) => typeof val === 'function', {\n message: 'authedFn must be a function that returns a Promise',\n});\n\n// 自定义验证器用于工具执行函数\nconst toolExecuteSchema = z.custom<\n (args: any, context: any) => Promise<any>\n>((val) => typeof val === 'function', {\n message: 'execute must be a function',\n});\nexport const ParamTypeUnion:z.ZodType= z.union([\n z.literal('string'),\n z.literal('number'),\n z.literal('boolean'),\n z.literal('any')\n])\nexport const AbbToolParamType:z.ZodType= z.string().regex(/^(string|number|boolean|any):/)\nexport const ParamTypObject:z.ZodType= z.object({\n type: ParamTypeUnion,\n description: z.string().optional()\n})\nexport const ParamObjectType:z.ZodType= z.lazy(()=>z.object({\n type: z.literal('object'),\n description: z.string().optional(),\n properties: z.record(z.string(), z.union([ ParamTypeUnion,\n ParamTypObject, \n ParamObjectType,\n ParamArrayType,\n AbbToolParamType,\n z.record(z.string(),ParamTypeUnion),\n z.array(ParamTypeUnion)]))\n}) )\nexport const ParamArrayType:z.ZodType= z.lazy(()=>z.object({\n type: z.literal('array'),\n description: z.string().optional(),\n items: z.union([ ParamTypeUnion,\n ParamTypObject, \n ParamObjectType,\n ParamArrayType,\n AbbToolParamType,\n z.record(z.string(),ParamTypeUnion),\n z.array(ParamTypeUnion)])}));\n\nexport const RegularDefineSchema = z.lazy(()=>z.union([\n ParamTypObject,\n ParamObjectType,\n ParamArrayType,\n AbbToolParamType\n]))\nexport const ToolParamSchema = z.union([\n ParamTypeUnion,\n ParamTypObject, \n ParamObjectType,\n ParamArrayType,\n z.record(z.string(),ParamTypeUnion),\n z.array(ParamTypeUnion)\n])\nexport const ToolDefineSchema = z.object({\n type: z.string().min(1, 'Tool type is required'),\n description: z.string().optional(),\n params: ToolParamSchema.optional(), // ToolParameters from fastmcp\n outputs: ToolParamSchema.optional(),\n options: z.record(z.string(), z.any()),\n execute: toolExecuteSchema.optional(),\n resultProcessRule: z.object({\n resultType: z.enum(['audio', 'image', 'resource', 'resourceLink', 'text', 'struct']),\n processMethod: z.enum(['passThrough', 'selector', 'fixedText', 'transform']),\n transforms: z.array(z.union([\n z.object({\n name: z.string(),\n params: z.record(z.string(), z.any()).optional(),\n }),\n z.function({\n input: z.any(),\n output: z.any(),\n })\n ])).optional(),\n selector: z.union([z.string().optional(),z.record(z.string(), z.string())]).optional(),\n fixedResponse: z.object({\n success: z.string(),\n error: z.string(),\n }).optional(),\n }).optional(),\n});\n// MCP配置验证\nexport const mcpOptionsSchema = z.object({\n name: z.string().min(1, 'Name is required'),\n version: z.string().regex(/^\\d+\\.\\d+\\.\\d+$/, 'Version must be in format x.y.z'),\n headers: z.array(z.string()).optional(),\n authedFn: authenticateSchema.optional(),\n transport: z.object({\n httpStream: z.object({\n enableJsonResponse: z.boolean().optional(),\n endpoint: z.string().regex(/^\\/\\w+/, 'Endpoint must start with /').optional(),\n eventStore: z.any().optional(),\n host: z.string().optional(),\n port: z.number().int().min(1).max(65535),\n stateless: z.boolean().optional(),\n }).optional(),\n transportType: z.enum(['httpStream', 'stdio']).optional(),\n }).partial(),\n tools: z.record(z.string(), ToolDefineSchema),\n}).strict();\n\n// 工具参数验证基础模式\nexport const toolParamsSchema = z.object({}).passthrough(); // 允许任意参数,但可以进一步约束\n\n// HTTP适配器配置验证\nexport const httpAdapterConfigSchema = z.object({\n url: z.string().url('Valid URL is required'),\n method: z.enum(['GET', 'POST', 'PUT', 'DELETE', 'PATCH']).default('POST'),\n headers: z.record(z.string(), z.string()).default({}),\n timeout: z.number().int().positive().optional(),\n retry: z.object({\n attempts: z.number().int().min(1).max(10).default(3),\n backoff: z.number().positive().default(1000),\n }).optional(),\n});\n\n// 通用验证函数\nexport function validate<T>(schema: z.ZodSchema<T>, data: unknown, context?: string): T {\n const result = schema.safeParse(data);\n \n if (!result.success) {\n const details = result.error.issues.map((err: any) => ({\n path: err.path.join('.'),\n message: err.message,\n code: err.code,\n receivedValue: err.received,\n expected: err.expected,\n }));\n \n // 构建更友好的错误消息,包含所有错误细节\n let message = context \n ? `${context} validation failed:\\n`\n : 'Validation failed:\\n';\n \n message += result.error.issues.map((err: any, index: number) => \n ` ${index + 1}. Field \"${err.path.join('.')}\" - ${err.message}`\n ).join('\\n');\n \n throw new ValidationError(message, { details });\n }\n \n return result.data;\n}\n\n// 类型推断\nexport type ValidatedMcpOptions = z.infer<typeof mcpOptionsSchema>;\nexport type ValidatedHttpAdapterConfig = z.infer<typeof httpAdapterConfigSchema>;",
|
|
9
|
+
"import type {\n AudioContent,\n ContentResult,\n TextContent,\n StructContent,\n ImageContent,\n} from \"@kingecg/fastmcp\";\nimport type { ResultProcessRule } from \"../types\";\nimport * as _ from \"lodash\";\nimport {transformers, runTransforms} from \"./transformer\";\nexport function makeMediaContent(\n result: string | Buffer,\n mimeType: string,\n): AudioContent | ImageContent {\n return result instanceof Buffer\n ? {\n data: result.toString(\"base64\"),\n mimeType,\n type: mimeType.startsWith(\"image\") ? \"image\" : \"audio\",\n }\n : {\n data: result as string,\n mimeType,\n type: mimeType.startsWith(\"image\") ? \"image\" : \"audio\",\n };\n}\nexport function makeResponseContent(\n result: any,\n rule: ResultProcessRule,\n): TextContent | StructContent | void {\n switch (rule.resultType) {\n case \"text\":\n return makeTextContent(result, rule);\n case \"struct\":\n return makeStructContent(result, rule);\n default:\n return;\n }\n}\nfunction makeStructContent(result: any, rule: ResultProcessRule) {\n const content: StructContent = {\n type: \"struct\",\n structuredContent: {},\n };\n if (rule.processMethod === \"passThrough\") {\n content.structuredContent = result;\n } else if (rule.processMethod === \"selector\") {\n if (typeof rule.selector === \"string\") {\n content.structuredContent = transformers.pick(result, rule.selector);\n } else if (typeof rule.selector === \"object\" && rule.selector) {\n for (const key in rule.selector) {\n const propertyPath = rule.selector[key] || \".\";\n const value = transformers.pick(result, propertyPath);\n _.set(content.structuredContent, key, value);\n }\n }\n } else if (rule.processMethod === \"transform\") {\n if(!rule.transforms){\n throw new Error(\"Transforms must be provided for transform process method\");\n }\n content.structuredContent = runTransforms(rule.transforms, result);\n }\n return content;\n}\n\nfunction makeTextContent(result: any, rule: ResultProcessRule): TextContent {\n let content: TextContent = {\n text: result,\n type: \"text\" as const,\n };\n if (rule.processMethod === \"selector\") {\n if (typeof rule.selector !== \"string\") {\n content.text = \"Error:For text content, selector must be a string\";\n } else {\n const selector = _.get(result, rule.selector);\n if (selector) {\n content.text = selector;\n } else {\n content.text = \"Error:Selector not found\";\n }\n }\n } else if (rule.processMethod === \"passThrough\") {\n content.text = typeof result === \"string\" ? result : JSON.stringify(result);\n } else if (rule.processMethod === \"fixedText\") {\n if (rule.fixedResponse) {\n content.text =\n result instanceof Error\n ? rule.fixedResponse.error\n : rule.fixedResponse.success;\n }\n } else if (rule.processMethod === \"transform\") {\n if(!rule.transforms){\n throw new Error(\"Transforms must be provided for transform process method\");\n }\n content.text = runTransforms(rule.transforms, result);\n }\n return content;\n}\n",
|
|
10
|
+
"import * as _ from 'lodash'\nimport type { Transform } from '../types'\n\nfunction _pic(obj:Object,selector:string){\n if(selector === '*'){\n return obj\n }\n if(typeof obj !== 'object'){\n \n return undefined\n }\n if(selector.indexOf('[$el]') === -1){\n \n return _.get(obj,selector)\n }\n const [aselector,el] = selector.split('[$el]')\n const arr = !aselector? obj : _.get(obj,aselector.substring(0,aselector.length))\n if(!Array.isArray(arr)){\n \n return undefined\n }\n const elSelector = el? el.substring(1):''\n\n if(!elSelector){\n return arr\n }\n const result:Array<any> = arr.map(el=>_pic(el,elSelector)).filter(el=>!!el)\n \n if(Array.isArray(result[0])){\n // flat \n return _.flatten(result)\n }\n return result\n}\nfunction pick(obj:any, selectors:string|Record<string, string>):any{\n if(typeof obj !== 'object' && !Array.isArray(obj)){\n return undefined\n }\n if(typeof selectors === 'string'){\n return _pic(obj,selectors)\n }\n let result:any = {}\n for(const [key,selector] of Object.entries(selectors)){\n const value = _pic(obj,selector)\n _.set(result,key,value)\n }\n return result\n}\n\nfunction passthru(obj:any):any {\n return obj\n}\n\nfunction map(obj:any, mpfn:(el:any)=>any):any{\n if(Array.isArray(obj)){\n return obj.map(mpfn)\n }\n return mpfn(obj)\n}\n\nfunction ensureString(obj:any): string | Array<string> {\n if(Array.isArray(obj)){\n return obj.map(el=>{\n if(typeof el === 'string'){\n return el\n } else {\n return JSON.stringify(el)\n }\n })\n } else {\n if(typeof obj === 'string'){\n return obj\n } else {\n return JSON.stringify(obj)\n }\n }\n}\n\ntype TransformerFunction = (obj: any, params?: any) => any;\n\nexport const transformers = {\n pick,\n passthru,\n map,\n ensureString\n}\n\nexport function runTransforms(transforms:Transform[], obj:any):any{\n let v = obj\n for(const t of transforms){\n if(typeof t === 'object'){\n const {name,params} = t\n const fn = (transformers as Record<string, TransformerFunction>)[name]\n if(typeof fn === 'function'){\n console.log(`Running transform ${name} with params ${params}`)\n v = fn(v,params)\n } else {\n throw new Error(`Transformer ${name} not found`)\n }\n } else if(typeof t === 'function'){\n v = t(v)\n } else {\n throw new Error(`Invalid transform ${t}`)\n }\n }\n return v;\n}",
|
|
10
11
|
"import type {\n AudioContent,\n ContentResult,\n Context,\n ImageContent,\n ResourceContent,\n ResourceLink,\n TextContent,\n} from \"@kingecg/fastmcp\";\nimport type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport type { ResultProcessRule, ServiceAdapter } from \"../types\";\nimport axios from \"axios\";\nimport { validate } from \"../validation\";\nimport { AdapterError, ValidationError } from \"../errors\";\nimport { z } from \"zod\";\nimport { makeResponseContent } from \"./result\";\n\n// GraphQL适配器配置验证\nexport const graphqlAdapterConfigSchema = z.object({\n endpoint: z.string().url(\"Valid GraphQL endpoint URL is required\"),\n headers: z.record(z.string(), z.string()).default({}),\n timeout: z.number().int().positive().optional(),\n // GraphQL特定配置\n operationName: z.string().optional(),\n variables: z.record(z.string(), z.any()).optional(),\n // 重试配置\n retry: z\n .object({\n attempts: z.number().int().min(1).max(10).default(3),\n backoff: z.number().positive().default(1000),\n })\n .optional(),\n});\n\nexport type GraphQLAdapterConfig = z.infer<typeof graphqlAdapterConfigSchema>;\n\nexport class GraphQLAdapter implements ServiceAdapter {\n private adapterConfig: GraphQLAdapterConfig | null = null;\n private endpoint: string = \"\";\n private headers: Record<string, string> = {};\n private timeout?: number;\n private retryConfig?: { attempts: number; backoff: number };\n private operationName?: string;\n private defaultVariables?: Record<string, any>;\n private resultRule?: ResultProcessRule;\n\n config(\n options: Record<string, any>,\n rule: ResultProcessRule | undefined = undefined,\n ): void {\n this.resultRule = rule;\n this.adapterConfig = validate(\n graphqlAdapterConfigSchema,\n options,\n \"GraphQL adapter configuration\",\n );\n\n this.endpoint = this.adapterConfig.endpoint;\n this.headers = this.adapterConfig.headers;\n this.timeout = this.adapterConfig.timeout;\n this.retryConfig = this.adapterConfig.retry;\n this.operationName = this.adapterConfig.operationName;\n this.defaultVariables = this.adapterConfig.variables;\n }\n\n private async executeWithRetry<T>(fn: () => Promise<T>): Promise<T> {\n if (!this.retryConfig) {\n return fn();\n }\n\n const { attempts, backoff } = this.retryConfig;\n let lastError: Error;\n\n for (let attempt = 1; attempt <= attempts; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error as Error;\n\n if (attempt < attempts) {\n await new Promise((resolve) =>\n setTimeout(resolve, backoff * attempt),\n );\n }\n }\n }\n\n throw lastError!;\n }\n\n async call(\n args: StandardSchemaV1.InferOutput<any>,\n context: Context<any>,\n ): Promise<\n | AudioContent\n | ContentResult\n | ImageContent\n | ResourceContent\n | ResourceLink\n | string\n | TextContent\n | void\n > {\n if (!this.adapterConfig) {\n throw new AdapterError(\"GraphQL adapter not configured\", \"graphql\");\n }\n\n const executeRequest = async () => {\n try {\n // 解析GraphQL查询和变量\n const query = args.query || args.body || args.data;\n if (!query) {\n throw new ValidationError(\"GraphQL query is required\", { args });\n }\n\n const variables = args.variables || this.defaultVariables || {};\n const operationName = args.operationName || this.operationName;\n\n const graphqlRequest = {\n query: typeof query === \"string\" ? query : JSON.stringify(query),\n variables,\n operationName,\n };\n\n const response = await axios.post(this.endpoint, graphqlRequest, {\n headers: {\n \"Content-Type\": \"application/json\",\n ...this.headers,\n },\n timeout: this.timeout,\n });\n\n // 检查GraphQL错误\n if (\n response.data.errors &&\n Array.isArray(response.data.errors) &&\n response.data.errors.length > 0\n ) {\n throw new AdapterError(\n `GraphQL errors: ${response.data.errors.map((e: any) => e.message).join(\", \")}`,\n \"graphql\",\n {\n endpoint: this.endpoint,\n errors: response.data.errors,\n },\n );\n }\n\n let result = response.data.data || response.data;\n if (this.resultRule) {\n result = makeResponseContent(result, this.resultRule);\n return result;\n }\n return\n } catch (error) {\n if (axios.isAxiosError(error)) {\n throw new AdapterError(\n `GraphQL request failed: ${error.message}`,\n \"graphql\",\n {\n endpoint: this.endpoint,\n statusCode: error.response?.status,\n responseData: error.response?.data,\n },\n );\n }\n\n if (error instanceof ValidationError || error instanceof AdapterError) {\n throw error;\n }\n\n throw new AdapterError(\n `GraphQL request failed: ${(error as Error).message}`,\n \"graphql\",\n { endpoint: this.endpoint },\n );\n }\n };\n\n return this.executeWithRetry(executeRequest);\n }\n}\n",
|
|
11
12
|
"import type {\n AudioContent,\n ContentResult,\n Context,\n ImageContent,\n ResourceContent,\n ResourceLink,\n TextContent,\n} from \"@kingecg/fastmcp\";\nimport type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport type { ResultProcessRule, ServiceAdapter } from \"../types\";\nimport * as grpc from \"@grpc/grpc-js\";\nimport * as protoLoader from \"@grpc/proto-loader\";\nimport { validate } from \"../validation\";\nimport { AdapterError, ValidationError } from \"../errors\";\nimport { z } from \"zod\";\nimport { makeResponseContent } from \"./result\";\n\n// gRPC适配器配置验证\nexport const grpcAdapterConfigSchema = z.object({\n protoPath: z.string().min(1, \"Proto file path is required\"),\n serviceName: z.string().min(1, \"Service name is required\"),\n methodName: z.string().min(1, \"Method name is required\"),\n address: z.string().min(1, \"gRPC server address is required\"),\n // 连接选项\n credentials: z.enum([\"insecure\", \"ssl\"]).default(\"insecure\"),\n timeout: z.number().int().positive().optional(),\n // 元数据\n metadata: z.record(z.string(), z.string()).optional(),\n // 重试配置\n retry: z\n .object({\n attempts: z.number().int().min(1).max(10).default(3),\n backoff: z.number().positive().default(1000),\n })\n .optional(),\n});\n\nexport type GrpcAdapterConfig = z.infer<typeof grpcAdapterConfigSchema>;\n\nexport class GrpcAdapter implements ServiceAdapter {\n private adapterConfig: GrpcAdapterConfig | null = null;\n private client: any = null;\n private packageDefinition: any = null;\n private proto: any = null;\n private resultRule?: ResultProcessRule;\n\n config(\n options: Record<string, any>,\n rule: ResultProcessRule | undefined = undefined,\n ): void {\n this.resultRule = rule;\n this.adapterConfig = validate(\n grpcAdapterConfigSchema,\n options,\n \"gRPC adapter configuration\",\n );\n this._loadProto();\n }\n\n private _loadProto(): void {\n if (!this.adapterConfig) {\n throw new AdapterError(\"gRPC adapter not configured\", \"grpc\");\n }\n\n try {\n const { protoPath } = this.adapterConfig;\n const packageDefinition = protoLoader.loadSync(protoPath, {\n keepCase: true,\n longs: String,\n enums: String,\n defaults: true,\n oneofs: true,\n });\n\n const protoDescriptor = grpc.loadPackageDefinition(packageDefinition);\n this.packageDefinition = protoDescriptor;\n } catch (error) {\n throw new AdapterError(\n `Failed to load proto file: ${(error as Error).message}`,\n \"grpc\",\n { protoPath: this.adapterConfig.protoPath },\n );\n }\n }\n\n private _getClient(): any {\n if (!this.adapterConfig || !this.packageDefinition) {\n throw new AdapterError(\"gRPC adapter not properly configured\", \"grpc\");\n }\n\n if (this.client) {\n return this.client;\n }\n\n const { serviceName, address, credentials } = this.adapterConfig;\n\n try {\n // 解析服务名称(格式:package.Service)\n const servicePath = serviceName.split(\".\");\n let service = this.packageDefinition;\n\n for (const part of servicePath) {\n service = service[part];\n if (!service) {\n throw new Error(\n `Service part '${part}' not found in proto definition`,\n );\n }\n }\n\n // 创建gRPC客户端\n const credentialsType =\n credentials === \"ssl\"\n ? grpc.credentials.createSsl()\n : grpc.credentials.createInsecure();\n\n this.client = new service(address, credentialsType);\n return this.client;\n } catch (error) {\n throw new AdapterError(\n `Failed to create gRPC client: ${(error as Error).message}`,\n \"grpc\",\n { serviceName, address },\n );\n }\n }\n\n private async executeWithRetry<T>(fn: () => Promise<T>): Promise<T> {\n if (!this.adapterConfig?.retry) {\n return fn();\n }\n\n const { attempts, backoff } = this.adapterConfig.retry;\n let lastError: Error;\n\n for (let attempt = 1; attempt <= attempts; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error as Error;\n\n if (attempt < attempts) {\n await new Promise((resolve) =>\n setTimeout(resolve, backoff * attempt),\n );\n }\n }\n }\n\n throw lastError!;\n }\n\n async call(\n args: StandardSchemaV1.InferOutput<any>,\n context: Context<any>,\n ): Promise<\n | AudioContent\n | ContentResult\n | ImageContent\n | ResourceContent\n | ResourceLink\n | string\n | TextContent\n | void\n > {\n if (!this.adapterConfig) {\n throw new AdapterError(\"gRPC adapter not configured\", \"grpc\");\n }\n\n const executeRequest = async () => {\n try {\n const client = this._getClient();\n const { methodName, metadata, timeout } = this.adapterConfig!;\n\n // 准备请求元数据\n const grpcMetadata = new grpc.Metadata();\n if (metadata) {\n Object.entries(metadata).forEach(([key, value]) => {\n grpcMetadata.add(key, value);\n });\n }\n\n // 查找方法\n const method = client[methodName];\n if (typeof method !== \"function\") {\n throw new Error(`Method '${methodName}' not found on service`);\n }\n\n // 执行gRPC调用\n return new Promise<any>((resolve, reject) => {\n const deadline = timeout ? Date.now() + timeout : undefined;\n\n method.call(\n client,\n args,\n grpcMetadata,\n { deadline },\n (error: any, response: any) => {\n if (error) {\n reject(\n new AdapterError(\n `gRPC call failed: ${error.message}`,\n \"grpc\",\n {\n methodName,\n code: error.code,\n details: error.details,\n },\n ),\n );\n } else {\n // 尝试将响应转换为可序列化的格式\n try {\n // 如果是普通对象或数组,直接返回\n resolve(response);\n } catch (serializationError) {\n // 如果无法序列化,返回字符串表示\n resolve(String(response));\n }\n }\n },\n );\n });\n } catch (error) {\n if (error instanceof AdapterError || error instanceof ValidationError) {\n throw error;\n }\n\n throw new AdapterError(\n `gRPC request failed: ${(error as Error).message}`,\n \"grpc\",\n {\n methodName: this.adapterConfig?.methodName,\n serviceName: this.adapterConfig?.serviceName,\n },\n );\n }\n };\n\n let result = await this.executeWithRetry(executeRequest);\n if (this.resultRule) {\n result = makeResponseContent(result, this.resultRule);\n return result;\n }\n return ;\n }\n}\n",
|
|
12
13
|
"import type { ServiceAdapter, AdapterFactory, ResultProcessRule } from '../types';\nimport { ConfigurationError } from '../errors';\nimport { HttpAdapter } from './http';\nimport { GraphQLAdapter } from './graphql';\nimport { GrpcAdapter } from './grpc';\n\nexport class DefaultAdapterFactory implements AdapterFactory {\n private adapterRegistry: Map<string, new () => ServiceAdapter> = new Map();\n \n constructor() {\n this.registerDefaultAdapters();\n }\n \n private registerDefaultAdapters() {\n // 默认注册HTTP适配器\n this.registerAdapter('http', HttpAdapter);\n // 注册GraphQL适配器\n this.registerAdapter('graphql', GraphQLAdapter);\n // 注册gRPC适配器\n this.registerAdapter('grpc', GrpcAdapter);\n }\n \n createAdapter(type: string, options: Record<string, any>, rule: ResultProcessRule|undefined): ServiceAdapter {\n const AdapterClass = this.adapterRegistry.get(type);\n \n if (!AdapterClass) {\n throw new ConfigurationError(\n `Unsupported adapter type: ${type}`,\n { supportedTypes: this.getSupportedTypes() }\n );\n }\n \n try {\n const adapter = new AdapterClass();\n adapter.config(options, rule);\n return adapter;\n } catch (error) {\n if (error instanceof ConfigurationError) {\n throw error;\n }\n throw new ConfigurationError(\n `Failed to create adapter of type '${type}': ${(error as Error).message}`,\n { adapterType: type, options }\n );\n }\n }\n \n registerAdapter(type: string, adapterClass: new () => ServiceAdapter): void {\n if (this.adapterRegistry.has(type)) {\n throw new ConfigurationError(`Adapter type '${type}' is already registered`);\n }\n this.adapterRegistry.set(type, adapterClass);\n }\n \n getSupportedTypes(): string[] {\n return Array.from(this.adapterRegistry.keys());\n }\n}\n\n// 默认工厂实例\nexport const defaultAdapterFactory = new DefaultAdapterFactory();",
|
|
13
14
|
"import z from \"zod\";\nimport { mcpOptionsSchema, RegularDefineSchema, ToolDefineSchema, ToolParamSchema } from \"./validation\";\nimport type { McpOptions } from \"./types\";\nimport type { ToolParameters } from \"@kingecg/fastmcp\";\n\n\nexport function convertParamsInConfig(config: z.infer<typeof mcpOptionsSchema>): McpOptions {\n const { name, version, headers, authedFn, transport, tools } = config;\n const ntools: any = {}\n if (tools && Object.keys(tools).length > 0) {\n for (const toolName in tools) {\n const { params, outputs, ...remainDef } = (tools[toolName] as z.infer<typeof ToolDefineSchema>)\n ntools[toolName] = {\n ...remainDef\n }\n if (params) {\n ntools[toolName].params = convertParams(params)\n }\n if (outputs) {\n ntools[toolName].outputs = convertParams(outputs)\n }\n }\n }\n\n // 处理 transport 对象,确保 endpoint 符合类型要求\n let processedTransport: any = {\n transportType: 'stdio'\n };\n if (transport && transport.httpStream) {\n if (!transport.httpStream.endpoint) {\n throw new Error('transport.httpStream.endpoint is required');\n }\n // 确保 endpoint 是以 \"/\" 开头的字符串格式\n const endpoint = transport.httpStream.endpoint as string;\n if (!endpoint.startsWith('/')) {\n processedTransport = {\n ...transport,\n httpStream: {\n ...transport.httpStream,\n endpoint: `/${endpoint}` as `/${string}`\n }\n };\n } else {\n processedTransport = {\n ...transport,\n httpStream: {\n ...transport.httpStream,\n endpoint: endpoint as `/${string}`\n }\n };\n }\n }\n\n return {\n name,\n version: version as `${number}.${number}.${number}`,\n headers,\n authedFn,\n transport: processedTransport,\n tools: ntools\n }\n}\n\nexport function convertParams(params: z.infer<typeof ToolParamSchema>): ToolParameters {\n if (Array.isArray(params)) {\n if (params.length !== 1) {\n throw new Error('Only one param is supported for array define');\n }\n const zType = convertParams(params[0]);\n return z.array(zType as z.ZodType)\n }\n if (typeof params === 'object' && params !== null) {\n\n // 处理对象类型定义\n if ('type' in params) {\n try {\n const parsedparams = RegularDefineSchema.parse(params)\n const { type } = (parsedparams as any)\n\n if (type === 'object') {\n \n const objParam = params as { type: 'object', properties: Record<string, any>,description?:string }\n const p = convertParams(objParam.properties);\n \n return (p as z.ZodObject).describe(objParam.description||'');\n } else if (type === 'array') {\n \n const arrParam = params as { type: 'array', items: any,description?:string }\n const p = convertParams(arrParam.items);\n \n return (p as z.ZodType).describe(arrParam.description||'');\n } else {\n const p = convertParams(type);\n return (p as z.ZodType).describe((params as any).description||'');\n }\n } catch (e) {\n throw new Error(`Invalid param type: ${JSON.stringify(params)}`)\n }\n\n\n }\n\n // 处理普通对象(参数定义)\n const rshape: any = {}\n for (const paramName in params) {\n let pname = paramName.endsWith('?') ? paramName.slice(0, -1) : paramName\n const param = (params as any)[paramName]\n const p = convertParams(param)\n if (paramName.endsWith('?')) {\n rshape[pname] = (p as z.ZodType).optional()\n } else {\n rshape[pname] = p\n }\n }\n return z.object(rshape)\n }\n\n const typeStr = params as string // type string maybe '<type>' or '<type>:<description>'\n let desc = ''\n if (typeStr.startsWith('string')) {\n desc = typeStr.slice(7)\n return z.string().describe(desc)\n }\n if (typeStr.startsWith('number')) {\n desc = typeStr.slice(7)\n return z.number().describe(desc)\n }\n if (typeStr.startsWith('boolean')) {\n desc = typeStr.slice(8)\n return z.boolean().describe(desc)\n }\n if(typeStr.startsWith('any')){\n desc = typeStr.slice(4)\n return z.any().describe(desc)\n }\n throw new Error(`Unsupported param type: ${params}`)\n}"
|
|
14
15
|
],
|
|
15
|
-
"mappings": "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",
|
|
16
|
-
"debugId": "
|
|
16
|
+
"mappings": "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",
|
|
17
|
+
"debugId": "4C932906252FA62664756E2164756E21",
|
|
17
18
|
"names": []
|
|
18
19
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Transform } from '../types';
|
|
2
|
+
declare function pick(obj: any, selectors: string | Record<string, string>): any;
|
|
3
|
+
declare function passthru(obj: any): any;
|
|
4
|
+
declare function map(obj: any, mpfn: (el: any) => any): any;
|
|
5
|
+
declare function ensureString(obj: any): string | Array<string>;
|
|
6
|
+
export declare const transformers: {
|
|
7
|
+
pick: typeof pick;
|
|
8
|
+
passthru: typeof passthru;
|
|
9
|
+
map: typeof map;
|
|
10
|
+
ensureString: typeof ensureString;
|
|
11
|
+
};
|
|
12
|
+
export declare function runTransforms(transforms: Transform[], obj: any): any;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/types/types.d.ts
CHANGED
|
@@ -25,9 +25,14 @@ export interface McpOptions {
|
|
|
25
25
|
};
|
|
26
26
|
}
|
|
27
27
|
export type ValidatedMcpOptions = _ValidatedMcpOptions;
|
|
28
|
+
export type Transform = (data: any) => any | {
|
|
29
|
+
name: string;
|
|
30
|
+
params?: any;
|
|
31
|
+
};
|
|
28
32
|
export interface ResultProcessRule {
|
|
29
33
|
resultType: "audio" | "image" | "resource" | "resourceLink" | "text" | "struct";
|
|
30
|
-
processMethod: 'passThrough' | 'selector' | 'fixedText';
|
|
34
|
+
processMethod: 'passThrough' | 'selector' | 'fixedText' | 'transform';
|
|
35
|
+
transforms?: Transform[];
|
|
31
36
|
selector?: string | Record<string, string>;
|
|
32
37
|
fixedResponse?: {
|
|
33
38
|
success: string;
|
|
@@ -14,6 +14,31 @@ export declare const ToolDefineSchema: z.ZodObject<{
|
|
|
14
14
|
outputs: z.ZodOptional<z.ZodUnion<readonly [z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>, z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>, z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>, z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>, z.ZodRecord<z.ZodString, z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>, z.ZodArray<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>]>>;
|
|
15
15
|
options: z.ZodRecord<z.ZodString, z.ZodAny>;
|
|
16
16
|
execute: z.ZodOptional<z.ZodCustom<(args: any, context: any) => Promise<any>, (args: any, context: any) => Promise<any>>>;
|
|
17
|
+
resultProcessRule: z.ZodOptional<z.ZodObject<{
|
|
18
|
+
resultType: z.ZodEnum<{
|
|
19
|
+
audio: "audio";
|
|
20
|
+
image: "image";
|
|
21
|
+
resource: "resource";
|
|
22
|
+
resourceLink: "resourceLink";
|
|
23
|
+
text: "text";
|
|
24
|
+
struct: "struct";
|
|
25
|
+
}>;
|
|
26
|
+
processMethod: z.ZodEnum<{
|
|
27
|
+
transform: "transform";
|
|
28
|
+
passThrough: "passThrough";
|
|
29
|
+
selector: "selector";
|
|
30
|
+
fixedText: "fixedText";
|
|
31
|
+
}>;
|
|
32
|
+
transforms: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
|
|
33
|
+
name: z.ZodString;
|
|
34
|
+
params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
35
|
+
}, z.core.$strip>, z.ZodFunction<z.ZodAny, z.ZodAny>]>>>;
|
|
36
|
+
selector: z.ZodOptional<z.ZodUnion<readonly [z.ZodOptional<z.ZodString>, z.ZodRecord<z.ZodString, z.ZodString>]>>;
|
|
37
|
+
fixedResponse: z.ZodOptional<z.ZodObject<{
|
|
38
|
+
success: z.ZodString;
|
|
39
|
+
error: z.ZodString;
|
|
40
|
+
}, z.core.$strip>>;
|
|
41
|
+
}, z.core.$strip>>;
|
|
17
42
|
}, z.core.$strip>;
|
|
18
43
|
export declare const mcpOptionsSchema: z.ZodObject<{
|
|
19
44
|
name: z.ZodString;
|
|
@@ -41,6 +66,31 @@ export declare const mcpOptionsSchema: z.ZodObject<{
|
|
|
41
66
|
outputs: z.ZodOptional<z.ZodUnion<readonly [z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>, z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>, z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>, z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>, z.ZodRecord<z.ZodString, z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>, z.ZodArray<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>]>>;
|
|
42
67
|
options: z.ZodRecord<z.ZodString, z.ZodAny>;
|
|
43
68
|
execute: z.ZodOptional<z.ZodCustom<(args: any, context: any) => Promise<any>, (args: any, context: any) => Promise<any>>>;
|
|
69
|
+
resultProcessRule: z.ZodOptional<z.ZodObject<{
|
|
70
|
+
resultType: z.ZodEnum<{
|
|
71
|
+
audio: "audio";
|
|
72
|
+
image: "image";
|
|
73
|
+
resource: "resource";
|
|
74
|
+
resourceLink: "resourceLink";
|
|
75
|
+
text: "text";
|
|
76
|
+
struct: "struct";
|
|
77
|
+
}>;
|
|
78
|
+
processMethod: z.ZodEnum<{
|
|
79
|
+
transform: "transform";
|
|
80
|
+
passThrough: "passThrough";
|
|
81
|
+
selector: "selector";
|
|
82
|
+
fixedText: "fixedText";
|
|
83
|
+
}>;
|
|
84
|
+
transforms: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
|
|
85
|
+
name: z.ZodString;
|
|
86
|
+
params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
87
|
+
}, z.core.$strip>, z.ZodFunction<z.ZodAny, z.ZodAny>]>>>;
|
|
88
|
+
selector: z.ZodOptional<z.ZodUnion<readonly [z.ZodOptional<z.ZodString>, z.ZodRecord<z.ZodString, z.ZodString>]>>;
|
|
89
|
+
fixedResponse: z.ZodOptional<z.ZodObject<{
|
|
90
|
+
success: z.ZodString;
|
|
91
|
+
error: z.ZodString;
|
|
92
|
+
}, z.core.$strip>>;
|
|
93
|
+
}, z.core.$strip>>;
|
|
44
94
|
}, z.core.$strip>>;
|
|
45
95
|
}, z.core.$strict>;
|
|
46
96
|
export declare const toolParamsSchema: z.ZodObject<{}, z.core.$loose>;
|