@lynq/lynq 0.8.0 → 0.8.2
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/chunk-63JN2KYH.mjs +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.mjs +1 -1
- package/dist/middleware/auth.d.ts +1 -1
- package/dist/middleware/bearer.d.ts +1 -1
- package/dist/middleware/cache.d.ts +1 -1
- package/dist/middleware/combine.d.ts +1 -1
- package/dist/middleware/credentials.d.ts +1 -1
- package/dist/middleware/guard.d.ts +1 -1
- package/dist/middleware/jwt.d.ts +1 -1
- package/dist/middleware/logger.d.ts +1 -1
- package/dist/middleware/oauth.d.ts +1 -1
- package/dist/middleware/payment.d.ts +1 -1
- package/dist/middleware/rate-limit.d.ts +1 -1
- package/dist/middleware/rate-limit.mjs +1 -1
- package/dist/middleware/retry.d.ts +1 -1
- package/dist/middleware/tip.d.ts +1 -1
- package/dist/middleware/truncate.d.ts +1 -1
- package/dist/middleware/url-action.d.ts +1 -1
- package/dist/store.d.ts +1 -1
- package/dist/store.mjs +1 -1
- package/dist/test.d.ts +1 -1
- package/dist/{types-DyAOlot0.d.ts → types-P-hHI9qc.d.ts} +3 -2
- package/package.json +1 -1
- package/dist/chunk-ICQVA5UM.mjs +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function d(){let r=new Map;return {async get(e){let n=r.get(e);if(n){if(n.expiresAt!==void 0&&Date.now()>n.expiresAt){r.delete(e);return}return n.value}},async set(e,n,t){if(r.size>=1e3){let s=Date.now();for(let[i,o]of r)o.expiresAt!==void 0&&s>o.expiresAt&&r.delete(i);}r.set(e,{value:n,expiresAt:t!==void 0?Date.now()+t*1e3:void 0});},async delete(e){r.delete(e);}}}function u(r){let e=r.get("user");if(e){if(typeof e=="string")return e;if(typeof e=="object"&&e!==null){let n=e;if(typeof n.id=="string")return n.id;if(typeof n.id=="number")return String(n.id);if(typeof n.sub=="string")return n.sub}}}function f(r,e){let n=()=>{let t=u(r);if(!t){let s=r.get("user");if(s){let i=typeof s=="object"?JSON.stringify(s):typeof s;throw new Error(`userStore: session has a "user" but could not resolve an ID. Expected: string | { id: string | number } | { sub: string }. Got: ${i}`)}throw new Error("userStore requires a user in session. Call session.set('user', ...) first.")}return t};return {async get(t){return e.get(`user:${n()}:${t}`)},async set(t,s,i){await e.set(`user:${n()}:${t}`,s,i);},async delete(t){await e.delete(`user:${n()}:${t}`);}}}export{d as a,u as b,f as c};
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { S as ServerOptions, M as MCPServer } from './types-
|
|
2
|
-
export { E as Elicit, a as ElicitFormResult, b as ElicitUrlOptions, c as ElicitUrlResult, H as HttpAdapterOptions, R as ResourceConfig, d as ResourceContent, e as ResourceContext, f as ResourceHandler, g as RootInfo, h as Sample, i as SampleOptions, j as SampleRawParams, k as SampleRawResult, l as ServerInfo, m as Session, n as Store, T as TaskConfig, o as TaskContext, p as TaskControl, q as TaskHandler, r as ToolConfig, s as ToolContext, t as ToolHandler, u as ToolInfo, v as ToolMiddleware, w as ToolResponse, U as User, x as UserStore, y as error, z as image, A as json, B as text } from './types-
|
|
1
|
+
import { S as ServerOptions, M as MCPServer } from './types-P-hHI9qc.js';
|
|
2
|
+
export { E as Elicit, a as ElicitFormResult, b as ElicitUrlOptions, c as ElicitUrlResult, H as HttpAdapterOptions, R as ResourceConfig, d as ResourceContent, e as ResourceContext, f as ResourceHandler, g as RootInfo, h as Sample, i as SampleOptions, j as SampleRawParams, k as SampleRawResult, l as ServerInfo, m as Session, n as Store, T as TaskConfig, o as TaskContext, p as TaskControl, q as TaskHandler, r as ToolConfig, s as ToolContext, t as ToolHandler, u as ToolInfo, v as ToolMiddleware, w as ToolResponse, U as User, x as UserStore, y as error, z as image, A as json, B as text } from './types-P-hHI9qc.js';
|
|
3
3
|
export { memoryStore } from './store.js';
|
|
4
4
|
import '@modelcontextprotocol/sdk/types.js';
|
|
5
5
|
import 'zod';
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import {b as b$1,c,d,a as a$1,k,f,e}from'./chunk-3BJEUP3F.mjs';import {a,c as c$2}from'./chunk-ICQVA5UM.mjs';export{a as memoryStore}from'./chunk-ICQVA5UM.mjs';import {c as c$1,d as d$1,b as b$2,a as a$2}from'./chunk-VAAZWX4U.mjs';export{c as error,d as image,b as json,a as text}from'./chunk-VAAZWX4U.mjs';import {Server}from'@modelcontextprotocol/sdk/server/index.js';import {InMemoryTaskStore}from'@modelcontextprotocol/sdk/experimental/tasks';import {ListToolsRequestSchema,CallToolRequestSchema,ListResourcesRequestSchema,ListResourceTemplatesRequestSchema,ReadResourceRequestSchema}from'@modelcontextprotocol/sdk/types.js';function z(){let t=new Map;function e(){let r=Date.now();for(let[a,l]of t)r-l.createdAt>36e5&&t.delete(a);}function o(r,a,l){return e(),new Promise(p=>{let n;try{n=l.createElicitationCompletionNotifier(r);}catch{}t.set(r,{resolver:p,completionNotifier:n,createdAt:Date.now()});})}function s(r){e();let a=t.get(r);a&&(t.delete(r),a.completionNotifier&&a.completionNotifier().catch(()=>{}),a.resolver());}function i(r){let a=t.get(r);a&&(t.delete(r),a.resolver());}return {register:o,complete:s,cancel:i}}function K(t,e,o){return {async form(s,i){let r=a$1(i),a=await t.elicitInput({message:s,requestedSchema:r});return {action:a.action,content:a.content??{}}},async url(s,i,r){let a=r?.elicitationId??crypto.randomUUID(),l;r?.waitForCompletion&&e&&(l=e(a,t));let p=await t.elicitInput({mode:"url",message:s,url:i,elicitationId:a});if(p.action==="accept"&&l){let n=r?.timeout??3e5,g,v=new Promise((T,d)=>{g=setTimeout(()=>d(new Error("Elicitation timed out")),n);});try{await Promise.race([l,v]);}catch(T){throw o&&o(a),T}finally{clearTimeout(g);}}else l&&o&&o(a);return {action:p.action}}}}function L(t){return async()=>{try{return (await t.listRoots()).roots.map(o=>{let s={uri:o.uri};return o.name!==void 0&&(s.name=o.name),s})}catch{return []}}}function Q(t){async function e(s,i){let r={messages:[{role:"user",content:{type:"text",text:s}}],maxTokens:i?.maxTokens??1024};i?.model!==void 0&&(r.modelPreferences={hints:[{name:i.model}]}),i?.system!==void 0&&(r.systemPrompt=i.system),i?.temperature!==void 0&&(r.temperature=i.temperature),i?.stopSequences!==void 0&&(r.stopSequences=i.stopSequences);let l=(await t.createMessage(r)).content;return l.type==="text"?l.text:""}async function o(s){return t.createMessage(s)}return Object.assign(e,{raw:o})}function O(t,e,o,s,i,r,a,l,p){return {toolName:s,args:i,session:o,signal:r,sessionId:e,elicit:K(t,l,p),roots:L(t),sample:Q(t),text:a$2,json:b$2,error:c$1,image:d$1,store:a,userStore:c$2(o,a)}}function b(t,e){let o=t.sessions.get(e);if(!o&&(o={data:new Map,grants:new Set,toolOverrides:new Map,resourceOverrides:new Map},t.sessions.set(e,o),t.onSessionCreate))try{Promise.resolve(t.onSessionCreate(e)).catch(()=>{});}catch{}return o}function P(t,e$1,o){let s=b(t,o);return e(e$1.hiddenByMiddlewares,e$1.name,s.toolOverrides,s.grants)}function C(t,e$1,o){let s=b(t,o);return e(e$1.hiddenByMiddlewares,e$1.uri,s.resourceOverrides,s.grants)}function x(t,e$1,o){let s=b(t,o);return e(e$1.hiddenByMiddlewares,e$1.name,s.toolOverrides,s.grants)}function _(t,e,o){(o&&t.serverBySession.get(o)||e).sendToolListChanged().catch(()=>{});}function A(t,e,o){(o&&t.serverBySession.get(o)||e).sendResourceListChanged().catch(()=>{});}function w(t,e,o){let s=b(t,o);return {get(i){return s.data.get(i)},set(i,r){s.data.set(i,r);},authorize(i){s.grants.add(i),_(t,e,o),A(t,e,o);},revoke(i){s.grants.delete(i),_(t,e,o),A(t,e,o);},enableTools(...i){for(let r of i)s.toolOverrides.set(r,"enabled");_(t,e,o);},disableTools(...i){for(let r of i)s.toolOverrides.set(r,"disabled");_(t,e,o);},enableResources(...i){for(let r of i)s.resourceOverrides.set(r,"enabled");A(t,e,o);},disableResources(...i){for(let r of i)s.resourceOverrides.set(r,"disabled");A(t,e,o);}}}function F(){let t=new Set,e=new InMemoryTaskStore;return {taskStore:new Proxy(e,{get(s,i,r){return i==="updateTaskStatus"?async(a,l,...p)=>(l==="cancelled"&&t.add(a),s.updateTaskStatus.call(s,a,l,...p)):Reflect.get(s,i,r)}}),cancelledTaskIds:t}}function N(t,e,o,s,i){t.setRequestHandler(ListToolsRequestSchema,(r,a)=>{let l=a.sessionId??"default",p=[];for(let n of e.tools.values())P(e,n,l)&&p.push({name:n.name,description:n.description,inputSchema:a$1(n.input)});for(let n of e.tasks.values())x(e,n,l)&&p.push({name:n.name,description:n.description,inputSchema:a$1(n.input),execution:{taskSupport:"required"}});return {tools:p}}),t.setRequestHandler(CallToolRequestSchema,async(r,a)=>{let{name:l,arguments:p}=r.params,n=a.sessionId??"default",g=e.tools.get(l);if(g){if(!P(e,g,n))return c$1(`Tool not available: ${l}`);let T=p??{},d=O(t,n,w(e,o,n),l,T,a.signal,e.store,(m,f)=>s.register(m,n,f),s.cancel),u=()=>Promise.resolve(g.handler(T,d));return k(g.middlewares,d,u)()}let v=e.tasks.get(l);if(v){if(!x(e,v,n))return c$1(`Tool not available: ${l}`);let T=a.taskStore;if(!T)return c$1("Task store not available");let d=await T.createTask({pollInterval:1e3}),u=d.taskId,c={progress(S,k){if(i.has(u))return;let W=k?`${S}% ${k}`:`${S}%`;T.updateTaskStatus(u,"working",W).catch(()=>{});},get cancelled(){return i.has(u)}},m=p??{},f={...O(t,n,w(e,o,n),l,m,a.signal,e.store,(S,k)=>s.register(S,n,k),s.cancel),task:c},y=async()=>((async()=>{try{let S=await v.handler(m,f);i.has(u)||await T.storeTaskResult(u,"completed",S);}catch(S){if(!i.has(u)){let k=S instanceof Error?S.message:String(S);await T.storeTaskResult(u,"failed",c$1(k)).catch(()=>{});}}})(),{task:d});return k(v.middlewares,f,y)()}return c$1(`Unknown tool: ${l}`)}),t.setRequestHandler(ListResourcesRequestSchema,(r,a)=>{let l=a.sessionId??"default",p=[];for(let n of e.resources.values())!n.isTemplate&&C(e,n,l)&&p.push({uri:n.uri,name:n.name,description:n.description,mimeType:n.mimeType});return {resources:p}}),t.setRequestHandler(ListResourceTemplatesRequestSchema,(r,a)=>{let l=a.sessionId??"default",p=[];for(let n of e.resources.values())n.isTemplate&&C(e,n,l)&&p.push({uriTemplate:n.uri,name:n.name,description:n.description,mimeType:n.mimeType});return {resourceTemplates:p}}),t.setRequestHandler(ReadResourceRequestSchema,async(r,a)=>{let{uri:l}=r.params,p=f(e.resources,l);if(!p)throw new Error(`Unknown resource: ${l}`);let n=a.sessionId??"default";if(!C(e,p,n))throw new Error(`Resource not available: ${l}`);let g=w(e,o,n),v={uri:l,session:g,sessionId:n,roots:L(t),store:e.store,userStore:c$2(g,e.store)},T=O(t,n,g,p.uri,{},a.signal,e.store,(c,m)=>s.register(c,n,m),s.cancel),d=async()=>{let c=await p.handler(l,v);return {contents:[{uri:l,mimeType:c.mimeType??p.mimeType,...c.text!=null?{text:c.text}:{},...c.blob!=null?{blob:c.blob}:{}}]}};return k(p.middlewares,T,d)()});}function G(t,e,o,s,i,r,a){let l={tools:{listChanged:true},resources:{listChanged:true},tasks:{list:{},cancel:{},requests:{tools:{call:{}}}}};function p(){let n=new Server(t,{capabilities:l,taskStore:o});return a(n,e,s,i,r),n}return function(g){let v=null;async function T(){return v||(v=(await import('@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js')).WebStandardStreamableHTTPServerTransport),v}if(g?.sessionless)return async c=>{let m=await T(),f=p(),y=new m({sessionIdGenerator:void 0,enableJsonResponse:g?.enableJsonResponse});return await f.connect(y),y.handleRequest(c)};let d=new Map,u=false;return async c=>{!u&&e.onServerStart&&(u=true,Promise.resolve(e.onServerStart()).catch(()=>{}));let m=await T(),f=c.headers.get("mcp-session-id");if(f){let S=d.get(f);return S?(g?.onRequest&&await g.onRequest(c,f,w(e,s,f)),S.transport.handleRequest(c)):new Response(JSON.stringify({jsonrpc:"2.0",error:{code:-32e3,message:"Session not found"}}),{status:404,headers:{"Content-Type":"application/json"}})}let y=p(),h=new m({sessionIdGenerator:g?.sessionIdGenerator??(()=>crypto.randomUUID()),enableJsonResponse:g?.enableJsonResponse,onsessioninitialized:S=>{d.set(S,{server:y,transport:h}),e.serverBySession.set(S,y),g?.onRequest&&g.onRequest(c,S,w(e,s,S));},onsessionclosed:S=>{d.delete(S),e.serverBySession.delete(S),e.sessions.delete(S),e.onSessionDestroy&&Promise.resolve(e.onSessionDestroy(S)).catch(()=>{});}});return await y.connect(h),h.handleRequest(c)}}}function ne(t){let e={store:t.store??a(),globalMiddlewares:[],tools:new Map,resources:new Map,tasks:new Map,sessions:new Map,serverBySession:new Map,onServerStart:t.onServerStart,onSessionCreate:t.onSessionCreate,onSessionDestroy:t.onSessionDestroy},o=z(),{taskStore:s,cancelledTaskIds:i}=F(),r=new Server(t,{capabilities:{tools:{listChanged:true},resources:{listChanged:true},tasks:{list:{},cancel:{},requests:{tools:{call:{}}}}},taskStore:s});N(r,e,r,o,i);function a$1(d){e.globalMiddlewares.push(d);}function l(...d){let u=d[0],c$1=b$1(`tool("${u}")`,d.slice(1));if(typeof c$1.config.name=="string")throw new TypeError(`tool("${u}"): second-to-last argument must be a config object`);let m=c$1.config,f=[...e.globalMiddlewares,...c$1.middlewares],y={name:u,description:m.description,middlewares:f};e.tools.set(u,{name:u,description:m.description,input:m.input,handler:c$1.handler,middlewares:f,hiddenByMiddlewares:c(y,f)});}function p(...d$1){let u=d$1[0],c$1=b$1(`resource("${u}")`,d$1.slice(1));if(typeof c$1.config.name!="string")throw new TypeError(`resource("${u}"): second-to-last argument must be a config object with a "name" property`);let m=c$1.config,f=[...e.globalMiddlewares,...c$1.middlewares],y={name:m.name,description:m.description,middlewares:f},h=u.includes("{");e.resources.set(u,{uri:u,isTemplate:h,uriPattern:h?d(u):null,name:m.name,description:m.description,mimeType:m.mimeType,handler:c$1.handler,middlewares:f,hiddenByMiddlewares:c(y,f)});}function n(...d){let u=d[0],c$1=b$1(`task("${u}")`,d.slice(1));if(typeof c$1.config.name=="string")throw new TypeError(`task("${u}"): second-to-last argument must be a config object`);let m=c$1.config,f=[...e.globalMiddlewares,...c$1.middlewares],y={name:u,description:m.description,middlewares:f};e.tasks.set(u,{name:u,description:m.description,input:m.input,handler:c$1.handler,middlewares:f,hiddenByMiddlewares:c(y,f)});}async function g(){let{StdioServerTransport:d}=await import('@modelcontextprotocol/sdk/server/stdio.js'),u=new d;await r.connect(u),e.onServerStart&&await Promise.resolve(e.onServerStart()).catch(()=>{});}async function v(d){await r.connect(d);}let T=G(t,e,s,r,o,i,N);return {use:a$1,tool:l,resource:p,task:n,stdio:g,http:T,session:d=>w(e,r,d),completeElicitation:o.complete,store:e.store,connect:v,_server:r,_getSession:d=>b(e,d),_isToolVisible(d,u){let c=e.tools.get(d);return c?P(e,c,u):false},_isResourceVisible(d,u){let c=e.resources.get(d);return c?C(e,c,u):false},_isTaskVisible(d,u){let c=e.tasks.get(d);return c?x(e,c,u):false},_createSessionAPI:d=>w(e,r,d)}}export{ne as createMCPServer};
|
|
1
|
+
import {b as b$1,c,d,a as a$1,k,f,e}from'./chunk-3BJEUP3F.mjs';import {a,c as c$2}from'./chunk-63JN2KYH.mjs';export{a as memoryStore}from'./chunk-63JN2KYH.mjs';import {c as c$1,d as d$1,b as b$2,a as a$2}from'./chunk-VAAZWX4U.mjs';export{c as error,d as image,b as json,a as text}from'./chunk-VAAZWX4U.mjs';import {Server}from'@modelcontextprotocol/sdk/server/index.js';import {InMemoryTaskStore}from'@modelcontextprotocol/sdk/experimental/tasks';import {ListToolsRequestSchema,CallToolRequestSchema,ListResourcesRequestSchema,ListResourceTemplatesRequestSchema,ReadResourceRequestSchema}from'@modelcontextprotocol/sdk/types.js';function z(){let t=new Map;function e(){let r=Date.now();for(let[c,d]of t)r-d.createdAt>36e5&&t.delete(c);}function o(r,c,d){return e(),new Promise(m=>{let n;try{n=d.createElicitationCompletionNotifier(r);}catch{}t.set(r,{resolver:m,completionNotifier:n,createdAt:Date.now()});})}function s(r){e();let c=t.get(r);c&&(t.delete(r),c.completionNotifier&&c.completionNotifier().catch(()=>{}),c.resolver());}function i(r){let c=t.get(r);c&&(t.delete(r),c.resolver());}return {register:o,complete:s,cancel:i}}function K(t,e,o){return {async form(s,i){let r=a$1(i),c=await t.elicitInput({message:s,requestedSchema:r});return {action:c.action,content:c.content??{}}},async url(s,i,r){let c=r?.elicitationId??crypto.randomUUID(),d;r?.waitForCompletion&&e&&(d=e(c,t));let m=await t.elicitInput({mode:"url",message:s,url:i,elicitationId:c});if(m.action==="accept"&&d){let n=r?.timeout??3e5,g,y=new Promise((T,a)=>{g=setTimeout(()=>a(new Error("Elicitation timed out")),n);});try{await Promise.race([d,y]);}catch(T){throw o&&o(c),T}finally{clearTimeout(g);}}else d&&o&&o(c);return {action:m.action}}}}function D(t){return async()=>{try{return (await t.listRoots()).roots.map(o=>{let s={uri:o.uri};return o.name!==void 0&&(s.name=o.name),s})}catch{return []}}}function Q(t){async function e(s,i){let r={messages:[{role:"user",content:{type:"text",text:s}}],maxTokens:i?.maxTokens??1024};i?.model!==void 0&&(r.modelPreferences={hints:[{name:i.model}]}),i?.system!==void 0&&(r.systemPrompt=i.system),i?.temperature!==void 0&&(r.temperature=i.temperature),i?.stopSequences!==void 0&&(r.stopSequences=i.stopSequences);let d=(await t.createMessage(r)).content;return d.type==="text"?d.text:""}async function o(s){return t.createMessage(s)}return Object.assign(e,{raw:o})}function O(t,e,o,s,i,r,c,d,m){return {toolName:s,args:i,session:o,signal:r,sessionId:e,elicit:K(t,d,m),roots:D(t),sample:Q(t),text:a$2,json:b$2,error:c$1,image:d$1,store:c,userStore:c$2(o,c)}}function b(t,e){let o=t.sessions.get(e);if(!o&&(o={data:new Map,grants:new Set,toolOverrides:new Map,resourceOverrides:new Map},t.sessions.set(e,o),t.onSessionCreate))try{Promise.resolve(t.onSessionCreate(e)).catch(()=>{});}catch{}return o}function P(t,e$1,o){let s=b(t,o);return e(e$1.hiddenByMiddlewares,e$1.name,s.toolOverrides,s.grants)}function C(t,e$1,o){let s=b(t,o);return e(e$1.hiddenByMiddlewares,e$1.uri,s.resourceOverrides,s.grants)}function x(t,e$1,o){let s=b(t,o);return e(e$1.hiddenByMiddlewares,e$1.name,s.toolOverrides,s.grants)}function _(t,e,o){(o&&t.serverBySession.get(o)||e).sendToolListChanged().catch(()=>{});}function A(t,e,o){(o&&t.serverBySession.get(o)||e).sendResourceListChanged().catch(()=>{});}function w(t,e,o){let s=b(t,o);return {get(i){return s.data.get(i)},set(i,r){s.data.set(i,r);},authorize(i){s.grants.add(i),_(t,e,o),A(t,e,o);},revoke(i){s.grants.delete(i),_(t,e,o),A(t,e,o);},enableTools(...i){for(let r of i)s.toolOverrides.set(r,"enabled");_(t,e,o);},disableTools(...i){for(let r of i)s.toolOverrides.set(r,"disabled");_(t,e,o);},enableResources(...i){for(let r of i)s.resourceOverrides.set(r,"enabled");A(t,e,o);},disableResources(...i){for(let r of i)s.resourceOverrides.set(r,"disabled");A(t,e,o);}}}function F(){let t=new Set,e=new InMemoryTaskStore;return {taskStore:new Proxy(e,{get(s,i,r){return i==="updateTaskStatus"?async(c,d,...m)=>(d==="cancelled"&&t.add(c),s.updateTaskStatus.call(s,c,d,...m)):Reflect.get(s,i,r)}}),cancelledTaskIds:t}}function L(t,e,o,s,i){t.setRequestHandler(ListToolsRequestSchema,(r,c)=>{let d=c.sessionId??"default",m=[];for(let n of e.tools.values())P(e,n,d)&&m.push({name:n.name,description:n.description,inputSchema:a$1(n.input)});for(let n of e.tasks.values())x(e,n,d)&&m.push({name:n.name,description:n.description,inputSchema:a$1(n.input),execution:{taskSupport:"required"}});return {tools:m}}),t.setRequestHandler(CallToolRequestSchema,async(r,c)=>{let{name:d,arguments:m}=r.params,n=c.sessionId??"default",g=e.tools.get(d);if(g){if(!P(e,g,n))return c$1(`Tool not available: ${d}`);let T=m??{},a=O(t,n,w(e,o,n),d,T,c.signal,e.store,(f,S)=>s.register(f,n,S),s.cancel),u=()=>Promise.resolve(g.handler(T,a));return k(g.middlewares,a,u)()}let y=e.tasks.get(d);if(y){if(!x(e,y,n))return c$1(`Tool not available: ${d}`);let T=c.taskStore;if(!T)return c$1("Task store not available");let a=await T.createTask({pollInterval:1e3}),u=a.taskId,l={progress(p,h){if(i.has(u))return;let W=h?`${p}% ${h}`:`${p}%`;T.updateTaskStatus(u,"working",W).catch(()=>{});},get cancelled(){return i.has(u)}},f=m??{},S={...O(t,n,w(e,o,n),d,f,c.signal,e.store,(p,h)=>s.register(p,n,h),s.cancel),task:l},v=async()=>((async()=>{try{let p=await y.handler(f,S);i.has(u)||await T.storeTaskResult(u,"completed",p);}catch(p){if(!i.has(u)){let h=p instanceof Error?p.message:String(p);await T.storeTaskResult(u,"failed",c$1(h)).catch(()=>{});}}})(),{task:a});return k(y.middlewares,S,v)()}return c$1(`Unknown tool: ${d}`)}),t.setRequestHandler(ListResourcesRequestSchema,(r,c)=>{let d=c.sessionId??"default",m=[];for(let n of e.resources.values())!n.isTemplate&&C(e,n,d)&&m.push({uri:n.uri,name:n.name,description:n.description,mimeType:n.mimeType});return {resources:m}}),t.setRequestHandler(ListResourceTemplatesRequestSchema,(r,c)=>{let d=c.sessionId??"default",m=[];for(let n of e.resources.values())n.isTemplate&&C(e,n,d)&&m.push({uriTemplate:n.uri,name:n.name,description:n.description,mimeType:n.mimeType});return {resourceTemplates:m}}),t.setRequestHandler(ReadResourceRequestSchema,async(r,c)=>{let{uri:d}=r.params,m=f(e.resources,d);if(!m)throw new Error(`Unknown resource: ${d}`);let n=c.sessionId??"default";if(!C(e,m,n))throw new Error(`Resource not available: ${d}`);let g=w(e,o,n),y={uri:d,session:g,sessionId:n,roots:D(t),store:e.store,userStore:c$2(g,e.store)},T=O(t,n,g,m.uri,{},c.signal,e.store,(l,f)=>s.register(l,n,f),s.cancel),a=async()=>{let l=await m.handler(d,y);return {contents:[{uri:d,mimeType:l.mimeType??m.mimeType,...l.text!=null?{text:l.text}:{},...l.blob!=null?{blob:l.blob}:{}}]}};return k(m.middlewares,T,a)()});}function G(t,e,o,s,i,r,c){let d={tools:{listChanged:true},resources:{listChanged:true},tasks:{list:{},cancel:{},requests:{tools:{call:{}}}}};function m(){let n=new Server(t,{capabilities:d,taskStore:o});return c(n,e,s,i,r),n}return function(g){let y=null;async function T(){return y||(y=(await import('@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js')).WebStandardStreamableHTTPServerTransport),y}if(g?.sessionless)return async l=>{let f=await T(),S=m(),v=new f({sessionIdGenerator:void 0,enableJsonResponse:g?.enableJsonResponse});return await S.connect(v),v.handleRequest(l)};let a=new Map,u=false;return async l=>{!u&&e.onServerStart&&(u=true,Promise.resolve(e.onServerStart()).catch(()=>{}));let f=await T(),S=l.headers.get("mcp-session-id");if(S){let p=a.get(S);return p?(g?.onRequest&&await g.onRequest(l,S,w(e,s,S)),p.transport.handleRequest(l)):new Response(JSON.stringify({jsonrpc:"2.0",error:{code:-32e3,message:"Session not found"}}),{status:404,headers:{"Content-Type":"application/json"}})}let v=m(),k=new f({sessionIdGenerator:g?.sessionIdGenerator??(()=>crypto.randomUUID()),enableJsonResponse:g?.enableJsonResponse,onsessioninitialized:p=>{a.set(p,{server:v,transport:k}),e.serverBySession.set(p,v),g?.onRequest&&g.onRequest(l,p,w(e,s,p));},onsessionclosed:p=>{a.delete(p),e.serverBySession.delete(p),e.sessions.delete(p),e.onSessionDestroy&&Promise.resolve(e.onSessionDestroy(p)).catch(()=>{});}});return await v.connect(k),v.onclose=()=>{for(let[p,h]of a)if(h.server===v){a.delete(p),e.serverBySession.delete(p),e.sessions.delete(p),e.onSessionDestroy&&Promise.resolve(e.onSessionDestroy(p)).catch(()=>{});break}},k.handleRequest(l)}}}function ne(t){let e={store:t.store??a(),globalMiddlewares:[],tools:new Map,resources:new Map,tasks:new Map,sessions:new Map,serverBySession:new Map,onServerStart:t.onServerStart,onSessionCreate:t.onSessionCreate,onSessionDestroy:t.onSessionDestroy},o=z(),{taskStore:s,cancelledTaskIds:i}=F(),r=new Server(t,{capabilities:{tools:{listChanged:true},resources:{listChanged:true},tasks:{list:{},cancel:{},requests:{tools:{call:{}}}}},taskStore:s});L(r,e,r,o,i),r.onclose=()=>{let a="default";if(e.sessions.delete(a),e.onSessionDestroy)try{Promise.resolve(e.onSessionDestroy(a)).catch(()=>{});}catch{}};function c$1(a){e.globalMiddlewares.push(a);}function d$1(...a){let u=a[0],l=b$1(`tool("${u}")`,a.slice(1));if(typeof l.config.name=="string")throw new TypeError(`tool("${u}"): second-to-last argument must be a config object`);let f=l.config,S=[...e.globalMiddlewares,...l.middlewares],v={name:u,description:f.description,middlewares:S};e.tools.set(u,{name:u,description:f.description,input:f.input,handler:l.handler,middlewares:S,hiddenByMiddlewares:c(v,S)});}function m(...a){let u=a[0],l=b$1(`resource("${u}")`,a.slice(1));if(typeof l.config.name!="string")throw new TypeError(`resource("${u}"): second-to-last argument must be a config object with a "name" property`);let f=l.config,S=[...e.globalMiddlewares,...l.middlewares],v={name:f.name,description:f.description,middlewares:S},k=u.includes("{");e.resources.set(u,{uri:u,isTemplate:k,uriPattern:k?d(u):null,name:f.name,description:f.description,mimeType:f.mimeType,handler:l.handler,middlewares:S,hiddenByMiddlewares:c(v,S)});}function n(...a){let u=a[0],l=b$1(`task("${u}")`,a.slice(1));if(typeof l.config.name=="string")throw new TypeError(`task("${u}"): second-to-last argument must be a config object`);let f=l.config,S=[...e.globalMiddlewares,...l.middlewares],v={name:u,description:f.description,middlewares:S};e.tasks.set(u,{name:u,description:f.description,input:f.input,handler:l.handler,middlewares:S,hiddenByMiddlewares:c(v,S)});}async function g(){let{StdioServerTransport:a}=await import('@modelcontextprotocol/sdk/server/stdio.js'),u=new a;await r.connect(u),e.onServerStart&&await Promise.resolve(e.onServerStart()).catch(()=>{});}async function y(a){await r.connect(a);}let T=G(t,e,s,r,o,i,L);return {use:c$1,tool:d$1,resource:m,task:n,stdio:g,http:T,session:a=>w(e,r,a),completeElicitation:o.complete,store:e.store,connect:y,_server:r,_getSession:a=>b(e,a),_isToolVisible(a,u){let l=e.tools.get(a);return l?P(e,l,u):false},_isResourceVisible(a,u){let l=e.resources.get(a);return l?C(e,l,u):false},_isTaskVisible(a,u){let l=e.tasks.get(a);return l?x(e,l,u):false},_createSessionAPI:a=>w(e,r,a)}}export{ne as createMCPServer};
|
package/dist/middleware/jwt.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import {b}from'../chunk-
|
|
1
|
+
import {b}from'../chunk-63JN2KYH.mjs';import {c}from'../chunk-VAAZWX4U.mjs';function g(t){let{max:a,windowMs:o=6e4}=t,w=t.store===true||t.perUser===true,d=t.perUser===true,l=t.message??`Rate limit exceeded. Max ${a} calls per ${o/1e3}s.`,f=Math.ceil(o/1e3);return {name:"rateLimit",async onCall(e,n){let i=Date.now();if(w){let u=d?`rateLimit:${b(e.session)??"anon"}:${e.toolName}`:`rateLimit:${e.toolName}`,s=await e.store.get(u);return !s||i>=s.resetAt?(await e.store.set(u,{count:1,resetAt:i+o},f),n()):s.count>=a?c(l):(await e.store.set(u,{...s,count:s.count+1},f),n())}let m=`rateLimit:${e.toolName}`,r=e.session.get(m);return !r||i>=r.resetAt?(e.session.set(m,{count:1,resetAt:i+o}),n()):r.count>=a?c(l):(e.session.set(m,{...r,count:r.count+1}),n())}}}export{g as rateLimit};
|
package/dist/middleware/tip.d.ts
CHANGED
package/dist/store.d.ts
CHANGED
package/dist/store.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{c as createUserStore,a as memoryStore,b as resolveUserId}from'./chunk-
|
|
1
|
+
export{c as createUserStore,a as memoryStore,b as resolveUserId}from'./chunk-63JN2KYH.mjs';
|
package/dist/test.d.ts
CHANGED
|
@@ -142,7 +142,8 @@ interface ToolMiddleware {
|
|
|
142
142
|
name: string;
|
|
143
143
|
/** Called when a tool is registered. Return false to hide the tool initially. */
|
|
144
144
|
onRegister?(tool: ToolInfo): boolean | undefined;
|
|
145
|
-
/** Called when a tool is invoked. Must call next() to continue the chain.
|
|
145
|
+
/** Called when a tool is invoked. Must call and return `await next()` to continue the chain.
|
|
146
|
+
* Calling next() without returning its result is undefined behavior. */
|
|
146
147
|
onCall?(c: ToolContext, next: () => Promise<CallToolResult>): Promise<CallToolResult>;
|
|
147
148
|
/** Called after the handler returns. Runs in reverse middleware order. */
|
|
148
149
|
onResult?(result: CallToolResult, c: ToolContext): CallToolResult | Promise<CallToolResult>;
|
|
@@ -153,7 +154,7 @@ interface ToolConfig<TInput = unknown> {
|
|
|
153
154
|
input?: TInput;
|
|
154
155
|
}
|
|
155
156
|
type ToolHandler<TInput = unknown> = (args: InferInput<TInput>, c: ToolContext) => CallToolResult | Promise<CallToolResult>;
|
|
156
|
-
/** @experimental */
|
|
157
|
+
/** @experimental Running tasks are fire-and-forget — no graceful shutdown guarantee. */
|
|
157
158
|
interface TaskConfig<TInput = unknown> {
|
|
158
159
|
description?: string;
|
|
159
160
|
input?: TInput;
|
package/package.json
CHANGED
package/dist/chunk-ICQVA5UM.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
function u(){let t=new Map;return {async get(e){let n=t.get(e);if(n){if(n.expiresAt!==void 0&&Date.now()>n.expiresAt){t.delete(e);return}return n.value}},async set(e,n,r){t.set(e,{value:n,expiresAt:r!==void 0?Date.now()+r*1e3:void 0});},async delete(e){t.delete(e);}}}function o(t){let e=t.get("user");if(e){if(typeof e=="string")return e;if(typeof e=="object"&&e!==null){let n=e;if(typeof n.id=="string")return n.id;if(typeof n.id=="number")return String(n.id);if(typeof n.sub=="string")return n.sub}}}function d(t,e){let n=()=>{let r=o(t);if(!r){let s=t.get("user");if(s){let i=typeof s=="object"?JSON.stringify(s):typeof s;throw new Error(`userStore: session has a "user" but could not resolve an ID. Expected: string | { id: string | number } | { sub: string }. Got: ${i}`)}throw new Error("userStore requires a user in session. Call session.set('user', ...) first.")}return r};return {async get(r){return e.get(`user:${n()}:${r}`)},async set(r,s,i){await e.set(`user:${n()}:${r}`,s,i);},async delete(r){await e.delete(`user:${n()}:${r}`);}}}export{u as a,o as b,d as c};
|