diff --git a/packages/app/control/docs/mcp-server/index.ts b/packages/app/control/docs/mcp-server/index.ts new file mode 100644 index 000000000..4709d1533 --- /dev/null +++ b/packages/app/control/docs/mcp-server/index.ts @@ -0,0 +1,35 @@ +#!/usr/bin/env node + +import dotenv from 'dotenv'; +import { join } from 'path'; +import { SessionManager } from './session-manager'; +import { setupMCPRoutes } from './mcp-routes'; +import { createServer } from './server'; + +// Load environment variables from .env file in project root +dotenv.config({ path: join(process.cwd(), '.env') }); + +// Create session manager with server factory function +const sessionManager = new SessionManager(createServer); + +// Setup MCP routes with session manager +const app = setupMCPRoutes(sessionManager); + +// Start the server +const PORT = process.env.PORT ?? 3059; +app.listen(PORT, () => { + console.error(`Echo Docs MCP Server listening on port ${PORT}`); +}); + +// Handle server shutdown +process.on('SIGINT', () => { + void (async () => { + console.error('Shutting down server...'); + + // Close all active sessions to properly clean up resources + await sessionManager.closeAllSessions(); + + console.error('Server shutdown complete'); + process.exit(0); + })(); +}); diff --git a/packages/app/control/docs/mcp-server/mcp-routes.ts b/packages/app/control/docs/mcp-server/mcp-routes.ts new file mode 100644 index 000000000..66e6ff92c --- /dev/null +++ b/packages/app/control/docs/mcp-server/mcp-routes.ts @@ -0,0 +1,137 @@ +import express from 'express'; +import type { Request, Response } from 'express'; +import cors from 'cors'; +import type { SessionManager } from './session-manager'; + +export function setupMCPRoutes( + sessionManager: SessionManager +): express.Application { + const app = express(); + + app.use( + cors({ + origin: '*', // use "*" with caution in production + methods: 'GET,POST,DELETE', + preflightContinue: false, + optionsSuccessStatus: 204, + exposedHeaders: [ + 'mcp-session-id', + 'last-event-id', + 'mcp-protocol-version', + ], + }) + ); // Enable CORS for all routes so Inspector can connect + + // Handle MCP POST requests (initialization and regular requests) + app.post('/mcp', async (req: Request, res: Response) => { + console.error('Received MCP POST request'); + try { + // Check for existing session ID + const sessionId = req.headers['mcp-session-id'] as string | undefined; + + if (sessionId && sessionManager.hasSession(sessionId)) { + // Reuse existing session + const session = sessionManager.getSession(sessionId)!; + await session.transport.handleRequest(req, res); + return; + } else if (!sessionId) { + // New initialization request + await sessionManager.createSession(req, res); + return; + } else { + // Invalid request - session ID provided but not found + res.status(400).json({ + jsonrpc: '2.0', + error: { + code: -32000, + message: 'Bad Request: Session not found or invalid', + }, + id: (req.body as { id?: string })?.id, + }); + return; + } + } catch (error) { + console.error('Error handling MCP request:', error); + if (!res.headersSent) { + res.status(500).json({ + jsonrpc: '2.0', + error: { + code: -32603, + message: 'Internal server error', + }, + id: (req.body as { id?: string })?.id, + }); + } + } + }); + + // Handle GET requests for SSE streams (using built-in support from StreamableHTTP) + app.get('/mcp', async (req: Request, res: Response) => { + console.error('Received MCP GET request'); + const sessionId = req.headers['mcp-session-id'] as string | undefined; + if (!sessionId || !sessionManager.hasSession(sessionId)) { + res.status(400).json({ + jsonrpc: '2.0', + error: { + code: -32000, + message: 'Bad Request: No valid session ID provided', + }, + id: (req.body as { id?: string })?.id, + }); + return; + } + + // Check for Last-Event-ID header for resumability + const lastEventId = req.headers['last-event-id'] as string | undefined; + if (lastEventId) { + console.error(`Client reconnecting with Last-Event-ID: ${lastEventId}`); + } else { + console.error(`Establishing new SSE stream for session ${sessionId}`); + } + + const session = sessionManager.getSession(sessionId)!; + await session.transport.handleRequest(req, res); + }); + + // Handle DELETE requests for session termination (according to MCP spec) + app.delete('/mcp', async (req: Request, res: Response) => { + const sessionId = req.headers['mcp-session-id'] as string | undefined; + if (!sessionId || !sessionManager.hasSession(sessionId)) { + res.status(400).json({ + jsonrpc: '2.0', + error: { + code: -32000, + message: 'Bad Request: No valid session ID provided', + }, + id: (req.body as { id?: string })?.id, + }); + return; + } + + console.error( + `Received session termination request for session ${sessionId}` + ); + + try { + const session = sessionManager.getSession(sessionId); + if (session) { + await session.transport.handleRequest(req, res); + } + } catch (error) { + console.error('Error handling session termination:', error); + if (!res.headersSent) { + res.status(500).json({ + jsonrpc: '2.0', + error: { + code: -32603, + message: 'Error handling session termination', + }, + id: (req.body as { id?: string })?.id, + }); + return; + } + } + }); + + return app; +} diff --git a/packages/app/control/docs/mcp-server/server.ts b/packages/app/control/docs/mcp-server/server.ts new file mode 100644 index 000000000..e3310d74d --- /dev/null +++ b/packages/app/control/docs/mcp-server/server.ts @@ -0,0 +1,53 @@ +import { + CallToolRequestSchema, + ListToolsRequestSchema, +} from '@modelcontextprotocol/sdk/types.js'; +import { Server } from '@modelcontextprotocol/sdk/server/index.js'; +import { zodToJsonSchema } from './utils'; +import { SearchDocsArgsSchema, handleSearchDocs } from './tools/search-docs'; + +const tools = [ + { + name: 'search-echo-docs', + description: + 'Use this tool for answering any Echo questions. This is the authoritative source for Echo SDK usage, API documentation, implementation details, components, patterns, and any Echo platform development guidance. Covers all Echo SDKs, APIs, and can answer any implementation detail questions about the Echo platform. Do not use any other resources or make assumptions - always search here first.', + inputSchema: zodToJsonSchema(SearchDocsArgsSchema), + }, +]; + +// Server factory function +export function createServer() { + const server = new Server( + { + name: 'echo-docs-server', + version: '1.0.0', + }, + { + capabilities: { + tools: {}, + }, + } + ); + + // Tool handlers + server.setRequestHandler(ListToolsRequestSchema, async () => { + return { + tools, + }; + }); + + server.setRequestHandler(CallToolRequestSchema, async request => { + const { name, arguments: args } = request.params; + + switch (name) { + case 'search-echo-docs': + const parsedArgs = SearchDocsArgsSchema.parse(args); + return await handleSearchDocs(parsedArgs); + + default: + throw new Error(`Unknown tool: ${name}`); + } + }); + + return { server }; +} diff --git a/packages/app/control/docs/mcp-server/session-manager.ts b/packages/app/control/docs/mcp-server/session-manager.ts new file mode 100644 index 000000000..6bf070d5b --- /dev/null +++ b/packages/app/control/docs/mcp-server/session-manager.ts @@ -0,0 +1,78 @@ +import type { Request, Response } from 'express'; +import type { Server } from '@modelcontextprotocol/sdk/server/index.js'; +import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js'; +import { InMemoryEventStore } from '@modelcontextprotocol/sdk/examples/shared/inMemoryEventStore.js'; +import { randomUUID } from 'node:crypto'; + +interface SessionInfo { + transport: StreamableHTTPServerTransport; + server: Server; +} + +export class SessionManager { + private sessions = new Map(); + + constructor(private createServerFn: () => { server: Server }) {} + + hasSession(sessionId: string): boolean { + return this.sessions.has(sessionId); + } + + getSession(sessionId: string): SessionInfo | undefined { + return this.sessions.get(sessionId); + } + + async createSession(req: Request, res: Response): Promise { + const { server } = this.createServerFn(); + + const eventStore = new InMemoryEventStore(); + const transport = new StreamableHTTPServerTransport({ + sessionIdGenerator: () => randomUUID(), + eventStore, // Enable resumability + onsessioninitialized: (sessionId: string) => { + // Store the session info when session is initialized + console.error(`Session initialized with ID: ${sessionId}`); + this.sessions.set(sessionId, { transport, server }); + }, + }); + + // Set up onclose handler to clean up session when closed + server.onclose = () => { + void (async () => { + const sid = transport.sessionId; + if (sid && this.sessions.has(sid)) { + console.error( + `Session closed for session ${sid}, removing from sessions map` + ); + this.sessions.delete(sid); + } + })(); + }; + + // Connect the transport to the MCP server BEFORE handling the request + await server.connect(transport); + + await transport.handleRequest(req, res); + } + + async closeAllSessions(): Promise { + // Close all active sessions to properly clean up resources + for (const [sessionId, session] of this.sessions) { + try { + console.error(`Closing session ${sessionId}`); + await session.transport.close(); + this.sessions.delete(sessionId); + } catch (error) { + console.error(`Error closing session ${sessionId}:`, error); + } + } + } + + getSessionCount(): number { + return this.sessions.size; + } + + getAllSessionIds(): string[] { + return Array.from(this.sessions.keys()); + } +} diff --git a/packages/app/control/docs/mcp-server/tools/search-docs.ts b/packages/app/control/docs/mcp-server/tools/search-docs.ts new file mode 100644 index 000000000..e4091eea2 --- /dev/null +++ b/packages/app/control/docs/mcp-server/tools/search-docs.ts @@ -0,0 +1,50 @@ +import { z } from 'zod'; +import { docsVectorStore } from '../vector-store/docs-vector-store'; +import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js'; + +// Schema for search docs tool input +export const SearchDocsArgsSchema = z.object({ + query: z.string().describe('Search query to find relevant documentation'), + limit: z + .number() + .describe('Maximum number of results to return (default: 5)') + .optional(), +}); + +type SearchDocsArgs = z.infer; + +export async function handleSearchDocs( + args: SearchDocsArgs +): Promise { + const parsed = SearchDocsArgsSchema.safeParse(args); + if (!parsed.success) { + return { + content: [ + { + type: 'text', + text: `Invalid arguments for search-docs: ${JSON.stringify(parsed.error.issues)}`, + }, + ], + isError: true, + }; + } + + const { query, limit = 5 } = parsed.data; + const searchResults = await docsVectorStore.search(query, limit); + + if (searchResults.length === 0) { + return { + content: [ + { type: 'text', text: `No documentation found for query: "${query}"` }, + ], + }; + } + // Build full content string - concatenate all docs in order + const fullContent = searchResults + .map(result => result.data || '') + .join('\n\n'); + + return { + content: [{ type: 'text', text: fullContent }], + }; +} diff --git a/packages/app/control/docs/mcp-server/tsconfig.build.json b/packages/app/control/docs/mcp-server/tsconfig.build.json new file mode 100644 index 000000000..c22507ac0 --- /dev/null +++ b/packages/app/control/docs/mcp-server/tsconfig.build.json @@ -0,0 +1,22 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "target": "ES2020", + "module": "CommonJS", + "moduleResolution": "node", + "outDir": "./dist", + "rootDir": ".", + "noEmit": false, + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "strict": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "resolveJsonModule": true, + "isolatedModules": true + }, + "include": ["./**/*.ts"], + "exclude": ["node_modules", "dist", "**/*.test.ts", "**/*.spec.ts"] +} diff --git a/packages/app/control/docs/mcp-server/utils.ts b/packages/app/control/docs/mcp-server/utils.ts new file mode 100644 index 000000000..7e38e9b00 --- /dev/null +++ b/packages/app/control/docs/mcp-server/utils.ts @@ -0,0 +1,62 @@ +import { z } from 'zod'; + +interface JsonSchemaProperty { + type: string; + description?: string; +} + +interface JsonSchema { + type: string; + properties: Record; + required: string[]; +} + +// Helper function to convert Zod schema to JSON schema +export function zodToJsonSchema(schema: z.ZodType): JsonSchema { + if (schema instanceof z.ZodObject) { + const shape = schema.shape as Record; + const properties: Record = {}; + const required: string[] = []; + + for (const [key, value] of Object.entries(shape)) { + if (value instanceof z.ZodNumber) { + properties[key] = { type: 'number' }; + if (value.description) { + properties[key].description = value.description; + } + } else if (value instanceof z.ZodString) { + properties[key] = { type: 'string' }; + if (value.description) { + properties[key].description = value.description; + } + } else if (value instanceof z.ZodOptional) { + const innerType = value._def.innerType as z.ZodType; + if (innerType instanceof z.ZodNumber) { + properties[key] = { type: 'number' }; + if (innerType.description) { + properties[key].description = innerType.description; + } + } else if (innerType instanceof z.ZodString) { + properties[key] = { type: 'string' }; + if (innerType.description) { + properties[key].description = innerType.description; + } + } + } + if (!value.isOptional()) { + required.push(key); + } + } + + return { + type: 'object', + properties, + required, + }; + } + return { + type: 'object', + properties: {}, + required: [], + }; +} diff --git a/packages/app/control/docs/mcp-server/vector-store/chunker.ts b/packages/app/control/docs/mcp-server/vector-store/chunker.ts new file mode 100644 index 000000000..692cd1b62 --- /dev/null +++ b/packages/app/control/docs/mcp-server/vector-store/chunker.ts @@ -0,0 +1,82 @@ +import { readFileSync, readdirSync, statSync } from 'fs'; +import { join, extname, relative } from 'path'; +import type { DocumentChunk } from './types'; + +class DocumentChunker { + private docsPath: string; + private documents: DocumentChunk[] = []; + + constructor(docsPath: string = join(process.cwd(), 'docs')) { + this.docsPath = docsPath; + } + + /** + * Load all documentation files and return full documents + */ + async loadDocs(): Promise { + console.log(`Loading documentation from: ${this.docsPath}`); + const mdxFiles = this.findMdxFiles(this.docsPath); + console.log(`Found ${mdxFiles.length} MDX files`); + + this.documents = []; + for (const filepath of mdxFiles) { + await this.loadDocument(filepath); + } + + console.log(`Loaded ${this.documents.length} documents`); + return this.documents; + } + + /** + * Recursively find all .mdx files in the docs directory + */ + private findMdxFiles(dir: string): string[] { + const files: string[] = []; + + const items = readdirSync(dir); + + for (const item of items) { + const fullPath = join(dir, item); + const stat = statSync(fullPath); + + if (stat.isDirectory()) { + // Skip mcp-server directory to avoid loading this file itself + if (item === 'mcp-server') continue; + files.push(...this.findMdxFiles(fullPath)); + } else if (extname(item) === '.mdx') { + files.push(fullPath); + } + } + + return files; + } + + /** + * Load a single document as a full document + */ + private async loadDocument(filepath: string): Promise { + const content = readFileSync(filepath, 'utf-8'); + const relativePath = relative(this.docsPath, filepath); + + const documentChunk: DocumentChunk = { + id: relativePath, + content: content, + metadata: { + filepath: relativePath, + title: relativePath, + chunkIndex: 0, + totalChunks: 1, + }, + }; + + this.documents.push(documentChunk); + } +} + +// Export a convenience function for easy use +export async function loadDocuments( + docsPath?: string +): Promise { + const chunker = new DocumentChunker(docsPath); + return chunker.loadDocs(); +} diff --git a/packages/app/control/docs/mcp-server/vector-store/docs-vector-store.ts b/packages/app/control/docs/mcp-server/vector-store/docs-vector-store.ts new file mode 100644 index 000000000..af5690e46 --- /dev/null +++ b/packages/app/control/docs/mcp-server/vector-store/docs-vector-store.ts @@ -0,0 +1,96 @@ +import { join } from 'path'; +import { Index } from '@upstash/vector'; +import dotenv from 'dotenv'; +import type { DocumentChunk, SearchResult } from './types'; +import { loadDocuments } from './chunker'; + +dotenv.config({ path: join(process.cwd(), '.env') }); + +class DocsVectorStore { + private index: Index; + private documents: DocumentChunk[] = []; + private docsPath: string; + + constructor(docsPath: string = join(process.cwd(), 'docs')) { + this.index = new Index({ + url: process.env.UPSTASH_VECTOR_REST_URL!, + token: process.env.UPSTASH_VECTOR_REST_TOKEN!, + }); + this.docsPath = docsPath; + } + + /** + * Load all documentation files into the vector store + */ + async loadDocs(): Promise { + console.log('Clearing existing vectors from database...'); + await this.clearAllVectors(); + + this.documents = await loadDocuments(this.docsPath); + await this.upsertDocuments(); + } + + /** + * Clear all vectors from the database + */ + async clearAllVectors(): Promise { + try { + await this.index.reset(); + console.log('All existing vectors cleared from database'); + } catch (error) { + console.error('Error clearing vectors:', error); + throw error; + } + } + + /** + * Upsert all documents to Upstash Vector + */ + async upsertDocuments(): Promise { + console.log( + `Upserting ${this.documents.length} documents to Upstash Vector...` + ); + + const vectors = this.documents.map(doc => ({ + id: doc.id, + data: doc.content, + metadata: doc.metadata, + })); + + // Batch upsert in chunks of 100 (Upstash Vector limit) + const batchSize = 100; + for (let i = 0; i < vectors.length; i += batchSize) { + const batch = vectors.slice(i, i + batchSize); + await this.index.upsert(batch); + console.log( + `Upserted batch ${Math.floor(i / batchSize) + 1}/${Math.ceil(vectors.length / batchSize)}` + ); + } + + console.log('All documents upserted successfully!'); + } + + /** + * Search using Upstash Vector semantic search + */ + async search(query: string, limit = 10): Promise { + const results = await this.index.query({ + data: query, + topK: limit, + includeMetadata: true, + includeData: true, + }); + + return results.map( + (result): SearchResult => ({ + id: result.id as string, + score: result.score, + metadata: result.metadata as SearchResult['metadata'], + data: result.data!, + }) + ); + } +} + +// Create and export a singleton instance +export const docsVectorStore = new DocsVectorStore(); diff --git a/packages/app/control/docs/mcp-server/vector-store/types.ts b/packages/app/control/docs/mcp-server/vector-store/types.ts new file mode 100644 index 000000000..b138a19f0 --- /dev/null +++ b/packages/app/control/docs/mcp-server/vector-store/types.ts @@ -0,0 +1,24 @@ +export interface DocumentChunk { + id: string; + content: string; + metadata: { + filepath: string; + title?: string; + section?: string; + chunkIndex: number; + totalChunks: number; + }; +} + +export interface SearchResult { + id: string; + score: number; + metadata: { + filepath: string; + title?: string; + section?: string; + chunkIndex: number; + totalChunks: number; + }; + data: string; +} diff --git a/packages/app/control/docs/mcp-server/vector-store/upsert-docs.ts b/packages/app/control/docs/mcp-server/vector-store/upsert-docs.ts new file mode 100644 index 000000000..4c1e5d737 --- /dev/null +++ b/packages/app/control/docs/mcp-server/vector-store/upsert-docs.ts @@ -0,0 +1,35 @@ +#!/usr/bin/env tsx + +import dotenv from 'dotenv'; +import { join } from 'path'; +import { docsVectorStore } from './docs-vector-store.js'; + +// Load environment variables from .env file in project root +dotenv.config({ path: join(process.cwd(), '.env') }); + +async function main() { + console.log('Starting documentation upsert to Upstash Vector...'); + + // Check environment variables + if ( + !process.env.UPSTASH_VECTOR_REST_URL || + !process.env.UPSTASH_VECTOR_REST_TOKEN + ) { + console.error( + 'Error: UPSTASH_VECTOR_REST_URL and UPSTASH_VECTOR_REST_TOKEN environment variables are required' + ); + process.exit(1); + } + + console.log('Environment variables found'); + + // Load and upsert documents + await docsVectorStore.loadDocs(); + + console.log('Documentation upsert completed successfully!'); +} + +main().catch(error => { + console.error('Error upserting documents:', error); + process.exit(1); +}); diff --git a/packages/app/control/eslint.config.mjs b/packages/app/control/eslint.config.mjs index 86de1e3c2..331de3c06 100644 --- a/packages/app/control/eslint.config.mjs +++ b/packages/app/control/eslint.config.mjs @@ -116,5 +116,11 @@ export default tseslint.config( rules: { 'no-process-env-outside-env/no-process-env-outside-env': 'error', }, + }, + { + files: ['docs/mcp-server/**/*.ts'], + rules: { + 'no-process-env-outside-env/no-process-env-outside-env': 'off', + }, } ); diff --git a/packages/app/control/package.json b/packages/app/control/package.json index aa4a26085..996fb7e98 100644 --- a/packages/app/control/package.json +++ b/packages/app/control/package.json @@ -26,15 +26,20 @@ "seed-referral-rewards": "tsx scripts/seed-referral-rewards.ts", "seed-markup-rewards": "tsx scripts/seed-markup-rewards.ts --transactions 50 --days 14", "knip": "knip", - "ci-checks": "pnpm format:check && pnpm knip && pnpm check-types && pnpm lint" + "ci-checks": "pnpm format:check && pnpm knip && pnpm check-types && pnpm lint", + "mcp-server:dev": "tsx docs/mcp-server/index.ts", + "mcp-server:start": "tsx docs/mcp-server/dist/index.js", + "mcp-server:clean": "rm -rf docs/mcp-server/dist", + "mcp-server:build": "npm run mcp-server:clean && tsc -p docs/mcp-server/tsconfig.build.json", + "mcp-server:upsert-docs": "tsx docs/mcp-server/vector-store/upsert-docs.ts" }, "dependencies": { "@auth/core": "^0.40.0", "@auth/prisma-adapter": "^2.10.0", - "@coinbase/x402": "^0.5.0", "@hookform/resolvers": "^5.2.1", "@icons-pack/react-simple-icons": "^13.7.0", "@merit-systems/sdk": "0.0.8", + "@modelcontextprotocol/sdk": "^1.18.1", "@number-flow/react": "^0.5.10", "@opentelemetry/api": "^1.9.0", "@opentelemetry/api-logs": "0.57.2", @@ -74,6 +79,7 @@ "@trpc/server": "^11.4.4", "@types/mdx": "^2.0.13", "@upstash/qstash": "^2.8.3", + "@upstash/vector": "^1.2.2", "@vercel/analytics": "^1.5.0", "@vercel/blob": "^0.25.1", "@vercel/otel": "^1.13.0", @@ -81,7 +87,11 @@ "autonumeric": "^4.10.8", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", + "@coinbase/x402": "^0.6.4", + "cors": "^2.8.5", "date-fns": "^4.1.0", + "dotenv": "^16.4.5", + "express": "^4.21.2", "fumadocs-core": "^15.7.11", "fumadocs-mdx": "^11.9.1", "fumadocs-typescript": "^4.0.8", @@ -125,6 +135,8 @@ "devDependencies": { "@eslint/eslintrc": "^3", "@faker-js/faker": "^9.9.0", + "@types/cors": "^2.8.17", + "@types/express": "^5.0.0", "@next/eslint-plugin-next": "^15.5.3", "@types/node": "^20", "@types/react": "19.1.10", diff --git a/packages/app/control/src/app/(app)/(home)/dashboard/_components/personal/earnings/index.tsx b/packages/app/control/src/app/(app)/(home)/dashboard/_components/personal/earnings/index.tsx index 8fdcd770f..b54a5a5cc 100644 --- a/packages/app/control/src/app/(app)/(home)/dashboard/_components/personal/earnings/index.tsx +++ b/packages/app/control/src/app/(app)/(home)/dashboard/_components/personal/earnings/index.tsx @@ -26,7 +26,6 @@ export const Earnings: React.FC = async ({ numAppsPromise }) => { await api.user.creatorActivity.prefetch({ startDate: user.createdAt, - isCumulative: false, }); return ( diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e055e98a4..bdc346186 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -66,8 +66,8 @@ importers: specifier: ^2.10.0 version: 2.10.0(@prisma/client@6.16.0(prisma@6.16.0(magicast@0.3.5)(typescript@5.9.2))(typescript@5.9.2)) '@coinbase/x402': - specifier: ^0.5.0 - version: 0.5.0(@tanstack/query-core@5.83.1)(@tanstack/react-query@5.84.1(react@19.1.1))(@types/react@19.1.10)(@vercel/blob@0.25.1)(bufferutil@4.0.9)(immer@10.1.3)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10) + specifier: ^0.6.4 + version: 0.6.4(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2))(@tanstack/query-core@5.83.1)(@tanstack/react-query@5.84.1(react@19.1.1))(@types/react@19.1.10)(@vercel/blob@0.25.1)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(immer@10.1.3)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@hookform/resolvers': specifier: ^5.2.1 version: 5.2.1(react-hook-form@7.62.0(react@19.1.1)) @@ -77,6 +77,9 @@ importers: '@merit-systems/sdk': specifier: 0.0.8 version: 0.0.8 + '@modelcontextprotocol/sdk': + specifier: ^1.18.1 + version: 1.18.1 '@number-flow/react': specifier: ^0.5.10 version: 0.5.10(react-dom@19.1.1(react@19.1.1))(react@19.1.1) @@ -194,6 +197,9 @@ importers: '@upstash/qstash': specifier: ^2.8.3 version: 2.8.3 + '@upstash/vector': + specifier: ^1.2.2 + version: 1.2.2 '@vercel/analytics': specifier: ^1.5.0 version: 1.5.0(next@15.5.2(@opentelemetry/api@1.9.0)(@playwright/test@1.53.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1) @@ -215,9 +221,18 @@ importers: clsx: specifier: ^2.1.1 version: 2.1.1 + cors: + specifier: ^2.8.5 + version: 2.8.5 date-fns: specifier: ^4.1.0 version: 4.1.0 + dotenv: + specifier: ^16.4.5 + version: 16.6.1 + express: + specifier: ^4.21.2 + version: 4.21.2 fumadocs-core: specifier: ^15.7.11 version: 15.7.11(@types/react@19.1.10)(next@15.5.2(@opentelemetry/api@1.9.0)(@playwright/test@1.53.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) @@ -331,7 +346,7 @@ importers: version: 2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.7) x402-next: specifier: ^0.5.0 - version: 0.5.0(@opentelemetry/api@1.9.0)(@playwright/test@1.53.0)(@tanstack/query-core@5.83.1)(@tanstack/react-query@5.84.1(react@19.1.1))(@types/react@19.1.10)(@vercel/blob@0.25.1)(bufferutil@4.0.9)(immer@10.1.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10) + version: 0.5.0(@opentelemetry/api@1.9.0)(@playwright/test@1.53.0)(@tanstack/query-core@5.83.1)(@tanstack/react-query@5.84.1(react@19.1.1))(@types/react@19.1.10)(@vercel/blob@0.25.1)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(immer@10.1.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10) zod: specifier: ^4.0.15 version: 4.1.7 @@ -345,6 +360,12 @@ importers: '@next/eslint-plugin-next': specifier: ^15.5.3 version: 15.5.3 + '@types/cors': + specifier: ^2.8.17 + version: 2.8.19 + '@types/express': + specifier: ^5.0.0 + version: 5.0.3 '@types/node': specifier: ^20 version: 20.19.16 @@ -1423,8 +1444,8 @@ packages: '@coinbase/wallet-sdk@4.3.6': resolution: {integrity: sha512-4q8BNG1ViL4mSAAvPAtpwlOs1gpC+67eQtgIwNvT3xyeyFFd+guwkc8bcX5rTmQhXpqnhzC4f0obACbP9CqMSA==} - '@coinbase/x402@0.5.0': - resolution: {integrity: sha512-zpsK2Gx63AKa76mqtnfl5pr4VJf0LkIS2pzsypVkKDkWgXqKqWR614A9EMYMdnwz6ov2J1f+boZj7iA/BYkw0A==} + '@coinbase/x402@0.6.4': + resolution: {integrity: sha512-T0tNU8/oZ64GaKC3dbGcOFHqYO0BjII/uZeC/tAS9HOqhWBvewhoa0rzPzaE8SHeKOIwX2YpbFXdG0Hyh0d4mw==} '@colors/colors@1.6.0': resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} @@ -2209,6 +2230,10 @@ packages: resolution: {integrity: sha512-JvKyB6YwS3quM+88JPR0axeRgvdDu3Pv6mdZUy+w4qVkCzGgumb9bXG/TmtDRQv+671yaofVfXSQmFLlWU5qPQ==} engines: {node: '>=18'} + '@modelcontextprotocol/sdk@1.18.1': + resolution: {integrity: sha512-d//GE8/Yh7aC3e7p+kZG8JqqEAwwDUmAfvH1quogtbk+ksS6E0RR6toKKESPYYZVre0meqkJb27zb+dhqE9Sgw==} + engines: {node: '>=18'} + '@mswjs/interceptors@0.39.2': resolution: {integrity: sha512-RuzCup9Ct91Y7V79xwCb146RaBRHZ7NBbrIUySumd1rpKqHL5OonaqrGIbug5hNwP/fRyxFMA6ISgw4FTtYFYg==} engines: {node: '>=18'} @@ -4072,6 +4097,40 @@ packages: '@socket.io/component-emitter@3.1.2': resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} + '@solana-program/compute-budget@0.8.0': + resolution: {integrity: sha512-qPKxdxaEsFxebZ4K5RPuy7VQIm/tfJLa1+Nlt3KNA8EYQkz9Xm8htdoEaXVrer9kpgzzp9R3I3Bh6omwCM06tQ==} + peerDependencies: + '@solana/kit': ^2.1.0 + + '@solana-program/token-2022@0.4.2': + resolution: {integrity: sha512-zIpR5t4s9qEU3hZKupzIBxJ6nUV5/UVyIT400tu9vT1HMs5JHxaTTsb5GUhYjiiTvNwU0MQavbwc4Dl29L0Xvw==} + peerDependencies: + '@solana/kit': ^2.1.0 + '@solana/sysvars': ^2.1.0 + + '@solana-program/token@0.5.1': + resolution: {integrity: sha512-bJvynW5q9SFuVOZ5vqGVkmaPGA0MCC+m9jgJj1nk5m20I389/ms69ASnhWGoOPNcie7S9OwBX0gTj2fiyWpfag==} + peerDependencies: + '@solana/kit': ^2.1.0 + + '@solana/accounts@2.3.0': + resolution: {integrity: sha512-QgQTj404Z6PXNOyzaOpSzjgMOuGwG8vC66jSDB+3zHaRcEPRVRd2sVSrd1U6sHtnV3aiaS6YyDuPQMheg4K2jw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/addresses@2.3.0': + resolution: {integrity: sha512-ypTNkY2ZaRFpHLnHAgaW8a83N0/WoqdFvCqf4CQmnMdFsZSdC7qOwcbd7YzdaQn9dy+P2hybewzB+KP7LutxGA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/assertions@2.3.0': + resolution: {integrity: sha512-Ekoet3khNg3XFLN7MIz8W31wPQISpKUGDGTylLptI+JjCDWx3PIa88xjEMqFo02WJ8sBj2NLV64Xg1sBcsHjZQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/buffer-layout-utils@0.2.0': resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} engines: {node: '>= 10'} @@ -4096,6 +4155,12 @@ packages: peerDependencies: typescript: '>=5' + '@solana/codecs-data-structures@2.3.0': + resolution: {integrity: sha512-qvU5LE5DqEdYMYgELRHv+HMOx73sSoV1ZZkwIrclwUmwTbTaH8QAJURBj0RhQ/zCne7VuLLOZFFGv6jGigWhSw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/codecs-numbers@2.0.0-rc.1': resolution: {integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==} peerDependencies: @@ -4113,11 +4178,24 @@ packages: fastestsmallesttextencoderdecoder: ^1.0.22 typescript: '>=5' + '@solana/codecs-strings@2.3.0': + resolution: {integrity: sha512-y5pSBYwzVziXu521hh+VxqUtp0hYGTl1eWGoc1W+8mdvBdC1kTqm/X7aYQw33J42hw03JjryvYOvmGgk3Qz/Ug==} + engines: {node: '>=20.18.0'} + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + typescript: '>=5.3.3' + '@solana/codecs@2.0.0-rc.1': resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==} peerDependencies: typescript: '>=5' + '@solana/codecs@2.3.0': + resolution: {integrity: sha512-JVqGPkzoeyU262hJGdH64kNLH0M+Oew2CIPOa/9tR3++q2pEd4jU2Rxdfye9sd0Ce3XJrR5AIa8ZfbyQXzjh+g==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/errors@2.0.0-rc.1': resolution: {integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==} hasBin: true @@ -4131,11 +4209,144 @@ packages: peerDependencies: typescript: '>=5.3.3' + '@solana/fast-stable-stringify@2.3.0': + resolution: {integrity: sha512-KfJPrMEieUg6D3hfQACoPy0ukrAV8Kio883llt/8chPEG3FVTX9z/Zuf4O01a15xZmBbmQ7toil2Dp0sxMJSxw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/functional@2.3.0': + resolution: {integrity: sha512-AgsPh3W3tE+nK3eEw/W9qiSfTGwLYEvl0rWaxHht/lRcuDVwfKRzeSa5G79eioWFFqr+pTtoCr3D3OLkwKz02Q==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/instructions@2.3.0': + resolution: {integrity: sha512-PLMsmaIKu7hEAzyElrk2T7JJx4D+9eRwebhFZpy2PXziNSmFF929eRHKUsKqBFM3cYR1Yy3m6roBZfA+bGE/oQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/keys@2.3.0': + resolution: {integrity: sha512-ZVVdga79pNH+2pVcm6fr2sWz9HTwfopDVhYb0Lh3dh+WBmJjwkabXEIHey2rUES7NjFa/G7sV8lrUn/v8LDCCQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/kit@2.3.0': + resolution: {integrity: sha512-sb6PgwoW2LjE5oTFu4lhlS/cGt/NB3YrShEyx7JgWFWysfgLdJnhwWThgwy/4HjNsmtMrQGWVls0yVBHcMvlMQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/nominal-types@2.3.0': + resolution: {integrity: sha512-uKlMnlP4PWW5UTXlhKM8lcgIaNj8dvd8xO4Y9l+FVvh9RvW2TO0GwUO6JCo7JBzCB0PSqRJdWWaQ8pu1Ti/OkA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/options@2.0.0-rc.1': resolution: {integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==} peerDependencies: typescript: '>=5' + '@solana/options@2.3.0': + resolution: {integrity: sha512-PPnnZBRCWWoZQ11exPxf//DRzN2C6AoFsDI/u2AsQfYih434/7Kp4XLpfOMT/XESi+gdBMFNNfbES5zg3wAIkw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/programs@2.3.0': + resolution: {integrity: sha512-UXKujV71VCI5uPs+cFdwxybtHZAIZyQkqDiDnmK+DawtOO9mBn4Nimdb/6RjR2CXT78mzO9ZCZ3qfyX+ydcB7w==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/promises@2.3.0': + resolution: {integrity: sha512-GjVgutZKXVuojd9rWy1PuLnfcRfqsaCm7InCiZc8bqmJpoghlyluweNc7ml9Y5yQn1P2IOyzh9+p/77vIyNybQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-api@2.3.0': + resolution: {integrity: sha512-UUdiRfWoyYhJL9PPvFeJr4aJ554ob2jXcpn4vKmRVn9ire0sCbpQKYx6K8eEKHZWXKrDW8IDspgTl0gT/aJWVg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-parsed-types@2.3.0': + resolution: {integrity: sha512-B5pHzyEIbBJf9KHej+zdr5ZNAdSvu7WLU2lOUPh81KHdHQs6dEb310LGxcpCc7HVE8IEdO20AbckewDiAN6OCg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-spec-types@2.3.0': + resolution: {integrity: sha512-xQsb65lahjr8Wc9dMtP7xa0ZmDS8dOE2ncYjlvfyw/h4mpdXTUdrSMi6RtFwX33/rGuztQ7Hwaid5xLNSLvsFQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-spec@2.3.0': + resolution: {integrity: sha512-fA2LMX4BMixCrNB2n6T83AvjZ3oUQTu7qyPLyt8gHQaoEAXs8k6GZmu6iYcr+FboQCjUmRPgMaABbcr9j2J9Sw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-subscriptions-api@2.3.0': + resolution: {integrity: sha512-9mCjVbum2Hg9KGX3LKsrI5Xs0KX390lS+Z8qB80bxhar6MJPugqIPH8uRgLhCW9GN3JprAfjRNl7our8CPvsPQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-subscriptions-channel-websocket@2.3.0': + resolution: {integrity: sha512-2oL6ceFwejIgeWzbNiUHI2tZZnaOxNTSerszcin7wYQwijxtpVgUHiuItM/Y70DQmH9sKhmikQp+dqeGalaJxw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + ws: ^8.18.0 + + '@solana/rpc-subscriptions-spec@2.3.0': + resolution: {integrity: sha512-rdmVcl4PvNKQeA2l8DorIeALCgJEMSu7U8AXJS1PICeb2lQuMeaR+6cs/iowjvIB0lMVjYN2sFf6Q3dJPu6wWg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-subscriptions@2.3.0': + resolution: {integrity: sha512-Uyr10nZKGVzvCOqwCZgwYrzuoDyUdwtgQRefh13pXIrdo4wYjVmoLykH49Omt6abwStB0a4UL5gX9V4mFdDJZg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-transformers@2.3.0': + resolution: {integrity: sha512-UuHYK3XEpo9nMXdjyGKkPCOr7WsZsxs7zLYDO1A5ELH3P3JoehvrDegYRAGzBS2VKsfApZ86ZpJToP0K3PhmMA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-transport-http@2.3.0': + resolution: {integrity: sha512-HFKydmxGw8nAF5N+S0NLnPBDCe5oMDtI2RAmW8DMqP4U3Zxt2XWhvV1SNkAldT5tF0U1vP+is6fHxyhk4xqEvg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc-types@2.3.0': + resolution: {integrity: sha512-O09YX2hED2QUyGxrMOxQ9GzH1LlEwwZWu69QbL4oYmIf6P5dzEEHcqRY6L1LsDVqc/dzAdEs/E1FaPrcIaIIPw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/rpc@2.3.0': + resolution: {integrity: sha512-ZWN76iNQAOCpYC7yKfb3UNLIMZf603JckLKOOLTHuy9MZnTN8XV6uwvDFhf42XvhglgUjGCEnbUqWtxQ9pa/pQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/signers@2.3.0': + resolution: {integrity: sha512-OSv6fGr/MFRx6J+ZChQMRqKNPGGmdjkqarKkRzkwmv7v8quWsIRnJT5EV8tBy3LI4DLO/A8vKiNSPzvm1TdaiQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/spl-token-group@0.0.7': resolution: {integrity: sha512-V1N/iX7Cr7H0uazWUT2uk27TMqlqedpXHRqqAbVO2gvmJyT0E0ummMEAVQeXZ05ZhQ/xF39DLSdBp90XebWEug==} engines: {node: '>=16'} @@ -4154,6 +4365,36 @@ packages: peerDependencies: '@solana/web3.js': ^1.95.5 + '@solana/subscribable@2.3.0': + resolution: {integrity: sha512-DkgohEDbMkdTWiKAoatY02Njr56WXx9e/dKKfmne8/Ad6/2llUIrax78nCdlvZW9quXMaXPTxZvdQqo9N669Og==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/sysvars@2.3.0': + resolution: {integrity: sha512-LvjADZrpZ+CnhlHqfI5cmsRzX9Rpyb1Ox2dMHnbsRNzeKAMhu9w4ZBIaeTdO322zsTr509G1B+k2ABD3whvUBA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/transaction-confirmation@2.3.0': + resolution: {integrity: sha512-UiEuiHCfAAZEKdfne/XljFNJbsKAe701UQHKXEInYzIgBjRbvaeYZlBmkkqtxwcasgBTOmEaEKT44J14N9VZDw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/transaction-messages@2.3.0': + resolution: {integrity: sha512-bgqvWuy3MqKS5JdNLH649q+ngiyOu5rGS3DizSnWwYUd76RxZl1kN6CoqHSrrMzFMvis6sck/yPGG3wqrMlAww==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/transactions@2.3.0': + resolution: {integrity: sha512-LnTvdi8QnrQtuEZor5Msje61sDpPstTVwKg4y81tNxDhiyomjuvnSNLAq6QsB9gIxUqbNzPZgOG9IU4I4/Uaug==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + '@solana/web3.js@1.98.4': resolution: {integrity: sha512-vv9lfnvjUsRiq//+j5pBdXig0IQdtzA0BRZ3bXEP4KaIyF1CcaydWqgyzQgfZMNIsWNWmG+AUHwPy4AHOD6gpw==} @@ -4539,9 +4780,15 @@ packages: '@types/express-serve-static-core@4.19.6': resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==} + '@types/express-serve-static-core@5.0.7': + resolution: {integrity: sha512-R+33OsgWw7rOhD1emjU7dzCDHucJrgJXMA5PYCzJxVil0dsyx5iBEPHqpPfiKNJQb7lZ1vxwoLR4Z87bBUpeGQ==} + '@types/express@4.17.23': resolution: {integrity: sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==} + '@types/express@5.0.3': + resolution: {integrity: sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw==} + '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} @@ -4836,6 +5083,9 @@ packages: '@upstash/qstash@2.8.3': resolution: {integrity: sha512-SHf1mCGqZur0UTzXVx33phtFXIuLyjwDL1QsBE36gQFEx3rEG4fJc3qA2eD7jTUXEAYYrNkCQxMOtcteHFpwqw==} + '@upstash/vector@1.2.2': + resolution: {integrity: sha512-ptQ9xnxtKqmpNK52PCcHCszlPOLxIBfjsv7ty8RoF95pkjctS9rSjTQ3Pl9bx5VFbpDj+0dMXw88WLt6swDkgQ==} + '@vercel/analytics@1.5.0': resolution: {integrity: sha512-MYsBzfPki4gthY5HnYN7jgInhAZ7Ac1cYDoRWFomwGHWEX7odTEzbtg9kf/QSo7XEsEAqlQugA6gJ2WS2DEa3g==} peerDependencies: @@ -9955,6 +10205,9 @@ packages: undici-types@7.10.0: resolution: {integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==} + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + undici@5.29.0: resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} engines: {node: '>=14.0'} @@ -10450,6 +10703,9 @@ packages: x402@0.5.0: resolution: {integrity: sha512-0JZiNyUxh2lfmCeBpV5jmJH3zA5WmqZI5Epe3KoWPq8Jmy1NjtcncWh5s7lS1kRQxdGyQ5k25Mb05RtukA0E7w==} + x402@0.6.1: + resolution: {integrity: sha512-9UmeCSsYzFGav5FdVP70VplKlR3V90P0DZ9fPSrlLVp0ifUVi1S9TztvegkmIHE9xTGZ1GWNi+bkne6N0Ea58w==} + xml-name-validator@5.0.0: resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} engines: {node: '>=18'} @@ -11075,11 +11331,11 @@ snapshots: - utf-8-validate - zod - '@coinbase/x402@0.5.0(@tanstack/query-core@5.83.1)(@tanstack/react-query@5.84.1(react@19.1.1))(@types/react@19.1.10)(@vercel/blob@0.25.1)(bufferutil@4.0.9)(immer@10.1.3)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)': + '@coinbase/x402@0.6.4(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2))(@tanstack/query-core@5.83.1)(@tanstack/react-query@5.84.1(react@19.1.1))(@types/react@19.1.10)(@vercel/blob@0.25.1)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(immer@10.1.3)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@coinbase/cdp-sdk': 1.34.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(utf-8-validate@5.0.10) viem: 2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) - x402: 0.5.0(@tanstack/query-core@5.83.1)(@tanstack/react-query@5.84.1(react@19.1.1))(@types/react@19.1.10)(@vercel/blob@0.25.1)(bufferutil@4.0.9)(immer@10.1.3)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10) + x402: 0.6.1(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2))(@tanstack/query-core@5.83.1)(@tanstack/react-query@5.84.1(react@19.1.1))(@types/react@19.1.10)(@vercel/blob@0.25.1)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(immer@10.1.3)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) zod: 3.25.76 transitivePeerDependencies: - '@azure/app-configuration' @@ -11093,6 +11349,7 @@ snapshots: - '@netlify/blobs' - '@planetscale/database' - '@react-native-async-storage/async-storage' + - '@solana/sysvars' - '@tanstack/query-core' - '@tanstack/react-query' - '@types/react' @@ -11112,6 +11369,7 @@ snapshots: - typescript - uploadthing - utf-8-validate + - ws '@colors/colors@1.6.0': {} @@ -11991,6 +12249,23 @@ snapshots: transitivePeerDependencies: - supports-color + '@modelcontextprotocol/sdk@1.18.1': + dependencies: + ajv: 6.12.6 + content-type: 1.0.5 + cors: 2.8.5 + cross-spawn: 7.0.6 + eventsource: 3.0.7 + eventsource-parser: 3.0.5 + express: 5.1.0 + express-rate-limit: 7.5.1(express@5.1.0) + pkce-challenge: 5.0.0 + raw-body: 3.0.1 + zod: 3.25.76 + zod-to-json-schema: 3.24.6(zod@3.25.76) + transitivePeerDependencies: + - supports-color + '@mswjs/interceptors@0.39.2': dependencies: '@open-draft/deferred-promise': 2.2.0 @@ -14565,6 +14840,47 @@ snapshots: '@socket.io/component-emitter@3.1.2': {} + '@solana-program/compute-budget@0.8.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': + dependencies: + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + + '@solana-program/token-2022@0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2))': + dependencies: + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/sysvars': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + + '@solana-program/token@0.5.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': + dependencies: + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + + '@solana/accounts@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)': + dependencies: + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/codecs-core': 2.3.0(typescript@5.9.2) + '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/errors': 2.3.0(typescript@5.9.2) + '@solana/rpc-spec': 2.3.0(typescript@5.9.2) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/addresses@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)': + dependencies: + '@solana/assertions': 2.3.0(typescript@5.9.2) + '@solana/codecs-core': 2.3.0(typescript@5.9.2) + '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/errors': 2.3.0(typescript@5.9.2) + '@solana/nominal-types': 2.3.0(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/assertions@2.3.0(typescript@5.9.2)': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.2) + typescript: 5.9.2 + '@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)': dependencies: '@solana/buffer-layout': 4.0.1 @@ -14598,6 +14914,13 @@ snapshots: '@solana/errors': 2.0.0-rc.1(typescript@5.9.2) typescript: 5.9.2 + '@solana/codecs-data-structures@2.3.0(typescript@5.9.2)': + dependencies: + '@solana/codecs-core': 2.3.0(typescript@5.9.2) + '@solana/codecs-numbers': 2.3.0(typescript@5.9.2) + '@solana/errors': 2.3.0(typescript@5.9.2) + typescript: 5.9.2 + '@solana/codecs-numbers@2.0.0-rc.1(typescript@5.9.2)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@5.9.2) @@ -14618,6 +14941,14 @@ snapshots: fastestsmallesttextencoderdecoder: 1.0.22 typescript: 5.9.2 + '@solana/codecs-strings@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)': + dependencies: + '@solana/codecs-core': 2.3.0(typescript@5.9.2) + '@solana/codecs-numbers': 2.3.0(typescript@5.9.2) + '@solana/errors': 2.3.0(typescript@5.9.2) + fastestsmallesttextencoderdecoder: 1.0.22 + typescript: 5.9.2 + '@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@5.9.2) @@ -14629,6 +14960,17 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder + '@solana/codecs@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)': + dependencies: + '@solana/codecs-core': 2.3.0(typescript@5.9.2) + '@solana/codecs-data-structures': 2.3.0(typescript@5.9.2) + '@solana/codecs-numbers': 2.3.0(typescript@5.9.2) + '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/options': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + '@solana/errors@2.0.0-rc.1(typescript@5.9.2)': dependencies: chalk: 5.4.1 @@ -14641,6 +14983,60 @@ snapshots: commander: 14.0.0 typescript: 5.9.2 + '@solana/fast-stable-stringify@2.3.0(typescript@5.9.2)': + dependencies: + typescript: 5.9.2 + + '@solana/functional@2.3.0(typescript@5.9.2)': + dependencies: + typescript: 5.9.2 + + '@solana/instructions@2.3.0(typescript@5.9.2)': + dependencies: + '@solana/codecs-core': 2.3.0(typescript@5.9.2) + '@solana/errors': 2.3.0(typescript@5.9.2) + typescript: 5.9.2 + + '@solana/keys@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)': + dependencies: + '@solana/assertions': 2.3.0(typescript@5.9.2) + '@solana/codecs-core': 2.3.0(typescript@5.9.2) + '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/errors': 2.3.0(typescript@5.9.2) + '@solana/nominal-types': 2.3.0(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + dependencies: + '@solana/accounts': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/codecs': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/errors': 2.3.0(typescript@5.9.2) + '@solana/functional': 2.3.0(typescript@5.9.2) + '@solana/instructions': 2.3.0(typescript@5.9.2) + '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/programs': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/rpc': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/rpc-parsed-types': 2.3.0(typescript@5.9.2) + '@solana/rpc-spec-types': 2.3.0(typescript@5.9.2) + '@solana/rpc-subscriptions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/signers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/sysvars': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/transaction-confirmation': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - ws + + '@solana/nominal-types@2.3.0(typescript@5.9.2)': + dependencies: + typescript: 5.9.2 + '@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)': dependencies: '@solana/codecs-core': 2.0.0-rc.1(typescript@5.9.2) @@ -14652,6 +15048,168 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder + '@solana/options@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)': + dependencies: + '@solana/codecs-core': 2.3.0(typescript@5.9.2) + '@solana/codecs-data-structures': 2.3.0(typescript@5.9.2) + '@solana/codecs-numbers': 2.3.0(typescript@5.9.2) + '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/errors': 2.3.0(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/programs@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)': + dependencies: + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/errors': 2.3.0(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/promises@2.3.0(typescript@5.9.2)': + dependencies: + typescript: 5.9.2 + + '@solana/rpc-api@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)': + dependencies: + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/codecs-core': 2.3.0(typescript@5.9.2) + '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/errors': 2.3.0(typescript@5.9.2) + '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/rpc-parsed-types': 2.3.0(typescript@5.9.2) + '@solana/rpc-spec': 2.3.0(typescript@5.9.2) + '@solana/rpc-transformers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/rpc-parsed-types@2.3.0(typescript@5.9.2)': + dependencies: + typescript: 5.9.2 + + '@solana/rpc-spec-types@2.3.0(typescript@5.9.2)': + dependencies: + typescript: 5.9.2 + + '@solana/rpc-spec@2.3.0(typescript@5.9.2)': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.2) + '@solana/rpc-spec-types': 2.3.0(typescript@5.9.2) + typescript: 5.9.2 + + '@solana/rpc-subscriptions-api@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)': + dependencies: + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/rpc-subscriptions-spec': 2.3.0(typescript@5.9.2) + '@solana/rpc-transformers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/rpc-subscriptions-channel-websocket@2.3.0(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.2) + '@solana/functional': 2.3.0(typescript@5.9.2) + '@solana/rpc-subscriptions-spec': 2.3.0(typescript@5.9.2) + '@solana/subscribable': 2.3.0(typescript@5.9.2) + typescript: 5.9.2 + ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) + + '@solana/rpc-subscriptions-spec@2.3.0(typescript@5.9.2)': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.2) + '@solana/promises': 2.3.0(typescript@5.9.2) + '@solana/rpc-spec-types': 2.3.0(typescript@5.9.2) + '@solana/subscribable': 2.3.0(typescript@5.9.2) + typescript: 5.9.2 + + '@solana/rpc-subscriptions@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.2) + '@solana/fast-stable-stringify': 2.3.0(typescript@5.9.2) + '@solana/functional': 2.3.0(typescript@5.9.2) + '@solana/promises': 2.3.0(typescript@5.9.2) + '@solana/rpc-spec-types': 2.3.0(typescript@5.9.2) + '@solana/rpc-subscriptions-api': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/rpc-subscriptions-channel-websocket': 2.3.0(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/rpc-subscriptions-spec': 2.3.0(typescript@5.9.2) + '@solana/rpc-transformers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/subscribable': 2.3.0(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - ws + + '@solana/rpc-transformers@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.2) + '@solana/functional': 2.3.0(typescript@5.9.2) + '@solana/nominal-types': 2.3.0(typescript@5.9.2) + '@solana/rpc-spec-types': 2.3.0(typescript@5.9.2) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/rpc-transport-http@2.3.0(typescript@5.9.2)': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.2) + '@solana/rpc-spec': 2.3.0(typescript@5.9.2) + '@solana/rpc-spec-types': 2.3.0(typescript@5.9.2) + typescript: 5.9.2 + undici-types: 7.16.0 + + '@solana/rpc-types@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)': + dependencies: + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/codecs-core': 2.3.0(typescript@5.9.2) + '@solana/codecs-numbers': 2.3.0(typescript@5.9.2) + '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/errors': 2.3.0(typescript@5.9.2) + '@solana/nominal-types': 2.3.0(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/rpc@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.2) + '@solana/fast-stable-stringify': 2.3.0(typescript@5.9.2) + '@solana/functional': 2.3.0(typescript@5.9.2) + '@solana/rpc-api': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/rpc-spec': 2.3.0(typescript@5.9.2) + '@solana/rpc-spec-types': 2.3.0(typescript@5.9.2) + '@solana/rpc-transformers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/rpc-transport-http': 2.3.0(typescript@5.9.2) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/signers@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)': + dependencies: + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/codecs-core': 2.3.0(typescript@5.9.2) + '@solana/errors': 2.3.0(typescript@5.9.2) + '@solana/instructions': 2.3.0(typescript@5.9.2) + '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/nominal-types': 2.3.0(typescript@5.9.2) + '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + '@solana/spl-token-group@0.0.7(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)': dependencies: '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) @@ -14683,6 +15241,71 @@ snapshots: - typescript - utf-8-validate + '@solana/subscribable@2.3.0(typescript@5.9.2)': + dependencies: + '@solana/errors': 2.3.0(typescript@5.9.2) + typescript: 5.9.2 + + '@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)': + dependencies: + '@solana/accounts': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/codecs': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/errors': 2.3.0(typescript@5.9.2) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/transaction-confirmation@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + dependencies: + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/errors': 2.3.0(typescript@5.9.2) + '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/promises': 2.3.0(typescript@5.9.2) + '@solana/rpc': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/rpc-subscriptions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - ws + + '@solana/transaction-messages@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)': + dependencies: + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/codecs-core': 2.3.0(typescript@5.9.2) + '@solana/codecs-data-structures': 2.3.0(typescript@5.9.2) + '@solana/codecs-numbers': 2.3.0(typescript@5.9.2) + '@solana/errors': 2.3.0(typescript@5.9.2) + '@solana/functional': 2.3.0(typescript@5.9.2) + '@solana/instructions': 2.3.0(typescript@5.9.2) + '@solana/nominal-types': 2.3.0(typescript@5.9.2) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/transactions@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)': + dependencies: + '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/codecs-core': 2.3.0(typescript@5.9.2) + '@solana/codecs-data-structures': 2.3.0(typescript@5.9.2) + '@solana/codecs-numbers': 2.3.0(typescript@5.9.2) + '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/errors': 2.3.0(typescript@5.9.2) + '@solana/functional': 2.3.0(typescript@5.9.2) + '@solana/instructions': 2.3.0(typescript@5.9.2) + '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/nominal-types': 2.3.0(typescript@5.9.2) + '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + '@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)': dependencies: '@babel/runtime': 7.28.3 @@ -15074,6 +15697,13 @@ snapshots: '@types/range-parser': 1.2.7 '@types/send': 0.17.5 + '@types/express-serve-static-core@5.0.7': + dependencies: + '@types/node': 20.19.16 + '@types/qs': 6.14.0 + '@types/range-parser': 1.2.7 + '@types/send': 0.17.5 + '@types/express@4.17.23': dependencies: '@types/body-parser': 1.19.6 @@ -15081,6 +15711,12 @@ snapshots: '@types/qs': 6.14.0 '@types/serve-static': 1.15.8 + '@types/express@5.0.3': + dependencies: + '@types/body-parser': 1.19.6 + '@types/express-serve-static-core': 5.0.7 + '@types/serve-static': 1.15.8 + '@types/hast@3.0.4': dependencies: '@types/unist': 3.0.3 @@ -15474,6 +16110,8 @@ snapshots: jose: 5.10.0 neverthrow: 7.2.0 + '@upstash/vector@1.2.2': {} + '@vercel/analytics@1.5.0(next@15.5.2(@opentelemetry/api@1.9.0)(@playwright/test@1.53.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1)': optionalDependencies: next: 15.5.2(@opentelemetry/api@1.9.0)(@playwright/test@1.53.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) @@ -22172,6 +22810,8 @@ snapshots: undici-types@7.10.0: {} + undici-types@7.16.0: {} + undici@5.29.0: dependencies: '@fastify/busboy': 2.1.1 @@ -22851,7 +23491,7 @@ snapshots: bufferutil: 4.0.9 utf-8-validate: 5.0.10 - x402-next@0.5.0(@opentelemetry/api@1.9.0)(@playwright/test@1.53.0)(@tanstack/query-core@5.83.1)(@tanstack/react-query@5.84.1(react@19.1.1))(@types/react@19.1.10)(@vercel/blob@0.25.1)(bufferutil@4.0.9)(immer@10.1.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10): + x402-next@0.5.0(@opentelemetry/api@1.9.0)(@playwright/test@1.53.0)(@tanstack/query-core@5.83.1)(@tanstack/react-query@5.84.1(react@19.1.1))(@types/react@19.1.10)(@vercel/blob@0.25.1)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(immer@10.1.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10): dependencies: '@coinbase/cdp-sdk': 1.34.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(utf-8-validate@5.0.10) next: 15.5.2(@opentelemetry/api@1.9.0)(@playwright/test@1.53.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) @@ -22932,6 +23572,50 @@ snapshots: - uploadthing - utf-8-validate + x402@0.6.1(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2))(@tanstack/query-core@5.83.1)(@tanstack/react-query@5.84.1(react@19.1.1))(@types/react@19.1.10)(@vercel/blob@0.25.1)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(immer@10.1.3)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + dependencies: + '@scure/base': 1.2.6 + '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))) + '@solana-program/token': 0.5.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10))) + '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(@solana/sysvars@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)) + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/transaction-confirmation': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.2)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + viem: 2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) + wagmi: 2.16.2(@tanstack/query-core@5.83.1)(@tanstack/react-query@5.84.1(react@19.1.1))(@types/react@19.1.10)(@vercel/blob@0.25.1)(bufferutil@4.0.9)(immer@10.1.3)(react@19.1.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(viem@2.33.3(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@4.1.7))(zod@3.25.76) + zod: 3.25.76 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@solana/sysvars' + - '@tanstack/query-core' + - '@tanstack/react-query' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - fastestsmallesttextencoderdecoder + - immer + - ioredis + - react + - supports-color + - typescript + - uploadthing + - utf-8-validate + - ws + xml-name-validator@5.0.0: {} xmlchars@2.2.0: {}