noderowallet
A Javascript library for interacting with the Monero Wallet RPC interface, written in TypeScript, documented with JSDoc, with BigInt support. Zero (0) dependencies. Since version 1.1.0
, this library uses the fetch
API instead of the node.js http
module, and is supposed to work in the browser and other JS runtimes.
Currently, authentication is not supported. You have to start monero-wallet-rpc
with --disable-rpc-login
, use a reverse proxy that does authentication for you, or use a fetch client that implements digest authentication (see below)
Be careful when using monero-wallet-rpc
without authenticaton. Block the RPC port with a firewall, or even better, run the wallet in Docker. If the port is open to the Internet anyone can use your wallet, including stealing all your funds.
Usage
import {NoderoWallet} from 'noderowallet'
// WARNING: make sure your port is not in the bad ports list
// https://fetch.spec.whatwg.org/#port-blocking
const monero = new NoderoWallet({ host: '127.0.0.1', port: 1234 })
monero.getBalance().then((x) => console.log(x))
// Outputs:
{
balance: 1125125151521n,
// atomic units, in this case the balance is 1.125125151521
// from https://www.getmonero.org/resources/moneropedia/atomic-units.html:
// Atomic Units refer to the smallest fraction of 1 XMR. One atomic unit is currently 1e-12 XMR (0.000000000001 XMR, or one piconero). It may be changed in the future.
blocks_to_unlock: 0n,
multisig_import_needed: false,
per_subaddress: [
{
account_index: 0n,
address: '52R4RNjVjPn6Aj3SVA1yzZQStC8a4StYTUiuAtLjBPk92A76vrCD2pcPmV51Td8X56Gb1smNTaiEadc4gurjQ5nJBUuVCFB',
address_index: 0n,
balance: 1125125151521n,
blocks_to_unlock: 0n,
label: 'Primary account',
num_unspent_outputs: 1n,
time_to_unlock: 0n,
unlocked_balance: 1125125151521n
}
],
time_to_unlock: 0n,
unlocked_balance: 1125125151521n
}
Using a custom fetch client
noderowallet
supports passing your own fetch-compatible client, more specifically, any function that matches the following type:
type FetchClient = (
url: string,
options: {
method: 'POST'
body: string
}
) => Promise<{
ok: boolean
status: number
text: () => Promise<string>
}>
For example, to use the digest-fetch
library:
import { NoderoWallet } from 'noderowallet'
import DigestClient from 'digest-fetch'
const digestClient = new DigestClient('monerouser', 'moneropassword')
const monero = new NoderoWallet({
host: '127.0.0.1',
port: 1234,
fetchClient: (url, options) => digestClient.fetch(url, options)
})