61 lines
2.5 KiB
JavaScript
61 lines
2.5 KiB
JavaScript
const {
|
|
RequestManager,
|
|
HTTPTransport,
|
|
Client
|
|
} = require("../server/node_modules/@open-rpc/client-js");
|
|
|
|
async function makeClient(url, user, pass) {
|
|
const headers = {};
|
|
if (user !== undefined || pass !== undefined) {
|
|
headers['Authorization'] = 'Basic ' + Buffer.from(`${user || ''}:${pass || ''}`).toString('base64');
|
|
}
|
|
const transport = new HTTPTransport(url, { headers });
|
|
return new Client(new RequestManager([transport]));
|
|
}
|
|
|
|
module.exports = {
|
|
client: async (url, user, pass) => {
|
|
return makeClient(url, user, pass);
|
|
},
|
|
execute: async (url, user, pass, method, params = []) => {
|
|
try {
|
|
const clientrpc = await makeClient(url, user, pass);
|
|
return await clientrpc.request({ method, params });
|
|
} catch (error) {
|
|
throw new Error("ECOin wallet disconnected. Check your wallet settings or connection status.");
|
|
}
|
|
},
|
|
getBalance: async (url, user, pass) => {
|
|
return Number(await module.exports.execute(url, user, pass, "getbalance")) || 0;
|
|
},
|
|
getAddress: async (url, user, pass) => {
|
|
try {
|
|
const addrs = await module.exports.execute(url, user, pass, "getaddressesbyaccount", [""]);
|
|
if (Array.isArray(addrs) && addrs.length > 0) return addrs[0];
|
|
} catch {}
|
|
try {
|
|
const addr = await module.exports.execute(url, user, pass, "getnewaddress", [""]);
|
|
if (typeof addr === "string" && addr) return addr;
|
|
} catch {}
|
|
return "";
|
|
},
|
|
listTransactions: async (url, user, pass) => {
|
|
return await module.exports.execute(url, user, pass, "listtransactions", ["", 1000000, 0]);
|
|
},
|
|
sendToAddress: async (url, user, pass, address, amount) => {
|
|
return await module.exports.execute(url, user, pass, "sendtoaddress", [address, Number(amount)]);
|
|
},
|
|
validateSend: async (url, user, pass, address, amount, fee) => {
|
|
let isValid = false;
|
|
const errors = [];
|
|
const addrInfo = await module.exports.execute(url, user, pass, "validateaddress", [address]);
|
|
const addressValid = !!addrInfo?.isvalid;
|
|
const amountValid = Number(amount) > 0;
|
|
const feeValid = Number(fee) >= 0;
|
|
if (!addressValid) errors.push("invalid_dest");
|
|
if (!amountValid) errors.push("invalid_amount");
|
|
if (!feeValid) errors.push("invalid_fee");
|
|
if (errors.length === 0) isValid = true;
|
|
return { isValid, errors };
|
|
}
|
|
};
|