import axios from "axios"; import { HttpsProxyAgent } from "https-proxy-agent"; import WebSocketClient from "./webSocketClient.js"; import polymarketSdk from "./polymarketSdk.js"; export const createClobClient = polymarketSdk.createClobClient; export const getSoccerSports = polymarketSdk.getSoccerSports; export const getEvents = polymarketSdk.getEvents; export const getOrderBook = polymarketSdk.getOrderBook; export const getMultipleOrderBooks = polymarketSdk.getMultipleOrderBooks; export const getBalanceAllowance = polymarketSdk.getBalanceAllowance; export const transferWallet = polymarketSdk.transferWallet; export const createLimitOrder = polymarketSdk.createLimitOrder; export const getOrder = polymarketSdk.getOrder; export const getOpenOrders = polymarketSdk.getOpenOrders; const axiosDefaultOptions = { baseURL: "", url: "", method: "GET", headers: {}, params: {}, data: {}, timeout: 10000, }; /** * 请求平台数据 * @param {*} options * @returns {Promise} */ export const platformRequest = async (options) => { const { url } = options; if (!url) { throw new Error("url is required"); } const internalToken = process.env.PPAI_INTERNAL_API_TOKEN; const mergedOptions = { ...axiosDefaultOptions, ...options, baseURL: "http://127.0.0.1:9020", headers: { ...axiosDefaultOptions.headers, ...options.headers, ...(internalToken ? { Authorization: `Bearer ${internalToken}` } : {}), }, httpAgent: null, httpsAgent: null, proxy: false, }; return axios(mergedOptions).then(res => res.data); } /** * 请求平台 POST 数据 * @param {string} url * @param {Object} data * @returns {Promise} */ export const platformPost = async (url, data) => { return platformRequest({ url, method: "POST", headers: { "Content-Type": "application/json", }, data, }); } /** * 请求平台 GET 数据 * @param {string} url * @param {Object} params * @returns {Promise} */ export const platformGet = async (url, params) => { return platformRequest({ url, method: "GET", params }); } /** * 市场 WebSocket 客户端 */ export class MarketWsClient extends WebSocketClient { #assetIds = []; constructor() { let agent; const proxy = process.env.NODE_HTTP_PROXY; if (proxy) { agent = new HttpsProxyAgent(proxy); } super("wss://ws-subscriptions-clob.polymarket.com/ws/market", { agent }); } subscribeToTokensIds(assetIds) { this.#assetIds = [...new Set([...this.#assetIds, ...assetIds])]; if (this.wsClient?.readyState === 1) { this.send({ operation: "subscribe", assets_ids: assetIds, }); } } unsubscribeToTokensIds(assetIds) { const assetIdsSet = new Set(assetIds); this.#assetIds = this.#assetIds.filter(id => !assetIdsSet.has(id)); if (this.wsClient?.readyState === 1) { this.send({ operation: "unsubscribe", assets_ids: assetIds, }); } } }