npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

beignet

v0.0.37

Published

A self-custodial, JS Bitcoin wallet management library.

Downloads

881

Readme

Beignet

:warning: This is pre-alpha software and not suitable for production apps yet.

Description

An instant, self-custodial Bitcoin wallet for JS devs.

This Typescript library offers JS developers a way to incorporate an on-chain, self-custodial Bitcoin wallet into their projects.

Table of Contents

  1. Getting Started
  2. Running Tests & Examples
  1. Implementation
  2. Advanced Usage
  3. Documentation
  4. Support

Getting Started

# Using Yarn
yarn add beignet

# Or, using NPM
npm i -S beignet

Running Tests & Examples

Clone the Repository

git clone [email protected]:synonymdev/beignet.git && cd beignet

Install Dependencies & Build

npm i && npm run build

Run tests:

npm run test

Run example project:

npm run example

Implementation

import { Wallet, generateMnemonic } from 'beignet';

// Generate a mnemonic phrase
const mnemonic = generateMnemonic();

// Create a wallet instance
const createWalletRes = await Wallet.create({ mnemonic });
if (createWalletRes.isErr()) return;
const wallet = createWalletRes.value;

// View wallet data (addresses, indexes, utxos, transactions, etc.)
const walletData = wallet.data;
  
// Get receiving address
const address = await wallet.getAddress();

// Get address balance
const addressBalanceRes = await wallet.getAddressBalance(address);
if (addressBalance.isErr()) return;
const addressBalance = addressBalanceRes.value;

// Get wallet balance
const walletBalance = wallet.getBalance();

// Refresh Wallet
const walletRefresh = await wallet.refreshWallet();

// Get fee information to perform a transaction.
const feeInfo = wallet.getFeeInfo();

// Send sats
const sendRes = await wallet.send({ address: 'address to send sats to', amount: 1000, satPerByte: 2 });

// Send all sats to an address
const sendMaxRes = await wallet.sendMax({ address: 'address to send sats to', satPerByte: 2 });

Advanced Usage

import { Wallet, generateMnemonic } from 'beignet';
import { TStorage } from './wallet';

// Generate a mnemonic phrase
const mnemonic = generateMnemonic();

// Add a bip39 passphrase
const passphrase = 'passphrase';

// Connect to custom electrum server
const servers: TServer = {
	host: '35.233.47.252',
	ssl: 18484,
	tcp: 18483,
	protocol: EProtocol.ssl,
};

// Use a specific network (Defaults to mainnet)
const network = ENetworks.mainnet;

// Use a specific address type. (Defaults to EAddressType.p2wpkh)
const addressType = EAddressType.p2tr;

// Monitor certain address types. (Defaults to Object.values(EAddressType))
const addressTypesToMonitor = [EAddressType.p2tr, EAddressType.p2wpkh];

// Subscribe to server messages (TOnMessage)
const onMessage: TOnMessage = (id, data) => {
	console.log(id);
	console.dir(data, { depth: null });
}

// Disable startup messages. Messages resume once startup is complete. (Defaults to false)
const disableMessagesOnCreate = true;

// Persist sessions by getting and setting data from storage
const storage: TStorage = {
	async getData<K extends keyof IWalletData>(
		key: string
	): Promise<Result<IWalletData[K]>> {
		// Add your logic here
	},
	async setData<K extends keyof IWalletData>(
		key: string,
		value: IWalletData[K]
	): Promise<Result<boolean>> {
		// Add your logic here
	}
};

// Create a wallet instance
const createWalletRes = await Wallet.create({
	mnemonic,
	passphrase,
	electrumOptions: { servers },
	network,
	onMessage,
	storage, 
    addressType,
	addressTypesToMonitor,
	disableMessagesOnCreate
});
if (createWalletRes.isErr()) return;
const wallet = createWalletRes.value;

// List UTXO's
const utxos = wallet.listUtxos();

// Send sats to multiple outputs
const txs = [
	{ address: 'address1', amount: 1000 },
	{ address: 'address2', amount: 2000 },
	{ address: 'address3', amount: 3000 },
];
const sendManyRes = await wallet.sendMany({ txs });

// Sweep from a private key
const sweepPrivateKeyRes = await wallet.sweepPrivateKey({
	privateKey: 'privateKey',
	toAddress: 'toAddress',
	satsPerByte: 5,
	broadcast: false
});

// Get tx history for a given address. { tx_hash: string; height: number; }[]
const history = await wallet.getAddressHistory('address');

// Get transaction details for a given transaction id. TTxDetails
const txDetails = await wallet.getTransactionDetails('txid');

Documentation

Support

If you are experiencing any problems, please open an issue or reach out to us on Telegram.