trading.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  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.errDev('get balance allowance error', error);
  24. return res.sendError(error);
  25. });
  26. });
  27. router.post('/wallet/transfer', (req, res) => {
  28. const { amount, from, to } = req.body;
  29. if (!amount) {
  30. return res.badRequest('amount is required');
  31. }
  32. if (!from) {
  33. return res.badRequest('from is required');
  34. }
  35. if (!to) {
  36. return res.badRequest('to is required');
  37. }
  38. transferWallet({ amount, from, to })
  39. .then(data => res.sendSuccess(data))
  40. .catch(error => {
  41. Logs.errDev('transfer wallet error', error);
  42. return res.sendError(error);
  43. });
  44. });
  45. router.get('/get_ior_info/:id/:ior', (req, res) => {
  46. const { id, ior } = req.params;
  47. getIorInfo(ior, id)
  48. .then(data => res.sendSuccess(data))
  49. .catch(error => {
  50. Logs.errDev('get ior info error', error);
  51. return res.sendError(error);
  52. });
  53. });
  54. router.get('/orderbook/:tokenId', (req, res) => {
  55. getOrderBook(req.params.tokenId)
  56. .then(data => res.sendSuccess(data))
  57. .catch(error => {
  58. Logs.errDev('get order book error', error);
  59. return res.sendError(error);
  60. });
  61. });
  62. router.post('/get_line_info', (req, res) => {
  63. getLineInfo(req.body)
  64. .then(data => res.sendSuccess(data))
  65. .catch(error => {
  66. Logs.errDev('get line info error', error);
  67. return res.sendError(error);
  68. });
  69. });
  70. router.post('/orderbooks', (req, res) => {
  71. const { tokenIds } = req.body;
  72. if (!Array.isArray(tokenIds) || tokenIds.length === 0) {
  73. return res.badRequest('tokenIds is required');
  74. }
  75. getMultipleOrderBooks(tokenIds)
  76. .then(data => res.sendSuccess(data))
  77. .catch(error => {
  78. Logs.errDev('get multiple order books error', error);
  79. return res.sendError(error);
  80. });
  81. });
  82. router.post('/orders/limit', (req, res) => {
  83. const {
  84. tokenID,
  85. tokenId,
  86. price,
  87. size,
  88. side,
  89. tickSize = "0.01",
  90. negRisk = false,
  91. orderType,
  92. // postOnly = false,
  93. expiration,
  94. deferExec = false,
  95. } = req.body;
  96. createLimitOrder({
  97. tokenID: tokenID || tokenId,
  98. price,
  99. size,
  100. side,
  101. tickSize,
  102. negRisk,
  103. orderType,
  104. // postOnly,
  105. expiration,
  106. deferExec,
  107. })
  108. .then(data => res.sendSuccess(data))
  109. .catch(error => {
  110. Logs.errDev('create limit order error', error);
  111. return res.sendError(error);
  112. });
  113. });
  114. router.get('/orders/open', (req, res) => {
  115. const {
  116. id,
  117. market,
  118. asset_id,
  119. assetId,
  120. only_first_page,
  121. next_cursor,
  122. } = req.query;
  123. getOpenOrders({
  124. id,
  125. market,
  126. asset_id: asset_id || assetId,
  127. only_first_page: only_first_page === true || only_first_page === 'true',
  128. next_cursor,
  129. })
  130. .then(data => res.sendSuccess(data))
  131. .catch(error => {
  132. Logs.errDev('get open orders error', error);
  133. return res.sendError(error);
  134. });
  135. });
  136. router.get('/orders/:orderID', (req, res) => {
  137. getOrder(req.params.orderID)
  138. .then(data => res.sendSuccess(data))
  139. .catch(error => {
  140. Logs.errDev('get order error', error);
  141. return res.sendError(error);
  142. });
  143. });
  144. startSyncMarketsData();
  145. export default router;