aboutsummaryrefslogtreecommitdiffstats
path: root/routes/swaps.js
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2022-09-06 09:20:25 -0700
committerAdam Soltys <[email protected]>2022-09-06 09:20:25 -0700
commitc2464b2407ee23134732fd67586758dbfe18f9b5 (patch)
tree3e2d9f009bb325a9a7c4304ea02f6e64dda85bd1 /routes/swaps.js
parent8a080ef9a198799e7ee31cf81f92afd5495e4074 (diff)
downloadcoinos-server-c2464b2407ee23134732fd67586758dbfe18f9b5.tar.gz
coinos-server-c2464b2407ee23134732fd67586758dbfe18f9b5.zip
prettier
Diffstat (limited to 'routes/swaps.js')
-rw-r--r--routes/swaps.js417
1 files changed, 205 insertions, 212 deletions
diff --git a/routes/swaps.js b/routes/swaps.js
index 31387bec..169c2b8f 100644
--- a/routes/swaps.js
+++ b/routes/swaps.js
@@ -3,11 +3,11 @@ import app from "$app";
import config from "$config";
import { auth, optionalAuth } from "$lib/passport";
import store from "$lib/store";
-import axios from 'axios';
-import crypto from 'crypto';
-import fs from 'fs';
-import getAccount from '../lib/account';
-import { Op, col } from '@sequelize/core';
+import axios from "axios";
+import crypto from "crypto";
+import fs from "fs";
+import getAccount from "../lib/account";
+import { Op, col } from "@sequelize/core";
const shallow = a => {
let b = {};
@@ -335,131 +335,85 @@ const cancel = async (user, id) => {
});
};
-app.delete(
- "/order/:id",
- auth,
- async (req, res) => {
- const { id } = req.params;
- const { user } = req;
+app.delete("/order/:id", auth, async (req, res) => {
+ const { id } = req.params;
+ const { user } = req;
- await cancel(user, id);
- res.send({});
- })
+ await cancel(user, id);
+ res.send({});
+});
-app.post(
- "/orders",
- auth,
- async (req, res) => {
- return res.code(500).send("Trading temporarily disabled");
- const { user } = req;
- try {
- await swap(user, req.body);
- res.send({});
- } catch (e) {
- err(req.user.username, e.message);
- res.code(500).send(e.message);
- }
- })
+app.post("/orders", auth, async (req, res) => {
+ return res.code(500).send("Trading temporarily disabled");
+ const { user } = req;
+ try {
+ await swap(user, req.body);
+ res.send({});
+ } catch (e) {
+ err(req.user.username, e.message);
+ res.code(500).send(e.message);
+ }
+});
-app.get(
- "/orders",
- optionalAuth,
- async (req, res) => {
- try {
- let orders = await db.Order.findAll({
- attributes: {
- include: [
- [col("acc1.asset"), "a1"],
- [col("acc2.asset"), "a2"]
- ]
- },
+app.get("/orders", optionalAuth, async (req, res) => {
+ try {
+ let orders = await db.Order.findAll({
+ attributes: {
include: [
- {
- model: db.Account,
- as: "acc1",
- attributes: []
- },
- {
- model: db.Account,
- as: "acc2",
- attributes: []
- }
+ [col("acc1.asset"), "a1"],
+ [col("acc2.asset"), "a2"]
]
- });
+ },
+ include: [
+ {
+ model: db.Account,
+ as: "acc1",
+ attributes: []
+ },
+ {
+ model: db.Account,
+ as: "acc2",
+ attributes: []
+ }
+ ]
+ });
- res.send(
- orders.map(order => {
- if (order.user_id !== req.user.id) order.user_id = null;
- return order;
- })
- );
- } catch (e) {
- res.code(500).send(e.message);
- }
- })
+ res.send(
+ orders.map(order => {
+ if (order.user_id !== req.user.id) order.user_id = null;
+ return order;
+ })
+ );
+ } catch (e) {
+ res.code(500).send(e.message);
+ }
+});
if (config.maker) {
- debug('setup maker account...')
- config.maker.map(({ amount, c1, c2, currency, askMultiplier, bidMultiplier }) => {
- setInterval(async () => {
- if (!rates) return;
-
- const user = await db.User.findOne({
- where: {
- username: "maker"
- }
- });
-
- if (!user) {
- debug('maker user not defined in database')
- } else {
- debug('maker: ' + JSON.stringify(user))
- await db.transaction(async transaction => {
- let order = await db.Order.findOne(
- {
- where: {
- user_id: user.id,
- "$acc1.asset$": c1,
- "$acc2.asset$": c2,
- accepted: false
- },
- include: [
- {
- model: db.Account,
- as: "acc1"
- },
- {
- model: db.Account,
- as: "acc2"
- }
- ]
- },
- { transaction }
- );
+ debug("setup maker account...");
+ config.maker.map(
+ ({ amount, c1, c2, currency, askMultiplier, bidMultiplier }) => {
+ setInterval(async () => {
+ if (!rates) return;
- let params = {
- a1: c1,
- a2: c2,
- v1: amount * SATS,
- v2: Math.round(
- amount *
- SATS *
- (((app.get("ask") * store.rates[currency]) /
- store.rates["USD"]) *
- askMultiplier)
- )
- };
+ const user = await db.User.findOne({
+ where: {
+ username: "maker"
+ }
+ });
- if (order) {
- let bestBid = await db.Order.findOne(
+ if (!user) {
+ debug("maker user not defined in database");
+ } else {
+ debug("maker: " + JSON.stringify(user));
+ await db.transaction(async transaction => {
+ let order = await db.Order.findOne(
{
where: {
- "$acc1.asset$": c2,
- "$acc2.asset$": c1,
- accepted: false,
- id: {
- [Op.ne]: order.id
- }
+ user_id: user.id,
+ "$acc1.asset$": c1,
+ "$acc2.asset$": c2,
+ accepted: false
},
include: [
{
@@ -470,80 +424,80 @@ if (config.maker) {
model: db.Account,
as: "acc2"
}
- ],
- order: [["rate", "DESC"]],
- limit: 1
+ ]
},
{ transaction }
);
- if (
- !bestBid ||
- (params.v2 / params.v1 > bestBid.rate &&
- order.acc2.balance >= params.v2)
- ) {
- order.v1 = params.v1;
- order.v2 = params.v2;
- await order.save();
- order = order.get({ plain: true });
- order.a1 = params.a1;
- order.a2 = params.a2;
- order.rate = order.v2 / order.v1;
- broadcast("order", shallow(order));
- }
- } else {
- try {
- await swap(user, params);
- } catch (e) {
- warn("Failed to make ask", e.message);
- }
- }
+ let params = {
+ a1: c1,
+ a2: c2,
+ v1: amount * SATS,
+ v2: Math.round(
+ amount *
+ SATS *
+ (((app.get("ask") * store.rates[currency]) /
+ store.rates["USD"]) *
+ askMultiplier)
+ )
+ };
- order = await db.Order.findOne(
- {
- where: {
- user_id: user.id,
- "$acc1.asset$": c2,
- "$acc2.asset$": c1,
- accepted: false
- },
- include: [
+ if (order) {
+ let bestBid = await db.Order.findOne(
{
- model: db.Account,
- as: "acc1"
+ where: {
+ "$acc1.asset$": c2,
+ "$acc2.asset$": c1,
+ accepted: false,
+ id: {
+ [Op.ne]: order.id
+ }
+ },
+ include: [
+ {
+ model: db.Account,
+ as: "acc1"
+ },
+ {
+ model: db.Account,
+ as: "acc2"
+ }
+ ],
+ order: [["rate", "DESC"]],
+ limit: 1
},
- {
- model: db.Account,
- as: "acc2"
- }
- ]
- },
- { transaction }
- );
+ { transaction }
+ );
+ if (
+ !bestBid ||
+ (params.v2 / params.v1 > bestBid.rate &&
+ order.acc2.balance >= params.v2)
+ ) {
+ order.v1 = params.v1;
+ order.v2 = params.v2;
+ await order.save();
+ order = order.get({ plain: true });
+ order.a1 = params.a1;
+ order.a2 = params.a2;
+ order.rate = order.v2 / order.v1;
- params = {
- a1: c2,
- a2: c1,
- v1: Math.round(
- amount *
- SATS *
- ((app.get("bid") * store.rates[currency]) /
- store.rates["USD"]) *
- bidMultiplier
- ),
- v2: amount * SATS
- };
+ broadcast("order", shallow(order));
+ }
+ } else {
+ try {
+ await swap(user, params);
+ } catch (e) {
+ warn("Failed to make ask", e.message);
+ }
+ }
- if (order) {
- let bestAsk = await db.Order.findOne(
+ order = await db.Order.findOne(
{
where: {
- "$acc1.asset$": c1,
- "$acc2.asset$": c2,
- accepted: false,
- id: {
- [Op.ne]: order.id
- }
+ user_id: user.id,
+ "$acc1.asset$": c2,
+ "$acc2.asset$": c1,
+ accepted: false
},
include: [
{
@@ -554,41 +508,80 @@ if (config.maker) {
model: db.Account,
as: "acc2"
}
- ],
- order: [["rate", "ASC"]],
- limit: 1
+ ]
},
- transaction
+ { transaction }
);
- if (bestAsk)
- if (
- !bestAsk ||
- (params.v1 / params.v2 < bestAsk.rate &&
- order.acc1.balance >= params.v1)
- ) {
- order.v1 = params.v1;
- order.v2 = params.v2;
- await order.save();
- order = order.get({ plain: true });
- order.a1 = params.a1;
- order.a2 = params.a2;
- order.rate = order.v2 / order.v1;
+ params = {
+ a1: c2,
+ a2: c1,
+ v1: Math.round(
+ amount *
+ SATS *
+ ((app.get("bid") * store.rates[currency]) /
+ store.rates["USD"]) *
+ bidMultiplier
+ ),
+ v2: amount * SATS
+ };
- broadcast("order", shallow(order));
- } else {
- broadcast("removeOrder", order.id);
- await order.destroy({ transaction });
+ if (order) {
+ let bestAsk = await db.Order.findOne(
+ {
+ where: {
+ "$acc1.asset$": c1,
+ "$acc2.asset$": c2,
+ accepted: false,
+ id: {
+ [Op.ne]: order.id
+ }
+ },
+ include: [
+ {
+ model: db.Account,
+ as: "acc1"
+ },
+ {
+ model: db.Account,
+ as: "acc2"
+ }
+ ],
+ order: [["rate", "ASC"]],
+ limit: 1
+ },
+ transaction
+ );
+
+ if (bestAsk)
+ if (
+ !bestAsk ||
+ (params.v1 / params.v2 < bestAsk.rate &&
+ order.acc1.balance >= params.v1)
+ ) {
+ order.v1 = params.v1;
+ order.v2 = params.v2;
+ await order.save();
+ order = order.get({ plain: true });
+ order.a1 = params.a1;
+ order.a2 = params.a2;
+ order.rate = order.v2 / order.v1;
+
+ broadcast("order", shallow(order));
+ } else {
+ broadcast("removeOrder", order.id);
+ await order.destroy({ transaction });
+ }
+ } else {
+ try {
+ await swap(user, params);
+ } catch (e) {
+ warn("Failed to make bid", e.message);
}
- } else {
- try {
- await swap(user, params);
- } catch (e) {
- warn("Failed to make bid", e.message);
}
- }
- });
- }
- }, 5000);
- });
+ });
+ }
+ }, 5000);
+ }
+ );
}