@lynq/lynq 0.7.1 → 0.8.0

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.
Files changed (52) hide show
  1. package/dist/chunk-3BJEUP3F.mjs +1 -0
  2. package/dist/chunk-ICQVA5UM.mjs +1 -0
  3. package/dist/helpers.d.ts +9 -0
  4. package/dist/helpers.mjs +1 -0
  5. package/dist/index.d.ts +2 -2
  6. package/dist/index.mjs +1 -1
  7. package/dist/middleware/auth.d.ts +1 -1
  8. package/dist/middleware/bearer.d.ts +1 -1
  9. package/dist/middleware/cache.d.ts +13 -0
  10. package/dist/middleware/cache.mjs +1 -0
  11. package/dist/middleware/combine.d.ts +1 -1
  12. package/dist/middleware/combine.mjs +1 -1
  13. package/dist/middleware/credentials.d.ts +1 -1
  14. package/dist/middleware/guard.d.ts +1 -1
  15. package/dist/middleware/jwt.d.ts +1 -1
  16. package/dist/middleware/logger.d.ts +1 -1
  17. package/dist/middleware/oauth.d.ts +1 -1
  18. package/dist/middleware/oauth.mjs +1 -1
  19. package/dist/middleware/payment.d.ts +1 -1
  20. package/dist/middleware/payment.mjs +1 -1
  21. package/dist/middleware/rate-limit.d.ts +5 -1
  22. package/dist/middleware/rate-limit.mjs +1 -1
  23. package/dist/middleware/retry.d.ts +17 -0
  24. package/dist/middleware/retry.mjs +1 -0
  25. package/dist/middleware/tip.d.ts +1 -1
  26. package/dist/middleware/truncate.d.ts +1 -1
  27. package/dist/middleware/url-action.d.ts +1 -1
  28. package/dist/pages.d.ts +43 -0
  29. package/dist/{chunk-OJJZGR4B.mjs → pages.mjs} +17 -17
  30. package/dist/store.d.ts +1 -1
  31. package/dist/store.mjs +1 -1
  32. package/dist/test.d.ts +1 -1
  33. package/dist/{types-BdFjg9Tn.d.ts → types-DyAOlot0.d.ts} +15 -1
  34. package/package.json +18 -53
  35. package/dist/adapters/express.d.ts +0 -19
  36. package/dist/adapters/express.mjs +0 -2
  37. package/dist/adapters/hono.d.ts +0 -19
  38. package/dist/adapters/hono.mjs +0 -1
  39. package/dist/chunk-7C4A572Z.mjs +0 -1
  40. package/dist/chunk-BVDKAIOU.mjs +0 -1
  41. package/dist/chunk-INAAPNKG.mjs +0 -1
  42. package/dist/chunk-SPZY5GJA.mjs +0 -1
  43. package/dist/middleware/crypto.d.ts +0 -64
  44. package/dist/middleware/crypto.mjs +0 -2
  45. package/dist/middleware/github.d.ts +0 -54
  46. package/dist/middleware/github.mjs +0 -2
  47. package/dist/middleware/google.d.ts +0 -55
  48. package/dist/middleware/google.mjs +0 -2
  49. package/dist/middleware/stripe.d.ts +0 -60
  50. package/dist/middleware/stripe.mjs +0 -1
  51. package/dist/pages-IPpN74gp.d.ts +0 -26
  52. package/dist/pages-VK55ZBAP.mjs +0 -1
@@ -0,0 +1 @@
1
+ import {createHmac,timingSafeEqual}from'crypto';import {normalizeObjectSchema}from'@modelcontextprotocol/sdk/server/zod-compat.js';import {toJsonSchemaCompat}from'@modelcontextprotocol/sdk/server/zod-json-schema-compat.js';function h(e){if(e==null)return {type:"object"};let t=normalizeObjectSchema(e);return t?toJsonSchemaCompat(t):e}function T(e,t){let o=t[t.length-1];if(typeof o!="function")throw new TypeError(`${e}: last argument must be a handler function`);let n=t[t.length-2];if(n==null||typeof n!="object"||Array.isArray(n))throw new TypeError(`${e}: second-to-last argument must be a config object`);let r=t.slice(0,-2);for(let s of r)if(!s||typeof s!="object"||typeof s.name!="string")throw new TypeError(`${e}: each middleware must have a "name" property`);return {middlewares:r,config:n,handler:o}}function R(e,t){let o=[];for(let n of t)n.onRegister?.(e)===false&&o.push(n.name);return o}function x(e){let o=e.split(/\{[^}]+\}/).map(n=>n.replace(/[.*+?^$|()[\]\\]/g,"\\$&"));return new RegExp(`^${o.join("(.+)")}$`)}function y(e,t,o,n){let r=o.get(t);if(r==="disabled")return false;if(r==="enabled")return true;for(let s of e)if(!n.has(s))return false;return true}function b(e,t){let o=e.get(t);if(o)return o;for(let n of e.values())if(n.isTemplate&&n.uriPattern?.test(t))return n}function $(e,t,o){let n=`${e}:${t}`,r=createHmac("sha256",o).update(n).digest("hex");return `${n}:${r}`}function C(e,t){let o=e.split(":");if(o.length!==3)return null;let[n,r,s]=o,i=createHmac("sha256",t).update(`${n}:${r}`).digest("hex");try{if(!timingSafeEqual(Buffer.from(s,"hex"),Buffer.from(i,"hex")))return null}catch{return null}return {sessionId:n,elicitationId:r}}function M(e,t){if(!e)return false;let o=e.replace(/:\d+$/,"");return t.includes(o)}var S=["localhost","127.0.0.1","::1"];function j(e,t,o){let n=e.filter(l=>l.onCall),r=e.filter(l=>l.onResult).reverse(),s=0,i=async()=>{if(s>=n.length){let a=await o();for(let c of r)a=await c.onResult(a,t);return a}return n[s++].onCall(t,i)};return i}export{h as a,T as b,R as c,x as d,y as e,b as f,$ as g,C as h,M as i,S as j,j as k};
@@ -0,0 +1 @@
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};
@@ -0,0 +1,9 @@
1
+ declare function signState(sessionId: string, elicitationId: string, secret: string): string;
2
+ declare function verifyState(state: string, secret: string): {
3
+ sessionId: string;
4
+ elicitationId: string;
5
+ } | null;
6
+ declare function validateHost(hostHeader: string | null, allowedHosts: string[]): boolean;
7
+ declare const LOCALHOST_HOSTS: string[];
8
+
9
+ export { LOCALHOST_HOSTS, signState, validateHost, verifyState };
@@ -0,0 +1 @@
1
+ export{j as LOCALHOST_HOSTS,g as signState,i as validateHost,h as verifyState}from'./chunk-3BJEUP3F.mjs';
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { S as ServerOptions, M as MCPServer } from './types-BdFjg9Tn.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 UserStore, x as error, y as image, z as json, A as text } from './types-BdFjg9Tn.js';
1
+ import { S as ServerOptions, M as MCPServer } from './types-DyAOlot0.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-DyAOlot0.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 {a,c as c$1}from'./chunk-SPZY5GJA.mjs';export{a as memoryStore}from'./chunk-SPZY5GJA.mjs';import {c,d,b,a as a$1}from'./chunk-VAAZWX4U.mjs';export{c as error,d as image,b as json,a as text}from'./chunk-VAAZWX4U.mjs';import {InMemoryTaskStore}from'@modelcontextprotocol/sdk/experimental/tasks';import {Server}from'@modelcontextprotocol/sdk/server/index.js';import {ListToolsRequestSchema,CallToolRequestSchema,ListResourcesRequestSchema,ListResourceTemplatesRequestSchema,ReadResourceRequestSchema}from'@modelcontextprotocol/sdk/types.js';import {normalizeObjectSchema}from'@modelcontextprotocol/sdk/server/zod-compat.js';import {toJsonSchemaCompat}from'@modelcontextprotocol/sdk/server/zod-json-schema-compat.js';function q(i){if(i==null)return {type:"object"};let l=normalizeObjectSchema(i);return l?toJsonSchemaCompat(l):i}function A(i,l){let c=l[l.length-1];if(typeof c!="function")throw new TypeError(`${i}: last argument must be a handler function`);let a=l[l.length-2];if(a==null||typeof a!="object"||Array.isArray(a))throw new TypeError(`${i}: second-to-last argument must be a config object`);let d=l.slice(0,-2);for(let u of d)if(!u||typeof u!="object"||typeof u.name!="string")throw new TypeError(`${i}: each middleware must have a "name" property`);return {middlewares:d,config:a,handler:c}}function U(i,l){let c=[];for(let a of l)a.onRegister?.(i)===false&&c.push(a.name);return c}function ee(i){let c=i.split(/\{[^}]+\}/).map(a=>a.replace(/[.*+?^$|()[\]\\]/g,"\\$&"));return new RegExp(`^${c.join("(.+)")}$`)}function B(i,l,c,a){let d=c.get(l);if(d==="disabled")return false;if(d==="enabled")return true;for(let u of i)if(!a.has(u))return false;return true}function te(i,l){let c=i.get(l);if(c)return c;for(let a of i.values())if(a.isTemplate&&a.uriPattern?.test(l))return a}function N(i,l,c){let a=i.filter(m=>m.onCall),d=i.filter(m=>m.onResult).reverse(),u=0,f=async()=>{if(u>=a.length){let w=await c();for(let P of d)w=await P.onResult(w,l);return w}return a[u++].onCall(l,f)};return f}function we(i,l,c){return {async form(a,d){let u=q(d),f=await i.elicitInput({message:a,requestedSchema:u});return {action:f.action,content:f.content??{}}},async url(a,d,u){let f=u?.elicitationId??crypto.randomUUID(),m;u?.waitForCompletion&&l&&(m=l(f,i));let w=await i.elicitInput({mode:"url",message:a,url:d,elicitationId:f});if(w.action==="accept"&&m){let P=u?.timeout??3e5,E=new Promise((j,J)=>{setTimeout(()=>J(new Error("Elicitation timed out")),P);});await Promise.race([m,E]);}else m&&c&&c(f);return {action:w.action}}}}function K(i){return async()=>{try{return (await i.listRoots()).roots.map(c=>{let a={uri:c.uri};return c.name!==void 0&&(a.name=c.name),a})}catch{return []}}}function Te(i){async function l(a,d){let u={messages:[{role:"user",content:{type:"text",text:a}}],maxTokens:d?.maxTokens??1024};d?.model!==void 0&&(u.modelPreferences={hints:[{name:d.model}]}),d?.system!==void 0&&(u.systemPrompt=d.system),d?.temperature!==void 0&&(u.temperature=d.temperature),d?.stopSequences!==void 0&&(u.stopSequences=d.stopSequences);let m=(await i.createMessage(u)).content;return m.type==="text"?m.text:""}async function c(a){return i.createMessage(a)}return Object.assign(l,{raw:c})}function V(i,l,c$2,a,d$1,u,f,m){return {toolName:a,session:c$2,signal:d$1,sessionId:l,elicit:we(i,f,m),roots:K(i),sample:Te(i),text:a$1,json:b,error:c,image:d,store:u,userStore:c$1(c$2,u)}}function Ce(i){let l=i.store??a(),c$2=[],a$1=new Map,d=new Map,u=new Map,f=new Map,m=new Map,w=new Map,P=36e5;function E(){let e=Date.now();for(let[t,n]of w)e-n.createdAt>P&&w.delete(t);}function j(e,t,n){return E(),new Promise(o=>{let r;try{r=n.createElicitationCompletionNotifier(e);}catch{}w.set(e,{resolver:o,completionNotifier:r,createdAt:Date.now()});})}function J(e){E();let t=w.get(e);t&&(w.delete(e),t.completionNotifier&&t.completionNotifier().catch(()=>{}),t.resolver());}function L(e){let t=w.get(e);t&&(w.delete(e),t.resolver());}let x=new Set,oe=new InMemoryTaskStore,Q=new Proxy(oe,{get(e,t,n){return t==="updateTaskStatus"?async(o,r,...s)=>(r==="cancelled"&&x.add(o),e.updateTaskStatus.call(e,o,r,...s)):Reflect.get(e,t,n)}}),C=new Server(i,{capabilities:{tools:{listChanged:true},resources:{listChanged:true},tasks:{list:{},cancel:{},requests:{tools:{call:{}}}}},taskStore:Q});function I(e){let t=f.get(e);return t||(t={data:new Map,grants:new Set,toolOverrides:new Map,resourceOverrides:new Map},f.set(e,t)),t}function z(e,t){let n=I(t);return B(e.hiddenByMiddlewares,e.name,n.toolOverrides,n.grants)}function H(e,t){let n=I(t);return B(e.hiddenByMiddlewares,e.uri,n.resourceOverrides,n.grants)}function D(e,t){let n=I(t);return B(e.hiddenByMiddlewares,e.name,n.toolOverrides,n.grants)}function O(e){(e&&m.get(e)||C).sendToolListChanged().catch(()=>{});}function _(e){(e&&m.get(e)||C).sendResourceListChanged().catch(()=>{});}function b(e){let t=I(e);return {get(n){return t.data.get(n)},set(n,o){t.data.set(n,o);},authorize(n){t.grants.add(n),O(e),_(e);},revoke(n){t.grants.delete(n),O(e),_(e);},enableTools(...n){for(let o of n)t.toolOverrides.set(o,"enabled");O(e);},disableTools(...n){for(let o of n)t.toolOverrides.set(o,"disabled");O(e);},enableResources(...n){for(let o of n)t.resourceOverrides.set(o,"enabled");_(e);},disableResources(...n){for(let o of n)t.resourceOverrides.set(o,"disabled");_(e);}}}function X(e){e.setRequestHandler(ListToolsRequestSchema,(t,n)=>{let o=n.sessionId??"default",r=[];for(let s of a$1.values())z(s,o)&&r.push({name:s.name,description:s.description,inputSchema:q(s.input)});for(let s of u.values())D(s,o)&&r.push({name:s.name,description:s.description,inputSchema:q(s.input),execution:{taskSupport:"required"}});return {tools:r}}),e.setRequestHandler(CallToolRequestSchema,async(t,n)=>{let{name:o,arguments:r}=t.params,s=n.sessionId??"default",g=a$1.get(o);if(g){if(!z(g,s))return c(`Tool not available: ${o}`);let T=V(e,s,b(s),o,n.signal,l,(y,k)=>j(y,s,k),L),p=()=>Promise.resolve(g.handler(r??{},T));return N(g.middlewares,T,p)()}let R=u.get(o);if(R){if(!D(R,s))return c(`Tool not available: ${o}`);let T=n.taskStore;if(!T)return c("Task store not available");let p=await T.createTask({pollInterval:1e3}),h=p.taskId,y={progress(S,M){if(x.has(h))return;let pe=M?`${S}% ${M}`:`${S}%`;T.updateTaskStatus(h,"working",pe).catch(()=>{});},get cancelled(){return x.has(h)}},k={...V(e,s,b(s),o,n.signal,l,(S,M)=>j(S,s,M),L),task:y},me=async()=>((async()=>{try{let S=await R.handler(r??{},k);x.has(h)||await T.storeTaskResult(h,"completed",S);}catch(S){if(!x.has(h)){let M=S instanceof Error?S.message:String(S);await T.storeTaskResult(h,"failed",c(M)).catch(()=>{});}}})(),{task:p});return N(R.middlewares,k,me)()}return c(`Unknown tool: ${o}`)}),e.setRequestHandler(ListResourcesRequestSchema,(t,n)=>{let o=n.sessionId??"default",r=[];for(let s of d.values())!s.isTemplate&&H(s,o)&&r.push({uri:s.uri,name:s.name,description:s.description,mimeType:s.mimeType});return {resources:r}}),e.setRequestHandler(ListResourceTemplatesRequestSchema,(t,n)=>{let o=n.sessionId??"default",r=[];for(let s of d.values())s.isTemplate&&H(s,o)&&r.push({uriTemplate:s.uri,name:s.name,description:s.description,mimeType:s.mimeType});return {resourceTemplates:r}}),e.setRequestHandler(ReadResourceRequestSchema,async(t,n)=>{let{uri:o}=t.params,r=te(d,o);if(!r)throw new Error(`Unknown resource: ${o}`);let s=n.sessionId??"default";if(!H(r,s))throw new Error(`Resource not available: ${o}`);let g=b(s),R={uri:o,session:g,sessionId:s,roots:K(e),store:l,userStore:c$1(g,l)},T=V(e,s,g,r.uri,n.signal,l,(y,k)=>j(y,s,k),L),p=async()=>{let y=await r.handler(o,R);return {contents:[{uri:o,mimeType:y.mimeType??r.mimeType,...y.text!=null?{text:y.text}:{},...y.blob!=null?{blob:y.blob}:{}}]}};return N(r.middlewares,T,p)()});}X(C);function se(e){c$2.push(e);}function re(...e){let t=e[0],n=A(`tool("${t}")`,e.slice(1));if(typeof n.config.name=="string")throw new TypeError(`tool("${t}"): second-to-last argument must be a config object`);let o=n.config,r=[...c$2,...n.middlewares],s={name:t,description:o.description,middlewares:r};a$1.set(t,{name:t,description:o.description,input:o.input,handler:n.handler,middlewares:r,hiddenByMiddlewares:U(s,r)});}function ie(...e){let t=e[0],n=A(`resource("${t}")`,e.slice(1));if(typeof n.config.name!="string")throw new TypeError(`resource("${t}"): second-to-last argument must be a config object with a "name" property`);let o=n.config,r={name:o.name,description:o.description,middlewares:n.middlewares},s=t.includes("{");d.set(t,{uri:t,isTemplate:s,uriPattern:s?ee(t):null,name:o.name,description:o.description,mimeType:o.mimeType,handler:n.handler,middlewares:n.middlewares,hiddenByMiddlewares:U(r,n.middlewares)});}function ae(...e){let t=e[0],n=A(`task("${t}")`,e.slice(1));if(typeof n.config.name=="string")throw new TypeError(`task("${t}"): second-to-last argument must be a config object`);let o=n.config,r=[...c$2,...n.middlewares],s={name:t,description:o.description,middlewares:r};u.set(t,{name:t,description:o.description,input:o.input,handler:n.handler,middlewares:r,hiddenByMiddlewares:U(s,r)});}async function le(){let{StdioServerTransport:e}=await import('@modelcontextprotocol/sdk/server/stdio.js'),t=new e;await C.connect(t);}async function ce(e){await C.connect(e);}let de={tools:{listChanged:true},resources:{listChanged:true},tasks:{list:{},cancel:{},requests:{tools:{call:{}}}}};function Y(){let e=new Server(i,{capabilities:de,taskStore:Q});return X(e),e}function ue(e){let t=null;async function n(){return t||(t=(await import('@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js')).WebStandardStreamableHTTPServerTransport),t}if(e?.sessionless)return async r=>{let s=await n(),g=Y(),R=new s({sessionIdGenerator:void 0,enableJsonResponse:e?.enableJsonResponse});return await g.connect(R),R.handleRequest(r)};let o=new Map;return async r=>{let s=await n(),g=r.headers.get("mcp-session-id");if(g){let p=o.get(g);return p?(e?.onRequest&&await e.onRequest(r,g,b(g)),p.transport.handleRequest(r)):new Response(JSON.stringify({jsonrpc:"2.0",error:{code:-32e3,message:"Session not found"}}),{status:404,headers:{"Content-Type":"application/json"}})}let R=Y(),T=new s({sessionIdGenerator:e?.sessionIdGenerator??(()=>crypto.randomUUID()),enableJsonResponse:e?.enableJsonResponse,onsessioninitialized:p=>{o.set(p,{server:R,transport:T}),m.set(p,R),e?.onRequest&&e.onRequest(r,p,b(p));},onsessionclosed:p=>{o.delete(p),m.delete(p);}});return await R.connect(T),T.handleRequest(r)}}return {use:se,tool:re,resource:ie,task:ae,stdio:le,http:ue,session:b,completeElicitation:J,store:l,connect:ce,_server:C,_getSession:I,_isToolVisible(e,t){let n=a$1.get(e);return n?z(n,t):false},_isResourceVisible(e,t){let n=d.get(e);return n?H(n,t):false},_isTaskVisible(e,t){let n=u.get(e);return n?D(n,t):false},_createSessionAPI:b}}export{Ce 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-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,4 +1,4 @@
1
- import { v as ToolMiddleware } from '../types-BdFjg9Tn.js';
1
+ import { v as ToolMiddleware } from '../types-DyAOlot0.js';
2
2
  import { GuardOptions } from './guard.js';
3
3
  import '@modelcontextprotocol/sdk/types.js';
4
4
  import 'zod';
@@ -1,4 +1,4 @@
1
- import { v as ToolMiddleware } from '../types-BdFjg9Tn.js';
1
+ import { v as ToolMiddleware } from '../types-DyAOlot0.js';
2
2
  import '@modelcontextprotocol/sdk/types.js';
3
3
  import 'zod';
4
4
 
@@ -0,0 +1,13 @@
1
+ import { v as ToolMiddleware } from '../types-DyAOlot0.js';
2
+ import '@modelcontextprotocol/sdk/types.js';
3
+ import 'zod';
4
+
5
+ interface CacheOptions {
6
+ /** TTL in seconds. */
7
+ ttl: number;
8
+ /** Custom cache key builder. Default: `cache:${toolName}:${JSON.stringify(args)}`. */
9
+ key?: (toolName: string, args: Record<string, unknown>) => string;
10
+ }
11
+ declare function cache(options: CacheOptions): ToolMiddleware;
12
+
13
+ export { type CacheOptions, cache };
@@ -0,0 +1 @@
1
+ function l(r){let{ttl:a}=r,n=r.key??((t,e)=>`cache:${t}:${JSON.stringify(e)}`);return {name:"cache",async onCall(t,e){let o=n(t.toolName,t.args),s=await t.store.get(o);return s||e()},async onResult(t,e){if(!t.isError){let o=n(e.toolName,e.args);await e.store.set(o,t,a);}return t}}}export{l as cache};
@@ -1,4 +1,4 @@
1
- import { v as ToolMiddleware, s as ToolContext } from '../types-BdFjg9Tn.js';
1
+ import { v as ToolMiddleware, s as ToolContext } from '../types-DyAOlot0.js';
2
2
  import '@modelcontextprotocol/sdk/types.js';
3
3
  import 'zod';
4
4
 
@@ -1 +1 @@
1
- function f(...n){return {name:`some(${n.map(e=>e.name).join(",")})`,onRegister(e){for(let o of n)if(o.onRegister?.(e)===false)return false},async onCall(e,o){let t,r;for(let s of n){if(!s.onCall){t=s;break}let u=false,a=async()=>(u=true,o()),i=await s.onCall(e,a);if(u)return t=s,i;r=i;}return t?o():r},onResult(e){return e}}}function c(...n){let l=n.map(o=>o.name),e=n.filter(o=>o.onResult).reverse();return {name:`every(${l.join(",")})`,onRegister(o){for(let t of n)if(t.onRegister?.(o)===false)return false},async onCall(o,t){let r=n.filter(a=>a.onCall),s=0,u=async()=>s>=r.length?t():r[s++].onCall(o,u);return u()},onResult(o,t){let r=o;for(let s of e){let u=s.onResult(r,t);u instanceof Promise||(r=u);}return r}}}function T(n,l){return {name:`except(${l.name})`,onRegister(e){return l.onRegister?.(e)},async onCall(e,o){return n(e)?o():l.onCall?l.onCall(e,o):o()},onResult(e,o){return l.onResult?l.onResult(e,o):e}}}export{c as every,T as except,f as some};
1
+ function i(...l){return {name:`some(${l.map(e=>e.name).join(",")})`,onRegister(e){for(let o of l)if(o.onRegister?.(e)===false)return false},async onCall(e,o){let t,r;for(let s of l){if(!s.onCall){t=s;break}let a=false,u=async()=>(a=true,o()),f=await s.onCall(e,u);if(a)return t=s,f;r=f;}return t?o():r},onResult(e){return e}}}function c(...l){let n=l.map(o=>o.name),e=l.filter(o=>o.onResult).reverse();return {name:`every(${n.join(",")})`,onRegister(o){for(let t of l)if(t.onRegister?.(o)===false)return false},async onCall(o,t){let r=l.filter(u=>u.onCall),s=0,a=async()=>s>=r.length?t():r[s++].onCall(o,a);return a()},async onResult(o,t){let r=o;for(let s of e)r=await s.onResult(r,t);return r}}}function T(l,n){return {name:`except(${n.name})`,onRegister(e){return n.onRegister?.(e)},async onCall(e,o){return l(e)?o():n.onCall?n.onCall(e,o):o()},onResult(e,o){return n.onResult?n.onResult(e,o):e}}}export{c as every,T as except,i as some};
@@ -1,5 +1,5 @@
1
1
  import { z } from 'zod';
2
- import { v as ToolMiddleware } from '../types-BdFjg9Tn.js';
2
+ import { v as ToolMiddleware } from '../types-DyAOlot0.js';
3
3
  import '@modelcontextprotocol/sdk/types.js';
4
4
 
5
5
  interface CredentialsOptions<T extends z.ZodObject<z.ZodRawShape>> {
@@ -1,4 +1,4 @@
1
- import { v as ToolMiddleware } from '../types-BdFjg9Tn.js';
1
+ import { v as ToolMiddleware } from '../types-DyAOlot0.js';
2
2
  import '@modelcontextprotocol/sdk/types.js';
3
3
  import 'zod';
4
4
 
@@ -1,4 +1,4 @@
1
- import { v as ToolMiddleware } from '../types-BdFjg9Tn.js';
1
+ import { v as ToolMiddleware } from '../types-DyAOlot0.js';
2
2
  import '@modelcontextprotocol/sdk/types.js';
3
3
  import 'zod';
4
4
 
@@ -1,4 +1,4 @@
1
- import { v as ToolMiddleware } from '../types-BdFjg9Tn.js';
1
+ import { v as ToolMiddleware } from '../types-DyAOlot0.js';
2
2
  import '@modelcontextprotocol/sdk/types.js';
3
3
  import 'zod';
4
4
 
@@ -1,4 +1,4 @@
1
- import { s as ToolContext, v as ToolMiddleware } from '../types-BdFjg9Tn.js';
1
+ import { s as ToolContext, v as ToolMiddleware } from '../types-DyAOlot0.js';
2
2
  import '@modelcontextprotocol/sdk/types.js';
3
3
  import 'zod';
4
4
 
@@ -1 +1 @@
1
- export{a as oauth}from'../chunk-INAAPNKG.mjs';import'../chunk-OYHVJKUP.mjs';import'../chunk-VAAZWX4U.mjs';
1
+ import {a}from'../chunk-OYHVJKUP.mjs';import'../chunk-VAAZWX4U.mjs';function n(e){let t={name:e.name??"oauth",sessionKey:e.sessionKey??"user",message:e.message??"Please sign in to continue.",buildUrl:e.buildUrl,declineMessage:"Authentication cancelled."};return e.timeout!==void 0&&(t.timeout=e.timeout),e.persistent!==void 0&&(t.persistent=e.persistent),e.skipIf&&(t.skipIf=e.skipIf),e.onComplete&&(t.onComplete=e.onComplete),a(t)}export{n as oauth};
@@ -1,4 +1,4 @@
1
- import { s as ToolContext, v as ToolMiddleware } from '../types-BdFjg9Tn.js';
1
+ import { s as ToolContext, v as ToolMiddleware } from '../types-DyAOlot0.js';
2
2
  import '@modelcontextprotocol/sdk/types.js';
3
3
  import 'zod';
4
4
 
@@ -1 +1 @@
1
- export{a as payment}from'../chunk-BVDKAIOU.mjs';import'../chunk-OYHVJKUP.mjs';import'../chunk-VAAZWX4U.mjs';
1
+ import {a}from'../chunk-OYHVJKUP.mjs';import'../chunk-VAAZWX4U.mjs';function s(e){let t={name:e.name??"payment",sessionKey:e.sessionKey??"payment",message:e.message??"Please complete payment to continue.",buildUrl:e.buildUrl,declineMessage:"Payment cancelled."};return e.timeout!==void 0&&(t.timeout=e.timeout),e.persistent!==void 0&&(t.persistent=e.persistent),e.skipIf&&(t.skipIf=e.skipIf),e.onComplete&&(t.onComplete=e.onComplete),a(t)}export{s as payment};
@@ -1,4 +1,4 @@
1
- import { v as ToolMiddleware } from '../types-BdFjg9Tn.js';
1
+ import { v as ToolMiddleware } from '../types-DyAOlot0.js';
2
2
  import '@modelcontextprotocol/sdk/types.js';
3
3
  import 'zod';
4
4
 
@@ -9,6 +9,10 @@ interface RateLimitOptions {
9
9
  windowMs?: number;
10
10
  /** Error message. */
11
11
  message?: string;
12
+ /** Use persistent Store for distributed rate limiting. Default: false (session-scoped). */
13
+ store?: boolean;
14
+ /** Scope rate limiting per user (implies `store: true`). Default: false. */
15
+ perUser?: boolean;
12
16
  }
13
17
  declare function rateLimit(options: RateLimitOptions): ToolMiddleware;
14
18
 
@@ -1 +1 @@
1
- import {c}from'../chunk-VAAZWX4U.mjs';function l(n){let{max:o,windowMs:r=6e4}=n,u=n.message??`Rate limit exceeded. Max ${o} calls per ${r/1e3}s.`;return {name:"rateLimit",async onCall(t,i){let s=`rateLimit:${t.toolName}`,e=t.session.get(s),a=Date.now();return !e||a>=e.resetAt?(t.session.set(s,{count:1,resetAt:a+r}),i()):e.count>=o?c(u):(t.session.set(s,{...e,count:e.count+1}),i())}}}export{l as rateLimit};
1
+ import {b}from'../chunk-ICQVA5UM.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};
@@ -0,0 +1,17 @@
1
+ import { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
2
+ import { v as ToolMiddleware } from '../types-DyAOlot0.js';
3
+ import 'zod';
4
+
5
+ interface RetryOptions {
6
+ /** Maximum number of attempts (including the first). Default: 3. */
7
+ max?: number;
8
+ /** Backoff strategy. Default: "exponential". */
9
+ backoff?: "exponential" | "linear" | "none";
10
+ /** Base delay in milliseconds. Default: 1000. */
11
+ delayMs?: number;
12
+ /** Custom retry condition. Default: retries on `isError: true`. */
13
+ shouldRetry?: (result: CallToolResult) => boolean;
14
+ }
15
+ declare function retry(options?: RetryOptions): ToolMiddleware;
16
+
17
+ export { type RetryOptions, retry };
@@ -0,0 +1 @@
1
+ import {c}from'../chunk-VAAZWX4U.mjs';function m(r){let u=r?.max??3,a=r?.backoff??"exponential",s=r?.delayMs??1e3,d=r?.shouldRetry??(n=>n.isError===true);return {name:"retry",async onCall(n,f){let o,l;for(let t=0;t<u;t++){if(n.signal.aborted)return o??c("Aborted");if(t>0){let e=a==="exponential"?s*2**(t-1):a==="linear"?s*t:0;e>0&&await new Promise(y=>setTimeout(y,e));}try{let e=await f();if(!d(e))return e;o=e,l=void 0;}catch(e){l=e,o=void 0;}}if(l)throw l;return o}}}export{m as retry};
@@ -1,4 +1,4 @@
1
- import { v as ToolMiddleware } from '../types-BdFjg9Tn.js';
1
+ import { v as ToolMiddleware } from '../types-DyAOlot0.js';
2
2
  import '@modelcontextprotocol/sdk/types.js';
3
3
  import 'zod';
4
4
 
@@ -1,4 +1,4 @@
1
- import { v as ToolMiddleware } from '../types-BdFjg9Tn.js';
1
+ import { v as ToolMiddleware } from '../types-DyAOlot0.js';
2
2
  import '@modelcontextprotocol/sdk/types.js';
3
3
  import 'zod';
4
4
 
@@ -1,4 +1,4 @@
1
- import { s as ToolContext, v as ToolMiddleware } from '../types-BdFjg9Tn.js';
1
+ import { s as ToolContext, v as ToolMiddleware } from '../types-DyAOlot0.js';
2
2
  import '@modelcontextprotocol/sdk/types.js';
3
3
  import 'zod';
4
4
 
@@ -0,0 +1,43 @@
1
+ interface GitHubPagesConfig {
2
+ clientId: string;
3
+ clientSecret: string;
4
+ sessionKey?: string;
5
+ }
6
+ interface GooglePagesConfig {
7
+ clientId: string;
8
+ clientSecret: string;
9
+ sessionKey?: string;
10
+ }
11
+ interface StripePagesConfig {
12
+ secretKey: string;
13
+ sessionKey?: string;
14
+ }
15
+ interface CryptoPagesConfig {
16
+ rpcUrl?: string;
17
+ sessionKey?: string;
18
+ }
19
+ interface PagesConfig {
20
+ github?: true | string | GitHubPagesConfig;
21
+ google?: true | string | GooglePagesConfig;
22
+ stripe?: true | string | StripePagesConfig;
23
+ crypto?: true | string | CryptoPagesConfig;
24
+ }
25
+ interface PageResult {
26
+ status: number;
27
+ html?: string;
28
+ redirect?: string;
29
+ json?: unknown;
30
+ }
31
+ declare function escapeHtml(str: string): string;
32
+ declare function successPage(type: string): string;
33
+ declare function errorPage(message: string): string;
34
+ declare function cryptoPaymentPage(params: {
35
+ recipient: string;
36
+ amount: string;
37
+ token: string;
38
+ network: string;
39
+ state: string;
40
+ callbackUrl: string;
41
+ }): string;
42
+
43
+ export { type CryptoPagesConfig, type GitHubPagesConfig, type GooglePagesConfig, type PageResult, type PagesConfig, type StripePagesConfig, cryptoPaymentPage, errorPage, escapeHtml, successPage };
@@ -1,8 +1,8 @@
1
- function c(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function u(e){let t=c(e);return `<!DOCTYPE html>
1
+ function e(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function c(t){let n=e(t);return `<!DOCTYPE html>
2
2
  <html>
3
3
  <head>
4
4
  <meta charset="utf-8">
5
- <title>${t} Complete</title>
5
+ <title>${n} Complete</title>
6
6
  <style>
7
7
  body { font-family: system-ui, sans-serif; display: flex; justify-content: center; align-items: center; min-height: 100vh; margin: 0; color: #1a1a1a; }
8
8
  .card { text-align: center; padding: 40px; }
@@ -14,11 +14,11 @@ function c(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"
14
14
  <body>
15
15
  <div class="card">
16
16
  <div class="check">&#10003;</div>
17
- <h1>${t} complete</h1>
17
+ <h1>${n} complete</h1>
18
18
  <p>You can close this tab and return to your app.</p>
19
19
  </div>
20
20
  </body>
21
- </html>`}function i(e){return `<!DOCTYPE html>
21
+ </html>`}function d(t){return `<!DOCTYPE html>
22
22
  <html>
23
23
  <head>
24
24
  <meta charset="utf-8">
@@ -35,15 +35,15 @@ function c(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"
35
35
  <div class="card">
36
36
  <div class="icon">&#10007;</div>
37
37
  <h1>Something went wrong</h1>
38
- <p>${c(e)}</p>
38
+ <p>${e(t)}</p>
39
39
  </div>
40
40
  </body>
41
- </html>`}function l(e){let t=c(e.recipient),s=c(e.amount),a=c(e.token),n=c(e.network),r=c(e.state),o=c(e.callbackUrl);return `<!DOCTYPE html>
41
+ </html>`}function l(t){let n=e(t.recipient),a=e(t.amount),s=e(t.token),r=e(t.network),i=e(t.state),o=e(t.callbackUrl);return `<!DOCTYPE html>
42
42
  <html>
43
43
  <head>
44
44
  <meta charset="utf-8">
45
45
  <meta name="viewport" content="width=device-width, initial-scale=1">
46
- <title>Payment &mdash; ${s} ${a}</title>
46
+ <title>Payment &mdash; ${a} ${s}</title>
47
47
  <style>
48
48
  * { margin: 0; padding: 0; box-sizing: border-box; }
49
49
  body { font-family: system-ui, sans-serif; max-width: 420px; margin: 60px auto; padding: 20px; color: #1a1a1a; }
@@ -61,26 +61,26 @@ function c(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"
61
61
  </style>
62
62
  </head>
63
63
  <body>
64
- <h1>Send ${s} ${a}</h1>
64
+ <h1>Send ${a} ${s}</h1>
65
65
  <dl class="info">
66
66
  <dt>To</dt>
67
- <dd>${t}</dd>
68
- <dt>Network</dt>
69
67
  <dd>${n}</dd>
68
+ <dt>Network</dt>
69
+ <dd>${r}</dd>
70
70
  <dt>Amount</dt>
71
- <dd>${s} ${a}</dd>
71
+ <dd>${a} ${s}</dd>
72
72
  </dl>
73
73
 
74
74
  <div id="data"
75
- data-recipient="${t}"
76
- data-amount="${s}"
77
- data-token="${a}"
78
- data-state="${r}"
75
+ data-recipient="${n}"
76
+ data-amount="${a}"
77
+ data-token="${s}"
78
+ data-state="${i}"
79
79
  data-callback="${o}"
80
80
  ></div>
81
81
 
82
82
  <button class="btn-primary" id="connectBtn">Connect Wallet</button>
83
- <button class="btn-primary" id="payBtn" style="display:none">Send ${s} ${a}</button>
83
+ <button class="btn-primary" id="payBtn" style="display:none">Send ${a} ${s}</button>
84
84
  <p class="status" id="status"></p>
85
85
 
86
86
  <script src="https://cdnjs.cloudflare.com/ajax/libs/ethers/6.13.4/ethers.umd.min.js"></script>
@@ -167,4 +167,4 @@ function c(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"
167
167
  })();
168
168
  </script>
169
169
  </body>
170
- </html>`}async function g(e,t,s,a){if(s===true)return {status:500,html:i("GitHub pages require { clientId, clientSecret } configuration")};if(!t.code||!t.state)return {status:400,html:i("Missing code or state parameter")};try{let{handleCallback:n}=await import('./middleware/github.mjs'),r={clientId:s.clientId,clientSecret:s.clientSecret};s.sessionKey&&(r.sessionKey=s.sessionKey);let o=await n(e,{code:t.code,state:t.state},r);return o.success?{status:302,redirect:`${a}/auth/success`}:{status:500,html:i(o.error??"Authentication failed")}}catch(n){return {status:500,html:i(n instanceof Error?n.message:String(n))}}}async function m(e,t,s,a,n){if(s===true)return {status:500,html:i("Google pages require { clientId, clientSecret } configuration")};if(!t.code||!t.state)return {status:400,html:i("Missing code or state parameter")};try{let{handleCallback:r}=await import('./middleware/google.mjs'),o={clientId:s.clientId,clientSecret:s.clientSecret,redirectUri:n};s.sessionKey&&(o.sessionKey=s.sessionKey);let d=await r(e,{code:t.code,state:t.state},o);return d.success?{status:302,redirect:`${a}/auth/success`}:{status:500,html:i(d.error??"Authentication failed")}}catch(r){return {status:500,html:i(r instanceof Error?r.message:String(r))}}}async function p(e,t,s,a){if(s===true)return {status:500,html:i("Stripe pages require { secretKey } configuration")};if(t.cancelled==="true")return {status:200,html:i("Payment was cancelled")};if(!t.session_id||!t.state)return {status:400,html:i("Missing session_id or state parameter")};try{let{handleCallback:n}=await import('./middleware/stripe.mjs'),r={secretKey:s.secretKey};s.sessionKey&&(r.sessionKey=s.sessionKey);let o=await n(e,{checkoutSessionId:t.session_id,state:t.state},r);return o.success?{status:302,redirect:`${a}/payment/success`}:{status:500,html:i(o.error??"Payment verification failed")}}catch(n){return {status:500,html:i(n instanceof Error?n.message:String(n))}}}function f(e,t){return !e.recipient||!e.amount||!e.state?{status:400,html:i("Missing required payment parameters")}:{status:200,html:l({recipient:e.recipient,amount:e.amount,token:e.token??"USDC",network:e.network??"base",state:e.state,callbackUrl:t})}}async function h(e,t,s){if(!t.txHash||!t.state||!t.recipient||!t.amount)return {status:400,json:{success:false,error:"Missing txHash, state, recipient, or amount"}};try{let{handleCallback:a}=await import('./middleware/crypto.mjs'),n={recipient:t.recipient,amount:Number(t.amount)};s!==!0&&(s.rpcUrl&&(n.rpcUrl=s.rpcUrl),s.sessionKey&&(n.sessionKey=s.sessionKey));let r=await a(e,{txHash:t.txHash,state:t.state},n);return {status:r.success?200:500,json:r}}catch(a){return {status:500,json:{success:false,error:a instanceof Error?a.message:String(a)}}}}export{c as a,u as b,i as c,l as d,g as e,m as f,p as g,f as h,h as i};
170
+ </html>`}export{l as cryptoPaymentPage,d as errorPage,e as escapeHtml,c as successPage};
package/dist/store.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { n as Store, m as Session, U as UserStore } from './types-BdFjg9Tn.js';
1
+ import { n as Store, m as Session, x as UserStore } from './types-DyAOlot0.js';
2
2
  import '@modelcontextprotocol/sdk/types.js';
3
3
  import 'zod';
4
4
 
package/dist/store.mjs CHANGED
@@ -1 +1 @@
1
- export{c as createUserStore,a as memoryStore,b as resolveUserId}from'./chunk-SPZY5GJA.mjs';
1
+ export{c as createUserStore,a as memoryStore,b as resolveUserId}from'./chunk-ICQVA5UM.mjs';
package/dist/test.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
2
- import { m as Session, M as MCPServer } from './types-BdFjg9Tn.js';
2
+ import { m as Session, M as MCPServer } from './types-DyAOlot0.js';
3
3
  import 'zod';
4
4
 
5
5
  interface TestClient {
@@ -26,8 +26,20 @@ interface Store {
26
26
  delete(key: string): Promise<void>;
27
27
  }
28
28
  type UserStore = Store;
29
+ /** Accepted user shapes for `session.set("user", ...)`. Resolved by `resolveUserId`. */
30
+ type User = string | {
31
+ id: string | number;
32
+ } | {
33
+ sub: string;
34
+ };
29
35
  interface ServerOptions extends ServerInfo {
30
36
  store?: Store;
37
+ /** Called when the server starts (after stdio connect or on first HTTP request). */
38
+ onServerStart?: () => void | Promise<void>;
39
+ /** Called when a new session is created. */
40
+ onSessionCreate?: (sessionId: string) => void | Promise<void>;
41
+ /** Called when a session is destroyed (HTTP session close or transport disconnect). */
42
+ onSessionDestroy?: (sessionId: string) => void | Promise<void>;
31
43
  }
32
44
  interface Session {
33
45
  /** Get a session-scoped value. */
@@ -93,6 +105,8 @@ interface RootInfo {
93
105
  interface ToolContext {
94
106
  /** The name of the tool being called. */
95
107
  toolName: string;
108
+ /** The arguments passed to the tool. */
109
+ args: Record<string, unknown>;
96
110
  /** Session-scoped state and visibility control. */
97
111
  session: Session;
98
112
  /** Abort signal from the client. */
@@ -216,4 +230,4 @@ interface MCPServer {
216
230
  store: Store;
217
231
  }
218
232
 
219
- export { text as A, type Elicit as E, type HttpAdapterOptions as H, type MCPServer as M, type ResourceConfig as R, type ServerOptions as S, type TaskConfig as T, type UserStore as U, type ElicitFormResult as a, type ElicitUrlOptions as b, type ElicitUrlResult as c, type ResourceContent as d, type ResourceContext as e, type ResourceHandler as f, type RootInfo as g, type Sample as h, type SampleOptions as i, type SampleRawParams as j, type SampleRawResult as k, type ServerInfo as l, type Session as m, type Store as n, type TaskContext as o, type TaskControl as p, type TaskHandler as q, type ToolConfig as r, type ToolContext as s, type ToolHandler as t, type ToolInfo as u, type ToolMiddleware as v, type ToolResponse as w, error as x, image as y, json as z };
233
+ export { json as A, text as B, type Elicit as E, type HttpAdapterOptions as H, type MCPServer as M, type ResourceConfig as R, type ServerOptions as S, type TaskConfig as T, type User as U, type ElicitFormResult as a, type ElicitUrlOptions as b, type ElicitUrlResult as c, type ResourceContent as d, type ResourceContext as e, type ResourceHandler as f, type RootInfo as g, type Sample as h, type SampleOptions as i, type SampleRawParams as j, type SampleRawResult as k, type ServerInfo as l, type Session as m, type Store as n, type TaskContext as o, type TaskControl as p, type TaskHandler as q, type ToolConfig as r, type ToolContext as s, type ToolHandler as t, type ToolInfo as u, type ToolMiddleware as v, type ToolResponse as w, type UserStore as x, error as y, image as z };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lynq/lynq",
3
- "version": "0.7.1",
3
+ "version": "0.8.0",
4
4
  "description": "Lightweight MCP server framework. Tool visibility control through middleware.",
5
5
  "type": "module",
6
6
  "exports": {
@@ -16,14 +16,6 @@
16
16
  "types": "./dist/adapters/stdio.d.ts",
17
17
  "import": "./dist/adapters/stdio.mjs"
18
18
  },
19
- "./hono": {
20
- "types": "./dist/adapters/hono.d.ts",
21
- "import": "./dist/adapters/hono.mjs"
22
- },
23
- "./express": {
24
- "types": "./dist/adapters/express.d.ts",
25
- "import": "./dist/adapters/express.mjs"
26
- },
27
19
  "./test": {
28
20
  "types": "./dist/test.d.ts",
29
21
  "import": "./dist/test.mjs"
@@ -72,41 +64,29 @@
72
64
  "types": "./dist/middleware/jwt.d.ts",
73
65
  "import": "./dist/middleware/jwt.mjs"
74
66
  },
75
- "./github": {
76
- "types": "./dist/middleware/github.d.ts",
77
- "import": "./dist/middleware/github.mjs"
78
- },
79
- "./github-oauth": {
80
- "types": "./dist/middleware/github.d.ts",
81
- "import": "./dist/middleware/github.mjs"
82
- },
83
- "./google": {
84
- "types": "./dist/middleware/google.d.ts",
85
- "import": "./dist/middleware/google.mjs"
86
- },
87
- "./google-oauth": {
88
- "types": "./dist/middleware/google.d.ts",
89
- "import": "./dist/middleware/google.mjs"
90
- },
91
- "./stripe": {
92
- "types": "./dist/middleware/stripe.d.ts",
93
- "import": "./dist/middleware/stripe.mjs"
94
- },
95
- "./crypto": {
96
- "types": "./dist/middleware/crypto.d.ts",
97
- "import": "./dist/middleware/crypto.mjs"
98
- },
99
- "./usdc": {
100
- "types": "./dist/middleware/crypto.d.ts",
101
- "import": "./dist/middleware/crypto.mjs"
102
- },
103
67
  "./tip": {
104
68
  "types": "./dist/middleware/tip.d.ts",
105
69
  "import": "./dist/middleware/tip.mjs"
106
70
  },
71
+ "./cache": {
72
+ "types": "./dist/middleware/cache.d.ts",
73
+ "import": "./dist/middleware/cache.mjs"
74
+ },
75
+ "./retry": {
76
+ "types": "./dist/middleware/retry.d.ts",
77
+ "import": "./dist/middleware/retry.mjs"
78
+ },
107
79
  "./store": {
108
80
  "types": "./dist/store.d.ts",
109
81
  "import": "./dist/store.mjs"
82
+ },
83
+ "./helpers": {
84
+ "types": "./dist/helpers.d.ts",
85
+ "import": "./dist/helpers.mjs"
86
+ },
87
+ "./pages": {
88
+ "types": "./dist/pages.d.ts",
89
+ "import": "./dist/pages.mjs"
110
90
  }
111
91
  },
112
92
  "files": [
@@ -118,38 +98,23 @@
118
98
  },
119
99
  "devDependencies": {
120
100
  "@biomejs/biome": "^1.9.0",
121
- "@types/express": "^5.0.6",
122
- "express": "^5.2.1",
123
- "hono": "^4.12.5",
101
+ "@types/node": "^22.19.15",
124
102
  "jose": "^6.2.1",
125
- "stripe": "^20.4.1",
126
103
  "tsup": "^8.0.0",
127
104
  "typescript": "^5.6.0",
128
105
  "vitest": "^2.0.0",
129
106
  "zod": "^3.24.0"
130
107
  },
131
108
  "peerDependencies": {
132
- "express": "^5.0.0",
133
- "hono": "^4.0.0",
134
109
  "jose": "^6.0.0",
135
- "stripe": "^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0",
136
110
  "zod": "^3.0.0"
137
111
  },
138
112
  "peerDependenciesMeta": {
139
113
  "zod": {
140
114
  "optional": true
141
115
  },
142
- "hono": {
143
- "optional": true
144
- },
145
- "express": {
146
- "optional": true
147
- },
148
116
  "jose": {
149
117
  "optional": true
150
- },
151
- "stripe": {
152
- "optional": true
153
118
  }
154
119
  },
155
120
  "publishConfig": {
@@ -1,19 +0,0 @@
1
- import { Express } from 'express';
2
- import { M as MCPServer } from '../types-BdFjg9Tn.js';
3
- import { P as PagesConfig } from '../pages-IPpN74gp.js';
4
- import '@modelcontextprotocol/sdk/types.js';
5
- import 'zod';
6
-
7
- interface MountOptions {
8
- /** Route path. Default: "/mcp" */
9
- path?: string;
10
- /** Allowed hostnames for DNS rebinding protection. Default: localhost variants. */
11
- allowedHosts?: string[];
12
- /** Enable default pages for specified auth/payment providers. */
13
- pages?: PagesConfig;
14
- /** URL prefix for pages routes. Default: "/lynq" */
15
- pagesPrefix?: string;
16
- }
17
- declare function mountLynq(app: Express, server: MCPServer, options?: MountOptions): void;
18
-
19
- export { type MountOptions, PagesConfig, mountLynq };
@@ -1,2 +0,0 @@
1
- import {b,a}from'../chunk-7C4A572Z.mjs';import {b as b$1}from'../chunk-OJJZGR4B.mjs';function p(e){let g=e.protocol||"http",u=e.headers.host||"localhost",r=`${g}://${u}${e.originalUrl}`,n=new Headers;for(let[t,s]of Object.entries(e.headers))s&&n.set(t,Array.isArray(s)?s.join(", "):s);let a={method:e.method,headers:n};return e.method!=="GET"&&e.method!=="HEAD"&&(a.body=JSON.stringify(e.body)),new Request(r,a)}async function h(e,g){if(e.status(g.status),g.headers.forEach((u,r)=>e.setHeader(r,u)),g.body){let u=g.body.getReader();try{for(;;){let{done:r,value:n}=await u.read();if(r)break;e.write(n);}}finally{e.end();}}else e.end();}function P(e,g,u){let r=u?.path??"/mcp",n=g.http(),a$1=u?.allowedHosts??[...b];e.use(r,(t,s,i)=>{if(!a(t.headers.host??null,a$1)){s.status(403).json({jsonrpc:"2.0",error:{code:-32e3,message:"Forbidden"},id:null});return}i();}),e.all(r,async(t,s)=>{let i=p(t),o=await n(i);await h(s,o);}),u?.pages&&m(e,g,u);}function d(e){let g=e.protocol||"http",u=e.headers.host||"localhost";return `${g}://${u}`}function m(e,g,u){let r=u.pagesPrefix??"/lynq",n=u.pages;if(n.github&&typeof n.github!="string"){let a=n.github;e.get(`${r}/auth/github/callback`,async(t,s)=>{let{handleGitHubPage:i}=await import('../pages-VK55ZBAP.mjs'),o=await i(g,{code:t.query.code,state:t.query.state},a,r);if(o.redirect)return s.redirect(o.redirect);s.status(o.status).send(o.html);});}else if(typeof n.github=="string"){let a=n.github;e.get(`${r}/auth/github/callback`,(t,s)=>{let i=new URL(a,d(t));for(let[o,c]of Object.entries(t.query))typeof c=="string"&&i.searchParams.set(o,c);s.redirect(i.toString());});}if(n.google&&typeof n.google!="string"){let a=n.google;e.get(`${r}/auth/google/callback`,async(t,s)=>{let{handleGooglePage:i}=await import('../pages-VK55ZBAP.mjs'),o=`${d(t)}${r}/auth/google/callback`,c=await i(g,{code:t.query.code,state:t.query.state},a,r,o);if(c.redirect)return s.redirect(c.redirect);s.status(c.status).send(c.html);});}else if(typeof n.google=="string"){let a=n.google;e.get(`${r}/auth/google/callback`,(t,s)=>{let i=new URL(a,d(t));for(let[o,c]of Object.entries(t.query))typeof c=="string"&&i.searchParams.set(o,c);s.redirect(i.toString());});}if(n.stripe&&typeof n.stripe!="string"){let a=n.stripe;e.get(`${r}/payment/stripe/callback`,async(t,s)=>{let{handleStripePage:i}=await import('../pages-VK55ZBAP.mjs'),o=await i(g,{session_id:t.query.session_id,cancelled:t.query.cancelled,state:t.query.state},a,r);if(o.redirect)return s.redirect(o.redirect);s.status(o.status).send(o.html);});}else if(typeof n.stripe=="string"){let a=n.stripe;e.get(`${r}/payment/stripe/callback`,(t,s)=>{let i=new URL(a,d(t));for(let[o,c]of Object.entries(t.query))typeof c=="string"&&i.searchParams.set(o,c);s.redirect(i.toString());});}if(n.crypto&&typeof n.crypto!="string"){let a=n.crypto;e.get(`${r}/payment/crypto`,async(t,s)=>{let{handleCryptoGet:i}=await import('../pages-VK55ZBAP.mjs'),o=`${d(t)}${r}/payment/crypto/callback`,c=i({recipient:t.query.recipient,amount:t.query.amount,token:t.query.token,network:t.query.network,state:t.query.state},o);s.status(c.status).send(c.html);}),e.post(`${r}/payment/crypto/callback`,async(t,s)=>{let{handleCryptoPost:i}=await import('../pages-VK55ZBAP.mjs'),o=await i(g,t.body,a);s.status(o.status).json(o.json);});}else if(typeof n.crypto=="string"){let a=n.crypto;e.get(`${r}/payment/crypto`,(t,s)=>{let i=new URL(a,d(t));for(let[o,c]of Object.entries(t.query))typeof c=="string"&&i.searchParams.set(o,c);s.redirect(i.toString());});}e.get(`${r}/auth/success`,(a,t)=>{t.send(b$1("Authentication"));}),e.get(`${r}/payment/success`,(a,t)=>{t.send(b$1("Payment"));});}
2
- export{P as mountLynq};
@@ -1,19 +0,0 @@
1
- import { Hono } from 'hono';
2
- import { M as MCPServer } from '../types-BdFjg9Tn.js';
3
- import { P as PagesConfig } from '../pages-IPpN74gp.js';
4
- import '@modelcontextprotocol/sdk/types.js';
5
- import 'zod';
6
-
7
- interface MountOptions {
8
- /** Route path. Default: "/mcp" */
9
- path?: string;
10
- /** Allowed hostnames for DNS rebinding protection. Default: localhost variants. */
11
- allowedHosts?: string[];
12
- /** Enable default pages for specified auth/payment providers. */
13
- pages?: PagesConfig;
14
- /** URL prefix for pages routes. Default: "/lynq" */
15
- pagesPrefix?: string;
16
- }
17
- declare function mountLynq(app: Hono, server: MCPServer, options?: MountOptions): void;
18
-
19
- export { type MountOptions, PagesConfig, mountLynq };
@@ -1 +0,0 @@
1
- import {b,a}from'../chunk-7C4A572Z.mjs';import {b as b$1}from'../chunk-OJJZGR4B.mjs';function q(a$1,u,c){let s=c?.path??"/mcp",o=u.http(),t=c?.allowedHosts??[...b];a$1.use(s,async(e,r)=>a(e.req.header("host")??null,t)?r():e.json({jsonrpc:"2.0",error:{code:-32e3,message:"Forbidden"},id:null},403)),a$1.all(s,e=>o(e.req.raw)),c?.pages&&f(a$1,u,c);}function f(a,u,c){let s=c.pagesPrefix??"/lynq",o=c.pages;if(o.github&&typeof o.github!="string"?a.get(`${s}/auth/github/callback`,async t=>{let{handleGitHubPage:e}=await import('../pages-VK55ZBAP.mjs'),r=await e(u,{code:t.req.query("code"),state:t.req.query("state")},o.github,s);return r.redirect?t.redirect(r.redirect):t.html(r.html??"",r.status)}):typeof o.github=="string"&&a.get(`${s}/auth/github/callback`,t=>{let e=new URL(o.github,t.req.url),r=t.req.query();for(let[i,n]of Object.entries(r))e.searchParams.set(i,n);return t.redirect(e.toString())}),o.google&&typeof o.google!="string"?a.get(`${s}/auth/google/callback`,async t=>{let{handleGooglePage:e}=await import('../pages-VK55ZBAP.mjs'),i=`${new URL(t.req.url).origin}${s}/auth/google/callback`,n=await e(u,{code:t.req.query("code"),state:t.req.query("state")},o.google,s,i);return n.redirect?t.redirect(n.redirect):t.html(n.html??"",n.status)}):typeof o.google=="string"&&a.get(`${s}/auth/google/callback`,t=>{let e=new URL(o.google,t.req.url),r=t.req.query();for(let[i,n]of Object.entries(r))e.searchParams.set(i,n);return t.redirect(e.toString())}),o.stripe&&typeof o.stripe!="string"?a.get(`${s}/payment/stripe/callback`,async t=>{let{handleStripePage:e}=await import('../pages-VK55ZBAP.mjs'),r=await e(u,{session_id:t.req.query("session_id"),cancelled:t.req.query("cancelled"),state:t.req.query("state")},o.stripe,s);return r.redirect?t.redirect(r.redirect):t.html(r.html??"",r.status)}):typeof o.stripe=="string"&&a.get(`${s}/payment/stripe/callback`,t=>{let e=new URL(o.stripe,t.req.url),r=t.req.query();for(let[i,n]of Object.entries(r))e.searchParams.set(i,n);return t.redirect(e.toString())}),o.crypto&&typeof o.crypto!="string"){let t=o.crypto;a.get(`${s}/payment/crypto`,async e=>{let{handleCryptoGet:r}=await import('../pages-VK55ZBAP.mjs'),i=`${new URL(e.req.url).origin}${s}/payment/crypto/callback`,n=r({recipient:e.req.query("recipient"),amount:e.req.query("amount"),token:e.req.query("token"),network:e.req.query("network"),state:e.req.query("state")},i);return e.html(n.html??"",n.status)}),a.post(`${s}/payment/crypto/callback`,async e=>{let{handleCryptoPost:r}=await import('../pages-VK55ZBAP.mjs'),i=await e.req.json(),n=await r(u,i,t);return e.json(n.json,n.status)});}else typeof o.crypto=="string"&&a.get(`${s}/payment/crypto`,t=>{let e=new URL(o.crypto,t.req.url),r=t.req.query();for(let[i,n]of Object.entries(r))e.searchParams.set(i,n);return t.redirect(e.toString())});a.get(`${s}/auth/success`,t=>t.html(b$1("Authentication"))),a.get(`${s}/payment/success`,t=>t.html(b$1("Payment")));}export{q as mountLynq};
@@ -1 +0,0 @@
1
- function e(n,t){if(!n)return false;let o=n.replace(/:\d+$/,"");return t.includes(o)}var l=["localhost","127.0.0.1","::1"];export{e as a,l as b};
@@ -1 +0,0 @@
1
- import {a}from'./chunk-OYHVJKUP.mjs';function s(e){let t={name:e.name??"payment",sessionKey:e.sessionKey??"payment",message:e.message??"Please complete payment to continue.",buildUrl:e.buildUrl,declineMessage:"Payment cancelled."};return e.timeout!==void 0&&(t.timeout=e.timeout),e.persistent!==void 0&&(t.persistent=e.persistent),e.skipIf&&(t.skipIf=e.skipIf),e.onComplete&&(t.onComplete=e.onComplete),a(t)}export{s as a};
@@ -1 +0,0 @@
1
- import {a}from'./chunk-OYHVJKUP.mjs';function n(e){let t={name:e.name??"oauth",sessionKey:e.sessionKey??"user",message:e.message??"Please sign in to continue.",buildUrl:e.buildUrl,declineMessage:"Authentication cancelled."};return e.timeout!==void 0&&(t.timeout=e.timeout),e.persistent!==void 0&&(t.persistent=e.persistent),e.skipIf&&(t.skipIf=e.skipIf),e.onComplete&&(t.onComplete=e.onComplete),a(t)}export{n as a};
@@ -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)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};
@@ -1,64 +0,0 @@
1
- import { s as ToolContext, v as ToolMiddleware, M as MCPServer } from '../types-BdFjg9Tn.js';
2
- import '@modelcontextprotocol/sdk/types.js';
3
- import 'zod';
4
-
5
- interface CryptoPaymentOptions {
6
- /** Middleware name. Default: "crypto" */
7
- name?: string;
8
- /** Token symbol. Default: "USDC" */
9
- token?: "USDC" | "USDT" | "DAI" | "ETH" | string;
10
- /** Recipient wallet address. */
11
- recipient: string;
12
- /** Amount in token units. */
13
- amount: number;
14
- /** Network. Default: "base" */
15
- network?: "base" | "base-sepolia" | "ethereum" | "polygon" | "solana" | string;
16
- /** Base URL of your server. */
17
- baseUrl: string;
18
- /** Callback path. Default: "/payment/crypto/callback" */
19
- callbackPath?: string;
20
- /** Session key for payment data. Default: "payment" */
21
- sessionKey?: string;
22
- /** If true, only charge once per session per tool. Default: false */
23
- once?: boolean;
24
- /** Message shown to user. */
25
- message?: string;
26
- /** Timeout in ms. Default: 300000 */
27
- timeout?: number;
28
- /** Custom skip condition. Takes priority over sessionKey check. */
29
- skipIf?: (c: ToolContext) => boolean | Promise<boolean>;
30
- /** Called after payment completes successfully, before next(). */
31
- onComplete?: (c: ToolContext) => void | Promise<void>;
32
- }
33
- /** @deprecated Use `CryptoPaymentOptions` instead. */
34
- type UsdcPaymentOptions = CryptoPaymentOptions;
35
- declare function crypto(options: CryptoPaymentOptions): ToolMiddleware;
36
- /** @deprecated Use `crypto()` from `lynq/crypto` instead. */
37
- declare const usdcPayment: typeof crypto;
38
- interface HandleCallbackOptions {
39
- /** RPC URL for the network. */
40
- rpcUrl?: string;
41
- /** Expected recipient address. */
42
- recipient: string;
43
- /** Expected amount. */
44
- amount: number;
45
- /** Session key. Default: "payment" */
46
- sessionKey?: string;
47
- }
48
- /** @deprecated Use `HandleCallbackOptions` instead. */
49
- type HandleUsdcCallbackOptions = HandleCallbackOptions;
50
- /**
51
- * Handle crypto payment callback. Call from your HTTP callback route.
52
- * Verifies the on-chain transaction, stores in session, and completes elicitation.
53
- */
54
- declare function handleCallback(server: MCPServer, params: {
55
- state: string;
56
- txHash: string;
57
- }, options: HandleCallbackOptions): Promise<{
58
- success: boolean;
59
- error?: string;
60
- }>;
61
- /** @deprecated Use `handleCallback()` from `lynq/crypto` instead. */
62
- declare const handleUsdcCallback: typeof handleCallback;
63
-
64
- export { type CryptoPaymentOptions, type HandleCallbackOptions, type HandleUsdcCallbackOptions, type UsdcPaymentOptions, crypto, handleCallback, handleUsdcCallback, usdcPayment };
@@ -1,2 +0,0 @@
1
- import {a}from'../chunk-BVDKAIOU.mjs';import'../chunk-OYHVJKUP.mjs';import'../chunk-VAAZWX4U.mjs';function g(e){let{recipient:s,amount:t,token:r="USDC",network:a$1="base",baseUrl:o,callbackPath:n="/payment/crypto/callback",once:p=false}=e,y=e.name??"crypto",m=e.sessionKey??"payment",f=e.message??`Payment required (${t} ${r}).`,i={name:y,sessionKey:m,message:f,buildUrl:({sessionId:c,elicitationId:l})=>{let b=new URLSearchParams({recipient:s,amount:String(t),token:r,network:a$1,state:`${c}:${l}`});return `${o}${n}?${b}`}};e.timeout!==void 0&&(i.timeout=e.timeout),e.skipIf&&(i.skipIf=e.skipIf),e.onComplete&&(i.onComplete=e.onComplete);let u=a(i);return p?u:{...u,onResult(c,l){return l.session.set(m,void 0),c}}}var P=g;async function C(e,s,t){let r=t.sessionKey??"payment",[a,o]=s.state.split(":");if(!a||!o)return {success:false,error:"Invalid state parameter"};try{return await h(s.txHash,t)?(e.session(a).set(r,{provider:"crypto",txHash:s.txHash,amount:t.amount,recipient:t.recipient,paidAt:new Date().toISOString()}),e.completeElicitation(o),{success:!0}):{success:!1,error:"Transaction verification failed"}}catch(n){return {success:false,error:n instanceof Error?n.message:String(n)}}}var x=C;async function h(e,s){let t=s.rpcUrl??"https://mainnet.base.org";try{return (await(await fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({jsonrpc:"2.0",id:1,method:"eth_getTransactionReceipt",params:[e]})})).json()).result?.status==="0x1"}catch{return false}}
2
- export{g as crypto,C as handleCallback,x as handleUsdcCallback,P as usdcPayment};
@@ -1,54 +0,0 @@
1
- import { s as ToolContext, v as ToolMiddleware, M as MCPServer } from '../types-BdFjg9Tn.js';
2
- import '@modelcontextprotocol/sdk/types.js';
3
- import 'zod';
4
-
5
- interface GitHubOptions {
6
- /** Middleware name. Default: "github" */
7
- name?: string;
8
- /** GitHub OAuth App client ID. */
9
- clientId: string;
10
- /** GitHub OAuth App client secret. */
11
- clientSecret: string;
12
- /** OAuth callback URL (your server's callback endpoint). */
13
- redirectUri: string;
14
- /** GitHub OAuth scopes. Default: [] */
15
- scopes?: string[];
16
- /** Session key for user data. Default: "user" */
17
- sessionKey?: string;
18
- /** Message shown to the user. Default: "Please sign in with GitHub to continue." */
19
- message?: string;
20
- /** Timeout in ms. Default: 300000 */
21
- timeout?: number;
22
- /** Custom skip condition. Takes priority over sessionKey check. */
23
- skipIf?: (c: ToolContext) => boolean | Promise<boolean>;
24
- /** Called after authentication completes successfully, before next(). */
25
- onComplete?: (c: ToolContext) => void | Promise<void>;
26
- }
27
- /** @deprecated Use `GitHubOptions` instead. */
28
- type GitHubOAuthOptions = GitHubOptions;
29
- declare function github(options: GitHubOptions): ToolMiddleware;
30
- /** @deprecated Use `github()` from `lynq/github` instead. */
31
- declare const githubOAuth: typeof github;
32
- interface HandleCallbackOptions {
33
- clientId: string;
34
- clientSecret: string;
35
- /** Session key for user data. Default: "user" */
36
- sessionKey?: string;
37
- }
38
- /** @deprecated Use `HandleCallbackOptions` instead. */
39
- type HandleGitHubCallbackOptions = HandleCallbackOptions;
40
- /**
41
- * Handle GitHub OAuth callback. Call from your HTTP callback route.
42
- * Exchanges code for token, fetches user info, stores in session, and completes elicitation.
43
- */
44
- declare function handleCallback(server: MCPServer, params: {
45
- code: string;
46
- state: string;
47
- }, options: HandleCallbackOptions): Promise<{
48
- success: boolean;
49
- error?: string;
50
- }>;
51
- /** @deprecated Use `handleCallback()` from `lynq/github` instead. */
52
- declare const handleGitHubCallback: typeof handleCallback;
53
-
54
- export { type GitHubOAuthOptions, type GitHubOptions, type HandleCallbackOptions, type HandleGitHubCallbackOptions, github, githubOAuth, handleCallback, handleGitHubCallback };
@@ -1,2 +0,0 @@
1
- import {a}from'../chunk-INAAPNKG.mjs';import'../chunk-OYHVJKUP.mjs';import'../chunk-VAAZWX4U.mjs';function p(e){let s=e.scopes??[],t={name:e.name??"github",sessionKey:e.sessionKey??"user",message:e.message??"Please sign in with GitHub to continue.",buildUrl({sessionId:c,elicitationId:n}){let r=new URLSearchParams({client_id:e.clientId,redirect_uri:e.redirectUri,state:`${c}:${n}`});return s.length>0&&r.set("scope",s.join(" ")),`https://github.com/login/oauth/authorize?${r}`}};return e.timeout!==void 0&&(t.timeout=e.timeout),e.skipIf&&(t.skipIf=e.skipIf),e.onComplete&&(t.onComplete=e.onComplete),a(t)}var h=p;async function d(e,s,t){let c=t.sessionKey??"user",[n,r]=s.state.split(":");if(!n||!r)return {success:false,error:"Invalid state parameter"};try{let i=await(await fetch("https://github.com/login/oauth/access_token",{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({client_id:t.clientId,client_secret:t.clientSecret,code:s.code})})).json();if(!i.access_token)return {success:!1,error:i.error_description??i.error??"Token exchange failed"};let u=await(await fetch("https://api.github.com/user",{headers:{Authorization:`Bearer ${i.access_token}`}})).json(),a=e.session(n);return a.set(c,u),a.set("accessToken",i.access_token),e.completeElicitation(r),{success:!0}}catch(o){return {success:false,error:o instanceof Error?o.message:String(o)}}}var f=d;
2
- export{p as github,h as githubOAuth,d as handleCallback,f as handleGitHubCallback};
@@ -1,55 +0,0 @@
1
- import { s as ToolContext, v as ToolMiddleware, M as MCPServer } from '../types-BdFjg9Tn.js';
2
- import '@modelcontextprotocol/sdk/types.js';
3
- import 'zod';
4
-
5
- interface GoogleOptions {
6
- /** Middleware name. Default: "google" */
7
- name?: string;
8
- /** Google OAuth client ID. */
9
- clientId: string;
10
- /** Google OAuth client secret. */
11
- clientSecret: string;
12
- /** OAuth callback URL (your server's callback endpoint). */
13
- redirectUri: string;
14
- /** OAuth scopes. Default: ["openid", "profile", "email"] */
15
- scopes?: string[];
16
- /** Session key for user data. Default: "user" */
17
- sessionKey?: string;
18
- /** Message shown to the user. Default: "Please sign in with Google to continue." */
19
- message?: string;
20
- /** Timeout in ms. Default: 300000 */
21
- timeout?: number;
22
- /** Custom skip condition. Takes priority over sessionKey check. */
23
- skipIf?: (c: ToolContext) => boolean | Promise<boolean>;
24
- /** Called after authentication completes successfully, before next(). */
25
- onComplete?: (c: ToolContext) => void | Promise<void>;
26
- }
27
- /** @deprecated Use `GoogleOptions` instead. */
28
- type GoogleOAuthOptions = GoogleOptions;
29
- declare function google(options: GoogleOptions): ToolMiddleware;
30
- /** @deprecated Use `google()` from `lynq/google` instead. */
31
- declare const googleOAuth: typeof google;
32
- interface HandleCallbackOptions {
33
- clientId: string;
34
- clientSecret: string;
35
- redirectUri: string;
36
- /** Session key for user data. Default: "user" */
37
- sessionKey?: string;
38
- }
39
- /** @deprecated Use `HandleCallbackOptions` instead. */
40
- type HandleGoogleCallbackOptions = HandleCallbackOptions;
41
- /**
42
- * Handle Google OAuth callback. Call from your HTTP callback route.
43
- * Exchanges code for tokens, fetches user info, stores in session, and completes elicitation.
44
- */
45
- declare function handleCallback(server: MCPServer, params: {
46
- code: string;
47
- state: string;
48
- }, options: HandleCallbackOptions): Promise<{
49
- success: boolean;
50
- error?: string;
51
- }>;
52
- /** @deprecated Use `handleCallback()` from `lynq/google` instead. */
53
- declare const handleGoogleCallback: typeof handleCallback;
54
-
55
- export { type GoogleOAuthOptions, type GoogleOptions, type HandleCallbackOptions, type HandleGoogleCallbackOptions, google, googleOAuth, handleCallback, handleGoogleCallback };
@@ -1,2 +0,0 @@
1
- import {a}from'../chunk-INAAPNKG.mjs';import'../chunk-OYHVJKUP.mjs';import'../chunk-VAAZWX4U.mjs';function g(e){let s=e.scopes??["openid","profile","email"],t={name:e.name??"google",sessionKey:e.sessionKey??"user",message:e.message??"Please sign in with Google to continue.",buildUrl({sessionId:i,elicitationId:r}){return `https://accounts.google.com/o/oauth2/v2/auth?${new URLSearchParams({client_id:e.clientId,redirect_uri:e.redirectUri,response_type:"code",scope:s.join(" "),state:`${i}:${r}`,access_type:"offline"})}`}};return e.timeout!==void 0&&(t.timeout=e.timeout),e.skipIf&&(t.skipIf=e.skipIf),e.onComplete&&(t.onComplete=e.onComplete),a(t)}var f=g;async function p(e,s,t){let i=t.sessionKey??"user",[r,c]=s.state.split(":");if(!r||!c)return {success:false,error:"Invalid state parameter"};try{let o=await(await fetch("https://oauth2.googleapis.com/token",{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({code:s.code,client_id:t.clientId,client_secret:t.clientSecret,redirect_uri:t.redirectUri,grant_type:"authorization_code"})})).json();if(!o.access_token)return {success:!1,error:o.error_description??o.error??"Token exchange failed"};let d=await(await fetch("https://www.googleapis.com/oauth2/v2/userinfo",{headers:{Authorization:`Bearer ${o.access_token}`}})).json(),a=e.session(r);return a.set(i,d),a.set("accessToken",o.access_token),o.id_token&&a.set("idToken",o.id_token),e.completeElicitation(c),{success:!0}}catch(n){return {success:false,error:n instanceof Error?n.message:String(n)}}}var h=p;
2
- export{g as google,f as googleOAuth,p as handleCallback,h as handleGoogleCallback};
@@ -1,60 +0,0 @@
1
- import { s as ToolContext, M as MCPServer, v as ToolMiddleware } from '../types-BdFjg9Tn.js';
2
- import '@modelcontextprotocol/sdk/types.js';
3
- import 'zod';
4
-
5
- interface StripeOptions {
6
- /** Middleware name. Default: "stripe" */
7
- name?: string;
8
- /** Stripe secret key (server-side). */
9
- secretKey: string;
10
- /** Base URL of your server (for callback URLs). */
11
- baseUrl: string;
12
- /** Callback path. Default: "/payment/stripe/callback" */
13
- callbackPath?: string;
14
- /** Price in cents (USD). e.g., 100 = $1.00 */
15
- amount: number;
16
- /** Currency. Default: "usd" */
17
- currency?: string;
18
- /** Product description shown on Stripe Checkout. */
19
- description?: string;
20
- /** Session key for payment data. Default: "payment" */
21
- sessionKey?: string;
22
- /** If true, only charge once per session per tool. Default: false */
23
- once?: boolean;
24
- /** Message shown to user. */
25
- message?: string;
26
- /** Timeout in ms. Default: 300000 */
27
- timeout?: number;
28
- /** Custom skip condition. Takes priority over sessionKey check. */
29
- skipIf?: (c: ToolContext) => boolean | Promise<boolean>;
30
- /** Called after payment completes successfully, before next(). */
31
- onComplete?: (c: ToolContext) => void | Promise<void>;
32
- }
33
- /** @deprecated Use `StripeOptions` instead. */
34
- type StripePaymentOptions = StripeOptions;
35
- declare function stripe(options: StripeOptions): ToolMiddleware;
36
- /** @deprecated Use `stripe()` from `lynq/stripe` instead. */
37
- declare const stripePayment: typeof stripe;
38
- interface HandleCallbackOptions {
39
- /** Stripe secret key. */
40
- secretKey: string;
41
- /** Session key. Default: "payment" */
42
- sessionKey?: string;
43
- }
44
- /** @deprecated Use `HandleCallbackOptions` instead. */
45
- type HandleStripeCallbackOptions = HandleCallbackOptions;
46
- /**
47
- * Handle Stripe Checkout callback. Call from your HTTP callback route.
48
- * Retrieves the Checkout Session, verifies payment, stores in session, and completes elicitation.
49
- */
50
- declare function handleCallback(server: MCPServer, params: {
51
- checkoutSessionId: string;
52
- state: string;
53
- }, options: HandleCallbackOptions): Promise<{
54
- success: boolean;
55
- error?: string;
56
- }>;
57
- /** @deprecated Use `handleCallback()` from `lynq/stripe` instead. */
58
- declare const handleStripeCallback: typeof handleCallback;
59
-
60
- export { type HandleCallbackOptions, type HandleStripeCallbackOptions, type StripeOptions, type StripePaymentOptions, handleCallback, handleStripeCallback, stripe, stripePayment };
@@ -1 +0,0 @@
1
- import {a}from'../chunk-BVDKAIOU.mjs';import'../chunk-OYHVJKUP.mjs';import'../chunk-VAAZWX4U.mjs';function S(e){let{secretKey:o,baseUrl:n,callbackPath:a$1="/payment/stripe/callback",amount:r,currency:i="usd",description:t,once:m=false}=e,s=e.name??"stripe",u=e.sessionKey??"payment",b=e.message??`Payment required ($${(r/100).toFixed(2)}).`,c={name:s,sessionKey:u,message:b,async buildUrl({sessionId:l,elicitationId:p}){let g=(await import('stripe')).default,k=new g(o),y=`${l}:${p}`;return (await k.checkout.sessions.create({payment_method_types:["card"],line_items:[{price_data:{currency:i,product_data:{name:t??"Tool access"},unit_amount:r},quantity:1}],mode:"payment",success_url:`${n}${a$1}?session_id={CHECKOUT_SESSION_ID}&state=${y}`,cancel_url:`${n}${a$1}?cancelled=true&state=${y}`,metadata:{sessionId:l,elicitationId:p}})).url??""}};e.timeout!==void 0&&(c.timeout=e.timeout),e.skipIf&&(c.skipIf=e.skipIf),e.onComplete&&(c.onComplete=e.onComplete);let d=a(c);return m?d:{...d,onResult(l,p){return p.session.set(u,void 0),l}}}var x=S;async function C(e,o,n){let a=n.sessionKey??"payment",[r,i]=o.state.split(":");if(!r||!i)return {success:false,error:"Invalid state parameter"};try{let t=(await import('stripe')).default,s=await new t(n.secretKey).checkout.sessions.retrieve(o.checkoutSessionId);return s.payment_status!=="paid"?{success:!1,error:"Payment not completed"}:(e.session(r).set(a,{provider:"stripe",checkoutSessionId:s.id,amount:s.amount_total,currency:s.currency,paidAt:new Date().toISOString()}),e.completeElicitation(i),{success:!0})}catch(t){return {success:false,error:t instanceof Error?t.message:String(t)}}}var P=C;export{C as handleCallback,P as handleStripeCallback,S as stripe,x as stripePayment};
@@ -1,26 +0,0 @@
1
- interface GitHubPagesConfig {
2
- clientId: string;
3
- clientSecret: string;
4
- sessionKey?: string;
5
- }
6
- interface GooglePagesConfig {
7
- clientId: string;
8
- clientSecret: string;
9
- sessionKey?: string;
10
- }
11
- interface StripePagesConfig {
12
- secretKey: string;
13
- sessionKey?: string;
14
- }
15
- interface CryptoPagesConfig {
16
- rpcUrl?: string;
17
- sessionKey?: string;
18
- }
19
- interface PagesConfig {
20
- github?: true | string | GitHubPagesConfig;
21
- google?: true | string | GooglePagesConfig;
22
- stripe?: true | string | StripePagesConfig;
23
- crypto?: true | string | CryptoPagesConfig;
24
- }
25
-
26
- export type { PagesConfig as P };
@@ -1 +0,0 @@
1
- export{d as cryptoPaymentPage,c as errorPage,a as escapeHtml,h as handleCryptoGet,i as handleCryptoPost,e as handleGitHubPage,f as handleGooglePage,g as handleStripePage,b as successPage}from'./chunk-OJJZGR4B.mjs';