main.js 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import 'dotenv/config';
  2. import express from 'express';
  3. import Logs from "./libs/logs.js";
  4. import requireInternalToken from './middleware/requireInternalToken.js';
  5. import requirePinnacleProxyAuth from './middleware/requirePinnacleProxyAuth.js';
  6. import pinnacleProxyRoutes from './routes/pinnacleProxy.js';
  7. import tradingRoutes from './routes/trading.js';
  8. import { startSyncMarketsData } from "./libs/syncData.js";
  9. const app = express();
  10. app.use((req, res, next) => {
  11. const origin = req.headers.origin;
  12. res.header('Access-Control-Allow-Origin', origin || '*');
  13. res.header('Access-Control-Allow-Credentials', 'true');
  14. res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept, Authorization, X-Internal-Token, X-Api-User, X-Api-Timestamp, X-Api-Nonce, X-Api-Signature');
  15. res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
  16. res.header('Vary', 'Origin');
  17. if (req.method === 'OPTIONS') {
  18. return res.sendStatus(200);
  19. }
  20. next();
  21. });
  22. app.use(express.json({ limit: '10mb' }));
  23. app.use((req, res, next) => {
  24. res.badRequest = (data, msg) => {
  25. if (!msg && typeof data === 'string') {
  26. msg = data;
  27. data = undefined;
  28. }
  29. return res.status(400).json({ statusCode: 400, code: -1, message: msg ?? 'Bad Request', data });
  30. }
  31. res.serverError = (data, msg) => {
  32. if (!msg && typeof data === 'string') {
  33. msg = data;
  34. data = undefined;
  35. }
  36. return res.status(500).json({ statusCode: 500, code: -1, message: msg ?? 'Internal Server Error', data });
  37. }
  38. res.unauthorized = (data, msg) => {
  39. if (!msg && typeof data === 'string') {
  40. msg = data;
  41. data = undefined;
  42. }
  43. return res.status(401).json({ statusCode: 401, code: -1, message: msg ?? 'Unauthorized', data });
  44. }
  45. res.sendSuccess = (data, msg) => {
  46. const response = { statusCode: 200, code: 0, message: msg ?? 'OK' }
  47. if (data !== undefined) {
  48. response.data = data;
  49. }
  50. return res.status(200).json(response);
  51. }
  52. res.sendError = (err) => {
  53. if (err.cause === 400 || err.status === 400) {
  54. return res.badRequest(err.data, err.message);
  55. }
  56. return res.serverError(err.data, err.message);
  57. }
  58. next();
  59. });
  60. app.get('/health', (req, res) => {
  61. res.sendSuccess({ service: 'polymarket', status: 'ok' });
  62. });
  63. app.use('/api/pinnacle', requirePinnacleProxyAuth, pinnacleProxyRoutes);
  64. app.use('/api/trading', requireInternalToken, tradingRoutes);
  65. // 启动服务
  66. const PORT = process.env.PORT || 9057;
  67. app.listen(PORT, () => Logs.out(`Pinnacle service running on port ${PORT}`));
  68. startSyncMarketsData();