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 🙏

© 2026 – Pkg Stats / Ryan Hefner

@monkeymask/core

v0.1.1

Published

Banano keys, signing, block publishing, and NFT metaprotocol operations — the web3.js-style core for MonkeyMask, usable in Node servers and browsers

Readme

@monkeymask/core

Banano keys, signing, block publishing, and NFT metaprotocol operations. This is the @solana/web3.js-style layer of the MonkeyMask stack: everything the extension wallet can do, as a plain library that runs in Node servers and browsers.

dApp UI          @monkeymask/react            (like @solana/wallet-adapter-react)
extension        MonkeyMask (browser wallet)  (like Phantom)
types/verify     @monkeymask/wallet-standard  (like @wallet-standard, verify-only)
keys + signing   @monkeymask/core             (like @solana/web3.js)  ← this package

No storage, no approval UI, no chrome.* — callers own key custody. The extension keeps keys encrypted behind a password and user approvals; a server keeps them in an env secret.

Install

npm install @monkeymask/core

Server wallet (custodial)

import { Wallet } from '@monkeymask/core';

// 64-char hex seed or BIP39 mnemonic, e.g. from process.env.BANANO_SEED
const wallet = await Wallet.fromSeed(process.env.BANANO_SEED!);

console.log(wallet.address);              // ban_1…

await wallet.receiveAll();                // claim pending (receivables)
const hash = await wallet.send('ban_1abc…', '1.5');   // BNS names work too: 'user.ban'

// Messages / SIWB
const sig = await wallet.signMessage('hello');
wallet.verifyMessage('hello', sig);       // true
const proof = await wallet.signIn({ domain: 'example.com', nonce });

// NFTs (73-meta-tokens)
const mint = await wallet.mintNFT({ metadataCid: 'Qm…', to: 'ban_1recipient…', maxSupply: 10 });
await wallet.mintEdition({ metadataCid: 'Qm…', to: 'ban_1recipient…' });
await wallet.transferNFT({ assetRepresentative: mint.assetRepresentative, to: 'ban_1buyer…' });
await wallet.burnNFT({ assetRepresentative: mint.assetRepresentative });
await wallet.finishCollection({ metadataCid: 'Qm…' });
await wallet.sendAllNfts({ to: 'ban_1vault…' });

// Airdrops (locally-chained blocks, pipelined work, per-recipient results)
const { results } = await wallet.batchSend([
  { to: 'ban_1a…', amount: '1' },
  { to: 'ban_1b…', amount: '2' },
]);

// Or the same structured envelope dApps send through the provider:
await wallet.sendOperation({ type: 'mint', metadataCid: 'Qm…', to: 'ban_1x…' });

API surface

  • WalletfromSeed, deriveIndex, getBalance, getReceivables, send, batchSend, receivePending, receiveAll, sweep, changeRepresentative, signMessage, verifyMessage, signIn, mintNFT, mintEdition, transferNFT, transferNFTs, burnNFT, finishCollection, sendAllNfts, signOperation, sendOperation
  • KeysgenerateSeed, generateMnemonic, mnemonicToSeed, deriveAccount
  • NFT representative encoderssupplyRepresentative, metadataRepresentativeFromCid (v0 Qm… and v1 b… CIDs), assetRepresentativeAccount, finishSupplyRepresentative (decoders live in @monkeymask/wallet-standard)
  • Node/RPCsetBananoRpcEndpoints (point at your own node), withBananoNodeFallback, BananoRPC
  • BNSBNSResolver / bnsResolver (forward + reverse resolution)
  • bananojs — the typed underlying @bananocoin/bananojs instance, already wired to the active endpoint

Metaprotocol safety rules from the extension are preserved: mints always publish self-delimiting change#supplysend#mint pairs, a clean representative is restored after every mint/transfer/send-all so ordinary sends can never mint phantom editions or re-trigger send-all, and changeRepresentative refuses to overwrite an in-flight protocol representative.

Security

A seed in an env var is a hot wallet. Use a dedicated account (never a treasury), keep only working balances on it, and gate any HTTP endpoint that triggers signing behind authentication (e.g. a verified SIWB session). This package never persists keys.

Custom node

import { setBananoRpcEndpoints } from '@monkeymask/core';
setBananoRpcEndpoints(['https://my-node.example.com/api']);