@moonpay/cli 0.3.5 → 0.3.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-SQTD2GMD.js → chunk-ZJ3XMP4N.js} +40 -2
- package/dist/chunk-ZJ3XMP4N.js.map +1 -0
- package/dist/index.js +2 -2
- package/dist/{mcp-R3YBYDRT.js → mcp-HC3YTKIQ.js} +2 -2
- package/package.json +1 -1
- package/dist/chunk-SQTD2GMD.js.map +0 -1
- /package/dist/{mcp-R3YBYDRT.js.map → mcp-HC3YTKIQ.js.map} +0 -0
|
@@ -406,7 +406,7 @@ var schemas_default = [
|
|
|
406
406
|
},
|
|
407
407
|
amount: {
|
|
408
408
|
type: "number",
|
|
409
|
-
description: "Amount of token to buy
|
|
409
|
+
description: "Amount of the token to buy, in token units \u2014 not fiat. For example, 1.5 means 1.5 SOL, not $1.50."
|
|
410
410
|
},
|
|
411
411
|
wallet: {
|
|
412
412
|
type: "string",
|
|
@@ -614,6 +614,44 @@ var schemas_default = [
|
|
|
614
614
|
$schema: "http://json-schema.org/draft-07/schema#"
|
|
615
615
|
}
|
|
616
616
|
},
|
|
617
|
+
{
|
|
618
|
+
name: "token_transfer_build",
|
|
619
|
+
description: "Build an unsigned transfer transaction. Returns a base64-encoded transaction ready for signing. Handles both native SOL and SPL tokens.",
|
|
620
|
+
inputSchema: {
|
|
621
|
+
$ref: "#/definitions/token_transfer_build_input",
|
|
622
|
+
definitions: {
|
|
623
|
+
token_transfer_build_input: {
|
|
624
|
+
type: "object",
|
|
625
|
+
properties: {
|
|
626
|
+
wallet: {
|
|
627
|
+
type: "string",
|
|
628
|
+
description: "Wallet address to transfer from"
|
|
629
|
+
},
|
|
630
|
+
token: {
|
|
631
|
+
type: "string",
|
|
632
|
+
description: "Mint address of the token to transfer"
|
|
633
|
+
},
|
|
634
|
+
to: {
|
|
635
|
+
type: "string",
|
|
636
|
+
description: "Recipient wallet address"
|
|
637
|
+
},
|
|
638
|
+
amount: {
|
|
639
|
+
type: "number",
|
|
640
|
+
description: "Amount to transfer in human-readable units (e.g. 1.5)"
|
|
641
|
+
}
|
|
642
|
+
},
|
|
643
|
+
required: [
|
|
644
|
+
"wallet",
|
|
645
|
+
"token",
|
|
646
|
+
"to",
|
|
647
|
+
"amount"
|
|
648
|
+
],
|
|
649
|
+
additionalProperties: false
|
|
650
|
+
}
|
|
651
|
+
},
|
|
652
|
+
$schema: "http://json-schema.org/draft-07/schema#"
|
|
653
|
+
}
|
|
654
|
+
},
|
|
617
655
|
{
|
|
618
656
|
name: "token_trending_list",
|
|
619
657
|
description: "Get currently trending tokens on a blockchain. Perfect for discovering what's hot right now.",
|
|
@@ -1989,4 +2027,4 @@ export {
|
|
|
1989
2027
|
transactionSign,
|
|
1990
2028
|
messageSign
|
|
1991
2029
|
};
|
|
1992
|
-
//# sourceMappingURL=chunk-
|
|
2030
|
+
//# sourceMappingURL=chunk-ZJ3XMP4N.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/auth.ts","../src/client.ts","../src/generated/schemas.json","../src/tools/wallet/create/tool.ts","../src/tools/shared.ts","../src/tools/wallet/server.ts","../src/tools/wallet/models.ts","../src/tools/wallet/create/schema.ts","../src/tools/wallet/import/tool.ts","../src/tools/wallet/import/schema.ts","../src/tools/wallet/list/tool.ts","../src/tools/wallet/list/schema.ts","../src/tools/wallet/retrieve/schema.ts","../src/tools/wallet/retrieve/tool.ts","../src/tools/wallet/delete/tool.ts","../src/tools/wallet/delete/schema.ts","../src/tools/transaction/sign/tool.ts","../src/tools/transaction/sign/schema.ts","../src/tools/message/sign/tool.ts","../src/tools/message/sign/schema.ts"],"sourcesContent":["import { spawn } from \"child_process\";\nimport * as crypto from \"crypto\";\nimport * as fs from \"fs\";\nimport * as http from \"http\";\nimport * as os from \"os\";\nimport * as path from \"path\";\n\nfunction escapeHtml(str: string): string {\n return str\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n\nfunction generateCodeVerifier(): string {\n return crypto.randomBytes(32).toString(\"base64url\");\n}\n\nfunction generateCodeChallenge(verifier: string): string {\n return crypto.createHash(\"sha256\").update(verifier).digest(\"base64url\");\n}\n\nconst CONFIG_DIR = path.join(os.homedir(), \".config\", \"moonpay\");\nconst CONFIG_PATH = path.join(CONFIG_DIR, \"config.json\");\nconst CREDENTIALS_PATH = path.join(CONFIG_DIR, \"credentials.json\");\nconst LOCK_PATH = path.join(CONFIG_DIR, \".credentials.lock\");\nconst CALLBACK_PORT = 3847;\nconst CALLBACK_URL = `http://localhost:${CALLBACK_PORT}/callback`;\n\n/** Built-in config used when no ~/.config/moonpay/config.json exists. */\nexport const DEFAULT_CONFIG: Config = {\n baseUrl: \"https://agents.moonpay.com\",\n clientId: \"mooniq_zin3s5jz3olzkdfxpmbeaogv\",\n};\n\nexport type Config = {\n baseUrl: string;\n clientId: string;\n clientSecret?: string;\n};\n\nexport type Credentials = {\n accessToken: string;\n refreshToken: string | null;\n expiresAt: number;\n baseUrl: string;\n};\n\nfunction ensureConfigDir() {\n if (!fs.existsSync(CONFIG_DIR)) {\n fs.mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 });\n }\n}\n\n/** Write to a temp file then rename — atomic on POSIX, prevents partial/corrupt reads. */\nfunction atomicWriteFileSync(\n filePath: string,\n data: string,\n mode: number,\n) {\n const tmp = filePath + `.tmp.${process.pid}`;\n fs.writeFileSync(tmp, data, { encoding: \"utf-8\", mode });\n fs.renameSync(tmp, filePath);\n}\n\nconst LOCK_STALE_MS = 30_000; // consider lock stale after 30s\n\n/** Advisory file lock. Returns unlock function, or null if lock is held by another process. */\nfunction acquireLock(): (() => void) | null {\n ensureConfigDir();\n try {\n // O_CREAT | O_EXCL — fails if file already exists\n const fd = fs.openSync(LOCK_PATH, fs.constants.O_CREAT | fs.constants.O_EXCL | fs.constants.O_WRONLY, 0o600);\n fs.writeSync(fd, JSON.stringify({ pid: process.pid, ts: Date.now() }));\n fs.closeSync(fd);\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code !== \"EEXIST\") throw err;\n // Lock file exists — check if stale\n try {\n const lockData = JSON.parse(fs.readFileSync(LOCK_PATH, \"utf-8\"));\n if (Date.now() - lockData.ts < LOCK_STALE_MS) {\n return null; // lock is fresh, another process is refreshing\n }\n } catch {\n // corrupt lock file — treat as stale\n }\n // Stale lock — remove and retry once\n try { fs.unlinkSync(LOCK_PATH); } catch { /* already removed */ }\n try {\n const fd = fs.openSync(LOCK_PATH, fs.constants.O_CREAT | fs.constants.O_EXCL | fs.constants.O_WRONLY, 0o600);\n fs.writeSync(fd, JSON.stringify({ pid: process.pid, ts: Date.now() }));\n fs.closeSync(fd);\n } catch {\n return null;\n }\n }\n return () => {\n try { fs.unlinkSync(LOCK_PATH); } catch { /* already removed */ }\n };\n}\n\n/** Returns config from file, or null if missing/invalid. Use getConfigOrDefault() for login flow. */\nexport function getConfig(): Config | null {\n if (!fs.existsSync(CONFIG_PATH)) {\n return null;\n }\n try {\n const data = JSON.parse(fs.readFileSync(CONFIG_PATH, \"utf-8\"));\n if (!data.baseUrl || !data.clientId) {\n return null;\n }\n return data as Config;\n } catch {\n return null;\n }\n}\n\n/** Returns config from file, or DEFAULT_CONFIG if none exists. Creates config file on first use. */\nexport function getConfigOrDefault(): Config {\n const fromFile = getConfig();\n if (fromFile) return fromFile;\n\n saveConfig(DEFAULT_CONFIG);\n return DEFAULT_CONFIG;\n}\n\nexport function getCredentials(): Credentials | null {\n if (!fs.existsSync(CREDENTIALS_PATH)) {\n return null;\n }\n try {\n const data = JSON.parse(fs.readFileSync(CREDENTIALS_PATH, \"utf-8\"));\n if (!data.accessToken || !data.baseUrl) {\n return null;\n }\n return data as Credentials;\n } catch {\n return null;\n }\n}\n\nexport function saveCredentials(creds: Credentials) {\n ensureConfigDir();\n atomicWriteFileSync(CREDENTIALS_PATH, JSON.stringify(creds, null, 2), 0o600);\n}\n\nexport function saveConfig(config: Config) {\n ensureConfigDir();\n atomicWriteFileSync(CONFIG_PATH, JSON.stringify(config, null, 2), 0o600);\n}\n\nexport function clearCredentials() {\n if (fs.existsSync(CREDENTIALS_PATH)) {\n fs.unlinkSync(CREDENTIALS_PATH);\n }\n}\n\n/** Resolve the API base URL from config, credentials, or the default. */\nexport function resolveBaseUrl(): string {\n const config = getConfig();\n const creds = getCredentials();\n return config?.baseUrl ?? creds?.baseUrl ?? DEFAULT_CONFIG.baseUrl;\n}\n\nfunction openBrowser(url: string) {\n const platform = process.platform;\n const cmd =\n platform === \"darwin\"\n ? \"open\"\n : platform === \"win32\"\n ? \"cmd\"\n : \"xdg-open\";\n const args =\n platform === \"win32\" ? [\"/c\", \"start\", \"\", url] : [url];\n spawn(cmd, args, { stdio: \"ignore\", detached: true }).unref();\n}\n\nexport async function login(config: Config): Promise<Credentials> {\n const state = crypto.randomUUID();\n const usePkce = !config.clientSecret;\n\n let codeVerifier: string | undefined;\n if (usePkce) {\n codeVerifier = generateCodeVerifier();\n }\n\n let resolveCallback: (code: string) => void;\n const codePromise = new Promise<string>((resolve) => {\n resolveCallback = resolve;\n });\n\n const sockets = new Set<import(\"net\").Socket>();\n\n const server = http.createServer((req, res) => {\n const url = new URL(req.url ?? \"/\", `http://localhost:${CALLBACK_PORT}`);\n if (url.pathname === \"/callback\") {\n const code = url.searchParams.get(\"code\");\n const returnedState = url.searchParams.get(\"state\");\n const error = url.searchParams.get(\"error\");\n const errorDesc = url.searchParams.get(\"error_description\");\n\n if (returnedState !== state) {\n res.writeHead(200, { \"Content-Type\": \"text/html\" });\n res.end(\n `<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>OAuth Error</title></head><body style=\"font-family:system-ui,sans-serif;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;margin:0;padding:2rem;text-align:center;background:#fef2f2\"><h1 style=\"color:#b91c1c;margin:0 0 1rem\">OAuth Error</h1><p style=\"color:#991b1b;margin:0\">State mismatch — possible CSRF attack. Please try logging in again.</p></body></html>`,\n );\n resolveCallback(\"\");\n setTimeout(() => server.close(), 2000);\n } else if (error) {\n const safeError = escapeHtml(error);\n const safeDesc = escapeHtml(errorDesc ?? \"Unknown error\");\n res.writeHead(200, { \"Content-Type\": \"text/html\" });\n res.end(\n `<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>OAuth Error</title></head><body style=\"font-family:system-ui,sans-serif;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;margin:0;padding:2rem;text-align:center;background:#fef2f2\"><h1 style=\"color:#b91c1c;margin:0 0 1rem\">OAuth Error</h1><p style=\"color:#991b1b;margin:0\">${safeError}: ${safeDesc}</p></body></html>`,\n );\n resolveCallback(\"\");\n setTimeout(() => server.close(), 2000);\n } else if (code) {\n // Serve success page inline - don't redirect to app (it may not be running)\n res.writeHead(200, { \"Content-Type\": \"text/html\" });\n res.end(\n `<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>MoonPay Agents</title></head><body style=\"font-family:system-ui,-apple-system,sans-serif;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;margin:0;padding:2rem;text-align:center;background:#0a0a0a;color:#fafafa\"><img src=\"https://agents.moonpay.com/logos/moonpay.jpg\" alt=\"MoonPay\" style=\"width:64px;height:64px;border-radius:16px;margin-bottom:1.5rem\" /><h1 style=\"margin:0 0 0.5rem;font-size:1.5rem;font-weight:600\">Your agent has money now.</h1><p style=\"color:#a1a1aa;margin:0;font-size:1rem\">You can close this tab and return to the terminal.</p></body></html>`,\n );\n resolveCallback(code);\n } else {\n res.writeHead(200, { \"Content-Type\": \"text/html\" });\n res.end(\n `<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Error</title></head><body style=\"font-family:system-ui,sans-serif;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;margin:0;padding:2rem;text-align:center;background:#fef2f2\"><h1 style=\"color:#b91c1c;margin:0 0 1rem\">Error</h1><p style=\"color:#991b1b;margin:0\">No authorization code received.</p></body></html>`,\n );\n resolveCallback(\"\");\n setTimeout(() => server.close(), 2000);\n }\n } else {\n // Favicon etc - serve minimal response to avoid \"site can't be reached\"\n res.writeHead(204);\n res.end();\n }\n });\n\n await new Promise<void>((resolve, reject) => {\n server.on(\"error\", (err: NodeJS.ErrnoException) => {\n if (err.code === \"EADDRINUSE\") {\n reject(\n new Error(\n `Port ${CALLBACK_PORT} is in use. Close the other process or run: lsof -i :${CALLBACK_PORT}`,\n ),\n );\n } else {\n reject(err);\n }\n });\n // Track all connections so we can destroy them and allow the process to exit\n server.on(\"connection\", (socket) => {\n sockets.add(socket);\n socket.on(\"close\", () => sockets.delete(socket));\n });\n server.listen(CALLBACK_PORT, \"127.0.0.1\", () => resolve());\n });\n\n console.log(\n `Waiting for callback at http://localhost:${CALLBACK_PORT}/callback`,\n );\n\n const authorizeParams = new URLSearchParams({\n client_id: config.clientId,\n redirect_uri: CALLBACK_URL,\n response_type: \"code\",\n scope: \"profile email\",\n state,\n });\n if (usePkce && codeVerifier) {\n authorizeParams.set(\"code_challenge\", generateCodeChallenge(codeVerifier));\n authorizeParams.set(\"code_challenge_method\", \"S256\");\n }\n\n const authorizeUrl = `${config.baseUrl}/authorize?${authorizeParams.toString()}`;\n console.log(\"Opening browser for authorization...\");\n console.log(\"(Make sure you're logged in to MoonPay in your browser)\\n\");\n openBrowser(authorizeUrl);\n\n const code = await codePromise;\n if (!code) {\n throw new Error(\"No authorization code received\");\n }\n\n const tokenParams: Record<string, string> = {\n grant_type: \"authorization_code\",\n code,\n client_id: config.clientId,\n redirect_uri: CALLBACK_URL,\n };\n if (config.clientSecret) {\n tokenParams.client_secret = config.clientSecret;\n }\n if (usePkce && codeVerifier) {\n tokenParams.code_verifier = codeVerifier;\n }\n\n const tokenResponse = await fetch(`${config.baseUrl}/api/oauth/token`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: new URLSearchParams(tokenParams),\n });\n\n if (!tokenResponse.ok) {\n const err = (await tokenResponse.json().catch(() => ({}))) as {\n error?: string;\n error_description?: string;\n };\n const msg = err.error_description ?? err.error ?? tokenResponse.statusText;\n throw new Error(`Token exchange failed: ${msg}`);\n }\n\n const tokens = await tokenResponse.json();\n const expiresAt = Date.now() + (tokens.expires_in ?? 3600) * 1000;\n\n const creds: Credentials = {\n accessToken: tokens.access_token,\n refreshToken: tokens.refresh_token ?? null,\n expiresAt,\n baseUrl: config.baseUrl,\n };\n\n saveCredentials(creds);\n\n // Give the browser time to receive the success page before tearing down\n await new Promise((resolve) => setTimeout(resolve, 1000));\n\n server.close();\n for (const socket of sockets) {\n if (\"destroy\" in socket && typeof (socket as { destroy: () => void }).destroy === \"function\") {\n (socket as { destroy: () => void }).destroy();\n }\n }\n sockets.clear();\n\n return creds;\n}\n\nexport async function refreshCredentials(\n creds: Credentials,\n config: Config,\n): Promise<Credentials> {\n if (!creds.refreshToken) {\n throw new Error(\"No refresh token available\");\n }\n\n // Advisory lock — if another process is already refreshing, wait for it\n const unlock = acquireLock();\n if (!unlock) {\n // Another process holds the lock — wait briefly, then re-read from disk\n await new Promise((r) => setTimeout(r, 2000));\n const fresh = getCredentials();\n if (fresh && fresh.expiresAt > Date.now()) {\n return fresh;\n }\n throw new Error(\"Token refresh failed (concurrent refresh in progress)\");\n }\n\n try {\n // Re-read credentials — another process may have refreshed while we waited\n const latest = getCredentials();\n if (latest && latest.expiresAt > Date.now() + 60_000) {\n return latest;\n }\n\n const refreshParams: Record<string, string> = {\n grant_type: \"refresh_token\",\n refresh_token: creds.refreshToken,\n client_id: config.clientId,\n };\n if (config.clientSecret) {\n refreshParams.client_secret = config.clientSecret;\n }\n\n const tokenResponse = await fetch(`${config.baseUrl}/api/oauth/token`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: new URLSearchParams(refreshParams),\n });\n\n if (!tokenResponse.ok) {\n throw new Error(\"Token refresh failed\");\n }\n\n const tokens = await tokenResponse.json();\n const expiresAt = Date.now() + (tokens.expires_in ?? 3600) * 1000;\n\n const newCreds: Credentials = {\n accessToken: tokens.access_token,\n refreshToken: tokens.refresh_token ?? creds.refreshToken,\n expiresAt,\n baseUrl: config.baseUrl,\n };\n\n saveCredentials(newCreds);\n return newCreds;\n } finally {\n unlock();\n }\n}\n\nconst TOKEN_EXPIRY_BUFFER_MS = 5 * 60 * 1000; // 5 minutes\n\nexport async function getValidToken(): Promise<string | null> {\n const creds = getCredentials();\n if (!creds) return null;\n\n const config = getConfig();\n if (!config || config.baseUrl !== creds.baseUrl) return null;\n\n if (Date.now() >= creds.expiresAt - TOKEN_EXPIRY_BUFFER_MS) {\n if (creds.refreshToken) {\n try {\n const newCreds = await refreshCredentials(creds, config);\n return newCreds.accessToken;\n } catch {\n return null;\n }\n }\n return null;\n }\n\n return creds.accessToken;\n}\n","/**\n * Remote tool client.\n * Attaches auth (Bearer token) if credentials are available, otherwise calls without auth.\n * Handles automatic token refresh on 401.\n */\n\nimport {\n getConfig,\n getCredentials,\n getValidToken,\n refreshCredentials,\n} from \"./auth\";\n\nexport async function callTool(\n baseUrl: string,\n toolName: string,\n params: Record<string, unknown>,\n): Promise<unknown> {\n const token = await getValidToken();\n\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n if (token) {\n headers[\"Authorization\"] = `Bearer ${token}`;\n }\n\n let res = await fetch(`${baseUrl}/api/tools/${toolName}`, {\n method: \"POST\",\n headers,\n body: JSON.stringify(params),\n });\n\n // Auto-refresh on 401 if we have a refresh token\n if (res.status === 401 && token) {\n const creds = getCredentials();\n const config = getConfig();\n if (creds?.refreshToken && config && config.baseUrl === creds.baseUrl) {\n try {\n const newCreds = await refreshCredentials(creds, config);\n res = await fetch(`${baseUrl}/api/tools/${toolName}`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${newCreds.accessToken}`,\n },\n body: JSON.stringify(params),\n });\n } catch {\n // Refresh failed, fall through\n }\n }\n }\n\n const data = await res.json();\n\n if (res.status === 401) {\n throw new Error(\"This command requires a MoonPay Agents account. Run `moonpay login` first.\");\n }\n\n if (res.status < 200 || res.status >= 300) {\n const err = data as { error?: string };\n throw new Error(err?.error ?? `Tool call failed (${res.status})`);\n }\n\n return data;\n}\n","[\n {\n \"name\": \"buy\",\n \"description\": \"Buy crypto with fiat via MoonPay. Returns a checkout URL to complete the purchase.\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/buy_input\",\n \"definitions\": {\n \"buy_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"token\": {\n \"type\": \"string\",\n \"enum\": [\n \"sol\",\n \"usdc\",\n \"usdc_arbitrum\",\n \"usdc_base\",\n \"usdc_optimism\",\n \"usdc_sol\",\n \"usdc_polygon\",\n \"eth\",\n \"eth_polygon\",\n \"eth_optimism\",\n \"eth_base\",\n \"eth_arbitrum\"\n ],\n \"description\": \"MoonPay currency code: sol (Solana), usdc_sol (USDC on Solana), eth (Ethereum), usdc (USDC on Ethereum), usdc_base (USDC on Base), etc.\"\n },\n \"amount\": {\n \"type\": \"number\",\n \"description\": \"Amount of the token to buy, in token units — not fiat. For example, 1.5 means 1.5 SOL, not $1.50.\"\n },\n \"wallet\": {\n \"type\": \"string\",\n \"description\": \"Destination wallet address to receive the tokens\"\n },\n \"email\": {\n \"type\": [\n \"string\",\n \"null\"\n ],\n \"description\": \"Buyer email to pre-fill on the checkout page\"\n }\n },\n \"required\": [\n \"token\",\n \"amount\",\n \"wallet\",\n \"email\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"token_balance_list\",\n \"description\": \"List all token balances held in a wallet, including amount owned, current value in USD, and token details. Shows the complete token portfolio.\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/token_balance_list_input\",\n \"definitions\": {\n \"token_balance_list_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"wallet\": {\n \"type\": \"string\",\n \"description\": \"Wallet address to check token balances for\"\n },\n \"chain\": {\n \"type\": \"string\",\n \"enum\": [\n \"solana\",\n \"ethereum\",\n \"base\",\n \"polygon\",\n \"arbitrum\",\n \"optimism\"\n ],\n \"description\": \"Blockchain to check balances on (e.g. 'solana', 'ethereum', 'base')\"\n }\n },\n \"required\": [\n \"wallet\",\n \"chain\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"token_retrieve\",\n \"description\": \"Get detailed token information including market data, price changes, volume, trades, and holder statistics by token address\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/token_retrieve_input\",\n \"definitions\": {\n \"token_retrieve_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"token\": {\n \"type\": \"string\",\n \"description\": \"Address of the token to retrieve\"\n },\n \"chain\": {\n \"type\": \"string\",\n \"enum\": [\n \"solana\",\n \"ethereum\",\n \"base\",\n \"polygon\",\n \"arbitrum\",\n \"optimism\"\n ],\n \"description\": \"Blockchain network where the token exists\"\n }\n },\n \"required\": [\n \"token\",\n \"chain\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"token_search\",\n \"description\": \"Search for tokens by name, symbol, or address. Returns matching tokens with their market data including price, volume, and liquidity.\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/token_search_input\",\n \"definitions\": {\n \"token_search_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"query\": {\n \"type\": \"string\",\n \"description\": \"Search term - can be token name (e.g. 'Bitcoin'), symbol (e.g. 'BTC'), or partial match\"\n },\n \"chain\": {\n \"type\": \"string\",\n \"enum\": [\n \"solana\",\n \"ethereum\",\n \"base\",\n \"polygon\",\n \"arbitrum\",\n \"optimism\"\n ],\n \"description\": \"Blockchain to search on (e.g. 'solana', 'ethereum', 'base')\"\n },\n \"limit\": {\n \"type\": [\n \"number\",\n \"null\"\n ],\n \"description\": \"Maximum number of results to return (optional, defaults to 5)\"\n }\n },\n \"required\": [\n \"query\",\n \"chain\",\n \"limit\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"token_swap_build\",\n \"description\": \"Build an unsigned swap transaction. Returns a base64-encoded transaction ready for signing.\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/token_swap_build_input\",\n \"definitions\": {\n \"token_swap_build_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"input\": {\n \"type\": \"string\",\n \"description\": \"Mint address of the input token\"\n },\n \"output\": {\n \"type\": \"string\",\n \"description\": \"Mint address of the output token\"\n },\n \"amount\": {\n \"type\": \"number\",\n \"description\": \"Amount of the input token to swap\"\n },\n \"wallet\": {\n \"type\": \"string\",\n \"description\": \"Wallet address that will execute the swap\"\n }\n },\n \"required\": [\n \"input\",\n \"output\",\n \"amount\",\n \"wallet\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"token_swap_execute\",\n \"description\": \"Execute a signed swap transaction. Pass the signed transaction and requestId from token_swap_build.\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/token_swap_execute_input\",\n \"definitions\": {\n \"token_swap_execute_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"transaction\": {\n \"type\": \"string\",\n \"description\": \"Base64-encoded signed transaction\"\n },\n \"requestId\": {\n \"type\": \"string\",\n \"description\": \"Request ID from token_swap_build\"\n }\n },\n \"required\": [\n \"transaction\",\n \"requestId\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"token_transfer_build\",\n \"description\": \"Build an unsigned transfer transaction. Returns a base64-encoded transaction ready for signing. Handles both native SOL and SPL tokens.\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/token_transfer_build_input\",\n \"definitions\": {\n \"token_transfer_build_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"wallet\": {\n \"type\": \"string\",\n \"description\": \"Wallet address to transfer from\"\n },\n \"token\": {\n \"type\": \"string\",\n \"description\": \"Mint address of the token to transfer\"\n },\n \"to\": {\n \"type\": \"string\",\n \"description\": \"Recipient wallet address\"\n },\n \"amount\": {\n \"type\": \"number\",\n \"description\": \"Amount to transfer in human-readable units (e.g. 1.5)\"\n }\n },\n \"required\": [\n \"wallet\",\n \"token\",\n \"to\",\n \"amount\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"token_trending_list\",\n \"description\": \"Get currently trending tokens on a blockchain. Perfect for discovering what's hot right now.\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/token_trending_list_input\",\n \"definitions\": {\n \"token_trending_list_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"chain\": {\n \"type\": \"string\",\n \"enum\": [\n \"solana\",\n \"ethereum\",\n \"base\",\n \"polygon\",\n \"arbitrum\",\n \"optimism\"\n ],\n \"description\": \"Blockchain to get trending tokens from (e.g. 'solana', 'ethereum', 'base')\"\n },\n \"limit\": {\n \"type\": \"number\",\n \"description\": \"Number of results per page\"\n },\n \"page\": {\n \"type\": \"number\",\n \"description\": \"The page number of results\"\n }\n },\n \"required\": [\n \"chain\",\n \"limit\",\n \"page\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"transaction_send\",\n \"description\": \"Broadcast a signed transaction to Solana. Simulates first, then sends and confirms.\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/transaction_send_input\",\n \"definitions\": {\n \"transaction_send_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"transaction\": {\n \"type\": \"string\",\n \"description\": \"Base64-encoded signed transaction\"\n },\n \"message\": {\n \"type\": \"string\",\n \"description\": \"Human-readable message describing the transaction\"\n }\n },\n \"required\": [\n \"transaction\",\n \"message\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"user_retrieve\",\n \"description\": \"Get the currently authenticated user\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/user_retrieve_input\",\n \"definitions\": {\n \"user_retrieve_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_bank-account_delete\",\n \"description\": \"Delete a bank account\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_bank-account_delete_input\",\n \"definitions\": {\n \"virtual-account_bank-account_delete_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"bankAccountId\": {\n \"type\": \"string\",\n \"format\": \"uuid\",\n \"description\": \"The ID of the bank account to delete\"\n }\n },\n \"required\": [\n \"bankAccountId\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_bank-account_eur_register\",\n \"description\": \"Register a EUR bank account for offramp payouts\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_bank-account_eur_register_input\",\n \"definitions\": {\n \"virtual-account_bank-account_eur_register_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"iban\": {\n \"type\": \"string\",\n \"description\": \"IBAN for SEPA bank account\"\n },\n \"address\": {\n \"type\": \"object\",\n \"properties\": {\n \"street\": {\n \"type\": \"string\",\n \"description\": \"Street address\"\n },\n \"city\": {\n \"type\": \"string\",\n \"description\": \"City\"\n },\n \"state\": {\n \"type\": \"string\",\n \"description\": \"State or province\"\n },\n \"country\": {\n \"type\": \"string\",\n \"enum\": [\n \"US\",\n \"GB\",\n \"CA\",\n \"AU\",\n \"DE\",\n \"FR\",\n \"IT\",\n \"ES\",\n \"NL\",\n \"BE\",\n \"AT\",\n \"CH\",\n \"SE\",\n \"NO\",\n \"DK\",\n \"FI\",\n \"IE\",\n \"PT\",\n \"PL\",\n \"CZ\",\n \"GR\",\n \"JP\",\n \"KR\",\n \"CN\",\n \"IN\",\n \"BR\",\n \"MX\",\n \"AR\",\n \"ZA\",\n \"NZ\",\n \"SG\",\n \"HK\",\n \"AE\"\n ],\n \"description\": \"ISO 3166-1 Alpha-2 country code\"\n },\n \"postalCode\": {\n \"type\": \"string\",\n \"description\": \"Postal or ZIP code\"\n }\n },\n \"required\": [\n \"street\",\n \"city\",\n \"state\",\n \"country\",\n \"postalCode\"\n ],\n \"additionalProperties\": false,\n \"description\": \"Address of the user that owns the bank account\"\n },\n \"email\": {\n \"type\": \"string\",\n \"description\": \"Email address of the user that owns the bank account\"\n },\n \"phoneNumber\": {\n \"type\": \"string\",\n \"description\": \"Phone number of the user\"\n },\n \"providerCountry\": {\n \"type\": \"string\",\n \"enum\": [\n \"US\",\n \"GB\",\n \"CA\",\n \"AU\",\n \"DE\",\n \"FR\",\n \"IT\",\n \"ES\",\n \"NL\",\n \"BE\",\n \"AT\",\n \"CH\",\n \"SE\",\n \"NO\",\n \"DK\",\n \"FI\",\n \"IE\",\n \"PT\",\n \"PL\",\n \"CZ\",\n \"GR\",\n \"JP\",\n \"KR\",\n \"CN\",\n \"IN\",\n \"BR\",\n \"MX\",\n \"AR\",\n \"ZA\",\n \"NZ\",\n \"SG\",\n \"HK\",\n \"AE\"\n ],\n \"description\": \"ISO 3166-1 Alpha-2 country code where the bank is located\"\n },\n \"providerName\": {\n \"type\": \"string\",\n \"description\": \"Name of the bank\"\n },\n \"givenName\": {\n \"type\": \"string\",\n \"description\": \"First/given name of the account holder\"\n },\n \"familyName\": {\n \"type\": \"string\",\n \"description\": \"Last/family name of the account holder\"\n }\n },\n \"required\": [\n \"iban\",\n \"address\",\n \"email\",\n \"phoneNumber\",\n \"providerCountry\",\n \"providerName\",\n \"givenName\",\n \"familyName\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_bank-account_list\",\n \"description\": \"List registered bank accounts\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_bank-account_list_input\",\n \"definitions\": {\n \"virtual-account_bank-account_list_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_bank-account_retrieve\",\n \"description\": \"Get a bank account by currency\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_bank-account_retrieve_input\",\n \"definitions\": {\n \"virtual-account_bank-account_retrieve_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"currency\": {\n \"type\": \"string\",\n \"enum\": [\n \"USD\",\n \"EUR\"\n ],\n \"description\": \"The fiat currency code (USD or EUR)\"\n }\n },\n \"required\": [\n \"currency\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_bank-account_usd_register\",\n \"description\": \"Register a USD bank account for offramp payouts\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_bank-account_usd_register_input\",\n \"definitions\": {\n \"virtual-account_bank-account_usd_register_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\n \"ACH\",\n \"Wire\"\n ],\n \"description\": \"Type of bank account (ACH or Wire)\"\n },\n \"accountNumber\": {\n \"type\": \"string\",\n \"description\": \"Account number\"\n },\n \"routingNumber\": {\n \"type\": \"string\",\n \"description\": \"Routing number\"\n },\n \"address\": {\n \"type\": \"object\",\n \"properties\": {\n \"street\": {\n \"type\": \"string\",\n \"description\": \"Street address\"\n },\n \"city\": {\n \"type\": \"string\",\n \"description\": \"City\"\n },\n \"state\": {\n \"type\": \"string\",\n \"description\": \"State or province\"\n },\n \"country\": {\n \"type\": \"string\",\n \"enum\": [\n \"US\",\n \"GB\",\n \"CA\",\n \"AU\",\n \"DE\",\n \"FR\",\n \"IT\",\n \"ES\",\n \"NL\",\n \"BE\",\n \"AT\",\n \"CH\",\n \"SE\",\n \"NO\",\n \"DK\",\n \"FI\",\n \"IE\",\n \"PT\",\n \"PL\",\n \"CZ\",\n \"GR\",\n \"JP\",\n \"KR\",\n \"CN\",\n \"IN\",\n \"BR\",\n \"MX\",\n \"AR\",\n \"ZA\",\n \"NZ\",\n \"SG\",\n \"HK\",\n \"AE\"\n ],\n \"description\": \"ISO 3166-1 Alpha-2 country code\"\n },\n \"postalCode\": {\n \"type\": \"string\",\n \"description\": \"Postal or ZIP code\"\n }\n },\n \"required\": [\n \"street\",\n \"city\",\n \"state\",\n \"country\",\n \"postalCode\"\n ],\n \"additionalProperties\": false,\n \"description\": \"Address of the user that owns the bank account\"\n },\n \"email\": {\n \"type\": \"string\",\n \"description\": \"Email address of the user that owns the bank account\"\n },\n \"phoneNumber\": {\n \"type\": \"string\",\n \"description\": \"Phone number of the user\"\n },\n \"providerCountry\": {\n \"type\": \"string\",\n \"enum\": [\n \"US\",\n \"GB\",\n \"CA\",\n \"AU\",\n \"DE\",\n \"FR\",\n \"IT\",\n \"ES\",\n \"NL\",\n \"BE\",\n \"AT\",\n \"CH\",\n \"SE\",\n \"NO\",\n \"DK\",\n \"FI\",\n \"IE\",\n \"PT\",\n \"PL\",\n \"CZ\",\n \"GR\",\n \"JP\",\n \"KR\",\n \"CN\",\n \"IN\",\n \"BR\",\n \"MX\",\n \"AR\",\n \"ZA\",\n \"NZ\",\n \"SG\",\n \"HK\",\n \"AE\"\n ],\n \"description\": \"ISO 3166-1 Alpha-2 country code where the bank is located\"\n },\n \"providerName\": {\n \"type\": \"string\",\n \"description\": \"Name of the bank\"\n },\n \"givenName\": {\n \"type\": \"string\",\n \"description\": \"First/given name of the account holder\"\n },\n \"familyName\": {\n \"type\": \"string\",\n \"description\": \"Last/family name of the account holder\"\n }\n },\n \"required\": [\n \"type\",\n \"accountNumber\",\n \"routingNumber\",\n \"address\",\n \"email\",\n \"phoneNumber\",\n \"providerCountry\",\n \"providerName\",\n \"givenName\",\n \"familyName\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_create\",\n \"description\": \"Create a virtual account and start KYC verification\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_create_input\",\n \"definitions\": {\n \"virtual-account_create_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_delete\",\n \"description\": \"Delete your virtual account\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_delete_input\",\n \"definitions\": {\n \"virtual-account_delete_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_identification_create\",\n \"description\": \"Create a KYC verification link to complete identity verification\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_identification_create_input\",\n \"definitions\": {\n \"virtual-account_identification_create_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_identification_list\",\n \"description\": \"List all KYC identifications\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_identification_list_input\",\n \"definitions\": {\n \"virtual-account_identification_list_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_identification_retrieve\",\n \"description\": \"Get the status of a KYC identification\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_identification_retrieve_input\",\n \"definitions\": {\n \"virtual-account_identification_retrieve_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_offramp_create\",\n \"description\": \"Create an offramp to convert stablecoin to fiat\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_offramp_create_input\",\n \"definitions\": {\n \"virtual-account_offramp_create_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"description\": \"The name of the offramp\"\n },\n \"fiat\": {\n \"type\": \"string\",\n \"enum\": [\n \"USD\",\n \"EUR\"\n ],\n \"description\": \"The fiat currency to convert to\"\n },\n \"stablecoin\": {\n \"type\": \"string\",\n \"enum\": [\n \"USDC\",\n \"USDT\",\n \"EURC\"\n ],\n \"description\": \"The stablecoin token to convert from\"\n }\n },\n \"required\": [\n \"name\",\n \"fiat\",\n \"stablecoin\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_offramp_delete\",\n \"description\": \"Cancel an offramp\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_offramp_delete_input\",\n \"definitions\": {\n \"virtual-account_offramp_delete_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"offrampId\": {\n \"type\": \"string\",\n \"format\": \"uuid\",\n \"description\": \"The ID of the offramp to cancel\"\n }\n },\n \"required\": [\n \"offrampId\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_offramp_initiate\",\n \"description\": \"Build an unsigned transaction to send stablecoin to an offramp deposit address\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_offramp_initiate_input\",\n \"definitions\": {\n \"virtual-account_offramp_initiate_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"wallet\": {\n \"type\": \"string\",\n \"description\": \"The wallet address to send from\"\n },\n \"offrampId\": {\n \"type\": \"string\",\n \"description\": \"The ID of the offramp to initiate\"\n },\n \"amount\": {\n \"type\": \"number\",\n \"minimum\": 0,\n \"description\": \"The amount of stablecoin to send (in human-readable units, e.g., 100.5)\"\n }\n },\n \"required\": [\n \"wallet\",\n \"offrampId\",\n \"amount\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_offramp_list\",\n \"description\": \"List all offramps\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_offramp_list_input\",\n \"definitions\": {\n \"virtual-account_offramp_list_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_offramp_retrieve\",\n \"description\": \"Get offramp details\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_offramp_retrieve_input\",\n \"definitions\": {\n \"virtual-account_offramp_retrieve_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"offrampId\": {\n \"type\": \"string\",\n \"format\": \"uuid\",\n \"description\": \"The ID of the offramp to retrieve\"\n }\n },\n \"required\": [\n \"offrampId\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_onramp_create\",\n \"description\": \"Create an onramp to convert fiat to stablecoin\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_onramp_create_input\",\n \"definitions\": {\n \"virtual-account_onramp_create_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"description\": \"The name of the onramp\"\n },\n \"fiat\": {\n \"type\": \"string\",\n \"enum\": [\n \"USD\",\n \"EUR\"\n ],\n \"description\": \"The fiat currency to convert from\"\n },\n \"stablecoin\": {\n \"type\": \"string\",\n \"enum\": [\n \"USDC\",\n \"USDT\",\n \"EURC\"\n ],\n \"description\": \"The stablecoin token to convert to\"\n }\n },\n \"required\": [\n \"name\",\n \"fiat\",\n \"stablecoin\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_onramp_delete\",\n \"description\": \"Cancel an onramp\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_onramp_delete_input\",\n \"definitions\": {\n \"virtual-account_onramp_delete_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"onrampId\": {\n \"type\": \"string\",\n \"format\": \"uuid\",\n \"description\": \"The ID of the onramp to cancel\"\n }\n },\n \"required\": [\n \"onrampId\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_onramp_list\",\n \"description\": \"List all onramps\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_onramp_list_input\",\n \"definitions\": {\n \"virtual-account_onramp_list_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"status\": {\n \"type\": \"string\",\n \"enum\": [\n \"Created\",\n \"Authorized\",\n \"DepositAccountAdded\",\n \"Approved\",\n \"Rejected\",\n \"Cancelled\"\n ],\n \"description\": \"Status of the onramps to get\"\n }\n },\n \"required\": [\n \"status\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_onramp_payment_create\",\n \"description\": \"Create an open banking payment link for an onramp\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_onramp_payment_create_input\",\n \"definitions\": {\n \"virtual-account_onramp_payment_create_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"onrampId\": {\n \"type\": \"string\",\n \"format\": \"uuid\",\n \"description\": \"The ID of the onramp\"\n },\n \"amount\": {\n \"type\": \"string\",\n \"description\": \"The amount to pay\"\n },\n \"fiat\": {\n \"type\": \"string\",\n \"enum\": [\n \"USD\",\n \"EUR\"\n ],\n \"description\": \"The fiat currency (USD or EUR)\"\n }\n },\n \"required\": [\n \"onrampId\",\n \"amount\",\n \"fiat\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_onramp_payment_retrieve\",\n \"description\": \"Get the status of an open banking payment\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_onramp_payment_retrieve_input\",\n \"definitions\": {\n \"virtual-account_onramp_payment_retrieve_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"onrampId\": {\n \"type\": \"string\",\n \"format\": \"uuid\",\n \"description\": \"The ID of the onramp this payment belongs to\"\n },\n \"paymentId\": {\n \"type\": \"string\",\n \"format\": \"uuid\",\n \"description\": \"The ID of the payment to retrieve\"\n }\n },\n \"required\": [\n \"onrampId\",\n \"paymentId\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_onramp_retrieve\",\n \"description\": \"Get onramp details and banking info\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_onramp_retrieve_input\",\n \"definitions\": {\n \"virtual-account_onramp_retrieve_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"onrampId\": {\n \"type\": \"string\",\n \"format\": \"uuid\",\n \"description\": \"The ID of the onramp to retrieve\"\n }\n },\n \"required\": [\n \"onrampId\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_retrieve\",\n \"description\": \"Get your virtual account status\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_retrieve_input\",\n \"definitions\": {\n \"virtual-account_retrieve_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_signing_create\",\n \"description\": \"Sign a required document for your virtual account\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_signing_create_input\",\n \"definitions\": {\n \"virtual-account_signing_create_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"contentId\": {\n \"type\": \"string\",\n \"description\": \"The unique ID of the content to sign\"\n }\n },\n \"required\": [\n \"contentId\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_signing_list\",\n \"description\": \"List all signed documents\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_signing_list_input\",\n \"definitions\": {\n \"virtual-account_signing_list_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_signing_required_list\",\n \"description\": \"List documents that require your signature\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_signing_required_list_input\",\n \"definitions\": {\n \"virtual-account_signing_required_list_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_transaction_list\",\n \"description\": \"List virtual account transactions\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_transaction_list_input\",\n \"definitions\": {\n \"virtual-account_transaction_list_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_wallet_list\",\n \"description\": \"List registered wallets\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_wallet_list_input\",\n \"definitions\": {\n \"virtual-account_wallet_list_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_wallet_register\",\n \"description\": \"Register a wallet using a signed verification message\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_wallet_register_input\",\n \"definitions\": {\n \"virtual-account_wallet_register_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"wallet\": {\n \"type\": \"string\",\n \"description\": \"The wallet address to register\"\n },\n \"message\": {\n \"type\": \"string\",\n \"description\": \"The verification message (from virtual-account_wallet_registration-message_create)\"\n },\n \"signature\": {\n \"type\": \"string\",\n \"description\": \"Base58-encoded signature of the message\"\n }\n },\n \"required\": [\n \"wallet\",\n \"message\",\n \"signature\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_wallet_registration-message_create\",\n \"description\": \"Create the verification message to register a wallet\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_wallet_registration-message_create_input\",\n \"definitions\": {\n \"virtual-account_wallet_registration-message_create_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"wallet\": {\n \"type\": \"string\",\n \"description\": \"The wallet address to register\"\n }\n },\n \"required\": [\n \"wallet\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n }\n]","import { Keypair } from \"@solana/web3.js\";\nimport bs58 from \"bs58\";\nimport { createTool } from \"../../shared\";\nimport { saveWallet, type Wallet } from \"../server\";\nimport { walletCreateSchema } from \"./schema\";\n\nexport const walletCreate = createTool(walletCreateSchema, async (params) => {\n const keypair = Keypair.generate();\n\n const wallet: Wallet = {\n name: params.name,\n address: keypair.publicKey.toBase58(),\n secretKey: bs58.encode(keypair.secretKey),\n chain: \"solana\",\n createdAt: new Date().toISOString(),\n };\n\n saveWallet(wallet);\n\n return { name: wallet.name, address: wallet.address };\n});\n","import { z } from \"zod\";\n\n// ── Schema types ─────────────────────────────────────────────\n\nexport type ToolSchema<\n I extends z.ZodType = z.ZodType,\n O extends z.ZodType = z.ZodType,\n> = {\n name: string;\n description: string;\n input: I;\n output: O;\n};\n\nexport type ToolInput<TSchema extends ToolSchema> = z.infer<TSchema[\"input\"]>;\nexport type ToolOutput<TSchema extends ToolSchema> = z.infer<TSchema[\"output\"]>;\n\nexport const defineToolSchema = <\n TInput extends z.ZodType,\n TOutput extends z.ZodType,\n>(config: {\n name: string;\n description: string;\n input: TInput;\n output: TOutput;\n}): ToolSchema<TInput, TOutput> => config;\n\n// ── Tool wrapper ─────────────────────────────────────────────\n\nexport type Tool<TSchema extends ToolSchema = ToolSchema> = {\n schema: TSchema;\n handler: (params: z.input<TSchema[\"input\"]>) => Promise<z.output<TSchema[\"output\"]>>;\n};\n\n/**\n * Lightweight createTool for CLI local tools.\n * Validates input/output with Zod, no logging or context.\n */\nexport const createTool = <TSchema extends ToolSchema>(\n schema: TSchema,\n handler: (\n params: z.output<TSchema[\"input\"]>,\n ) => Promise<z.output<TSchema[\"output\"]>>,\n): Tool<TSchema> => ({\n schema,\n handler: async (params: z.input<TSchema[\"input\"]>) => {\n const parsedInput = schema.input.parse(params);\n const result = await handler(parsedInput);\n return schema.output.parse(result);\n },\n});\n","import {\n readFileSync,\n readdirSync,\n writeFileSync,\n mkdirSync,\n existsSync,\n renameSync,\n} from \"node:fs\";\nimport { join, resolve } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { randomBytes } from \"node:crypto\";\nimport { walletSchema, type Wallet, type WalletInfo } from \"./models\";\n\nexport type { Wallet, WalletInfo };\n\nconst CONFIG_DIR = join(homedir(), \".config\", \"moonpay\");\nconst WALLETS_DIR = join(CONFIG_DIR, \"wallets\");\n\n/**\n * Validate a wallet name to prevent path traversal.\n * Rejects names containing /, \\, .., or null bytes.\n */\nfunction validateWalletName(name: string): void {\n if (!name || /[/\\\\]/.test(name) || name.includes(\"..\") || name.includes(\"\\0\")) {\n throw new Error(`Invalid wallet name: \"${name}\"`);\n }\n // Double-check the resolved path stays inside WALLETS_DIR\n const resolved = resolve(WALLETS_DIR, `${name}.json`);\n if (!resolved.startsWith(WALLETS_DIR + \"/\")) {\n throw new Error(`Invalid wallet name: \"${name}\"`);\n }\n}\n\nexport function ensureWalletsDir(): void {\n mkdirSync(WALLETS_DIR, { recursive: true, mode: 0o700 });\n}\n\nexport function getWalletPath(name: string): string {\n validateWalletName(name);\n return join(WALLETS_DIR, `${name}.json`);\n}\n\nexport function getWalletsDir(): string {\n return WALLETS_DIR;\n}\n\nexport function saveWallet(wallet: Wallet): void {\n ensureWalletsDir();\n const filePath = getWalletPath(wallet.name);\n if (existsSync(filePath)) {\n throw new Error(`Wallet \"${wallet.name}\" already exists`);\n }\n const safeName = wallet.name.replace(/[^a-zA-Z0-9_-]/g, \"_\");\n const tmpPath = join(\n WALLETS_DIR,\n `.${safeName}.${randomBytes(4).toString(\"hex\")}.tmp`,\n );\n writeFileSync(tmpPath, JSON.stringify(wallet, null, 2), { mode: 0o600 });\n renameSync(tmpPath, filePath);\n}\n\n/**\n * Load a wallet by name or address.\n * Validates the JSON shape to catch corrupted files early.\n */\nexport function loadWallet(nameOrAddress: string): Wallet {\n ensureWalletsDir();\n const files = readdirSync(WALLETS_DIR).filter((f) => f.endsWith(\".json\"));\n for (const file of files) {\n const raw = JSON.parse(readFileSync(join(WALLETS_DIR, file), \"utf-8\"));\n const result = walletSchema.safeParse(raw);\n if (!result.success) continue; // skip corrupted files\n const wallet = result.data;\n if (wallet.name === nameOrAddress || wallet.address === nameOrAddress)\n return wallet;\n }\n\n throw new Error(`Wallet \"${nameOrAddress}\" not found`);\n}\n\n","import { z } from \"zod\";\n\nexport const walletSchema = z.object({\n name: z.string(),\n address: z.string(),\n secretKey: z.string(),\n chain: z.literal(\"solana\"),\n createdAt: z.string(),\n});\n\nexport type Wallet = z.infer<typeof walletSchema>;\n\n/** Wallet without the secret key — safe for display/output */\nexport const walletInfoSchema = walletSchema.omit({ secretKey: true });\n\nexport type WalletInfo = z.infer<typeof walletInfoSchema>;\n","import { z } from \"zod\";\nimport { defineToolSchema } from \"../../shared\";\n\nexport const walletCreateSchema = defineToolSchema({\n name: \"wallet_create\",\n description: \"Generate a new Solana keypair and store it locally\",\n input: z.object({\n name: z.string().describe(\"Wallet name\"),\n }),\n output: z.object({\n name: z.string().describe(\"Wallet name\"),\n address: z.string().describe(\"Solana wallet address (base58)\"),\n }),\n});\n","import { Keypair } from \"@solana/web3.js\";\nimport bs58 from \"bs58\";\nimport { createInterface } from \"node:readline\";\nimport { createTool } from \"../../shared\";\nimport { saveWallet, type Wallet } from \"../server\";\nimport { walletImportSchema } from \"./schema\";\n\nasync function promptSecret(prompt: string): Promise<string> {\n const rl = createInterface({ input: process.stdin, output: process.stderr });\n return new Promise((resolve) => {\n rl.question(prompt, (answer) => {\n rl.close();\n resolve(answer.trim());\n });\n });\n}\n\nexport const walletImport = createTool(walletImportSchema, async (params) => {\n const secretKeyBase58 =\n params.key !== null\n ? params.key\n : await promptSecret(\"Enter private key (base58): \");\n\n let keypair: Keypair;\n try {\n const secretKeyBytes = bs58.decode(secretKeyBase58);\n keypair = Keypair.fromSecretKey(secretKeyBytes);\n } catch {\n throw new Error(\n \"Invalid private key. Expected a base58-encoded Solana secret key.\",\n );\n }\n\n const wallet: Wallet = {\n name: params.name,\n address: keypair.publicKey.toBase58(),\n secretKey: secretKeyBase58,\n chain: \"solana\",\n createdAt: new Date().toISOString(),\n };\n\n saveWallet(wallet);\n\n return { name: wallet.name, address: wallet.address };\n});\n","import { z } from \"zod\";\nimport { defineToolSchema } from \"../../shared\";\n\nexport const walletImportSchema = defineToolSchema({\n name: \"wallet_import\",\n description: \"Import a Solana wallet from a base58 private key\",\n input: z.object({\n name: z.string().describe(\"Wallet name\"),\n key: z\n .string()\n .nullable()\n .describe(\"Base58-encoded private key (prompted interactively if not provided)\"),\n }),\n output: z.object({\n name: z.string().describe(\"Wallet name\"),\n address: z.string().describe(\"Solana wallet address (base58)\"),\n }),\n});\n","import { readFileSync, readdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { createTool } from \"../../shared\";\nimport { ensureWalletsDir, getWalletsDir, type Wallet } from \"../server\";\nimport { walletListSchema } from \"./schema\";\n\nexport const walletList = createTool(walletListSchema, async () => {\n ensureWalletsDir();\n const dir = getWalletsDir();\n const files = readdirSync(dir).filter(\n (f) => f.endsWith(\".json\") && !f.startsWith(\".\"),\n );\n return files.map((f) => {\n const wallet: Wallet = JSON.parse(readFileSync(join(dir, f), \"utf-8\"));\n return {\n name: wallet.name,\n address: wallet.address,\n chain: wallet.chain,\n createdAt: wallet.createdAt,\n };\n });\n});\n","import { z } from \"zod\";\nimport { defineToolSchema } from \"../../shared\";\nimport { walletInfoSchema } from \"../models\";\n\nexport const walletListSchema = defineToolSchema({\n name: \"wallet_list\",\n description: \"List all local wallets\",\n input: z.object({}),\n output: z.array(walletInfoSchema),\n});\n","import { z } from \"zod\";\nimport { defineToolSchema } from \"../../shared\";\nimport { walletInfoSchema } from \"../models\";\n\nexport const walletRetrieveSchema = defineToolSchema({\n name: \"wallet_retrieve\",\n description: \"Get details of a specific wallet\",\n input: z.object({\n wallet: z.string().describe(\"Wallet name or address\"),\n }),\n output: walletInfoSchema,\n});\n","import { createTool } from \"../../shared\";\nimport { loadWallet } from \"../server\";\nimport { walletRetrieveSchema } from \"./schema\";\n\nexport const walletRetrieve = createTool(\n walletRetrieveSchema,\n async (params) => {\n const wallet = loadWallet(params.wallet);\n return {\n name: wallet.name,\n address: wallet.address,\n chain: wallet.chain,\n createdAt: wallet.createdAt,\n };\n },\n);\n","import { unlinkSync } from \"node:fs\";\nimport { createTool } from \"../../shared\";\nimport { walletRetrieve } from \"../retrieve/tool\";\nimport { getWalletPath } from \"../server\";\nimport { walletDeleteSchema } from \"./schema\";\n\nexport const walletDelete = createTool(walletDeleteSchema, async (params) => {\n if (!params.confirm) {\n throw new Error(\n \"Deletion not confirmed. Pass --confirm to permanently delete this wallet.\",\n );\n }\n\n // Verify wallet exists and resolve the actual name (throws if not found)\n const wallet = await walletRetrieve.handler({ wallet: params.wallet });\n\n // getWalletPath validates the name to prevent path traversal\n unlinkSync(getWalletPath(wallet.name));\n\n return { name: wallet.name, deleted: true as const };\n});\n","import { z } from \"zod\";\nimport { defineToolSchema } from \"../../shared\";\n\nexport const walletDeleteSchema = defineToolSchema({\n name: \"wallet_delete\",\n description:\n \"Permanently delete a local wallet. This removes the private key file and cannot be undone.\",\n input: z.object({\n wallet: z.string().describe(\"Name or address of the wallet to delete\"),\n confirm: z\n .boolean()\n .describe(\"Must be true to confirm deletion\"),\n }),\n output: z.object({\n name: z.string().describe(\"Name of the deleted wallet\"),\n deleted: z.literal(true),\n }),\n});\n","import { Keypair, VersionedTransaction } from \"@solana/web3.js\";\nimport bs58 from \"bs58\";\nimport { createTool } from \"../../shared\";\nimport { loadWallet } from \"../../wallet/server\";\nimport { transactionSignSchema } from \"./schema\";\n\nexport const transactionSign = createTool(\n transactionSignSchema,\n async (params) => {\n const storedWallet = loadWallet(params.wallet);\n\n const txBytes = Buffer.from(params.transaction.trim(), \"base64\");\n const tx = VersionedTransaction.deserialize(txBytes);\n\n const secretKeyBytes = bs58.decode(storedWallet.secretKey);\n const keypair = Keypair.fromSecretKey(secretKeyBytes);\n\n tx.sign([keypair]);\n\n return {\n transaction: Buffer.from(tx.serialize()).toString(\"base64\"),\n };\n },\n);\n","import { z } from \"zod\";\nimport { defineToolSchema } from \"../../shared\";\n\nexport const transactionSignSchema = defineToolSchema({\n name: \"transaction_sign\",\n description: \"Sign a base64-encoded Solana transaction with a local wallet\",\n input: z.object({\n wallet: z.string().describe(\"Wallet address\"),\n transaction: z\n .string()\n .describe(\"Base64-encoded unsigned transaction\"),\n }),\n output: z.object({\n transaction: z\n .string()\n .describe(\"Base64-encoded signed transaction\"),\n }),\n});\n","import { Keypair } from \"@solana/web3.js\";\nimport bs58 from \"bs58\";\nimport nacl from \"tweetnacl\";\nimport { createTool } from \"../../shared\";\nimport { loadWallet } from \"../../wallet/server\";\nimport { messageSignSchema } from \"./schema\";\n\nexport const messageSign = createTool(messageSignSchema, async (params) => {\n const storedWallet = loadWallet(params.wallet);\n\n const secretKeyBytes = bs58.decode(storedWallet.secretKey);\n const keypair = Keypair.fromSecretKey(secretKeyBytes);\n\n const messageBytes = Buffer.from(params.message, \"utf8\");\n const signatureBytes = nacl.sign.detached(messageBytes, keypair.secretKey);\n\n return { signature: bs58.encode(signatureBytes) };\n});\n","import { z } from \"zod\";\nimport { defineToolSchema } from \"../../shared\";\n\nexport const messageSignSchema = defineToolSchema({\n name: \"message_sign\",\n description:\n \"Sign a message with a local wallet. Produces a base58-encoded ed25519 signature compatible with Solana's signMessage.\",\n input: z.object({\n wallet: z.string().describe(\"Wallet address to sign with\"),\n message: z.string().describe(\"Message text to sign\"),\n }),\n output: z.object({\n signature: z\n .string()\n .describe(\"Base58-encoded ed25519 signature\"),\n }),\n});\n"],"mappings":"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","names":["resolve","code","readFileSync","writeFileSync","mkdirSync","existsSync","renameSync","join","homedir","randomBytes","CONFIG_DIR","join","homedir","mkdirSync","existsSync","randomBytes","writeFileSync","renameSync","readFileSync","z","z","Keypair","bs58","z","z","resolve","bs58","Keypair","readFileSync","readdirSync","join","z","z","readdirSync","readFileSync","join","z","z","unlinkSync","z","z","unlinkSync","Keypair","bs58","z","z","bs58","Keypair","Keypair","bs58","z","z","bs58","Keypair"]}
|
package/dist/index.js
CHANGED
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
walletImport,
|
|
17
17
|
walletList,
|
|
18
18
|
walletRetrieve
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-ZJ3XMP4N.js";
|
|
20
20
|
|
|
21
21
|
// src/index.ts
|
|
22
22
|
import { createRequire } from "module";
|
|
@@ -312,7 +312,7 @@ program.command("logout").description("Log out and clear stored credentials").ac
|
|
|
312
312
|
console.log("Logged out.");
|
|
313
313
|
});
|
|
314
314
|
program.command("mcp").description("Start MCP server over stdio (for Claude Desktop, Claude Code, etc.)").action(async () => {
|
|
315
|
-
const { startMcpServer } = await import("./mcp-
|
|
315
|
+
const { startMcpServer } = await import("./mcp-HC3YTKIQ.js");
|
|
316
316
|
await startMcpServer();
|
|
317
317
|
});
|
|
318
318
|
function getOrCreateGroup(parent, segments) {
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
walletImport,
|
|
14
14
|
walletList,
|
|
15
15
|
walletRetrieve
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-ZJ3XMP4N.js";
|
|
17
17
|
|
|
18
18
|
// src/mcp.ts
|
|
19
19
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
@@ -205,4 +205,4 @@ async function startMcpServer() {
|
|
|
205
205
|
export {
|
|
206
206
|
startMcpServer
|
|
207
207
|
};
|
|
208
|
-
//# sourceMappingURL=mcp-
|
|
208
|
+
//# sourceMappingURL=mcp-HC3YTKIQ.js.map
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/auth.ts","../src/client.ts","../src/generated/schemas.json","../src/tools/wallet/create/tool.ts","../src/tools/shared.ts","../src/tools/wallet/server.ts","../src/tools/wallet/models.ts","../src/tools/wallet/create/schema.ts","../src/tools/wallet/import/tool.ts","../src/tools/wallet/import/schema.ts","../src/tools/wallet/list/tool.ts","../src/tools/wallet/list/schema.ts","../src/tools/wallet/retrieve/schema.ts","../src/tools/wallet/retrieve/tool.ts","../src/tools/wallet/delete/tool.ts","../src/tools/wallet/delete/schema.ts","../src/tools/transaction/sign/tool.ts","../src/tools/transaction/sign/schema.ts","../src/tools/message/sign/tool.ts","../src/tools/message/sign/schema.ts"],"sourcesContent":["import { spawn } from \"child_process\";\nimport * as crypto from \"crypto\";\nimport * as fs from \"fs\";\nimport * as http from \"http\";\nimport * as os from \"os\";\nimport * as path from \"path\";\n\nfunction escapeHtml(str: string): string {\n return str\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n\nfunction generateCodeVerifier(): string {\n return crypto.randomBytes(32).toString(\"base64url\");\n}\n\nfunction generateCodeChallenge(verifier: string): string {\n return crypto.createHash(\"sha256\").update(verifier).digest(\"base64url\");\n}\n\nconst CONFIG_DIR = path.join(os.homedir(), \".config\", \"moonpay\");\nconst CONFIG_PATH = path.join(CONFIG_DIR, \"config.json\");\nconst CREDENTIALS_PATH = path.join(CONFIG_DIR, \"credentials.json\");\nconst LOCK_PATH = path.join(CONFIG_DIR, \".credentials.lock\");\nconst CALLBACK_PORT = 3847;\nconst CALLBACK_URL = `http://localhost:${CALLBACK_PORT}/callback`;\n\n/** Built-in config used when no ~/.config/moonpay/config.json exists. */\nexport const DEFAULT_CONFIG: Config = {\n baseUrl: \"https://agents.moonpay.com\",\n clientId: \"mooniq_zin3s5jz3olzkdfxpmbeaogv\",\n};\n\nexport type Config = {\n baseUrl: string;\n clientId: string;\n clientSecret?: string;\n};\n\nexport type Credentials = {\n accessToken: string;\n refreshToken: string | null;\n expiresAt: number;\n baseUrl: string;\n};\n\nfunction ensureConfigDir() {\n if (!fs.existsSync(CONFIG_DIR)) {\n fs.mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 });\n }\n}\n\n/** Write to a temp file then rename — atomic on POSIX, prevents partial/corrupt reads. */\nfunction atomicWriteFileSync(\n filePath: string,\n data: string,\n mode: number,\n) {\n const tmp = filePath + `.tmp.${process.pid}`;\n fs.writeFileSync(tmp, data, { encoding: \"utf-8\", mode });\n fs.renameSync(tmp, filePath);\n}\n\nconst LOCK_STALE_MS = 30_000; // consider lock stale after 30s\n\n/** Advisory file lock. Returns unlock function, or null if lock is held by another process. */\nfunction acquireLock(): (() => void) | null {\n ensureConfigDir();\n try {\n // O_CREAT | O_EXCL — fails if file already exists\n const fd = fs.openSync(LOCK_PATH, fs.constants.O_CREAT | fs.constants.O_EXCL | fs.constants.O_WRONLY, 0o600);\n fs.writeSync(fd, JSON.stringify({ pid: process.pid, ts: Date.now() }));\n fs.closeSync(fd);\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code !== \"EEXIST\") throw err;\n // Lock file exists — check if stale\n try {\n const lockData = JSON.parse(fs.readFileSync(LOCK_PATH, \"utf-8\"));\n if (Date.now() - lockData.ts < LOCK_STALE_MS) {\n return null; // lock is fresh, another process is refreshing\n }\n } catch {\n // corrupt lock file — treat as stale\n }\n // Stale lock — remove and retry once\n try { fs.unlinkSync(LOCK_PATH); } catch { /* already removed */ }\n try {\n const fd = fs.openSync(LOCK_PATH, fs.constants.O_CREAT | fs.constants.O_EXCL | fs.constants.O_WRONLY, 0o600);\n fs.writeSync(fd, JSON.stringify({ pid: process.pid, ts: Date.now() }));\n fs.closeSync(fd);\n } catch {\n return null;\n }\n }\n return () => {\n try { fs.unlinkSync(LOCK_PATH); } catch { /* already removed */ }\n };\n}\n\n/** Returns config from file, or null if missing/invalid. Use getConfigOrDefault() for login flow. */\nexport function getConfig(): Config | null {\n if (!fs.existsSync(CONFIG_PATH)) {\n return null;\n }\n try {\n const data = JSON.parse(fs.readFileSync(CONFIG_PATH, \"utf-8\"));\n if (!data.baseUrl || !data.clientId) {\n return null;\n }\n return data as Config;\n } catch {\n return null;\n }\n}\n\n/** Returns config from file, or DEFAULT_CONFIG if none exists. Creates config file on first use. */\nexport function getConfigOrDefault(): Config {\n const fromFile = getConfig();\n if (fromFile) return fromFile;\n\n saveConfig(DEFAULT_CONFIG);\n return DEFAULT_CONFIG;\n}\n\nexport function getCredentials(): Credentials | null {\n if (!fs.existsSync(CREDENTIALS_PATH)) {\n return null;\n }\n try {\n const data = JSON.parse(fs.readFileSync(CREDENTIALS_PATH, \"utf-8\"));\n if (!data.accessToken || !data.baseUrl) {\n return null;\n }\n return data as Credentials;\n } catch {\n return null;\n }\n}\n\nexport function saveCredentials(creds: Credentials) {\n ensureConfigDir();\n atomicWriteFileSync(CREDENTIALS_PATH, JSON.stringify(creds, null, 2), 0o600);\n}\n\nexport function saveConfig(config: Config) {\n ensureConfigDir();\n atomicWriteFileSync(CONFIG_PATH, JSON.stringify(config, null, 2), 0o600);\n}\n\nexport function clearCredentials() {\n if (fs.existsSync(CREDENTIALS_PATH)) {\n fs.unlinkSync(CREDENTIALS_PATH);\n }\n}\n\n/** Resolve the API base URL from config, credentials, or the default. */\nexport function resolveBaseUrl(): string {\n const config = getConfig();\n const creds = getCredentials();\n return config?.baseUrl ?? creds?.baseUrl ?? DEFAULT_CONFIG.baseUrl;\n}\n\nfunction openBrowser(url: string) {\n const platform = process.platform;\n const cmd =\n platform === \"darwin\"\n ? \"open\"\n : platform === \"win32\"\n ? \"cmd\"\n : \"xdg-open\";\n const args =\n platform === \"win32\" ? [\"/c\", \"start\", \"\", url] : [url];\n spawn(cmd, args, { stdio: \"ignore\", detached: true }).unref();\n}\n\nexport async function login(config: Config): Promise<Credentials> {\n const state = crypto.randomUUID();\n const usePkce = !config.clientSecret;\n\n let codeVerifier: string | undefined;\n if (usePkce) {\n codeVerifier = generateCodeVerifier();\n }\n\n let resolveCallback: (code: string) => void;\n const codePromise = new Promise<string>((resolve) => {\n resolveCallback = resolve;\n });\n\n const sockets = new Set<import(\"net\").Socket>();\n\n const server = http.createServer((req, res) => {\n const url = new URL(req.url ?? \"/\", `http://localhost:${CALLBACK_PORT}`);\n if (url.pathname === \"/callback\") {\n const code = url.searchParams.get(\"code\");\n const returnedState = url.searchParams.get(\"state\");\n const error = url.searchParams.get(\"error\");\n const errorDesc = url.searchParams.get(\"error_description\");\n\n if (returnedState !== state) {\n res.writeHead(200, { \"Content-Type\": \"text/html\" });\n res.end(\n `<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>OAuth Error</title></head><body style=\"font-family:system-ui,sans-serif;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;margin:0;padding:2rem;text-align:center;background:#fef2f2\"><h1 style=\"color:#b91c1c;margin:0 0 1rem\">OAuth Error</h1><p style=\"color:#991b1b;margin:0\">State mismatch — possible CSRF attack. Please try logging in again.</p></body></html>`,\n );\n resolveCallback(\"\");\n setTimeout(() => server.close(), 2000);\n } else if (error) {\n const safeError = escapeHtml(error);\n const safeDesc = escapeHtml(errorDesc ?? \"Unknown error\");\n res.writeHead(200, { \"Content-Type\": \"text/html\" });\n res.end(\n `<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>OAuth Error</title></head><body style=\"font-family:system-ui,sans-serif;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;margin:0;padding:2rem;text-align:center;background:#fef2f2\"><h1 style=\"color:#b91c1c;margin:0 0 1rem\">OAuth Error</h1><p style=\"color:#991b1b;margin:0\">${safeError}: ${safeDesc}</p></body></html>`,\n );\n resolveCallback(\"\");\n setTimeout(() => server.close(), 2000);\n } else if (code) {\n // Serve success page inline - don't redirect to app (it may not be running)\n res.writeHead(200, { \"Content-Type\": \"text/html\" });\n res.end(\n `<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>MoonPay Agents</title></head><body style=\"font-family:system-ui,-apple-system,sans-serif;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;margin:0;padding:2rem;text-align:center;background:#0a0a0a;color:#fafafa\"><img src=\"https://agents.moonpay.com/logos/moonpay.jpg\" alt=\"MoonPay\" style=\"width:64px;height:64px;border-radius:16px;margin-bottom:1.5rem\" /><h1 style=\"margin:0 0 0.5rem;font-size:1.5rem;font-weight:600\">Your agent has money now.</h1><p style=\"color:#a1a1aa;margin:0;font-size:1rem\">You can close this tab and return to the terminal.</p></body></html>`,\n );\n resolveCallback(code);\n } else {\n res.writeHead(200, { \"Content-Type\": \"text/html\" });\n res.end(\n `<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Error</title></head><body style=\"font-family:system-ui,sans-serif;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;margin:0;padding:2rem;text-align:center;background:#fef2f2\"><h1 style=\"color:#b91c1c;margin:0 0 1rem\">Error</h1><p style=\"color:#991b1b;margin:0\">No authorization code received.</p></body></html>`,\n );\n resolveCallback(\"\");\n setTimeout(() => server.close(), 2000);\n }\n } else {\n // Favicon etc - serve minimal response to avoid \"site can't be reached\"\n res.writeHead(204);\n res.end();\n }\n });\n\n await new Promise<void>((resolve, reject) => {\n server.on(\"error\", (err: NodeJS.ErrnoException) => {\n if (err.code === \"EADDRINUSE\") {\n reject(\n new Error(\n `Port ${CALLBACK_PORT} is in use. Close the other process or run: lsof -i :${CALLBACK_PORT}`,\n ),\n );\n } else {\n reject(err);\n }\n });\n // Track all connections so we can destroy them and allow the process to exit\n server.on(\"connection\", (socket) => {\n sockets.add(socket);\n socket.on(\"close\", () => sockets.delete(socket));\n });\n server.listen(CALLBACK_PORT, \"127.0.0.1\", () => resolve());\n });\n\n console.log(\n `Waiting for callback at http://localhost:${CALLBACK_PORT}/callback`,\n );\n\n const authorizeParams = new URLSearchParams({\n client_id: config.clientId,\n redirect_uri: CALLBACK_URL,\n response_type: \"code\",\n scope: \"profile email\",\n state,\n });\n if (usePkce && codeVerifier) {\n authorizeParams.set(\"code_challenge\", generateCodeChallenge(codeVerifier));\n authorizeParams.set(\"code_challenge_method\", \"S256\");\n }\n\n const authorizeUrl = `${config.baseUrl}/authorize?${authorizeParams.toString()}`;\n console.log(\"Opening browser for authorization...\");\n console.log(\"(Make sure you're logged in to MoonPay in your browser)\\n\");\n openBrowser(authorizeUrl);\n\n const code = await codePromise;\n if (!code) {\n throw new Error(\"No authorization code received\");\n }\n\n const tokenParams: Record<string, string> = {\n grant_type: \"authorization_code\",\n code,\n client_id: config.clientId,\n redirect_uri: CALLBACK_URL,\n };\n if (config.clientSecret) {\n tokenParams.client_secret = config.clientSecret;\n }\n if (usePkce && codeVerifier) {\n tokenParams.code_verifier = codeVerifier;\n }\n\n const tokenResponse = await fetch(`${config.baseUrl}/api/oauth/token`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: new URLSearchParams(tokenParams),\n });\n\n if (!tokenResponse.ok) {\n const err = (await tokenResponse.json().catch(() => ({}))) as {\n error?: string;\n error_description?: string;\n };\n const msg = err.error_description ?? err.error ?? tokenResponse.statusText;\n throw new Error(`Token exchange failed: ${msg}`);\n }\n\n const tokens = await tokenResponse.json();\n const expiresAt = Date.now() + (tokens.expires_in ?? 3600) * 1000;\n\n const creds: Credentials = {\n accessToken: tokens.access_token,\n refreshToken: tokens.refresh_token ?? null,\n expiresAt,\n baseUrl: config.baseUrl,\n };\n\n saveCredentials(creds);\n\n // Give the browser time to receive the success page before tearing down\n await new Promise((resolve) => setTimeout(resolve, 1000));\n\n server.close();\n for (const socket of sockets) {\n if (\"destroy\" in socket && typeof (socket as { destroy: () => void }).destroy === \"function\") {\n (socket as { destroy: () => void }).destroy();\n }\n }\n sockets.clear();\n\n return creds;\n}\n\nexport async function refreshCredentials(\n creds: Credentials,\n config: Config,\n): Promise<Credentials> {\n if (!creds.refreshToken) {\n throw new Error(\"No refresh token available\");\n }\n\n // Advisory lock — if another process is already refreshing, wait for it\n const unlock = acquireLock();\n if (!unlock) {\n // Another process holds the lock — wait briefly, then re-read from disk\n await new Promise((r) => setTimeout(r, 2000));\n const fresh = getCredentials();\n if (fresh && fresh.expiresAt > Date.now()) {\n return fresh;\n }\n throw new Error(\"Token refresh failed (concurrent refresh in progress)\");\n }\n\n try {\n // Re-read credentials — another process may have refreshed while we waited\n const latest = getCredentials();\n if (latest && latest.expiresAt > Date.now() + 60_000) {\n return latest;\n }\n\n const refreshParams: Record<string, string> = {\n grant_type: \"refresh_token\",\n refresh_token: creds.refreshToken,\n client_id: config.clientId,\n };\n if (config.clientSecret) {\n refreshParams.client_secret = config.clientSecret;\n }\n\n const tokenResponse = await fetch(`${config.baseUrl}/api/oauth/token`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: new URLSearchParams(refreshParams),\n });\n\n if (!tokenResponse.ok) {\n throw new Error(\"Token refresh failed\");\n }\n\n const tokens = await tokenResponse.json();\n const expiresAt = Date.now() + (tokens.expires_in ?? 3600) * 1000;\n\n const newCreds: Credentials = {\n accessToken: tokens.access_token,\n refreshToken: tokens.refresh_token ?? creds.refreshToken,\n expiresAt,\n baseUrl: config.baseUrl,\n };\n\n saveCredentials(newCreds);\n return newCreds;\n } finally {\n unlock();\n }\n}\n\nconst TOKEN_EXPIRY_BUFFER_MS = 5 * 60 * 1000; // 5 minutes\n\nexport async function getValidToken(): Promise<string | null> {\n const creds = getCredentials();\n if (!creds) return null;\n\n const config = getConfig();\n if (!config || config.baseUrl !== creds.baseUrl) return null;\n\n if (Date.now() >= creds.expiresAt - TOKEN_EXPIRY_BUFFER_MS) {\n if (creds.refreshToken) {\n try {\n const newCreds = await refreshCredentials(creds, config);\n return newCreds.accessToken;\n } catch {\n return null;\n }\n }\n return null;\n }\n\n return creds.accessToken;\n}\n","/**\n * Remote tool client.\n * Attaches auth (Bearer token) if credentials are available, otherwise calls without auth.\n * Handles automatic token refresh on 401.\n */\n\nimport {\n getConfig,\n getCredentials,\n getValidToken,\n refreshCredentials,\n} from \"./auth\";\n\nexport async function callTool(\n baseUrl: string,\n toolName: string,\n params: Record<string, unknown>,\n): Promise<unknown> {\n const token = await getValidToken();\n\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n if (token) {\n headers[\"Authorization\"] = `Bearer ${token}`;\n }\n\n let res = await fetch(`${baseUrl}/api/tools/${toolName}`, {\n method: \"POST\",\n headers,\n body: JSON.stringify(params),\n });\n\n // Auto-refresh on 401 if we have a refresh token\n if (res.status === 401 && token) {\n const creds = getCredentials();\n const config = getConfig();\n if (creds?.refreshToken && config && config.baseUrl === creds.baseUrl) {\n try {\n const newCreds = await refreshCredentials(creds, config);\n res = await fetch(`${baseUrl}/api/tools/${toolName}`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${newCreds.accessToken}`,\n },\n body: JSON.stringify(params),\n });\n } catch {\n // Refresh failed, fall through\n }\n }\n }\n\n const data = await res.json();\n\n if (res.status === 401) {\n throw new Error(\"This command requires a MoonPay Agents account. Run `moonpay login` first.\");\n }\n\n if (res.status < 200 || res.status >= 300) {\n const err = data as { error?: string };\n throw new Error(err?.error ?? `Tool call failed (${res.status})`);\n }\n\n return data;\n}\n","[\n {\n \"name\": \"buy\",\n \"description\": \"Buy crypto with fiat via MoonPay. Returns a checkout URL to complete the purchase.\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/buy_input\",\n \"definitions\": {\n \"buy_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"token\": {\n \"type\": \"string\",\n \"enum\": [\n \"sol\",\n \"usdc\",\n \"usdc_arbitrum\",\n \"usdc_base\",\n \"usdc_optimism\",\n \"usdc_sol\",\n \"usdc_polygon\",\n \"eth\",\n \"eth_polygon\",\n \"eth_optimism\",\n \"eth_base\",\n \"eth_arbitrum\"\n ],\n \"description\": \"MoonPay currency code: sol (Solana), usdc_sol (USDC on Solana), eth (Ethereum), usdc (USDC on Ethereum), usdc_base (USDC on Base), etc.\"\n },\n \"amount\": {\n \"type\": \"number\",\n \"description\": \"Amount of token to buy (e.g. 1.5 for 1.5 SOL)\"\n },\n \"wallet\": {\n \"type\": \"string\",\n \"description\": \"Destination wallet address to receive the tokens\"\n },\n \"email\": {\n \"type\": [\n \"string\",\n \"null\"\n ],\n \"description\": \"Buyer email to pre-fill on the checkout page\"\n }\n },\n \"required\": [\n \"token\",\n \"amount\",\n \"wallet\",\n \"email\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"token_balance_list\",\n \"description\": \"List all token balances held in a wallet, including amount owned, current value in USD, and token details. Shows the complete token portfolio.\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/token_balance_list_input\",\n \"definitions\": {\n \"token_balance_list_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"wallet\": {\n \"type\": \"string\",\n \"description\": \"Wallet address to check token balances for\"\n },\n \"chain\": {\n \"type\": \"string\",\n \"enum\": [\n \"solana\",\n \"ethereum\",\n \"base\",\n \"polygon\",\n \"arbitrum\",\n \"optimism\"\n ],\n \"description\": \"Blockchain to check balances on (e.g. 'solana', 'ethereum', 'base')\"\n }\n },\n \"required\": [\n \"wallet\",\n \"chain\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"token_retrieve\",\n \"description\": \"Get detailed token information including market data, price changes, volume, trades, and holder statistics by token address\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/token_retrieve_input\",\n \"definitions\": {\n \"token_retrieve_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"token\": {\n \"type\": \"string\",\n \"description\": \"Address of the token to retrieve\"\n },\n \"chain\": {\n \"type\": \"string\",\n \"enum\": [\n \"solana\",\n \"ethereum\",\n \"base\",\n \"polygon\",\n \"arbitrum\",\n \"optimism\"\n ],\n \"description\": \"Blockchain network where the token exists\"\n }\n },\n \"required\": [\n \"token\",\n \"chain\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"token_search\",\n \"description\": \"Search for tokens by name, symbol, or address. Returns matching tokens with their market data including price, volume, and liquidity.\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/token_search_input\",\n \"definitions\": {\n \"token_search_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"query\": {\n \"type\": \"string\",\n \"description\": \"Search term - can be token name (e.g. 'Bitcoin'), symbol (e.g. 'BTC'), or partial match\"\n },\n \"chain\": {\n \"type\": \"string\",\n \"enum\": [\n \"solana\",\n \"ethereum\",\n \"base\",\n \"polygon\",\n \"arbitrum\",\n \"optimism\"\n ],\n \"description\": \"Blockchain to search on (e.g. 'solana', 'ethereum', 'base')\"\n },\n \"limit\": {\n \"type\": [\n \"number\",\n \"null\"\n ],\n \"description\": \"Maximum number of results to return (optional, defaults to 5)\"\n }\n },\n \"required\": [\n \"query\",\n \"chain\",\n \"limit\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"token_swap_build\",\n \"description\": \"Build an unsigned swap transaction. Returns a base64-encoded transaction ready for signing.\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/token_swap_build_input\",\n \"definitions\": {\n \"token_swap_build_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"input\": {\n \"type\": \"string\",\n \"description\": \"Mint address of the input token\"\n },\n \"output\": {\n \"type\": \"string\",\n \"description\": \"Mint address of the output token\"\n },\n \"amount\": {\n \"type\": \"number\",\n \"description\": \"Amount of the input token to swap\"\n },\n \"wallet\": {\n \"type\": \"string\",\n \"description\": \"Wallet address that will execute the swap\"\n }\n },\n \"required\": [\n \"input\",\n \"output\",\n \"amount\",\n \"wallet\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"token_swap_execute\",\n \"description\": \"Execute a signed swap transaction. Pass the signed transaction and requestId from token_swap_build.\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/token_swap_execute_input\",\n \"definitions\": {\n \"token_swap_execute_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"transaction\": {\n \"type\": \"string\",\n \"description\": \"Base64-encoded signed transaction\"\n },\n \"requestId\": {\n \"type\": \"string\",\n \"description\": \"Request ID from token_swap_build\"\n }\n },\n \"required\": [\n \"transaction\",\n \"requestId\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"token_trending_list\",\n \"description\": \"Get currently trending tokens on a blockchain. Perfect for discovering what's hot right now.\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/token_trending_list_input\",\n \"definitions\": {\n \"token_trending_list_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"chain\": {\n \"type\": \"string\",\n \"enum\": [\n \"solana\",\n \"ethereum\",\n \"base\",\n \"polygon\",\n \"arbitrum\",\n \"optimism\"\n ],\n \"description\": \"Blockchain to get trending tokens from (e.g. 'solana', 'ethereum', 'base')\"\n },\n \"limit\": {\n \"type\": \"number\",\n \"description\": \"Number of results per page\"\n },\n \"page\": {\n \"type\": \"number\",\n \"description\": \"The page number of results\"\n }\n },\n \"required\": [\n \"chain\",\n \"limit\",\n \"page\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"transaction_send\",\n \"description\": \"Broadcast a signed transaction to Solana. Simulates first, then sends and confirms.\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/transaction_send_input\",\n \"definitions\": {\n \"transaction_send_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"transaction\": {\n \"type\": \"string\",\n \"description\": \"Base64-encoded signed transaction\"\n },\n \"message\": {\n \"type\": \"string\",\n \"description\": \"Human-readable message describing the transaction\"\n }\n },\n \"required\": [\n \"transaction\",\n \"message\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"user_retrieve\",\n \"description\": \"Get the currently authenticated user\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/user_retrieve_input\",\n \"definitions\": {\n \"user_retrieve_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_bank-account_delete\",\n \"description\": \"Delete a bank account\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_bank-account_delete_input\",\n \"definitions\": {\n \"virtual-account_bank-account_delete_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"bankAccountId\": {\n \"type\": \"string\",\n \"format\": \"uuid\",\n \"description\": \"The ID of the bank account to delete\"\n }\n },\n \"required\": [\n \"bankAccountId\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_bank-account_eur_register\",\n \"description\": \"Register a EUR bank account for offramp payouts\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_bank-account_eur_register_input\",\n \"definitions\": {\n \"virtual-account_bank-account_eur_register_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"iban\": {\n \"type\": \"string\",\n \"description\": \"IBAN for SEPA bank account\"\n },\n \"address\": {\n \"type\": \"object\",\n \"properties\": {\n \"street\": {\n \"type\": \"string\",\n \"description\": \"Street address\"\n },\n \"city\": {\n \"type\": \"string\",\n \"description\": \"City\"\n },\n \"state\": {\n \"type\": \"string\",\n \"description\": \"State or province\"\n },\n \"country\": {\n \"type\": \"string\",\n \"enum\": [\n \"US\",\n \"GB\",\n \"CA\",\n \"AU\",\n \"DE\",\n \"FR\",\n \"IT\",\n \"ES\",\n \"NL\",\n \"BE\",\n \"AT\",\n \"CH\",\n \"SE\",\n \"NO\",\n \"DK\",\n \"FI\",\n \"IE\",\n \"PT\",\n \"PL\",\n \"CZ\",\n \"GR\",\n \"JP\",\n \"KR\",\n \"CN\",\n \"IN\",\n \"BR\",\n \"MX\",\n \"AR\",\n \"ZA\",\n \"NZ\",\n \"SG\",\n \"HK\",\n \"AE\"\n ],\n \"description\": \"ISO 3166-1 Alpha-2 country code\"\n },\n \"postalCode\": {\n \"type\": \"string\",\n \"description\": \"Postal or ZIP code\"\n }\n },\n \"required\": [\n \"street\",\n \"city\",\n \"state\",\n \"country\",\n \"postalCode\"\n ],\n \"additionalProperties\": false,\n \"description\": \"Address of the user that owns the bank account\"\n },\n \"email\": {\n \"type\": \"string\",\n \"description\": \"Email address of the user that owns the bank account\"\n },\n \"phoneNumber\": {\n \"type\": \"string\",\n \"description\": \"Phone number of the user\"\n },\n \"providerCountry\": {\n \"type\": \"string\",\n \"enum\": [\n \"US\",\n \"GB\",\n \"CA\",\n \"AU\",\n \"DE\",\n \"FR\",\n \"IT\",\n \"ES\",\n \"NL\",\n \"BE\",\n \"AT\",\n \"CH\",\n \"SE\",\n \"NO\",\n \"DK\",\n \"FI\",\n \"IE\",\n \"PT\",\n \"PL\",\n \"CZ\",\n \"GR\",\n \"JP\",\n \"KR\",\n \"CN\",\n \"IN\",\n \"BR\",\n \"MX\",\n \"AR\",\n \"ZA\",\n \"NZ\",\n \"SG\",\n \"HK\",\n \"AE\"\n ],\n \"description\": \"ISO 3166-1 Alpha-2 country code where the bank is located\"\n },\n \"providerName\": {\n \"type\": \"string\",\n \"description\": \"Name of the bank\"\n },\n \"givenName\": {\n \"type\": \"string\",\n \"description\": \"First/given name of the account holder\"\n },\n \"familyName\": {\n \"type\": \"string\",\n \"description\": \"Last/family name of the account holder\"\n }\n },\n \"required\": [\n \"iban\",\n \"address\",\n \"email\",\n \"phoneNumber\",\n \"providerCountry\",\n \"providerName\",\n \"givenName\",\n \"familyName\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_bank-account_list\",\n \"description\": \"List registered bank accounts\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_bank-account_list_input\",\n \"definitions\": {\n \"virtual-account_bank-account_list_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_bank-account_retrieve\",\n \"description\": \"Get a bank account by currency\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_bank-account_retrieve_input\",\n \"definitions\": {\n \"virtual-account_bank-account_retrieve_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"currency\": {\n \"type\": \"string\",\n \"enum\": [\n \"USD\",\n \"EUR\"\n ],\n \"description\": \"The fiat currency code (USD or EUR)\"\n }\n },\n \"required\": [\n \"currency\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_bank-account_usd_register\",\n \"description\": \"Register a USD bank account for offramp payouts\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_bank-account_usd_register_input\",\n \"definitions\": {\n \"virtual-account_bank-account_usd_register_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\n \"ACH\",\n \"Wire\"\n ],\n \"description\": \"Type of bank account (ACH or Wire)\"\n },\n \"accountNumber\": {\n \"type\": \"string\",\n \"description\": \"Account number\"\n },\n \"routingNumber\": {\n \"type\": \"string\",\n \"description\": \"Routing number\"\n },\n \"address\": {\n \"type\": \"object\",\n \"properties\": {\n \"street\": {\n \"type\": \"string\",\n \"description\": \"Street address\"\n },\n \"city\": {\n \"type\": \"string\",\n \"description\": \"City\"\n },\n \"state\": {\n \"type\": \"string\",\n \"description\": \"State or province\"\n },\n \"country\": {\n \"type\": \"string\",\n \"enum\": [\n \"US\",\n \"GB\",\n \"CA\",\n \"AU\",\n \"DE\",\n \"FR\",\n \"IT\",\n \"ES\",\n \"NL\",\n \"BE\",\n \"AT\",\n \"CH\",\n \"SE\",\n \"NO\",\n \"DK\",\n \"FI\",\n \"IE\",\n \"PT\",\n \"PL\",\n \"CZ\",\n \"GR\",\n \"JP\",\n \"KR\",\n \"CN\",\n \"IN\",\n \"BR\",\n \"MX\",\n \"AR\",\n \"ZA\",\n \"NZ\",\n \"SG\",\n \"HK\",\n \"AE\"\n ],\n \"description\": \"ISO 3166-1 Alpha-2 country code\"\n },\n \"postalCode\": {\n \"type\": \"string\",\n \"description\": \"Postal or ZIP code\"\n }\n },\n \"required\": [\n \"street\",\n \"city\",\n \"state\",\n \"country\",\n \"postalCode\"\n ],\n \"additionalProperties\": false,\n \"description\": \"Address of the user that owns the bank account\"\n },\n \"email\": {\n \"type\": \"string\",\n \"description\": \"Email address of the user that owns the bank account\"\n },\n \"phoneNumber\": {\n \"type\": \"string\",\n \"description\": \"Phone number of the user\"\n },\n \"providerCountry\": {\n \"type\": \"string\",\n \"enum\": [\n \"US\",\n \"GB\",\n \"CA\",\n \"AU\",\n \"DE\",\n \"FR\",\n \"IT\",\n \"ES\",\n \"NL\",\n \"BE\",\n \"AT\",\n \"CH\",\n \"SE\",\n \"NO\",\n \"DK\",\n \"FI\",\n \"IE\",\n \"PT\",\n \"PL\",\n \"CZ\",\n \"GR\",\n \"JP\",\n \"KR\",\n \"CN\",\n \"IN\",\n \"BR\",\n \"MX\",\n \"AR\",\n \"ZA\",\n \"NZ\",\n \"SG\",\n \"HK\",\n \"AE\"\n ],\n \"description\": \"ISO 3166-1 Alpha-2 country code where the bank is located\"\n },\n \"providerName\": {\n \"type\": \"string\",\n \"description\": \"Name of the bank\"\n },\n \"givenName\": {\n \"type\": \"string\",\n \"description\": \"First/given name of the account holder\"\n },\n \"familyName\": {\n \"type\": \"string\",\n \"description\": \"Last/family name of the account holder\"\n }\n },\n \"required\": [\n \"type\",\n \"accountNumber\",\n \"routingNumber\",\n \"address\",\n \"email\",\n \"phoneNumber\",\n \"providerCountry\",\n \"providerName\",\n \"givenName\",\n \"familyName\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_create\",\n \"description\": \"Create a virtual account and start KYC verification\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_create_input\",\n \"definitions\": {\n \"virtual-account_create_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_delete\",\n \"description\": \"Delete your virtual account\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_delete_input\",\n \"definitions\": {\n \"virtual-account_delete_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_identification_create\",\n \"description\": \"Create a KYC verification link to complete identity verification\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_identification_create_input\",\n \"definitions\": {\n \"virtual-account_identification_create_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_identification_list\",\n \"description\": \"List all KYC identifications\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_identification_list_input\",\n \"definitions\": {\n \"virtual-account_identification_list_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_identification_retrieve\",\n \"description\": \"Get the status of a KYC identification\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_identification_retrieve_input\",\n \"definitions\": {\n \"virtual-account_identification_retrieve_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_offramp_create\",\n \"description\": \"Create an offramp to convert stablecoin to fiat\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_offramp_create_input\",\n \"definitions\": {\n \"virtual-account_offramp_create_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"description\": \"The name of the offramp\"\n },\n \"fiat\": {\n \"type\": \"string\",\n \"enum\": [\n \"USD\",\n \"EUR\"\n ],\n \"description\": \"The fiat currency to convert to\"\n },\n \"stablecoin\": {\n \"type\": \"string\",\n \"enum\": [\n \"USDC\",\n \"USDT\",\n \"EURC\"\n ],\n \"description\": \"The stablecoin token to convert from\"\n }\n },\n \"required\": [\n \"name\",\n \"fiat\",\n \"stablecoin\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_offramp_delete\",\n \"description\": \"Cancel an offramp\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_offramp_delete_input\",\n \"definitions\": {\n \"virtual-account_offramp_delete_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"offrampId\": {\n \"type\": \"string\",\n \"format\": \"uuid\",\n \"description\": \"The ID of the offramp to cancel\"\n }\n },\n \"required\": [\n \"offrampId\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_offramp_initiate\",\n \"description\": \"Build an unsigned transaction to send stablecoin to an offramp deposit address\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_offramp_initiate_input\",\n \"definitions\": {\n \"virtual-account_offramp_initiate_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"wallet\": {\n \"type\": \"string\",\n \"description\": \"The wallet address to send from\"\n },\n \"offrampId\": {\n \"type\": \"string\",\n \"description\": \"The ID of the offramp to initiate\"\n },\n \"amount\": {\n \"type\": \"number\",\n \"minimum\": 0,\n \"description\": \"The amount of stablecoin to send (in human-readable units, e.g., 100.5)\"\n }\n },\n \"required\": [\n \"wallet\",\n \"offrampId\",\n \"amount\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_offramp_list\",\n \"description\": \"List all offramps\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_offramp_list_input\",\n \"definitions\": {\n \"virtual-account_offramp_list_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_offramp_retrieve\",\n \"description\": \"Get offramp details\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_offramp_retrieve_input\",\n \"definitions\": {\n \"virtual-account_offramp_retrieve_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"offrampId\": {\n \"type\": \"string\",\n \"format\": \"uuid\",\n \"description\": \"The ID of the offramp to retrieve\"\n }\n },\n \"required\": [\n \"offrampId\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_onramp_create\",\n \"description\": \"Create an onramp to convert fiat to stablecoin\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_onramp_create_input\",\n \"definitions\": {\n \"virtual-account_onramp_create_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"description\": \"The name of the onramp\"\n },\n \"fiat\": {\n \"type\": \"string\",\n \"enum\": [\n \"USD\",\n \"EUR\"\n ],\n \"description\": \"The fiat currency to convert from\"\n },\n \"stablecoin\": {\n \"type\": \"string\",\n \"enum\": [\n \"USDC\",\n \"USDT\",\n \"EURC\"\n ],\n \"description\": \"The stablecoin token to convert to\"\n }\n },\n \"required\": [\n \"name\",\n \"fiat\",\n \"stablecoin\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_onramp_delete\",\n \"description\": \"Cancel an onramp\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_onramp_delete_input\",\n \"definitions\": {\n \"virtual-account_onramp_delete_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"onrampId\": {\n \"type\": \"string\",\n \"format\": \"uuid\",\n \"description\": \"The ID of the onramp to cancel\"\n }\n },\n \"required\": [\n \"onrampId\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_onramp_list\",\n \"description\": \"List all onramps\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_onramp_list_input\",\n \"definitions\": {\n \"virtual-account_onramp_list_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"status\": {\n \"type\": \"string\",\n \"enum\": [\n \"Created\",\n \"Authorized\",\n \"DepositAccountAdded\",\n \"Approved\",\n \"Rejected\",\n \"Cancelled\"\n ],\n \"description\": \"Status of the onramps to get\"\n }\n },\n \"required\": [\n \"status\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_onramp_payment_create\",\n \"description\": \"Create an open banking payment link for an onramp\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_onramp_payment_create_input\",\n \"definitions\": {\n \"virtual-account_onramp_payment_create_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"onrampId\": {\n \"type\": \"string\",\n \"format\": \"uuid\",\n \"description\": \"The ID of the onramp\"\n },\n \"amount\": {\n \"type\": \"string\",\n \"description\": \"The amount to pay\"\n },\n \"fiat\": {\n \"type\": \"string\",\n \"enum\": [\n \"USD\",\n \"EUR\"\n ],\n \"description\": \"The fiat currency (USD or EUR)\"\n }\n },\n \"required\": [\n \"onrampId\",\n \"amount\",\n \"fiat\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_onramp_payment_retrieve\",\n \"description\": \"Get the status of an open banking payment\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_onramp_payment_retrieve_input\",\n \"definitions\": {\n \"virtual-account_onramp_payment_retrieve_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"onrampId\": {\n \"type\": \"string\",\n \"format\": \"uuid\",\n \"description\": \"The ID of the onramp this payment belongs to\"\n },\n \"paymentId\": {\n \"type\": \"string\",\n \"format\": \"uuid\",\n \"description\": \"The ID of the payment to retrieve\"\n }\n },\n \"required\": [\n \"onrampId\",\n \"paymentId\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_onramp_retrieve\",\n \"description\": \"Get onramp details and banking info\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_onramp_retrieve_input\",\n \"definitions\": {\n \"virtual-account_onramp_retrieve_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"onrampId\": {\n \"type\": \"string\",\n \"format\": \"uuid\",\n \"description\": \"The ID of the onramp to retrieve\"\n }\n },\n \"required\": [\n \"onrampId\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_retrieve\",\n \"description\": \"Get your virtual account status\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_retrieve_input\",\n \"definitions\": {\n \"virtual-account_retrieve_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_signing_create\",\n \"description\": \"Sign a required document for your virtual account\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_signing_create_input\",\n \"definitions\": {\n \"virtual-account_signing_create_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"contentId\": {\n \"type\": \"string\",\n \"description\": \"The unique ID of the content to sign\"\n }\n },\n \"required\": [\n \"contentId\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_signing_list\",\n \"description\": \"List all signed documents\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_signing_list_input\",\n \"definitions\": {\n \"virtual-account_signing_list_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_signing_required_list\",\n \"description\": \"List documents that require your signature\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_signing_required_list_input\",\n \"definitions\": {\n \"virtual-account_signing_required_list_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_transaction_list\",\n \"description\": \"List virtual account transactions\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_transaction_list_input\",\n \"definitions\": {\n \"virtual-account_transaction_list_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_wallet_list\",\n \"description\": \"List registered wallets\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_wallet_list_input\",\n \"definitions\": {\n \"virtual-account_wallet_list_input\": {\n \"type\": \"object\",\n \"properties\": {},\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_wallet_register\",\n \"description\": \"Register a wallet using a signed verification message\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_wallet_register_input\",\n \"definitions\": {\n \"virtual-account_wallet_register_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"wallet\": {\n \"type\": \"string\",\n \"description\": \"The wallet address to register\"\n },\n \"message\": {\n \"type\": \"string\",\n \"description\": \"The verification message (from virtual-account_wallet_registration-message_create)\"\n },\n \"signature\": {\n \"type\": \"string\",\n \"description\": \"Base58-encoded signature of the message\"\n }\n },\n \"required\": [\n \"wallet\",\n \"message\",\n \"signature\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n },\n {\n \"name\": \"virtual-account_wallet_registration-message_create\",\n \"description\": \"Create the verification message to register a wallet\",\n \"inputSchema\": {\n \"$ref\": \"#/definitions/virtual-account_wallet_registration-message_create_input\",\n \"definitions\": {\n \"virtual-account_wallet_registration-message_create_input\": {\n \"type\": \"object\",\n \"properties\": {\n \"wallet\": {\n \"type\": \"string\",\n \"description\": \"The wallet address to register\"\n }\n },\n \"required\": [\n \"wallet\"\n ],\n \"additionalProperties\": false\n }\n },\n \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n }\n }\n]","import { Keypair } from \"@solana/web3.js\";\nimport bs58 from \"bs58\";\nimport { createTool } from \"../../shared\";\nimport { saveWallet, type Wallet } from \"../server\";\nimport { walletCreateSchema } from \"./schema\";\n\nexport const walletCreate = createTool(walletCreateSchema, async (params) => {\n const keypair = Keypair.generate();\n\n const wallet: Wallet = {\n name: params.name,\n address: keypair.publicKey.toBase58(),\n secretKey: bs58.encode(keypair.secretKey),\n chain: \"solana\",\n createdAt: new Date().toISOString(),\n };\n\n saveWallet(wallet);\n\n return { name: wallet.name, address: wallet.address };\n});\n","import { z } from \"zod\";\n\n// ── Schema types ─────────────────────────────────────────────\n\nexport type ToolSchema<\n I extends z.ZodType = z.ZodType,\n O extends z.ZodType = z.ZodType,\n> = {\n name: string;\n description: string;\n input: I;\n output: O;\n};\n\nexport type ToolInput<TSchema extends ToolSchema> = z.infer<TSchema[\"input\"]>;\nexport type ToolOutput<TSchema extends ToolSchema> = z.infer<TSchema[\"output\"]>;\n\nexport const defineToolSchema = <\n TInput extends z.ZodType,\n TOutput extends z.ZodType,\n>(config: {\n name: string;\n description: string;\n input: TInput;\n output: TOutput;\n}): ToolSchema<TInput, TOutput> => config;\n\n// ── Tool wrapper ─────────────────────────────────────────────\n\nexport type Tool<TSchema extends ToolSchema = ToolSchema> = {\n schema: TSchema;\n handler: (params: z.input<TSchema[\"input\"]>) => Promise<z.output<TSchema[\"output\"]>>;\n};\n\n/**\n * Lightweight createTool for CLI local tools.\n * Validates input/output with Zod, no logging or context.\n */\nexport const createTool = <TSchema extends ToolSchema>(\n schema: TSchema,\n handler: (\n params: z.output<TSchema[\"input\"]>,\n ) => Promise<z.output<TSchema[\"output\"]>>,\n): Tool<TSchema> => ({\n schema,\n handler: async (params: z.input<TSchema[\"input\"]>) => {\n const parsedInput = schema.input.parse(params);\n const result = await handler(parsedInput);\n return schema.output.parse(result);\n },\n});\n","import {\n readFileSync,\n readdirSync,\n writeFileSync,\n mkdirSync,\n existsSync,\n renameSync,\n} from \"node:fs\";\nimport { join, resolve } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { randomBytes } from \"node:crypto\";\nimport { walletSchema, type Wallet, type WalletInfo } from \"./models\";\n\nexport type { Wallet, WalletInfo };\n\nconst CONFIG_DIR = join(homedir(), \".config\", \"moonpay\");\nconst WALLETS_DIR = join(CONFIG_DIR, \"wallets\");\n\n/**\n * Validate a wallet name to prevent path traversal.\n * Rejects names containing /, \\, .., or null bytes.\n */\nfunction validateWalletName(name: string): void {\n if (!name || /[/\\\\]/.test(name) || name.includes(\"..\") || name.includes(\"\\0\")) {\n throw new Error(`Invalid wallet name: \"${name}\"`);\n }\n // Double-check the resolved path stays inside WALLETS_DIR\n const resolved = resolve(WALLETS_DIR, `${name}.json`);\n if (!resolved.startsWith(WALLETS_DIR + \"/\")) {\n throw new Error(`Invalid wallet name: \"${name}\"`);\n }\n}\n\nexport function ensureWalletsDir(): void {\n mkdirSync(WALLETS_DIR, { recursive: true, mode: 0o700 });\n}\n\nexport function getWalletPath(name: string): string {\n validateWalletName(name);\n return join(WALLETS_DIR, `${name}.json`);\n}\n\nexport function getWalletsDir(): string {\n return WALLETS_DIR;\n}\n\nexport function saveWallet(wallet: Wallet): void {\n ensureWalletsDir();\n const filePath = getWalletPath(wallet.name);\n if (existsSync(filePath)) {\n throw new Error(`Wallet \"${wallet.name}\" already exists`);\n }\n const safeName = wallet.name.replace(/[^a-zA-Z0-9_-]/g, \"_\");\n const tmpPath = join(\n WALLETS_DIR,\n `.${safeName}.${randomBytes(4).toString(\"hex\")}.tmp`,\n );\n writeFileSync(tmpPath, JSON.stringify(wallet, null, 2), { mode: 0o600 });\n renameSync(tmpPath, filePath);\n}\n\n/**\n * Load a wallet by name or address.\n * Validates the JSON shape to catch corrupted files early.\n */\nexport function loadWallet(nameOrAddress: string): Wallet {\n ensureWalletsDir();\n const files = readdirSync(WALLETS_DIR).filter((f) => f.endsWith(\".json\"));\n for (const file of files) {\n const raw = JSON.parse(readFileSync(join(WALLETS_DIR, file), \"utf-8\"));\n const result = walletSchema.safeParse(raw);\n if (!result.success) continue; // skip corrupted files\n const wallet = result.data;\n if (wallet.name === nameOrAddress || wallet.address === nameOrAddress)\n return wallet;\n }\n\n throw new Error(`Wallet \"${nameOrAddress}\" not found`);\n}\n\n","import { z } from \"zod\";\n\nexport const walletSchema = z.object({\n name: z.string(),\n address: z.string(),\n secretKey: z.string(),\n chain: z.literal(\"solana\"),\n createdAt: z.string(),\n});\n\nexport type Wallet = z.infer<typeof walletSchema>;\n\n/** Wallet without the secret key — safe for display/output */\nexport const walletInfoSchema = walletSchema.omit({ secretKey: true });\n\nexport type WalletInfo = z.infer<typeof walletInfoSchema>;\n","import { z } from \"zod\";\nimport { defineToolSchema } from \"../../shared\";\n\nexport const walletCreateSchema = defineToolSchema({\n name: \"wallet_create\",\n description: \"Generate a new Solana keypair and store it locally\",\n input: z.object({\n name: z.string().describe(\"Wallet name\"),\n }),\n output: z.object({\n name: z.string().describe(\"Wallet name\"),\n address: z.string().describe(\"Solana wallet address (base58)\"),\n }),\n});\n","import { Keypair } from \"@solana/web3.js\";\nimport bs58 from \"bs58\";\nimport { createInterface } from \"node:readline\";\nimport { createTool } from \"../../shared\";\nimport { saveWallet, type Wallet } from \"../server\";\nimport { walletImportSchema } from \"./schema\";\n\nasync function promptSecret(prompt: string): Promise<string> {\n const rl = createInterface({ input: process.stdin, output: process.stderr });\n return new Promise((resolve) => {\n rl.question(prompt, (answer) => {\n rl.close();\n resolve(answer.trim());\n });\n });\n}\n\nexport const walletImport = createTool(walletImportSchema, async (params) => {\n const secretKeyBase58 =\n params.key !== null\n ? params.key\n : await promptSecret(\"Enter private key (base58): \");\n\n let keypair: Keypair;\n try {\n const secretKeyBytes = bs58.decode(secretKeyBase58);\n keypair = Keypair.fromSecretKey(secretKeyBytes);\n } catch {\n throw new Error(\n \"Invalid private key. Expected a base58-encoded Solana secret key.\",\n );\n }\n\n const wallet: Wallet = {\n name: params.name,\n address: keypair.publicKey.toBase58(),\n secretKey: secretKeyBase58,\n chain: \"solana\",\n createdAt: new Date().toISOString(),\n };\n\n saveWallet(wallet);\n\n return { name: wallet.name, address: wallet.address };\n});\n","import { z } from \"zod\";\nimport { defineToolSchema } from \"../../shared\";\n\nexport const walletImportSchema = defineToolSchema({\n name: \"wallet_import\",\n description: \"Import a Solana wallet from a base58 private key\",\n input: z.object({\n name: z.string().describe(\"Wallet name\"),\n key: z\n .string()\n .nullable()\n .describe(\"Base58-encoded private key (prompted interactively if not provided)\"),\n }),\n output: z.object({\n name: z.string().describe(\"Wallet name\"),\n address: z.string().describe(\"Solana wallet address (base58)\"),\n }),\n});\n","import { readFileSync, readdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { createTool } from \"../../shared\";\nimport { ensureWalletsDir, getWalletsDir, type Wallet } from \"../server\";\nimport { walletListSchema } from \"./schema\";\n\nexport const walletList = createTool(walletListSchema, async () => {\n ensureWalletsDir();\n const dir = getWalletsDir();\n const files = readdirSync(dir).filter(\n (f) => f.endsWith(\".json\") && !f.startsWith(\".\"),\n );\n return files.map((f) => {\n const wallet: Wallet = JSON.parse(readFileSync(join(dir, f), \"utf-8\"));\n return {\n name: wallet.name,\n address: wallet.address,\n chain: wallet.chain,\n createdAt: wallet.createdAt,\n };\n });\n});\n","import { z } from \"zod\";\nimport { defineToolSchema } from \"../../shared\";\nimport { walletInfoSchema } from \"../models\";\n\nexport const walletListSchema = defineToolSchema({\n name: \"wallet_list\",\n description: \"List all local wallets\",\n input: z.object({}),\n output: z.array(walletInfoSchema),\n});\n","import { z } from \"zod\";\nimport { defineToolSchema } from \"../../shared\";\nimport { walletInfoSchema } from \"../models\";\n\nexport const walletRetrieveSchema = defineToolSchema({\n name: \"wallet_retrieve\",\n description: \"Get details of a specific wallet\",\n input: z.object({\n wallet: z.string().describe(\"Wallet name or address\"),\n }),\n output: walletInfoSchema,\n});\n","import { createTool } from \"../../shared\";\nimport { loadWallet } from \"../server\";\nimport { walletRetrieveSchema } from \"./schema\";\n\nexport const walletRetrieve = createTool(\n walletRetrieveSchema,\n async (params) => {\n const wallet = loadWallet(params.wallet);\n return {\n name: wallet.name,\n address: wallet.address,\n chain: wallet.chain,\n createdAt: wallet.createdAt,\n };\n },\n);\n","import { unlinkSync } from \"node:fs\";\nimport { createTool } from \"../../shared\";\nimport { walletRetrieve } from \"../retrieve/tool\";\nimport { getWalletPath } from \"../server\";\nimport { walletDeleteSchema } from \"./schema\";\n\nexport const walletDelete = createTool(walletDeleteSchema, async (params) => {\n if (!params.confirm) {\n throw new Error(\n \"Deletion not confirmed. Pass --confirm to permanently delete this wallet.\",\n );\n }\n\n // Verify wallet exists and resolve the actual name (throws if not found)\n const wallet = await walletRetrieve.handler({ wallet: params.wallet });\n\n // getWalletPath validates the name to prevent path traversal\n unlinkSync(getWalletPath(wallet.name));\n\n return { name: wallet.name, deleted: true as const };\n});\n","import { z } from \"zod\";\nimport { defineToolSchema } from \"../../shared\";\n\nexport const walletDeleteSchema = defineToolSchema({\n name: \"wallet_delete\",\n description:\n \"Permanently delete a local wallet. This removes the private key file and cannot be undone.\",\n input: z.object({\n wallet: z.string().describe(\"Name or address of the wallet to delete\"),\n confirm: z\n .boolean()\n .describe(\"Must be true to confirm deletion\"),\n }),\n output: z.object({\n name: z.string().describe(\"Name of the deleted wallet\"),\n deleted: z.literal(true),\n }),\n});\n","import { Keypair, VersionedTransaction } from \"@solana/web3.js\";\nimport bs58 from \"bs58\";\nimport { createTool } from \"../../shared\";\nimport { loadWallet } from \"../../wallet/server\";\nimport { transactionSignSchema } from \"./schema\";\n\nexport const transactionSign = createTool(\n transactionSignSchema,\n async (params) => {\n const storedWallet = loadWallet(params.wallet);\n\n const txBytes = Buffer.from(params.transaction.trim(), \"base64\");\n const tx = VersionedTransaction.deserialize(txBytes);\n\n const secretKeyBytes = bs58.decode(storedWallet.secretKey);\n const keypair = Keypair.fromSecretKey(secretKeyBytes);\n\n tx.sign([keypair]);\n\n return {\n transaction: Buffer.from(tx.serialize()).toString(\"base64\"),\n };\n },\n);\n","import { z } from \"zod\";\nimport { defineToolSchema } from \"../../shared\";\n\nexport const transactionSignSchema = defineToolSchema({\n name: \"transaction_sign\",\n description: \"Sign a base64-encoded Solana transaction with a local wallet\",\n input: z.object({\n wallet: z.string().describe(\"Wallet address\"),\n transaction: z\n .string()\n .describe(\"Base64-encoded unsigned transaction\"),\n }),\n output: z.object({\n transaction: z\n .string()\n .describe(\"Base64-encoded signed transaction\"),\n }),\n});\n","import { Keypair } from \"@solana/web3.js\";\nimport bs58 from \"bs58\";\nimport nacl from \"tweetnacl\";\nimport { createTool } from \"../../shared\";\nimport { loadWallet } from \"../../wallet/server\";\nimport { messageSignSchema } from \"./schema\";\n\nexport const messageSign = createTool(messageSignSchema, async (params) => {\n const storedWallet = loadWallet(params.wallet);\n\n const secretKeyBytes = bs58.decode(storedWallet.secretKey);\n const keypair = Keypair.fromSecretKey(secretKeyBytes);\n\n const messageBytes = Buffer.from(params.message, \"utf8\");\n const signatureBytes = nacl.sign.detached(messageBytes, keypair.secretKey);\n\n return { signature: bs58.encode(signatureBytes) };\n});\n","import { z } from \"zod\";\nimport { defineToolSchema } from \"../../shared\";\n\nexport const messageSignSchema = defineToolSchema({\n name: \"message_sign\",\n description:\n \"Sign a message with a local wallet. Produces a base58-encoded ed25519 signature compatible with Solana's signMessage.\",\n input: z.object({\n wallet: z.string().describe(\"Wallet address to sign with\"),\n message: z.string().describe(\"Message text to sign\"),\n }),\n output: z.object({\n signature: z\n .string()\n .describe(\"Base58-encoded ed25519 signature\"),\n }),\n});\n"],"mappings":"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","names":["resolve","code","readFileSync","writeFileSync","mkdirSync","existsSync","renameSync","join","homedir","randomBytes","CONFIG_DIR","join","homedir","mkdirSync","existsSync","randomBytes","writeFileSync","renameSync","readFileSync","z","z","Keypair","bs58","z","z","resolve","bs58","Keypair","readFileSync","readdirSync","join","z","z","readdirSync","readFileSync","join","z","z","unlinkSync","z","z","unlinkSync","Keypair","bs58","z","z","bs58","Keypair","Keypair","bs58","z","z","bs58","Keypair"]}
|
|
File without changes
|