trading.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. import express from 'express';
  2. import { startSyncMarketsData, getIorInfo } from "../libs/syncData.js";
  3. import { getLineInfo } from "../libs/pinnacleClient.js";
  4. import Logs from "../libs/logs.js";
  5. import {
  6. createLimitOrder,
  7. getBalanceAllowance,
  8. getMultipleOrderBooks,
  9. getOpenOrders,
  10. getOrder,
  11. getOrderBook,
  12. transferWallet,
  13. } from "../libs/polymarketClient.js";
  14. const router = express.Router();
  15. router.get('/balance/:wallet', (req, res) => {
  16. const { wallet } = req.params;
  17. if (wallet !== "both" && wallet !== "proxy" && wallet !== "deposit") {
  18. return res.badRequest('invalid wallet');
  19. }
  20. getBalanceAllowance({ wallet })
  21. .then(data => res.sendSuccess(data))
  22. .catch(error => {
  23. Logs.out('get balance allowance error', error.message);
  24. Logs.errDev(error);
  25. return res.sendError(error);
  26. });
  27. });
  28. router.post('/wallet/transfer', (req, res) => {
  29. const { amount, from, to } = req.body;
  30. if (!amount) {
  31. return res.badRequest('amount is required');
  32. }
  33. if (!from) {
  34. return res.badRequest('from is required');
  35. }
  36. if (!to) {
  37. return res.badRequest('to is required');
  38. }
  39. transferWallet({ amount, from, to })
  40. .then(data => res.sendSuccess(data))
  41. .catch(error => {
  42. Logs.out('transfer wallet error', error.message);
  43. Logs.errDev(error);
  44. return res.sendError(error);
  45. });
  46. });
  47. router.get('/get_ior_info/:id/:ior', (req, res) => {
  48. const { id, ior } = req.params;
  49. getIorInfo(ior, id)
  50. .then(data => res.sendSuccess(data))
  51. .catch(error => {
  52. Logs.out('get ior info error', error.message);
  53. Logs.errDev(error);
  54. return res.sendError(error);
  55. });
  56. });
  57. router.get('/orderbook/:tokenId', (req, res) => {
  58. getOrderBook(req.params.tokenId)
  59. .then(data => res.sendSuccess(data))
  60. .catch(error => {
  61. Logs.out('get order book error', error.message);
  62. Logs.errDev(error);
  63. return res.sendError(error);
  64. });
  65. });
  66. router.post('/get_line_info', (req, res) => {
  67. getLineInfo(req.body)
  68. .then(data => res.sendSuccess(data))
  69. .catch(error => {
  70. Logs.out('get line info error', error.message);
  71. Logs.errDev(error);
  72. return res.sendError(error);
  73. });
  74. });
  75. router.post('/orderbooks', (req, res) => {
  76. const { tokenIds } = req.body;
  77. if (!Array.isArray(tokenIds) || tokenIds.length === 0) {
  78. return res.badRequest('tokenIds is required');
  79. }
  80. getMultipleOrderBooks(tokenIds)
  81. .then(data => res.sendSuccess(data))
  82. .catch(error => {
  83. Logs.out('get multiple order books error', error.message);
  84. Logs.errDev(error);
  85. return res.sendError(error);
  86. });
  87. });
  88. router.post('/orders/limit', (req, res) => {
  89. const {
  90. tokenID,
  91. tokenId,
  92. price,
  93. size,
  94. side,
  95. tickSize = "0.01",
  96. negRisk = false,
  97. orderType,
  98. // postOnly = false,
  99. expiration,
  100. deferExec = false,
  101. } = req.body;
  102. createLimitOrder({
  103. tokenID: tokenID || tokenId,
  104. price,
  105. size,
  106. side,
  107. tickSize,
  108. negRisk,
  109. orderType,
  110. // postOnly,
  111. expiration,
  112. deferExec,
  113. })
  114. .then(data => res.sendSuccess(data))
  115. .catch(error => {
  116. Logs.out('create limit order error', error.message);
  117. Logs.errDev(error);
  118. return res.sendError(error);
  119. });
  120. });
  121. router.get('/orders/open', (req, res) => {
  122. const {
  123. id,
  124. market,
  125. asset_id,
  126. assetId,
  127. only_first_page,
  128. next_cursor,
  129. } = req.query;
  130. getOpenOrders({
  131. id,
  132. market,
  133. asset_id: asset_id || assetId,
  134. only_first_page: only_first_page === true || only_first_page === 'true',
  135. next_cursor,
  136. })
  137. .then(data => res.sendSuccess(data))
  138. .catch(error => {
  139. Logs.out('get open orders error', error.message);
  140. Logs.errDev(error);
  141. return res.sendError(error);
  142. });
  143. });
  144. router.get('/orders/:orderID', (req, res) => {
  145. getOrder(req.params.orderID)
  146. .then(data => res.sendSuccess(data))
  147. .catch(error => {
  148. Logs.out('get order error', error.message);
  149. Logs.errDev(error);
  150. return res.sendError(error);
  151. });
  152. });
  153. startSyncMarketsData();
  154. export default router;