exchangemarket/src/app.js
2022-10-07 23:02:59 +05:30

147 lines
4.3 KiB
JavaScript

'use strict';
const express = require('express');
//const cookieParser = require("cookie-parser");
//const sessions = require('express-session');
const Request = require('./request');
module.exports = function App(secret, DB) {
if (!(this instanceof App))
return new App(secret, DB);
var server = null;
const app = express();
//session middleware
/*app.use(sessions({
secret: secret,
saveUninitialized: true,
resave: false,
name: "session"
}));*/
// parsing the incoming data
app.use(express.json());
app.use(express.urlencoded({
extended: true
}));
//serving public file
app.use(express.static(PUBLIC_DIR));
// cookie parser middleware
//app.use(cookieParser());
/* Decentralising - Users will load from user-end files and request via APIs only
//Initital page loading
app.get('/', (req, res) => res.sendFile('home.html', {
root: PUBLIC_DIR
}));
*/
app.use(function(req, res, next) {
res.setHeader('Access-Control-Allow-Origin', "*");
// Request methods you wish to allow
res.setHeader('Access-Control-Allow-Methods', 'GET, POST');
// Request headers you wish to allow
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
// Pass to next layer of middleware
next();
})
//get code for login
app.get('/get-login-code', Request.GetLoginCode);
//login request
app.post('/login', Request.Login);
//logout request
app.post('/logout', Request.Logout);
//place sell or buy order
app.post('/buy', Request.PlaceBuyOrder);
app.post('/sell', Request.PlaceSellOrder);
//cancel sell or buy order
app.post('/cancel', Request.CancelOrder);
//transfer amount to another user
app.post('/transfer-token', Request.TransferToken);
//list all orders and trades
app.get('/list-sellorders', Request.ListSellOrders);
app.get('/list-buyorders', Request.ListBuyOrders);
app.get('/list-trades', Request.ListTradeTransactions);
//get rates, balance and tx
app.get('/get-rates', Request.GetRates);
app.get('/rate-history', Request.GetRateHistory);
app.get('/get-balance', Request.GetBalance);
app.get('/get-transaction', Request.GetTransaction);
//get account details
app.post('/account', Request.Account);
//withdraw and deposit request
app.post('/deposit-flo', Request.DepositFLO);
app.post('/withdraw-flo', Request.WithdrawFLO);
app.post('/deposit-token', Request.DepositToken);
app.post('/withdraw-token', Request.WithdrawToken);
app.post('/get-transact', Request.GetUserTransacts);
//convert from or to coin
app.post('/convert-to', Request.ConvertTo);
app.post('/convert-from', Request.ConvertFrom);
//Manage user tags (Access to trusted IDs only)
app.post('/add-tag', Request.AddUserTag);
app.post('/remove-tag', Request.RemoveUserTag);
app.post('/add-distributor', Request.AddDistributor);
app.post('/remove-distributor', Request.RemoveDistributor);
Request.DB = DB;
Request.secret = secret;
//Properties
let self = this;
//return server, express-app
Object.defineProperty(self, "server", {
get: () => server
});
Object.defineProperty(self, "express", {
get: () => app
});
//set trustedID for subAdmin requests
Object.defineProperty(self, "trustedIDs", {
set: (ids) => Request.trustedIDs = ids
});
Object.defineProperty(self, "assetList", {
set: (assets) => Request.assetList = assets
});
Object.defineProperty(self, "chests", {
set: (chests) => Request.chests = chests
});
Object.defineProperty(self, "collectAndCall", {
set: (fn) => Request.collectAndCall = fn
});
//Start (or) Stop servers
self.start = (port) => new Promise(resolve => {
server = app.listen(port, () => {
resolve(`Server Running at port ${port}`);
});
});
self.stop = () => new Promise(resolve => {
server.close(() => {
server = null;
resolve('Server stopped');
});
});
//(Node is not master) Pause serving the clients
self.pause = () => Request.pause();
//(Node is master) Resume serving the clients
self.resume = () => Request.resume();
}