| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- 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,
- });
- }
- }
- }
|