mirror of
https://github.com/aljazceru/mcp-code.git
synced 2025-12-17 04:35:19 +01:00
feat: Add zap command for sending Bitcoin Lightning tips
- Implemented the `zap` command in the CLI to allow users to send sats to a user, event, or snippet using a NIP-60 wallet. - Created a new `zap.ts` file to handle the command logic and integrated it into the MCP server. - Added wallet balance command to check the balance of a user's wallet. - Enhanced the MCP server to register the new zap command and wallet balance command. - Introduced caching for wallets to optimize performance and reduce redundant network requests. - Updated database schema to include snippets table for storing code snippets. - Improved logging functionality for better debugging and tracking of operations. - Added functionality to save snippets to the database upon retrieval. - Updated project overview documentation to reflect new features and structure. - Refactored existing commands and logic for better modularity and maintainability.
This commit is contained in:
@@ -1,9 +1,12 @@
|
||||
import NDK, { NDKPrivateKeySigner, NDKUser, NDKEvent } from "@nostr-dev-kit/ndk";
|
||||
import { NDKCashuWallet } from "@nostr-dev-kit/ndk-wallet";
|
||||
import { NDKCashuMintList } from "@nostr-dev-kit/ndk";
|
||||
import { getWallet } from "../lib/cache/wallets.js";
|
||||
import { z } from "zod";
|
||||
import { getUser, saveUser } from "../config.js";
|
||||
import { log } from "../lib/utils/log.js";
|
||||
import { ndk } from "../ndk.js";
|
||||
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
||||
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
||||
|
||||
export async function createPubkey({
|
||||
username,
|
||||
@@ -44,6 +47,27 @@ export async function createPubkey({
|
||||
// Publish the event
|
||||
await event.publish();
|
||||
|
||||
|
||||
// --- Setup Cashu Wallet (NIP-60/NIP-61) ---
|
||||
log(`Setting up Cashu wallet for ${username}...`);
|
||||
|
||||
try {
|
||||
// Use getWallet to retrieve or create a wallet for the new pubkey
|
||||
const wallet = await getWallet(signer.pubkey);
|
||||
|
||||
if (wallet) {
|
||||
log(`Cashu wallet setup complete for ${username}.`);
|
||||
log(` -> P2PK: ${wallet.p2pk}`);
|
||||
log(` -> Mints: ${wallet.mints.join(', ')}`);
|
||||
} else {
|
||||
throw new Error("Failed to create wallet");
|
||||
}
|
||||
} catch (walletError) {
|
||||
console.error(`Failed to set up Cashu wallet for ${username}:`, walletError);
|
||||
// Decide if this should be a fatal error for pubkey creation
|
||||
// For now, log the error and continue
|
||||
}
|
||||
// --- End Cashu Wallet Setup ---
|
||||
// Save the user to the config
|
||||
saveUser(username, {
|
||||
nsec: signer.privateKey,
|
||||
@@ -59,7 +83,7 @@ export async function createPubkey({
|
||||
|
||||
return {
|
||||
user,
|
||||
message: `Created pubkey for ${username} with npub ${user.npub}`,
|
||||
message: `Created pubkey for ${username} with npub ${user.npub} and a NIP-60 Cashu wallet for nutzaps`,
|
||||
};
|
||||
} catch (error: unknown) {
|
||||
const errorMessage =
|
||||
|
||||
Reference in New Issue
Block a user