From 742aae921db5192ce254eb98258c994bbb6081d0 Mon Sep 17 00:00:00 2001 From: Keith Irwin Date: Mon, 22 Apr 2024 18:02:46 -0600 Subject: [PATCH] fix: :bug: Fixed account missing --- main.js | 56 +++++++++++++++++++++++++++++++++++++++-------- package-lock.json | 12 +++++----- package.json | 4 ++-- 3 files changed, 55 insertions(+), 17 deletions(-) diff --git a/main.js b/main.js index 830a436..14768a8 100644 --- a/main.js +++ b/main.js @@ -4,6 +4,8 @@ const Wallet = require('monero-wallet-rpc-js') ;(async () => { + const deAtomize = (atomic) => Number(atomic) * 0.000000000001 + dotenv.config() const WALLET_ACCOUNT_INDEX = Number(process.env.WALLET_ACCOUNT_INDEX) const WALLET_AUTOSAVE_SEC = Number(process.env.WALLET_AUTOSAVE_SEC) @@ -33,12 +35,38 @@ const Wallet = require('monero-wallet-rpc-js') console.error(`Failed to set auto_refresh to ${process.env.WALLET_REFRESH_SEC}: ${err}`) } + // Confirm sync try { console.log(`Wallet synced to block ${await wallet.getHeight()}.`) } catch (err) { console.error(`Failed to get blockchain height: ${err}`) } + // Check accounts, create account if needed + // TODO: Validate that the admin didn't set WALLET_ACCOUNT_INDEX too high + const getAccount = async (i) => { + try { + accounts = (await wallet.getAccounts()).subaddress_accounts + } catch (err) { + console.error(`Failed to get account listing from rpc: ${err}`) + } + account = accounts.find(a => a.account_index == i) + if (account===undefined) { + console.log(`There is no account #${i}. Creating account...`) + try { + const newAccount = await wallet.createAccount() + console.log(`Created account #${newAccount.account_index}.`) + } catch (err) { + console.error(`Failed to create new account: ${err}`) + } + return getAccount(i) + } else { + console.log(`Account #${i} exists with a balance of ${deAtomize(account.balance)} XMR.`) + return account + } + }; getAccount(WALLET_ACCOUNT_INDEX) + + // Server const app = express() app.use(express.json()) @@ -49,20 +77,30 @@ const Wallet = require('monero-wallet-rpc-js') app.get('/wallet/height', async (req, res) => res.send((await wallet.getHeight()).toString()) ) - app.get('/wallet/balance', async (req, res) => - res.send( - String((await wallet.getBalance({ + app.get('/wallet/balance', async (req, res) => { + let result; try { + result = await wallet.getBalance({ account_index: WALLET_ACCOUNT_INDEX, - })).balance * 0.000000000001) - ) - ) + }) + } catch (err) { + console.error(`Failed to get balance: ${err}`) + return res.sendStatus(500) + } + return res.send(`${deAtomize(result.balance)} XMR`) +}) // New payment app.post('/payment', async (req, res) => { - res.redirect(`/payment/${(await wallet.createAddress({ - account_index: WALLET_ACCOUNT_INDEX, + let result; try { + result = await wallet.createAddress({ + account_index: 1, label: req.body.label, - })).address}`) + }) + } catch (err) { + console.error(`Failed to create address "${req.body.label}": ${err}`) + return res.sendStatus(500) + } + return res.redirect(`/payment/${result.address}`) }) // Check payment diff --git a/package-lock.json b/package-lock.json index 5b59409..c553197 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,17 +1,17 @@ { "name": "pago", - "version": "1.1.3", + "version": "1.1.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pago", - "version": "1.1.3", + "version": "1.1.5", "license": "MIT", "dependencies": { "dotenv": "^16.4.5", "express": "^4.19.2", - "monero-wallet-rpc-js": "^1.2.18", + "monero-wallet-rpc-js": "^1.2.20", "socket.io": "^4.7.5" } }, @@ -625,9 +625,9 @@ } }, "node_modules/monero-wallet-rpc-js": { - "version": "1.2.18", - "resolved": "https://registry.npmjs.org/monero-wallet-rpc-js/-/monero-wallet-rpc-js-1.2.18.tgz", - "integrity": "sha512-Fl8/sg0Gkgpj8nw4lLLrVSheaW983bnqa4iwPLpJ4xuuduXjOqjVk1iHJE5hZwH/EfIiI8j5iVwkCxd7Wpp/IA==", + "version": "1.2.20", + "resolved": "https://registry.npmjs.org/monero-wallet-rpc-js/-/monero-wallet-rpc-js-1.2.20.tgz", + "integrity": "sha512-Hvdxvugs911QL6lte9SaauQLUfTT+ZXrAJ1W9DX5acczEqhSncuneN9bSFQnXgGKeIg37FU9dkVfFK3G1Rkl6g==", "dependencies": { "axios": "^1.6.8" } diff --git a/package.json b/package.json index c7ea7a3..6e82d1c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pago", - "version": "1.1.4", + "version": "1.1.5", "description": "Lightweight monero payment gateway", "main": "main.js", "scripts": { @@ -18,7 +18,7 @@ "dependencies": { "dotenv": "^16.4.5", "express": "^4.19.2", - "monero-wallet-rpc-js": "^1.2.18", + "monero-wallet-rpc-js": "^1.2.20", "socket.io": "^4.7.5" } }