pmxtjs 0.4.3 → 1.0.0-b2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +161 -0
- package/dist/esm/generated/src/apis/DefaultApi.d.ts +268 -0
- package/dist/esm/generated/src/apis/DefaultApi.js +501 -0
- package/dist/esm/generated/src/apis/index.d.ts +1 -0
- package/dist/esm/generated/src/apis/index.js +19 -0
- package/dist/esm/generated/src/index.d.ts +3 -0
- package/dist/esm/generated/src/index.js +21 -0
- package/dist/esm/generated/src/models/Balance.d.ts +50 -0
- package/dist/esm/generated/src/models/Balance.js +54 -0
- package/dist/esm/generated/src/models/BaseResponse.d.ts +39 -0
- package/dist/esm/generated/src/models/BaseResponse.js +51 -0
- package/dist/esm/generated/src/models/CancelOrderRequest.d.ts +32 -0
- package/dist/esm/generated/src/models/CancelOrderRequest.js +50 -0
- package/dist/esm/generated/src/models/CreateOrder200Response.d.ts +46 -0
- package/dist/esm/generated/src/models/CreateOrder200Response.js +54 -0
- package/dist/esm/generated/src/models/CreateOrderParams.d.ts +78 -0
- package/dist/esm/generated/src/models/CreateOrderParams.js +83 -0
- package/dist/esm/generated/src/models/CreateOrderRequest.d.ts +33 -0
- package/dist/esm/generated/src/models/CreateOrderRequest.js +51 -0
- package/dist/esm/generated/src/models/ErrorDetail.d.ts +32 -0
- package/dist/esm/generated/src/models/ErrorDetail.js +48 -0
- package/dist/esm/generated/src/models/ErrorResponse.d.ts +39 -0
- package/dist/esm/generated/src/models/ErrorResponse.js +51 -0
- package/dist/esm/generated/src/models/FetchBalance200Response.d.ts +46 -0
- package/dist/esm/generated/src/models/FetchBalance200Response.js +54 -0
- package/dist/esm/generated/src/models/FetchMarkets200Response.d.ts +46 -0
- package/dist/esm/generated/src/models/FetchMarkets200Response.js +54 -0
- package/dist/esm/generated/src/models/FetchMarketsRequest.d.ts +33 -0
- package/dist/esm/generated/src/models/FetchMarketsRequest.js +49 -0
- package/dist/esm/generated/src/models/FetchOHLCV200Response.d.ts +46 -0
- package/dist/esm/generated/src/models/FetchOHLCV200Response.js +54 -0
- package/dist/esm/generated/src/models/FetchOHLCVRequest.d.ts +33 -0
- package/dist/esm/generated/src/models/FetchOHLCVRequest.js +51 -0
- package/dist/esm/generated/src/models/FetchOHLCVRequestArgsInner.d.ts +22 -0
- package/dist/esm/generated/src/models/FetchOHLCVRequestArgsInner.js +56 -0
- package/dist/esm/generated/src/models/FetchOpenOrders200Response.d.ts +46 -0
- package/dist/esm/generated/src/models/FetchOpenOrders200Response.js +54 -0
- package/dist/esm/generated/src/models/FetchOpenOrdersRequest.d.ts +32 -0
- package/dist/esm/generated/src/models/FetchOpenOrdersRequest.js +48 -0
- package/dist/esm/generated/src/models/FetchOrderBook200Response.d.ts +46 -0
- package/dist/esm/generated/src/models/FetchOrderBook200Response.js +54 -0
- package/dist/esm/generated/src/models/FetchOrderBookRequest.d.ts +32 -0
- package/dist/esm/generated/src/models/FetchOrderBookRequest.js +50 -0
- package/dist/esm/generated/src/models/FetchPositions200Response.d.ts +46 -0
- package/dist/esm/generated/src/models/FetchPositions200Response.js +54 -0
- package/dist/esm/generated/src/models/FetchPositionsRequest.d.ts +32 -0
- package/dist/esm/generated/src/models/FetchPositionsRequest.js +48 -0
- package/dist/esm/generated/src/models/FetchTrades200Response.d.ts +46 -0
- package/dist/esm/generated/src/models/FetchTrades200Response.js +54 -0
- package/dist/esm/generated/src/models/FetchTradesRequest.d.ts +33 -0
- package/dist/esm/generated/src/models/FetchTradesRequest.js +51 -0
- package/dist/esm/generated/src/models/GetMarketsBySlugRequest.d.ts +32 -0
- package/dist/esm/generated/src/models/GetMarketsBySlugRequest.js +50 -0
- package/dist/esm/generated/src/models/HealthCheck200Response.d.ts +38 -0
- package/dist/esm/generated/src/models/HealthCheck200Response.js +50 -0
- package/dist/esm/generated/src/models/HistoryFilterParams.d.ts +62 -0
- package/dist/esm/generated/src/models/HistoryFilterParams.js +68 -0
- package/dist/esm/generated/src/models/MarketFilterParams.d.ts +68 -0
- package/dist/esm/generated/src/models/MarketFilterParams.js +71 -0
- package/dist/esm/generated/src/models/MarketOutcome.d.ts +44 -0
- package/dist/esm/generated/src/models/MarketOutcome.js +52 -0
- package/dist/esm/generated/src/models/Order.d.ts +108 -0
- package/dist/esm/generated/src/models/Order.js +83 -0
- package/dist/esm/generated/src/models/OrderBook.d.ts +39 -0
- package/dist/esm/generated/src/models/OrderBook.js +51 -0
- package/dist/esm/generated/src/models/OrderLevel.d.ts +38 -0
- package/dist/esm/generated/src/models/OrderLevel.js +50 -0
- package/dist/esm/generated/src/models/Position.d.ts +74 -0
- package/dist/esm/generated/src/models/Position.js +62 -0
- package/dist/esm/generated/src/models/PriceCandle.d.ts +62 -0
- package/dist/esm/generated/src/models/PriceCandle.js +58 -0
- package/dist/esm/generated/src/models/SearchMarketsRequest.d.ts +33 -0
- package/dist/esm/generated/src/models/SearchMarketsRequest.js +51 -0
- package/dist/esm/generated/src/models/SearchMarketsRequestArgsInner.d.ts +22 -0
- package/dist/esm/generated/src/models/SearchMarketsRequestArgsInner.js +56 -0
- package/dist/esm/generated/src/models/Trade.d.ts +65 -0
- package/dist/esm/generated/src/models/Trade.js +65 -0
- package/dist/esm/generated/src/models/UnifiedMarket.d.ts +63 -0
- package/dist/esm/generated/src/models/UnifiedMarket.js +59 -0
- package/dist/esm/generated/src/models/index.d.ts +36 -0
- package/dist/esm/generated/src/models/index.js +54 -0
- package/dist/esm/generated/src/runtime.d.ts +184 -0
- package/dist/esm/generated/src/runtime.js +349 -0
- package/dist/esm/index.d.ts +32 -0
- package/dist/esm/index.js +33 -0
- package/dist/esm/pmxt/client.d.ts +213 -0
- package/dist/esm/pmxt/client.js +518 -0
- package/dist/esm/pmxt/models.d.ts +218 -0
- package/dist/esm/pmxt/models.js +6 -0
- package/dist/esm/pmxt/server-manager.d.ts +29 -0
- package/dist/esm/pmxt/server-manager.js +68 -0
- package/dist/generated/src/apis/DefaultApi.d.ts +268 -0
- package/dist/generated/src/apis/DefaultApi.js +501 -0
- package/dist/generated/src/apis/index.d.ts +1 -0
- package/dist/generated/src/apis/index.js +19 -0
- package/dist/generated/src/index.d.ts +3 -0
- package/dist/generated/src/index.js +21 -0
- package/dist/generated/src/models/Balance.d.ts +50 -0
- package/dist/generated/src/models/Balance.js +54 -0
- package/dist/generated/src/models/BaseResponse.d.ts +39 -0
- package/dist/generated/src/models/BaseResponse.js +51 -0
- package/dist/generated/src/models/CancelOrderRequest.d.ts +32 -0
- package/dist/generated/src/models/CancelOrderRequest.js +50 -0
- package/dist/generated/src/models/CreateOrder200Response.d.ts +46 -0
- package/dist/generated/src/models/CreateOrder200Response.js +54 -0
- package/dist/generated/src/models/CreateOrderParams.d.ts +78 -0
- package/dist/generated/src/models/CreateOrderParams.js +83 -0
- package/dist/generated/src/models/CreateOrderRequest.d.ts +33 -0
- package/dist/generated/src/models/CreateOrderRequest.js +51 -0
- package/dist/generated/src/models/ErrorDetail.d.ts +32 -0
- package/dist/generated/src/models/ErrorDetail.js +48 -0
- package/dist/generated/src/models/ErrorResponse.d.ts +39 -0
- package/dist/generated/src/models/ErrorResponse.js +51 -0
- package/dist/generated/src/models/FetchBalance200Response.d.ts +46 -0
- package/dist/generated/src/models/FetchBalance200Response.js +54 -0
- package/dist/generated/src/models/FetchMarkets200Response.d.ts +46 -0
- package/dist/generated/src/models/FetchMarkets200Response.js +54 -0
- package/dist/generated/src/models/FetchMarketsRequest.d.ts +33 -0
- package/dist/generated/src/models/FetchMarketsRequest.js +49 -0
- package/dist/generated/src/models/FetchOHLCV200Response.d.ts +46 -0
- package/dist/generated/src/models/FetchOHLCV200Response.js +54 -0
- package/dist/generated/src/models/FetchOHLCVRequest.d.ts +33 -0
- package/dist/generated/src/models/FetchOHLCVRequest.js +51 -0
- package/dist/generated/src/models/FetchOHLCVRequestArgsInner.d.ts +22 -0
- package/dist/generated/src/models/FetchOHLCVRequestArgsInner.js +56 -0
- package/dist/generated/src/models/FetchOpenOrders200Response.d.ts +46 -0
- package/dist/generated/src/models/FetchOpenOrders200Response.js +54 -0
- package/dist/generated/src/models/FetchOpenOrdersRequest.d.ts +32 -0
- package/dist/generated/src/models/FetchOpenOrdersRequest.js +48 -0
- package/dist/generated/src/models/FetchOrderBook200Response.d.ts +46 -0
- package/dist/generated/src/models/FetchOrderBook200Response.js +54 -0
- package/dist/generated/src/models/FetchOrderBookRequest.d.ts +32 -0
- package/dist/generated/src/models/FetchOrderBookRequest.js +50 -0
- package/dist/generated/src/models/FetchPositions200Response.d.ts +46 -0
- package/dist/generated/src/models/FetchPositions200Response.js +54 -0
- package/dist/generated/src/models/FetchPositionsRequest.d.ts +32 -0
- package/dist/generated/src/models/FetchPositionsRequest.js +48 -0
- package/dist/generated/src/models/FetchTrades200Response.d.ts +46 -0
- package/dist/generated/src/models/FetchTrades200Response.js +54 -0
- package/dist/generated/src/models/FetchTradesRequest.d.ts +33 -0
- package/dist/generated/src/models/FetchTradesRequest.js +51 -0
- package/dist/generated/src/models/GetMarketsBySlugRequest.d.ts +32 -0
- package/dist/generated/src/models/GetMarketsBySlugRequest.js +50 -0
- package/dist/generated/src/models/HealthCheck200Response.d.ts +38 -0
- package/dist/generated/src/models/HealthCheck200Response.js +50 -0
- package/dist/generated/src/models/HistoryFilterParams.d.ts +62 -0
- package/dist/generated/src/models/HistoryFilterParams.js +68 -0
- package/dist/generated/src/models/MarketFilterParams.d.ts +68 -0
- package/dist/generated/src/models/MarketFilterParams.js +71 -0
- package/dist/generated/src/models/MarketOutcome.d.ts +44 -0
- package/dist/generated/src/models/MarketOutcome.js +52 -0
- package/dist/generated/src/models/Order.d.ts +108 -0
- package/dist/generated/src/models/Order.js +83 -0
- package/dist/generated/src/models/OrderBook.d.ts +39 -0
- package/dist/generated/src/models/OrderBook.js +51 -0
- package/dist/generated/src/models/OrderLevel.d.ts +38 -0
- package/dist/generated/src/models/OrderLevel.js +50 -0
- package/dist/generated/src/models/Position.d.ts +74 -0
- package/dist/generated/src/models/Position.js +62 -0
- package/dist/generated/src/models/PriceCandle.d.ts +62 -0
- package/dist/generated/src/models/PriceCandle.js +58 -0
- package/dist/generated/src/models/SearchMarketsRequest.d.ts +33 -0
- package/dist/generated/src/models/SearchMarketsRequest.js +51 -0
- package/dist/generated/src/models/SearchMarketsRequestArgsInner.d.ts +22 -0
- package/dist/generated/src/models/SearchMarketsRequestArgsInner.js +56 -0
- package/dist/generated/src/models/Trade.d.ts +65 -0
- package/dist/generated/src/models/Trade.js +65 -0
- package/dist/generated/src/models/UnifiedMarket.d.ts +63 -0
- package/dist/generated/src/models/UnifiedMarket.js +59 -0
- package/dist/generated/src/models/index.d.ts +36 -0
- package/dist/generated/src/models/index.js +54 -0
- package/dist/generated/src/runtime.d.ts +184 -0
- package/dist/generated/src/runtime.js +349 -0
- package/dist/index.d.ts +29 -10
- package/dist/index.js +31 -27
- package/dist/pmxt/client.d.ts +213 -0
- package/dist/pmxt/client.js +518 -0
- package/dist/pmxt/models.d.ts +218 -0
- package/dist/pmxt/models.js +6 -0
- package/dist/pmxt/server-manager.d.ts +29 -0
- package/dist/pmxt/server-manager.js +68 -0
- package/generated/.openapi-generator/FILES +84 -0
- package/generated/.openapi-generator/VERSION +1 -0
- package/generated/.openapi-generator-ignore +23 -0
- package/generated/docs/Balance.md +40 -0
- package/generated/docs/BaseResponse.md +36 -0
- package/generated/docs/CancelOrderRequest.md +34 -0
- package/generated/docs/CreateOrder200Response.md +38 -0
- package/generated/docs/CreateOrderParams.md +44 -0
- package/generated/docs/CreateOrderRequest.md +34 -0
- package/generated/docs/DefaultApi.md +896 -0
- package/generated/docs/ErrorDetail.md +34 -0
- package/generated/docs/ErrorResponse.md +36 -0
- package/generated/docs/FetchBalance200Response.md +38 -0
- package/generated/docs/FetchMarkets200Response.md +38 -0
- package/generated/docs/FetchMarketsRequest.md +34 -0
- package/generated/docs/FetchOHLCV200Response.md +38 -0
- package/generated/docs/FetchOHLCVRequest.md +34 -0
- package/generated/docs/FetchOHLCVRequestArgsInner.md +40 -0
- package/generated/docs/FetchOpenOrders200Response.md +38 -0
- package/generated/docs/FetchOpenOrdersRequest.md +34 -0
- package/generated/docs/FetchOrderBook200Response.md +38 -0
- package/generated/docs/FetchOrderBookRequest.md +34 -0
- package/generated/docs/FetchPositions200Response.md +38 -0
- package/generated/docs/FetchPositionsRequest.md +34 -0
- package/generated/docs/FetchTrades200Response.md +38 -0
- package/generated/docs/FetchTradesRequest.md +34 -0
- package/generated/docs/GetMarketsBySlugRequest.md +34 -0
- package/generated/docs/HealthCheck200Response.md +36 -0
- package/generated/docs/HistoryFilterParams.md +40 -0
- package/generated/docs/MarketFilterParams.md +40 -0
- package/generated/docs/MarketOutcome.md +38 -0
- package/generated/docs/Order.md +54 -0
- package/generated/docs/OrderBook.md +36 -0
- package/generated/docs/OrderLevel.md +36 -0
- package/generated/docs/Position.md +48 -0
- package/generated/docs/PriceCandle.md +44 -0
- package/generated/docs/SearchMarketsRequest.md +34 -0
- package/generated/docs/SearchMarketsRequestArgsInner.md +40 -0
- package/generated/docs/Trade.md +42 -0
- package/generated/docs/UnifiedMarket.md +44 -0
- package/generated/package.json +21 -0
- package/generated/src/apis/DefaultApi.ts +752 -0
- package/generated/src/apis/index.ts +3 -0
- package/generated/src/index.ts +5 -0
- package/generated/src/models/Balance.ts +89 -0
- package/generated/src/models/BaseResponse.ts +81 -0
- package/generated/src/models/CancelOrderRequest.ts +66 -0
- package/generated/src/models/CreateOrder200Response.ts +96 -0
- package/generated/src/models/CreateOrderParams.ts +130 -0
- package/generated/src/models/CreateOrderRequest.ts +74 -0
- package/generated/src/models/ErrorDetail.ts +65 -0
- package/generated/src/models/ErrorResponse.ts +81 -0
- package/generated/src/models/FetchBalance200Response.ts +96 -0
- package/generated/src/models/FetchMarkets200Response.ts +96 -0
- package/generated/src/models/FetchMarketsRequest.ts +73 -0
- package/generated/src/models/FetchOHLCV200Response.ts +96 -0
- package/generated/src/models/FetchOHLCVRequest.ts +74 -0
- package/generated/src/models/FetchOHLCVRequestArgsInner.ts +69 -0
- package/generated/src/models/FetchOpenOrders200Response.ts +96 -0
- package/generated/src/models/FetchOpenOrdersRequest.ts +65 -0
- package/generated/src/models/FetchOrderBook200Response.ts +96 -0
- package/generated/src/models/FetchOrderBookRequest.ts +66 -0
- package/generated/src/models/FetchPositions200Response.ts +96 -0
- package/generated/src/models/FetchPositionsRequest.ts +65 -0
- package/generated/src/models/FetchTrades200Response.ts +96 -0
- package/generated/src/models/FetchTradesRequest.ts +74 -0
- package/generated/src/models/GetMarketsBySlugRequest.ts +66 -0
- package/generated/src/models/HealthCheck200Response.ts +73 -0
- package/generated/src/models/HistoryFilterParams.ts +105 -0
- package/generated/src/models/MarketFilterParams.ts +111 -0
- package/generated/src/models/MarketOutcome.ts +81 -0
- package/generated/src/models/Order.ts +165 -0
- package/generated/src/models/OrderBook.ts +81 -0
- package/generated/src/models/OrderLevel.ts +73 -0
- package/generated/src/models/Position.ts +121 -0
- package/generated/src/models/PriceCandle.ts +105 -0
- package/generated/src/models/SearchMarketsRequest.ts +74 -0
- package/generated/src/models/SearchMarketsRequestArgsInner.ts +69 -0
- package/generated/src/models/Trade.ts +109 -0
- package/generated/src/models/UnifiedMarket.ts +113 -0
- package/generated/src/models/index.ts +38 -0
- package/generated/src/runtime.ts +432 -0
- package/generated/tsconfig.esm.json +7 -0
- package/generated/tsconfig.json +16 -0
- package/index.ts +40 -0
- package/package.json +39 -27
- package/pmxt/client.ts +628 -0
- package/pmxt/models.ts +292 -0
- package/pmxt/server-manager.ts +86 -0
- package/API_REFERENCE.md +0 -483
- package/LICENSE +0 -21
- package/dist/BaseExchange.d.ts +0 -74
- package/dist/BaseExchange.js +0 -72
- package/dist/exchanges/kalshi/auth.d.ts +0 -23
- package/dist/exchanges/kalshi/auth.js +0 -99
- package/dist/exchanges/kalshi/fetchMarkets.d.ts +0 -3
- package/dist/exchanges/kalshi/fetchMarkets.js +0 -110
- package/dist/exchanges/kalshi/fetchOHLCV.d.ts +0 -3
- package/dist/exchanges/kalshi/fetchOHLCV.js +0 -78
- package/dist/exchanges/kalshi/fetchOrderBook.d.ts +0 -2
- package/dist/exchanges/kalshi/fetchOrderBook.js +0 -32
- package/dist/exchanges/kalshi/fetchTrades.d.ts +0 -3
- package/dist/exchanges/kalshi/fetchTrades.js +0 -31
- package/dist/exchanges/kalshi/getMarketsBySlug.d.ts +0 -7
- package/dist/exchanges/kalshi/getMarketsBySlug.js +0 -62
- package/dist/exchanges/kalshi/index.d.ts +0 -21
- package/dist/exchanges/kalshi/index.js +0 -273
- package/dist/exchanges/kalshi/kalshi.test.d.ts +0 -1
- package/dist/exchanges/kalshi/kalshi.test.js +0 -309
- package/dist/exchanges/kalshi/searchMarkets.d.ts +0 -3
- package/dist/exchanges/kalshi/searchMarkets.js +0 -28
- package/dist/exchanges/kalshi/utils.d.ts +0 -5
- package/dist/exchanges/kalshi/utils.js +0 -85
- package/dist/exchanges/polymarket/auth.d.ts +0 -32
- package/dist/exchanges/polymarket/auth.js +0 -98
- package/dist/exchanges/polymarket/fetchMarkets.d.ts +0 -3
- package/dist/exchanges/polymarket/fetchMarkets.js +0 -75
- package/dist/exchanges/polymarket/fetchOHLCV.d.ts +0 -7
- package/dist/exchanges/polymarket/fetchOHLCV.js +0 -73
- package/dist/exchanges/polymarket/fetchOrderBook.d.ts +0 -6
- package/dist/exchanges/polymarket/fetchOrderBook.js +0 -38
- package/dist/exchanges/polymarket/fetchPositions.d.ts +0 -2
- package/dist/exchanges/polymarket/fetchPositions.js +0 -27
- package/dist/exchanges/polymarket/fetchTrades.d.ts +0 -11
- package/dist/exchanges/polymarket/fetchTrades.js +0 -59
- package/dist/exchanges/polymarket/getMarketsBySlug.d.ts +0 -7
- package/dist/exchanges/polymarket/getMarketsBySlug.js +0 -39
- package/dist/exchanges/polymarket/index.d.ts +0 -23
- package/dist/exchanges/polymarket/index.js +0 -216
- package/dist/exchanges/polymarket/searchMarkets.d.ts +0 -3
- package/dist/exchanges/polymarket/searchMarkets.js +0 -35
- package/dist/exchanges/polymarket/utils.d.ts +0 -7
- package/dist/exchanges/polymarket/utils.js +0 -95
- package/dist/types.d.ts +0 -85
- package/dist/types.js +0 -5
- package/readme.md +0 -133
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.KALSHI_SERIES_URL = exports.KALSHI_API_URL = void 0;
|
|
4
|
-
exports.mapMarketToUnified = mapMarketToUnified;
|
|
5
|
-
exports.mapIntervalToKalshi = mapIntervalToKalshi;
|
|
6
|
-
exports.KALSHI_API_URL = "https://api.elections.kalshi.com/trade-api/v2/events";
|
|
7
|
-
exports.KALSHI_SERIES_URL = "https://api.elections.kalshi.com/trade-api/v2/series";
|
|
8
|
-
function mapMarketToUnified(event, market) {
|
|
9
|
-
if (!market)
|
|
10
|
-
return null;
|
|
11
|
-
// Calculate price
|
|
12
|
-
let price = 0.5;
|
|
13
|
-
if (market.last_price) {
|
|
14
|
-
price = market.last_price / 100;
|
|
15
|
-
}
|
|
16
|
-
else if (market.yes_ask && market.yes_bid) {
|
|
17
|
-
price = (market.yes_ask + market.yes_bid) / 200;
|
|
18
|
-
}
|
|
19
|
-
else if (market.yes_ask) {
|
|
20
|
-
price = market.yes_ask / 100;
|
|
21
|
-
}
|
|
22
|
-
// Extract candidate name
|
|
23
|
-
let candidateName = null;
|
|
24
|
-
if (market.subtitle || market.yes_sub_title) {
|
|
25
|
-
candidateName = market.subtitle || market.yes_sub_title;
|
|
26
|
-
}
|
|
27
|
-
// Calculate 24h change
|
|
28
|
-
let priceChange = 0;
|
|
29
|
-
if (market.previous_price_dollars !== undefined && market.last_price_dollars !== undefined) {
|
|
30
|
-
priceChange = market.last_price_dollars - market.previous_price_dollars;
|
|
31
|
-
}
|
|
32
|
-
const outcomes = [
|
|
33
|
-
{
|
|
34
|
-
id: market.ticker, // The actual market ticker (primary tradeable)
|
|
35
|
-
label: candidateName || 'Yes',
|
|
36
|
-
price: price,
|
|
37
|
-
priceChange24h: priceChange
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
id: `${market.ticker}-NO`, // Virtual ID for the No outcome
|
|
41
|
-
label: candidateName ? `Not ${candidateName}` : 'No',
|
|
42
|
-
price: 1 - price,
|
|
43
|
-
priceChange24h: -priceChange // Inverse change for No? simplified assumption
|
|
44
|
-
}
|
|
45
|
-
];
|
|
46
|
-
// Combine category and tags into a unified tags array
|
|
47
|
-
const unifiedTags = [];
|
|
48
|
-
// Add category first (if it exists)
|
|
49
|
-
if (event.category) {
|
|
50
|
-
unifiedTags.push(event.category);
|
|
51
|
-
}
|
|
52
|
-
// Add tags (if they exist and avoid duplicates)
|
|
53
|
-
if (event.tags && Array.isArray(event.tags)) {
|
|
54
|
-
for (const tag of event.tags) {
|
|
55
|
-
if (!unifiedTags.includes(tag)) {
|
|
56
|
-
unifiedTags.push(tag);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
return {
|
|
61
|
-
id: market.ticker,
|
|
62
|
-
title: event.title,
|
|
63
|
-
description: market.rules_primary || market.rules_secondary || "",
|
|
64
|
-
outcomes: outcomes,
|
|
65
|
-
resolutionDate: new Date(market.expiration_time),
|
|
66
|
-
volume24h: Number(market.volume_24h || market.volume || 0),
|
|
67
|
-
volume: Number(market.volume || 0),
|
|
68
|
-
liquidity: Number(market.liquidity || 0), // Kalshi 'liquidity' might need specific mapping if available, otherwise 0 to avoid conflation
|
|
69
|
-
openInterest: Number(market.open_interest || 0),
|
|
70
|
-
url: `https://kalshi.com/events/${event.event_ticker}`,
|
|
71
|
-
category: event.category,
|
|
72
|
-
tags: unifiedTags
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
function mapIntervalToKalshi(interval) {
|
|
76
|
-
const mapping = {
|
|
77
|
-
'1m': 1,
|
|
78
|
-
'5m': 1,
|
|
79
|
-
'15m': 1,
|
|
80
|
-
'1h': 60,
|
|
81
|
-
'6h': 60,
|
|
82
|
-
'1d': 1440
|
|
83
|
-
};
|
|
84
|
-
return mapping[interval];
|
|
85
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { ClobClient } from '@polymarket/clob-client';
|
|
2
|
-
import type { ApiKeyCreds } from '@polymarket/clob-client';
|
|
3
|
-
import { ExchangeCredentials } from '../../BaseExchange';
|
|
4
|
-
/**
|
|
5
|
-
* Manages Polymarket authentication and CLOB client initialization.
|
|
6
|
-
* Handles both L1 (wallet-based) and L2 (API credentials) authentication.
|
|
7
|
-
*/
|
|
8
|
-
export declare class PolymarketAuth {
|
|
9
|
-
private credentials;
|
|
10
|
-
private signer?;
|
|
11
|
-
private clobClient?;
|
|
12
|
-
private apiCreds?;
|
|
13
|
-
constructor(credentials: ExchangeCredentials);
|
|
14
|
-
/**
|
|
15
|
-
* Get or create API credentials using L1 authentication.
|
|
16
|
-
* This uses the private key to derive/create API credentials.
|
|
17
|
-
*/
|
|
18
|
-
getApiCredentials(): Promise<ApiKeyCreds>;
|
|
19
|
-
/**
|
|
20
|
-
* Get an authenticated CLOB client for L2 operations (trading).
|
|
21
|
-
* This client can place orders, cancel orders, query positions, etc.
|
|
22
|
-
*/
|
|
23
|
-
getClobClient(): Promise<ClobClient>;
|
|
24
|
-
/**
|
|
25
|
-
* Get the signer's address.
|
|
26
|
-
*/
|
|
27
|
-
getAddress(): string;
|
|
28
|
-
/**
|
|
29
|
-
* Reset cached credentials and client (useful for testing or credential rotation).
|
|
30
|
-
*/
|
|
31
|
-
reset(): void;
|
|
32
|
-
}
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PolymarketAuth = void 0;
|
|
4
|
-
const clob_client_1 = require("@polymarket/clob-client");
|
|
5
|
-
const ethers_1 = require("ethers");
|
|
6
|
-
const POLYMARKET_HOST = 'https://clob.polymarket.com';
|
|
7
|
-
const POLYGON_CHAIN_ID = 137;
|
|
8
|
-
/**
|
|
9
|
-
* Manages Polymarket authentication and CLOB client initialization.
|
|
10
|
-
* Handles both L1 (wallet-based) and L2 (API credentials) authentication.
|
|
11
|
-
*/
|
|
12
|
-
class PolymarketAuth {
|
|
13
|
-
constructor(credentials) {
|
|
14
|
-
this.credentials = credentials;
|
|
15
|
-
if (!credentials.privateKey) {
|
|
16
|
-
throw new Error('Polymarket requires a privateKey for authentication');
|
|
17
|
-
}
|
|
18
|
-
// Initialize the signer
|
|
19
|
-
this.signer = new ethers_1.Wallet(credentials.privateKey);
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Get or create API credentials using L1 authentication.
|
|
23
|
-
* This uses the private key to derive/create API credentials.
|
|
24
|
-
*/
|
|
25
|
-
async getApiCredentials() {
|
|
26
|
-
// Return cached credentials if available
|
|
27
|
-
if (this.apiCreds) {
|
|
28
|
-
return this.apiCreds;
|
|
29
|
-
}
|
|
30
|
-
// If credentials were provided, use them
|
|
31
|
-
if (this.credentials.apiKey && this.credentials.apiSecret && this.credentials.passphrase) {
|
|
32
|
-
this.apiCreds = {
|
|
33
|
-
key: this.credentials.apiKey,
|
|
34
|
-
secret: this.credentials.apiSecret,
|
|
35
|
-
passphrase: this.credentials.passphrase,
|
|
36
|
-
};
|
|
37
|
-
return this.apiCreds;
|
|
38
|
-
}
|
|
39
|
-
// Otherwise, derive/create them using L1 auth
|
|
40
|
-
const l1Client = new clob_client_1.ClobClient(POLYMARKET_HOST, POLYGON_CHAIN_ID, this.signer);
|
|
41
|
-
// Robust derivation strategy:
|
|
42
|
-
// 1. Try to DERIVE existing credentials first (most common case).
|
|
43
|
-
// 2. If that fails (e.g. 404 or 400), try to CREATE new ones.
|
|
44
|
-
let creds;
|
|
45
|
-
try {
|
|
46
|
-
// console.log('Trying to derive existing API key...');
|
|
47
|
-
creds = await l1Client.deriveApiKey();
|
|
48
|
-
}
|
|
49
|
-
catch (deriveError) {
|
|
50
|
-
// console.log('Derivation failed, trying to create new API key...');
|
|
51
|
-
try {
|
|
52
|
-
creds = await l1Client.createApiKey();
|
|
53
|
-
}
|
|
54
|
-
catch (createError) {
|
|
55
|
-
console.error('Failed to both derive and create API key:', createError?.message || createError);
|
|
56
|
-
throw new Error('Authentication failed: Could not create or derive API key.');
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
if (!creds) {
|
|
60
|
-
throw new Error('Authentication failed: Credentials are empty.');
|
|
61
|
-
}
|
|
62
|
-
this.apiCreds = creds;
|
|
63
|
-
return creds;
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Get an authenticated CLOB client for L2 operations (trading).
|
|
67
|
-
* This client can place orders, cancel orders, query positions, etc.
|
|
68
|
-
*/
|
|
69
|
-
async getClobClient() {
|
|
70
|
-
// Return cached client if available
|
|
71
|
-
if (this.clobClient) {
|
|
72
|
-
return this.clobClient;
|
|
73
|
-
}
|
|
74
|
-
// Get API credentials (L1 auth)
|
|
75
|
-
const apiCreds = await this.getApiCredentials();
|
|
76
|
-
// Determine signature type (default to EOA = 0)
|
|
77
|
-
const signatureType = this.credentials.signatureType ?? 0;
|
|
78
|
-
// Determine funder address (defaults to signer's address)
|
|
79
|
-
const funderAddress = this.credentials.funderAddress ?? this.signer.address;
|
|
80
|
-
// Create L2-authenticated client
|
|
81
|
-
this.clobClient = new clob_client_1.ClobClient(POLYMARKET_HOST, POLYGON_CHAIN_ID, this.signer, apiCreds, signatureType, funderAddress);
|
|
82
|
-
return this.clobClient;
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Get the signer's address.
|
|
86
|
-
*/
|
|
87
|
-
getAddress() {
|
|
88
|
-
return this.signer.address;
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Reset cached credentials and client (useful for testing or credential rotation).
|
|
92
|
-
*/
|
|
93
|
-
reset() {
|
|
94
|
-
this.apiCreds = undefined;
|
|
95
|
-
this.clobClient = undefined;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
exports.PolymarketAuth = PolymarketAuth;
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.fetchMarkets = fetchMarkets;
|
|
7
|
-
const axios_1 = __importDefault(require("axios"));
|
|
8
|
-
const utils_1 = require("./utils");
|
|
9
|
-
async function fetchMarkets(params) {
|
|
10
|
-
const limit = params?.limit || 200; // Higher default for better coverage
|
|
11
|
-
const offset = params?.offset || 0;
|
|
12
|
-
// Map generic sort params to Polymarket Gamma API params
|
|
13
|
-
let queryParams = {
|
|
14
|
-
active: 'true',
|
|
15
|
-
closed: 'false',
|
|
16
|
-
limit: limit,
|
|
17
|
-
offset: offset,
|
|
18
|
-
};
|
|
19
|
-
// Gamma API uses 'order' and 'ascending' for sorting
|
|
20
|
-
if (params?.sort === 'volume') {
|
|
21
|
-
queryParams.order = 'volume';
|
|
22
|
-
queryParams.ascending = 'false';
|
|
23
|
-
}
|
|
24
|
-
else if (params?.sort === 'newest') {
|
|
25
|
-
queryParams.order = 'startDate';
|
|
26
|
-
queryParams.ascending = 'false';
|
|
27
|
-
}
|
|
28
|
-
else if (params?.sort === 'liquidity') {
|
|
29
|
-
// queryParams.order = 'liquidity';
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
// Default: do not send order param to avoid 422
|
|
33
|
-
}
|
|
34
|
-
try {
|
|
35
|
-
// Fetch active events from Gamma
|
|
36
|
-
const response = await axios_1.default.get(utils_1.GAMMA_API_URL, {
|
|
37
|
-
params: queryParams
|
|
38
|
-
});
|
|
39
|
-
const events = response.data;
|
|
40
|
-
const unifiedMarkets = [];
|
|
41
|
-
for (const event of events) {
|
|
42
|
-
// Each event is a container (e.g. "US Election").
|
|
43
|
-
// It contains specific "markets" (e.g. "Winner", "Pop Vote").
|
|
44
|
-
if (!event.markets)
|
|
45
|
-
continue;
|
|
46
|
-
for (const market of event.markets) {
|
|
47
|
-
const unifiedMarket = (0, utils_1.mapMarketToUnified)(event, market);
|
|
48
|
-
if (unifiedMarket) {
|
|
49
|
-
unifiedMarkets.push(unifiedMarket);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
// Client-side Sort capability to ensure contract fulfillment
|
|
54
|
-
// Often API filters are "good effort" or apply to the 'event' but not the 'market'
|
|
55
|
-
if (params?.sort === 'volume') {
|
|
56
|
-
unifiedMarkets.sort((a, b) => b.volume24h - a.volume24h);
|
|
57
|
-
}
|
|
58
|
-
else if (params?.sort === 'newest') {
|
|
59
|
-
// unifiedMarkets.sort((a, b) => b.resolutionDate.getTime() - a.resolutionDate.getTime()); // Not quite 'newest'
|
|
60
|
-
}
|
|
61
|
-
else if (params?.sort === 'liquidity') {
|
|
62
|
-
unifiedMarkets.sort((a, b) => b.liquidity - a.liquidity);
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
// Default volume sort
|
|
66
|
-
unifiedMarkets.sort((a, b) => b.volume24h - a.volume24h);
|
|
67
|
-
}
|
|
68
|
-
// Respect limit strictly after flattening
|
|
69
|
-
return unifiedMarkets.slice(0, limit);
|
|
70
|
-
}
|
|
71
|
-
catch (error) {
|
|
72
|
-
console.error("Error fetching Polymarket data:", error);
|
|
73
|
-
return [];
|
|
74
|
-
}
|
|
75
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { HistoryFilterParams } from '../../BaseExchange';
|
|
2
|
-
import { PriceCandle } from '../../types';
|
|
3
|
-
/**
|
|
4
|
-
* Fetch historical price data (OHLCV candles) for a specific token.
|
|
5
|
-
* @param id - The CLOB token ID (e.g., outcome token ID)
|
|
6
|
-
*/
|
|
7
|
-
export declare function fetchOHLCV(id: string, params: HistoryFilterParams): Promise<PriceCandle[]>;
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.fetchOHLCV = fetchOHLCV;
|
|
7
|
-
const axios_1 = __importDefault(require("axios"));
|
|
8
|
-
const utils_1 = require("./utils");
|
|
9
|
-
/**
|
|
10
|
-
* Fetch historical price data (OHLCV candles) for a specific token.
|
|
11
|
-
* @param id - The CLOB token ID (e.g., outcome token ID)
|
|
12
|
-
*/
|
|
13
|
-
async function fetchOHLCV(id, params) {
|
|
14
|
-
// ID Validation: Polymarket CLOB requires a Token ID (long numeric string) not a Market ID
|
|
15
|
-
if (id.length < 10 && /^\d+$/.test(id)) {
|
|
16
|
-
throw new Error(`Invalid ID for Polymarket history: "${id}". You provided a Market ID, but Polymarket's CLOB API requires a Token ID. Ensure you are using 'outcome.id'.`);
|
|
17
|
-
}
|
|
18
|
-
try {
|
|
19
|
-
const fidelity = (0, utils_1.mapIntervalToFidelity)(params.resolution);
|
|
20
|
-
const nowTs = Math.floor(Date.now() / 1000);
|
|
21
|
-
// 1. Smart Lookback Calculation
|
|
22
|
-
// If start/end not provided, calculate window based on limit * resolution
|
|
23
|
-
let startTs = params.start ? Math.floor(params.start.getTime() / 1000) : 0;
|
|
24
|
-
let endTs = params.end ? Math.floor(params.end.getTime() / 1000) : nowTs;
|
|
25
|
-
if (!params.start) {
|
|
26
|
-
// Default limit is usually 20 in the example, but safety margin is good.
|
|
27
|
-
// If limit is not set, we default to 100 candles.
|
|
28
|
-
const count = params.limit || 100;
|
|
29
|
-
// fidelity is in minutes.
|
|
30
|
-
const durationSeconds = count * fidelity * 60;
|
|
31
|
-
startTs = endTs - durationSeconds;
|
|
32
|
-
}
|
|
33
|
-
const queryParams = {
|
|
34
|
-
market: id,
|
|
35
|
-
fidelity: fidelity,
|
|
36
|
-
startTs: startTs,
|
|
37
|
-
endTs: endTs
|
|
38
|
-
};
|
|
39
|
-
const response = await axios_1.default.get(`${utils_1.CLOB_API_URL}/prices-history`, {
|
|
40
|
-
params: queryParams
|
|
41
|
-
});
|
|
42
|
-
const history = response.data.history || [];
|
|
43
|
-
// 2. Align Timestamps (Snap to Grid)
|
|
44
|
-
// Polymarket returns random tick timestamps (e.g. 1:00:21).
|
|
45
|
-
// We want to normalize this to the start of the bucket (1:00:00).
|
|
46
|
-
const resolutionMs = fidelity * 60 * 1000;
|
|
47
|
-
const candles = history.map((item) => {
|
|
48
|
-
const rawMs = item.t * 1000;
|
|
49
|
-
const snappedMs = Math.floor(rawMs / resolutionMs) * resolutionMs;
|
|
50
|
-
return {
|
|
51
|
-
timestamp: snappedMs, // Aligned timestamp
|
|
52
|
-
open: item.p,
|
|
53
|
-
high: item.p,
|
|
54
|
-
low: item.p,
|
|
55
|
-
close: item.p,
|
|
56
|
-
volume: undefined
|
|
57
|
-
};
|
|
58
|
-
});
|
|
59
|
-
// Apply limit if specified
|
|
60
|
-
if (params.limit && candles.length > params.limit) {
|
|
61
|
-
return candles.slice(-params.limit);
|
|
62
|
-
}
|
|
63
|
-
return candles;
|
|
64
|
-
}
|
|
65
|
-
catch (error) {
|
|
66
|
-
if (axios_1.default.isAxiosError(error) && error.response) {
|
|
67
|
-
const apiError = error.response.data?.error || error.response.data?.message || "Unknown API Error";
|
|
68
|
-
throw new Error(`Polymarket History API Error (${error.response.status}): ${apiError}. Used ID: ${id}`);
|
|
69
|
-
}
|
|
70
|
-
console.error(`Unexpected error fetching Polymarket history for ${id}:`, error);
|
|
71
|
-
throw error;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.fetchOrderBook = fetchOrderBook;
|
|
7
|
-
const axios_1 = __importDefault(require("axios"));
|
|
8
|
-
const utils_1 = require("./utils");
|
|
9
|
-
/**
|
|
10
|
-
* Fetch the current order book for a specific token.
|
|
11
|
-
* @param id - The CLOB token ID
|
|
12
|
-
*/
|
|
13
|
-
async function fetchOrderBook(id) {
|
|
14
|
-
try {
|
|
15
|
-
const response = await axios_1.default.get(`${utils_1.CLOB_API_URL}/book`, {
|
|
16
|
-
params: { token_id: id }
|
|
17
|
-
});
|
|
18
|
-
const data = response.data;
|
|
19
|
-
// Response format: { bids: [{price: "0.52", size: "100"}], asks: [...] }
|
|
20
|
-
const bids = (data.bids || []).map((level) => ({
|
|
21
|
-
price: parseFloat(level.price),
|
|
22
|
-
size: parseFloat(level.size)
|
|
23
|
-
})).sort((a, b) => b.price - a.price); // Sort Bids Descending (Best/Highest first)
|
|
24
|
-
const asks = (data.asks || []).map((level) => ({
|
|
25
|
-
price: parseFloat(level.price),
|
|
26
|
-
size: parseFloat(level.size)
|
|
27
|
-
})).sort((a, b) => a.price - b.price); // Sort Asks Ascending (Best/Lowest first)
|
|
28
|
-
return {
|
|
29
|
-
bids,
|
|
30
|
-
asks,
|
|
31
|
-
timestamp: data.timestamp ? new Date(data.timestamp).getTime() : Date.now()
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
catch (error) {
|
|
35
|
-
console.error(`Error fetching Polymarket orderbook for ${id}:`, error);
|
|
36
|
-
return { bids: [], asks: [] };
|
|
37
|
-
}
|
|
38
|
-
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.fetchPositions = fetchPositions;
|
|
7
|
-
const axios_1 = __importDefault(require("axios"));
|
|
8
|
-
const DATA_API_URL = 'https://data-api.polymarket.com';
|
|
9
|
-
async function fetchPositions(userAddress) {
|
|
10
|
-
const response = await axios_1.default.get(`${DATA_API_URL}/positions`, {
|
|
11
|
-
params: {
|
|
12
|
-
user: userAddress,
|
|
13
|
-
limit: 100
|
|
14
|
-
}
|
|
15
|
-
});
|
|
16
|
-
const data = Array.isArray(response.data) ? response.data : [];
|
|
17
|
-
return data.map((p) => ({
|
|
18
|
-
marketId: p.conditionId,
|
|
19
|
-
outcomeId: p.asset,
|
|
20
|
-
outcomeLabel: p.outcome || 'Unknown',
|
|
21
|
-
size: parseFloat(p.size),
|
|
22
|
-
entryPrice: parseFloat(p.avgPrice),
|
|
23
|
-
currentPrice: parseFloat(p.curPrice || '0'),
|
|
24
|
-
unrealizedPnL: parseFloat(p.cashPnl || '0'),
|
|
25
|
-
realizedPnL: parseFloat(p.realizedPnl || '0')
|
|
26
|
-
}));
|
|
27
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { HistoryFilterParams } from '../../BaseExchange';
|
|
2
|
-
import { Trade } from '../../types';
|
|
3
|
-
/**
|
|
4
|
-
* Fetch raw trade history for a specific token.
|
|
5
|
-
* @param id - The CLOB token ID
|
|
6
|
-
*
|
|
7
|
-
* NOTE: Polymarket's /trades endpoint currently requires L2 Authentication (API Key).
|
|
8
|
-
* This method will return an empty array if an API key is not provided in headers.
|
|
9
|
-
* Use fetchOHLCV for public historical price data instead.
|
|
10
|
-
*/
|
|
11
|
-
export declare function fetchTrades(id: string, params: HistoryFilterParams): Promise<Trade[]>;
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.fetchTrades = fetchTrades;
|
|
7
|
-
const axios_1 = __importDefault(require("axios"));
|
|
8
|
-
const utils_1 = require("./utils");
|
|
9
|
-
/**
|
|
10
|
-
* Fetch raw trade history for a specific token.
|
|
11
|
-
* @param id - The CLOB token ID
|
|
12
|
-
*
|
|
13
|
-
* NOTE: Polymarket's /trades endpoint currently requires L2 Authentication (API Key).
|
|
14
|
-
* This method will return an empty array if an API key is not provided in headers.
|
|
15
|
-
* Use fetchOHLCV for public historical price data instead.
|
|
16
|
-
*/
|
|
17
|
-
async function fetchTrades(id, params) {
|
|
18
|
-
// ID Validation
|
|
19
|
-
if (id.length < 10 && /^\d+$/.test(id)) {
|
|
20
|
-
throw new Error(`Invalid ID for Polymarket trades: "${id}". You provided a Market ID, but Polymarket's CLOB API requires a Token ID.`);
|
|
21
|
-
}
|
|
22
|
-
try {
|
|
23
|
-
const queryParams = {
|
|
24
|
-
market: id
|
|
25
|
-
};
|
|
26
|
-
// Add time filters if provided
|
|
27
|
-
if (params.start) {
|
|
28
|
-
queryParams.after = Math.floor(params.start.getTime() / 1000);
|
|
29
|
-
}
|
|
30
|
-
if (params.end) {
|
|
31
|
-
queryParams.before = Math.floor(params.end.getTime() / 1000);
|
|
32
|
-
}
|
|
33
|
-
const response = await axios_1.default.get(`${utils_1.CLOB_API_URL}/trades`, {
|
|
34
|
-
params: queryParams
|
|
35
|
-
});
|
|
36
|
-
// Response is an array of trade objects
|
|
37
|
-
const trades = response.data || [];
|
|
38
|
-
const mappedTrades = trades.map((trade) => ({
|
|
39
|
-
id: trade.id || `${trade.timestamp}-${trade.price}`,
|
|
40
|
-
timestamp: trade.timestamp * 1000, // Convert to milliseconds
|
|
41
|
-
price: parseFloat(trade.price),
|
|
42
|
-
amount: parseFloat(trade.size || trade.amount || 0),
|
|
43
|
-
side: trade.side === 'BUY' ? 'buy' : trade.side === 'SELL' ? 'sell' : 'unknown'
|
|
44
|
-
}));
|
|
45
|
-
// Apply limit if specified
|
|
46
|
-
if (params.limit && mappedTrades.length > params.limit) {
|
|
47
|
-
return mappedTrades.slice(-params.limit); // Return most recent N trades
|
|
48
|
-
}
|
|
49
|
-
return mappedTrades;
|
|
50
|
-
}
|
|
51
|
-
catch (error) {
|
|
52
|
-
if (axios_1.default.isAxiosError(error) && error.response) {
|
|
53
|
-
const apiError = error.response.data?.error || error.response.data?.message || "Unknown API Error";
|
|
54
|
-
throw new Error(`Polymarket Trades API Error (${error.response.status}): ${apiError}. Used ID: ${id}`);
|
|
55
|
-
}
|
|
56
|
-
console.error(`Unexpected error fetching Polymarket trades for ${id}:`, error);
|
|
57
|
-
throw error;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { UnifiedMarket } from '../../types';
|
|
2
|
-
/**
|
|
3
|
-
* Fetch specific markets by their URL slug.
|
|
4
|
-
* Useful for looking up a specific event from a URL.
|
|
5
|
-
* @param slug - The event slug (e.g. "will-fed-cut-rates-in-march")
|
|
6
|
-
*/
|
|
7
|
-
export declare function getMarketsBySlug(slug: string): Promise<UnifiedMarket[]>;
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.getMarketsBySlug = getMarketsBySlug;
|
|
7
|
-
const axios_1 = __importDefault(require("axios"));
|
|
8
|
-
const utils_1 = require("./utils");
|
|
9
|
-
/**
|
|
10
|
-
* Fetch specific markets by their URL slug.
|
|
11
|
-
* Useful for looking up a specific event from a URL.
|
|
12
|
-
* @param slug - The event slug (e.g. "will-fed-cut-rates-in-march")
|
|
13
|
-
*/
|
|
14
|
-
async function getMarketsBySlug(slug) {
|
|
15
|
-
try {
|
|
16
|
-
const response = await axios_1.default.get(utils_1.GAMMA_API_URL, {
|
|
17
|
-
params: { slug: slug }
|
|
18
|
-
});
|
|
19
|
-
const events = response.data;
|
|
20
|
-
if (!events || events.length === 0)
|
|
21
|
-
return [];
|
|
22
|
-
const unifiedMarkets = [];
|
|
23
|
-
for (const event of events) {
|
|
24
|
-
if (!event.markets)
|
|
25
|
-
continue;
|
|
26
|
-
for (const market of event.markets) {
|
|
27
|
-
const unifiedMarket = (0, utils_1.mapMarketToUnified)(event, market, { useQuestionAsCandidateFallback: true });
|
|
28
|
-
if (unifiedMarket) {
|
|
29
|
-
unifiedMarkets.push(unifiedMarket);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
return unifiedMarkets;
|
|
34
|
-
}
|
|
35
|
-
catch (error) {
|
|
36
|
-
console.error(`Error fetching Polymarket slug ${slug}:`, error);
|
|
37
|
-
return [];
|
|
38
|
-
}
|
|
39
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { PredictionMarketExchange, MarketFilterParams, HistoryFilterParams, ExchangeCredentials } from '../../BaseExchange';
|
|
2
|
-
import { UnifiedMarket, PriceCandle, OrderBook, Trade, Order, Position, Balance, CreateOrderParams } from '../../types';
|
|
3
|
-
export declare class PolymarketExchange extends PredictionMarketExchange {
|
|
4
|
-
private auth?;
|
|
5
|
-
constructor(credentials?: ExchangeCredentials);
|
|
6
|
-
get name(): string;
|
|
7
|
-
fetchMarkets(params?: MarketFilterParams): Promise<UnifiedMarket[]>;
|
|
8
|
-
searchMarkets(query: string, params?: MarketFilterParams): Promise<UnifiedMarket[]>;
|
|
9
|
-
getMarketsBySlug(slug: string): Promise<UnifiedMarket[]>;
|
|
10
|
-
fetchOHLCV(id: string, params: HistoryFilterParams): Promise<PriceCandle[]>;
|
|
11
|
-
fetchOrderBook(id: string): Promise<OrderBook>;
|
|
12
|
-
fetchTrades(id: string, params: HistoryFilterParams): Promise<Trade[]>;
|
|
13
|
-
/**
|
|
14
|
-
* Ensure authentication is initialized before trading operations.
|
|
15
|
-
*/
|
|
16
|
-
private ensureAuth;
|
|
17
|
-
createOrder(params: CreateOrderParams): Promise<Order>;
|
|
18
|
-
cancelOrder(orderId: string): Promise<Order>;
|
|
19
|
-
fetchOrder(orderId: string): Promise<Order>;
|
|
20
|
-
fetchOpenOrders(marketId?: string): Promise<Order[]>;
|
|
21
|
-
fetchPositions(): Promise<Position[]>;
|
|
22
|
-
fetchBalance(): Promise<Balance[]>;
|
|
23
|
-
}
|