aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--index.js1
-rw-r--r--lib/utils.js3
-rw-r--r--routes/assets.js12
-rw-r--r--routes/balances.js41
-rw-r--r--routes/liquid/receive.js27
-rw-r--r--routes/users.js19
6 files changed, 64 insertions, 39 deletions
diff --git a/index.js b/index.js
index f876f631..0ff00cc5 100644
--- a/index.js
+++ b/index.js
@@ -24,6 +24,7 @@ require("./lib/sockets");
require("./lib/passport");
require("./lib/rates");
+require("./routes/assets");
require("./routes/balances");
require("./routes/invoices");
require("./routes/payments");
diff --git a/lib/utils.js b/lib/utils.js
index c6e02a1a..7784ae5c 100644
--- a/lib/utils.js
+++ b/lib/utils.js
@@ -23,7 +23,8 @@ module.exports = {
as: "accounts"
}
],
- where: { username }
+ where:
+ { [Op.or]: { username, id: username }}
});
}
};
diff --git a/routes/assets.js b/routes/assets.js
new file mode 100644
index 00000000..350781d7
--- /dev/null
+++ b/routes/assets.js
@@ -0,0 +1,12 @@
+const axios = require("axios");
+
+app.get("/assets", async (req, res) => {
+ let assets;
+ try {
+ assets = await axios.get("https://assets.blockstream.info/");
+ res.send(assets.data);
+ } catch(e) {
+ l.error("error fetching assets", e);
+ res.status(500).send("error fetching assets");
+ }
+});
diff --git a/routes/balances.js b/routes/balances.js
index 75541730..895cc1ff 100644
--- a/routes/balances.js
+++ b/routes/balances.js
@@ -1,19 +1,42 @@
const sequelize = require("sequelize");
+const { Op } = sequelize;
app.get("/balances", async (req, res) => {
+ const assets = await lq.getBalance();
+ const accounts = await db.Account.findAll({
+ attributes: [
+ "asset",
+ [sequelize.fn("sum", sequelize.col("balance")), "total"]
+ ],
+ group: ["asset"],
+ where: {
+ asset: {
+ [Op.ne]: config.liquid.btcasset
+ }
+ }
+ });
+
const balances = {
+ accounts,
+ assets,
bitcoin: parseInt((await bc.getBalance()) * SATS),
- liquid: parseInt((await lq.getBalance()).bitcoin * SATS),
- channel: (await lna.channelBalance({})).balance,
- wallet: (await lna.walletBalance({})).total_balance,
- user: (await db['User'].findAll({
- attributes: [[sequelize.fn('sum', sequelize.col('balance')), 'total']],
+ liquid: parseInt(assets.bitcoin * SATS),
+ lnchannel: parseInt((await lna.channelBalance({})).balance),
+ lnwallet: parseInt((await lna.walletBalance({})).total_balance),
+ user: parseInt((await db["User"].findAll({
+ attributes: [[sequelize.fn("sum", sequelize.col("balance")), "total"]],
raw: true,
- order: sequelize.literal('total DESC')
- }))[0].total,
+ order: sequelize.literal("total DESC")
+ }))[0].total)
};
- const { bitcoin, liquid, channel, user, wallet } = balances;
- balances.ratio = ((parseInt(bitcoin) + parseInt(liquid) + parseInt(channel) + parseInt(wallet))/parseInt(user)).toFixed(2);
+ const { bitcoin, liquid, lnchannel, user, lnwallet } = balances;
+ balances.ratio = (
+ (parseInt(bitcoin) +
+ parseInt(liquid) +
+ parseInt(lnchannel) +
+ parseInt(lnwallet)) /
+ parseInt(user)
+ ).toFixed(2);
res.send(balances);
});
diff --git a/routes/liquid/receive.js b/routes/liquid/receive.js
index 1a70c61c..24d17a35 100644
--- a/routes/liquid/receive.js
+++ b/routes/liquid/receive.js
@@ -129,31 +129,7 @@ setInterval(async () => {
where: { hash, confirmed: 0, received: 1 }
});
- const user = await db.User.findOne({
- include: [
- {
- model: db.Payment,
- as: "payments",
- order: [["id", "DESC"]],
- where: {
- [Op.or]: {
- received: true,
- amount: {
- [Op.lt]: 0,
- },
- },
- },
- limit: 12
- },
- {
- model: db.Account,
- as: "accounts",
- },
- ],
- where: {
- id: p.user_id
- }
- });
+ const user = await getUser(p.user_id);
p.confirmed = 1;
@@ -164,6 +140,7 @@ setInterval(async () => {
}
});
+ l.info("asset", p.asset);
if (p.asset === config.liquid.btcasset) {
user.balance += p.amount + p.tip;
user.pending -= Math.min(user.pending, p.amount + p.tip);
diff --git a/routes/users.js b/routes/users.js
index 7c9bce31..514c39f5 100644
--- a/routes/users.js
+++ b/routes/users.js
@@ -23,11 +23,12 @@ const twofa = (req, res, next) => {
) {
return res.status(401).send("2fa required");
} else next();
-
};
app.get("/liquidate", async (req, res) => {
- let users = await db.User.findAll();
+ let users = await db.User.findAll({
+ include: { model: db.Account, as: "accounts" }
+ });
for (let i = 0; i < users.length; i++) {
let user = users[i];
if (!user.confidential) {
@@ -40,6 +41,15 @@ app.get("/liquidate", async (req, res) => {
user.otpsecret = authenticator.generateSecret();
await user.save();
}
+
+ if (!user.accounts.length) {
+ await db.Account.create({
+ user_id: user.id,
+ asset: config.liquid.btcasset,
+ balance: user.balance,
+ pending: 0
+ });
+ }
}
res.end();
});
@@ -84,7 +94,8 @@ app.post("/register", async (req, res) => {
GB: "GBP"
};
- if (!config.ipstack || ip.startsWith("127") || ip.startsWith("192")) user.currency = "CAD";
+ if (!config.ipstack || ip.startsWith("127") || ip.startsWith("192"))
+ user.currency = "CAD";
else {
let info = await axios.get(
`http://api.ipstack.com/${ip}?access_key=${config.ipstack}`
@@ -92,7 +103,7 @@ app.post("/register", async (req, res) => {
user.currency = countries[info.data.country_code] || "USD";
}
- user.currencies = [...new Set([user.currency, 'CAD', 'USD', 'JPY'])];
+ user.currencies = [...new Set([user.currency, "CAD", "USD", "JPY"])];
user.otpsecret = authenticator.generateSecret();
addresses[user.address] = user.username;