Files
mcp-code/ndk.ts
pablof7z 10fbca0824 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.
2025-04-08 18:10:16 +01:00

58 lines
1.5 KiB
TypeScript

import NDK, {
NDKPrivateKeySigner,
type NDKUser,
type NDKSigner,
} from "@nostr-dev-kit/ndk";
import { NDKNip46Signer } from "@nostr-dev-kit/ndk";
import { type ConfigData, writeConfig } from "./config";
import { updateFollowList } from "./update-follow-list";
const DEFAULT_RELAYS = [
"wss://relay.primal.net",
"wss://relay.damus.io",
"wss://nos.lol",
];
// Initialize NDK with signer
export const ndk = new NDK();
export async function initNDK(config: ConfigData) {
ndk.explicitRelayUrls = config.relays || DEFAULT_RELAYS;
await ndk.connect();
let signer: NDKSigner;
if (config.bunker) {
let localSigner: NDKPrivateKeySigner;
if (config.bunkerLocalKey) {
localSigner = new NDKPrivateKeySigner(config.bunkerLocalKey);
} else {
localSigner = NDKPrivateKeySigner.generate();
// save it to the config
config.bunkerLocalKey = localSigner.privateKey;
writeConfig(config);
}
signer = new NDKNip46Signer(ndk, config.bunker, localSigner);
await signer.blockUntilReady();
} else if (config.privateKey) {
signer = new NDKPrivateKeySigner(config.privateKey);
} else {
throw new Error("No private key or bunker provided");
}
ndk.signer = signer;
let mainUser: NDKUser;
if (config.wotFrom) {
const u = await ndk.getUserFromNip05(config.wotFrom);
if (u) mainUser = u;
}
mainUser ??= await signer.user();
setTimeout(() => updateFollowList(mainUser), 1000);
}