UNPKG

nostr-nsec-seedphrase

Version:

A comprehensive TypeScript library for Nostr key management with BIP39 seed phrases, supporting both ESM and CommonJS. Implements NIP-01, NIP-06, NIP-19, and NIP-26 with key generation, event signing, bech32 encoding/decoding, and secure cryptographic ope

69 lines (68 loc) 2.68 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateSeedPhrase = generateSeedPhrase; exports.validateSeedPhrase = validateSeedPhrase; exports.getEntropyFromSeedPhrase = getEntropyFromSeedPhrase; const bip39_1 = require("bip39"); const logger_1 = require("../utils/logger"); /** * Generates a new BIP39 seed phrase * @returns {string} The generated seed phrase * @example * const seedPhrase = generateSeedPhrase(); * console.log(seedPhrase); // "witch collapse practice feed shame open despair creek road again ice least" */ function generateSeedPhrase() { try { return (0, bip39_1.generateMnemonic)(); } catch (error) { logger_1.logger.error("Failed to generate seed phrase:", error instanceof Error ? error.message : String(error)); throw new Error("Failed to generate seed phrase"); } } /** * Validates a BIP39 seed phrase * @param {string} seedPhrase - The seed phrase to validate * @returns {boolean} True if the seed phrase is valid * @example * const isValid = validateSeedPhrase("witch collapse practice feed shame open despair creek road again ice least"); * console.log(isValid); // true */ function validateSeedPhrase(seedPhrase) { try { return (0, bip39_1.validateMnemonic)(seedPhrase); } catch (error) { logger_1.logger.error("Failed to validate seed phrase:", error instanceof Error ? error.message : String(error)); return false; } } /** * Converts a BIP39 seed phrase to its entropy value * @param {string} seedPhrase - The BIP39 seed phrase to convert * @returns {Uint8Array} The entropy value * @throws {Error} If the seed phrase is invalid * @example * const entropy = getEntropyFromSeedPhrase("witch collapse practice feed shame open despair creek road again ice least"); * console.log(entropy); // Uint8Array */ function getEntropyFromSeedPhrase(seedPhrase) { try { if (!validateSeedPhrase(seedPhrase)) { throw new Error("Invalid seed phrase"); } // Convert the seed phrase to entropy bytes const entropyHex = (0, bip39_1.mnemonicToEntropy)(seedPhrase); // Convert hex string to Uint8Array const entropyBytes = new Uint8Array(entropyHex.length / 2); for (let i = 0; i < entropyHex.length; i += 2) { entropyBytes[i / 2] = parseInt(entropyHex.slice(i, i + 2), 16); } return entropyBytes; } catch (error) { logger_1.logger.error("Failed to get entropy from seed phrase:", error instanceof Error ? error.message : String(error)); throw new Error("Failed to get entropy from seed phrase"); } }