@catalyst-team/poly-sdk 0.1.0
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/.env +0 -0
- package/README.md +803 -0
- package/dist/__tests__/clob-api.test.d.ts +5 -0
- package/dist/__tests__/clob-api.test.d.ts.map +1 -0
- package/dist/__tests__/clob-api.test.js +240 -0
- package/dist/__tests__/clob-api.test.js.map +1 -0
- package/dist/__tests__/integration/bridge-client.integration.test.d.ts +11 -0
- package/dist/__tests__/integration/bridge-client.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/bridge-client.integration.test.js +260 -0
- package/dist/__tests__/integration/bridge-client.integration.test.js.map +1 -0
- package/dist/__tests__/integration/clob-api.integration.test.d.ts +13 -0
- package/dist/__tests__/integration/clob-api.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/clob-api.integration.test.js +170 -0
- package/dist/__tests__/integration/clob-api.integration.test.js.map +1 -0
- package/dist/__tests__/integration/ctf-client.integration.test.d.ts +17 -0
- package/dist/__tests__/integration/ctf-client.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/ctf-client.integration.test.js +234 -0
- package/dist/__tests__/integration/ctf-client.integration.test.js.map +1 -0
- package/dist/__tests__/integration/data-api.integration.test.d.ts +9 -0
- package/dist/__tests__/integration/data-api.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/data-api.integration.test.js +161 -0
- package/dist/__tests__/integration/data-api.integration.test.js.map +1 -0
- package/dist/__tests__/integration/gamma-api.integration.test.d.ts +9 -0
- package/dist/__tests__/integration/gamma-api.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/gamma-api.integration.test.js +170 -0
- package/dist/__tests__/integration/gamma-api.integration.test.js.map +1 -0
- package/dist/__tests__/test-utils.d.ts +92 -0
- package/dist/__tests__/test-utils.d.ts.map +1 -0
- package/dist/__tests__/test-utils.js +143 -0
- package/dist/__tests__/test-utils.js.map +1 -0
- package/dist/clients/bridge-client.d.ts +388 -0
- package/dist/clients/bridge-client.d.ts.map +1 -0
- package/dist/clients/bridge-client.js +587 -0
- package/dist/clients/bridge-client.js.map +1 -0
- package/dist/clients/clob-api.d.ts +318 -0
- package/dist/clients/clob-api.d.ts.map +1 -0
- package/dist/clients/clob-api.js +388 -0
- package/dist/clients/clob-api.js.map +1 -0
- package/dist/clients/ctf-client.d.ts +473 -0
- package/dist/clients/ctf-client.d.ts.map +1 -0
- package/dist/clients/ctf-client.js +915 -0
- package/dist/clients/ctf-client.js.map +1 -0
- package/dist/clients/data-api.d.ts +134 -0
- package/dist/clients/data-api.d.ts.map +1 -0
- package/dist/clients/data-api.js +265 -0
- package/dist/clients/data-api.js.map +1 -0
- package/dist/clients/gamma-api.d.ts +401 -0
- package/dist/clients/gamma-api.d.ts.map +1 -0
- package/dist/clients/gamma-api.js +352 -0
- package/dist/clients/gamma-api.js.map +1 -0
- package/dist/clients/trading-client.d.ts +252 -0
- package/dist/clients/trading-client.d.ts.map +1 -0
- package/dist/clients/trading-client.js +543 -0
- package/dist/clients/trading-client.js.map +1 -0
- package/dist/clients/websocket-manager.d.ts +100 -0
- package/dist/clients/websocket-manager.d.ts.map +1 -0
- package/dist/clients/websocket-manager.js +193 -0
- package/dist/clients/websocket-manager.js.map +1 -0
- package/dist/core/cache-adapter-bridge.d.ts +36 -0
- package/dist/core/cache-adapter-bridge.d.ts.map +1 -0
- package/dist/core/cache-adapter-bridge.js +81 -0
- package/dist/core/cache-adapter-bridge.js.map +1 -0
- package/dist/core/cache.d.ts +40 -0
- package/dist/core/cache.d.ts.map +1 -0
- package/dist/core/cache.js +71 -0
- package/dist/core/cache.js.map +1 -0
- package/dist/core/errors.d.ts +38 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +84 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/rate-limiter.d.ts +31 -0
- package/dist/core/rate-limiter.d.ts.map +1 -0
- package/dist/core/rate-limiter.js +70 -0
- package/dist/core/rate-limiter.js.map +1 -0
- package/dist/core/types.d.ts +314 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +19 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/unified-cache.d.ts +63 -0
- package/dist/core/unified-cache.d.ts.map +1 -0
- package/dist/core/unified-cache.js +114 -0
- package/dist/core/unified-cache.js.map +1 -0
- package/dist/index.d.ts +94 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +258 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/errors.d.ts +33 -0
- package/dist/mcp/errors.d.ts.map +1 -0
- package/dist/mcp/errors.js +86 -0
- package/dist/mcp/errors.js.map +1 -0
- package/dist/mcp/index.d.ts +62 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +173 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +17 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +155 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools/guide.d.ts +12 -0
- package/dist/mcp/tools/guide.d.ts.map +1 -0
- package/dist/mcp/tools/guide.js +801 -0
- package/dist/mcp/tools/guide.js.map +1 -0
- package/dist/mcp/tools/index.d.ts +11 -0
- package/dist/mcp/tools/index.d.ts.map +1 -0
- package/dist/mcp/tools/index.js +27 -0
- package/dist/mcp/tools/index.js.map +1 -0
- package/dist/mcp/tools/market.d.ts +11 -0
- package/dist/mcp/tools/market.d.ts.map +1 -0
- package/dist/mcp/tools/market.js +314 -0
- package/dist/mcp/tools/market.js.map +1 -0
- package/dist/mcp/tools/order.d.ts +10 -0
- package/dist/mcp/tools/order.d.ts.map +1 -0
- package/dist/mcp/tools/order.js +258 -0
- package/dist/mcp/tools/order.js.map +1 -0
- package/dist/mcp/tools/trade.d.ts +38 -0
- package/dist/mcp/tools/trade.d.ts.map +1 -0
- package/dist/mcp/tools/trade.js +314 -0
- package/dist/mcp/tools/trade.js.map +1 -0
- package/dist/mcp/tools/trader.d.ts +11 -0
- package/dist/mcp/tools/trader.d.ts.map +1 -0
- package/dist/mcp/tools/trader.js +277 -0
- package/dist/mcp/tools/trader.js.map +1 -0
- package/dist/mcp/tools/wallet.d.ts +274 -0
- package/dist/mcp/tools/wallet.d.ts.map +1 -0
- package/dist/mcp/tools/wallet.js +579 -0
- package/dist/mcp/tools/wallet.js.map +1 -0
- package/dist/mcp/types.d.ts +413 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +5 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/services/authorization-service.d.ts +97 -0
- package/dist/services/authorization-service.d.ts.map +1 -0
- package/dist/services/authorization-service.js +279 -0
- package/dist/services/authorization-service.js.map +1 -0
- package/dist/services/market-service.d.ts +108 -0
- package/dist/services/market-service.d.ts.map +1 -0
- package/dist/services/market-service.js +458 -0
- package/dist/services/market-service.js.map +1 -0
- package/dist/services/realtime-service.d.ts +82 -0
- package/dist/services/realtime-service.d.ts.map +1 -0
- package/dist/services/realtime-service.js +150 -0
- package/dist/services/realtime-service.js.map +1 -0
- package/dist/services/swap-service.d.ts +217 -0
- package/dist/services/swap-service.d.ts.map +1 -0
- package/dist/services/swap-service.js +695 -0
- package/dist/services/swap-service.js.map +1 -0
- package/dist/services/wallet-service.d.ts +94 -0
- package/dist/services/wallet-service.d.ts.map +1 -0
- package/dist/services/wallet-service.js +173 -0
- package/dist/services/wallet-service.js.map +1 -0
- package/dist/utils/price-utils.d.ts +153 -0
- package/dist/utils/price-utils.d.ts.map +1 -0
- package/dist/utils/price-utils.js +236 -0
- package/dist/utils/price-utils.js.map +1 -0
- package/docs/00-design.md +760 -0
- package/docs/01-mcp.md +2041 -0
- package/docs/02-API.md +1148 -0
- package/docs/e2e/01-trader-tools.md +159 -0
- package/docs/e2e/02-market-tools.md +180 -0
- package/docs/e2e/03-order-tools.md +166 -0
- package/docs/e2e/04-wallet-tools.md +224 -0
- package/docs/e2e/05-trading-tools.md +327 -0
- package/docs/e2e/06-integration-scenarios.md +481 -0
- package/docs/e2e/coordinator.md +376 -0
- package/examples/01-basic-usage.ts +68 -0
- package/examples/02-smart-money.ts +95 -0
- package/examples/03-market-analysis.ts +108 -0
- package/examples/04-kline-aggregation.ts +158 -0
- package/examples/05-follow-wallet-strategy.ts +156 -0
- package/examples/06-services-demo.ts +124 -0
- package/examples/07-realtime-websocket.ts +117 -0
- package/examples/08-trading-orders.ts +278 -0
- package/examples/09-rewards-tracking.ts +187 -0
- package/examples/10-ctf-operations.ts +336 -0
- package/examples/11-live-arbitrage-scan.ts +221 -0
- package/examples/12-trending-arb-monitor.ts +406 -0
- package/examples/README.md +179 -0
- package/package.json +62 -0
- package/scripts/README.md +163 -0
- package/scripts/approvals/approve-erc1155.ts +129 -0
- package/scripts/approvals/approve-neg-risk-erc1155.ts +149 -0
- package/scripts/approvals/approve-neg-risk.ts +102 -0
- package/scripts/approvals/check-all-allowances.ts +150 -0
- package/scripts/approvals/check-allowance.ts +129 -0
- package/scripts/approvals/check-ctf-approval.ts +158 -0
- package/scripts/datas/001-report.md +486 -0
- package/scripts/datas/clone-modal-screenshot.png +0 -0
- package/scripts/deposit/deposit-native-usdc.ts +179 -0
- package/scripts/deposit/deposit-usdc.ts +155 -0
- package/scripts/deposit/swap-usdc-to-usdce.ts +375 -0
- package/scripts/research/research-markets.ts +166 -0
- package/scripts/trading/check-orders.ts +50 -0
- package/scripts/trading/sell-nvidia-positions.ts +206 -0
- package/scripts/trading/test-order.ts +172 -0
- package/scripts/truth.md +440 -0
- package/scripts/verify/test-approve-trading.ts +98 -0
- package/scripts/verify/test-provider-fix.ts +43 -0
- package/scripts/verify/test-search-mcp.ts +113 -0
- package/scripts/verify/verify-all-apis.ts +160 -0
- package/scripts/wallet/check-wallet-balances.ts +75 -0
- package/scripts/wallet/test-wallet-operations.ts +191 -0
- package/scripts/wallet/verify-wallet-tools.ts +124 -0
- package/src/__tests__/clob-api.test.ts +301 -0
- package/src/__tests__/integration/bridge-client.integration.test.ts +314 -0
- package/src/__tests__/integration/clob-api.integration.test.ts +218 -0
- package/src/__tests__/integration/ctf-client.integration.test.ts +331 -0
- package/src/__tests__/integration/data-api.integration.test.ts +194 -0
- package/src/__tests__/integration/gamma-api.integration.test.ts +206 -0
- package/src/__tests__/test-utils.ts +170 -0
- package/src/clients/bridge-client.ts +841 -0
- package/src/clients/clob-api.ts +629 -0
- package/src/clients/ctf-client.ts +1216 -0
- package/src/clients/data-api.ts +469 -0
- package/src/clients/gamma-api.ts +597 -0
- package/src/clients/trading-client.ts +749 -0
- package/src/clients/websocket-manager.ts +267 -0
- package/src/core/cache-adapter-bridge.ts +94 -0
- package/src/core/cache.ts +85 -0
- package/src/core/errors.ts +117 -0
- package/src/core/rate-limiter.ts +74 -0
- package/src/core/types.ts +360 -0
- package/src/core/unified-cache.ts +153 -0
- package/src/index.ts +455 -0
- package/src/mcp/README.md +380 -0
- package/src/mcp/errors.ts +124 -0
- package/src/mcp/index.ts +309 -0
- package/src/mcp/server.ts +183 -0
- package/src/mcp/tools/guide.ts +821 -0
- package/src/mcp/tools/index.ts +73 -0
- package/src/mcp/tools/market.ts +363 -0
- package/src/mcp/tools/order.ts +326 -0
- package/src/mcp/tools/trade.ts +417 -0
- package/src/mcp/tools/trader.ts +322 -0
- package/src/mcp/tools/wallet.ts +683 -0
- package/src/mcp/types.ts +472 -0
- package/src/services/authorization-service.ts +357 -0
- package/src/services/market-service.ts +544 -0
- package/src/services/realtime-service.ts +196 -0
- package/src/services/swap-service.ts +896 -0
- package/src/services/wallet-service.ts +259 -0
- package/src/utils/price-utils.ts +307 -0
- package/tsconfig.json +8 -0
- package/vitest.config.ts +19 -0
- package/vitest.integration.config.ts +18 -0
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Realtime Service
|
|
3
|
+
*
|
|
4
|
+
* High-level wrapper for WebSocket subscriptions:
|
|
5
|
+
* - Market subscription management
|
|
6
|
+
* - Price caching and access
|
|
7
|
+
* - Event handler registration
|
|
8
|
+
*/
|
|
9
|
+
import { WebSocketManager } from '../clients/websocket-manager.js';
|
|
10
|
+
export class RealtimeService {
|
|
11
|
+
wsManager;
|
|
12
|
+
subscriptions = new Map();
|
|
13
|
+
subscriptionIdCounter = 0;
|
|
14
|
+
constructor(wsManager) {
|
|
15
|
+
this.wsManager = wsManager || new WebSocketManager();
|
|
16
|
+
}
|
|
17
|
+
// ===== Market Subscriptions =====
|
|
18
|
+
/**
|
|
19
|
+
* Subscribe to market price updates
|
|
20
|
+
* @param assetIds - Token IDs to subscribe to
|
|
21
|
+
* @param handlers - Event handlers
|
|
22
|
+
* @returns Subscription object with unsubscribe method
|
|
23
|
+
*/
|
|
24
|
+
async subscribeMarkets(assetIds, handlers) {
|
|
25
|
+
const subscriptionId = `sub_${++this.subscriptionIdCounter}`;
|
|
26
|
+
// Register event handlers (filtered by assetIds)
|
|
27
|
+
const priceHandler = (update) => {
|
|
28
|
+
if (assetIds.includes(update.assetId)) {
|
|
29
|
+
handlers.onPriceUpdate?.(update);
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
const bookHandler = (update) => {
|
|
33
|
+
if (assetIds.includes(update.assetId)) {
|
|
34
|
+
handlers.onBookUpdate?.(update);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
const tradeHandler = (trade) => {
|
|
38
|
+
if (assetIds.includes(trade.assetId)) {
|
|
39
|
+
handlers.onLastTrade?.(trade);
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
const errorHandler = (error) => {
|
|
43
|
+
handlers.onError?.(error);
|
|
44
|
+
};
|
|
45
|
+
// Attach listeners
|
|
46
|
+
this.wsManager.on('priceUpdate', priceHandler);
|
|
47
|
+
this.wsManager.on('bookUpdate', bookHandler);
|
|
48
|
+
this.wsManager.on('lastTrade', tradeHandler);
|
|
49
|
+
this.wsManager.on('error', errorHandler);
|
|
50
|
+
// Subscribe to WebSocket
|
|
51
|
+
await this.wsManager.subscribe(assetIds);
|
|
52
|
+
// Create subscription object
|
|
53
|
+
const subscription = {
|
|
54
|
+
id: subscriptionId,
|
|
55
|
+
assetIds,
|
|
56
|
+
unsubscribe: async () => {
|
|
57
|
+
this.wsManager.off('priceUpdate', priceHandler);
|
|
58
|
+
this.wsManager.off('bookUpdate', bookHandler);
|
|
59
|
+
this.wsManager.off('lastTrade', tradeHandler);
|
|
60
|
+
this.wsManager.off('error', errorHandler);
|
|
61
|
+
await this.wsManager.unsubscribe(assetIds);
|
|
62
|
+
this.subscriptions.delete(subscriptionId);
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
this.subscriptions.set(subscriptionId, subscription);
|
|
66
|
+
return subscription;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Subscribe to a single market (both YES and NO tokens)
|
|
70
|
+
* @param yesTokenId - YES token ID
|
|
71
|
+
* @param noTokenId - NO token ID
|
|
72
|
+
* @param handlers - Event handlers
|
|
73
|
+
*/
|
|
74
|
+
async subscribeMarket(yesTokenId, noTokenId, handlers) {
|
|
75
|
+
let lastYesUpdate;
|
|
76
|
+
let lastNoUpdate;
|
|
77
|
+
const checkPairUpdate = () => {
|
|
78
|
+
if (lastYesUpdate && lastNoUpdate && handlers.onPairUpdate) {
|
|
79
|
+
handlers.onPairUpdate({
|
|
80
|
+
yes: lastYesUpdate,
|
|
81
|
+
no: lastNoUpdate,
|
|
82
|
+
spread: lastYesUpdate.price + lastNoUpdate.price,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
return this.subscribeMarkets([yesTokenId, noTokenId], {
|
|
87
|
+
onPriceUpdate: (update) => {
|
|
88
|
+
if (update.assetId === yesTokenId) {
|
|
89
|
+
lastYesUpdate = update;
|
|
90
|
+
}
|
|
91
|
+
else if (update.assetId === noTokenId) {
|
|
92
|
+
lastNoUpdate = update;
|
|
93
|
+
}
|
|
94
|
+
handlers.onPriceUpdate?.(update);
|
|
95
|
+
checkPairUpdate();
|
|
96
|
+
},
|
|
97
|
+
onBookUpdate: handlers.onBookUpdate,
|
|
98
|
+
onLastTrade: handlers.onLastTrade,
|
|
99
|
+
onError: handlers.onError,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
// ===== Price Access =====
|
|
103
|
+
/**
|
|
104
|
+
* Get cached price for an asset
|
|
105
|
+
*/
|
|
106
|
+
getPrice(assetId) {
|
|
107
|
+
return this.wsManager.getPrice(assetId);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Get all cached prices
|
|
111
|
+
*/
|
|
112
|
+
getAllPrices() {
|
|
113
|
+
return this.wsManager.getAllPrices();
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Get cached order book for an asset
|
|
117
|
+
*/
|
|
118
|
+
getBook(assetId) {
|
|
119
|
+
return this.wsManager.getBook(assetId);
|
|
120
|
+
}
|
|
121
|
+
// ===== State Management =====
|
|
122
|
+
/**
|
|
123
|
+
* Get all active subscriptions
|
|
124
|
+
*/
|
|
125
|
+
getActiveSubscriptions() {
|
|
126
|
+
return Array.from(this.subscriptions.values());
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Get subscription by ID
|
|
130
|
+
*/
|
|
131
|
+
getSubscription(id) {
|
|
132
|
+
return this.subscriptions.get(id);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Unsubscribe from all markets
|
|
136
|
+
*/
|
|
137
|
+
async unsubscribeAll() {
|
|
138
|
+
for (const sub of this.subscriptions.values()) {
|
|
139
|
+
await sub.unsubscribe();
|
|
140
|
+
}
|
|
141
|
+
this.subscriptions.clear();
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Get WebSocket manager for advanced usage
|
|
145
|
+
*/
|
|
146
|
+
getWebSocketManager() {
|
|
147
|
+
return this.wsManager;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=realtime-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"realtime-service.js","sourceRoot":"","sources":["../../src/services/realtime-service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAgBnE,MAAM,OAAO,eAAe;IAClB,SAAS,CAAmB;IAC5B,aAAa,GAA8B,IAAI,GAAG,EAAE,CAAC;IACrD,qBAAqB,GAAG,CAAC,CAAC;IAElC,YAAY,SAA4B;QACtC,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,IAAI,gBAAgB,EAAE,CAAC;IACvD,CAAC;IAED,mCAAmC;IAEnC;;;;;OAKG;IACH,KAAK,CAAC,gBAAgB,CACpB,QAAkB,EAClB,QAAoC;QAEpC,MAAM,cAAc,GAAG,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAE7D,iDAAiD;QACjD,MAAM,YAAY,GAAG,CAAC,MAAmB,EAAE,EAAE;YAC3C,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;gBACtC,QAAQ,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC;YACnC,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,WAAW,GAAG,CAAC,MAAkB,EAAE,EAAE;YACzC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;gBACtC,QAAQ,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC;YAClC,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,YAAY,GAAG,CAAC,KAAgG,EAAE,EAAE;YACxH,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBACrC,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,YAAY,GAAG,CAAC,KAAY,EAAE,EAAE;YACpC,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC,CAAC;QAEF,mBAAmB;QACnB,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;QAC/C,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QAC7C,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAC7C,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAEzC,yBAAyB;QACzB,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAEzC,6BAA6B;QAC7B,MAAM,YAAY,GAAiB;YACjC,EAAE,EAAE,cAAc;YAClB,QAAQ;YACR,WAAW,EAAE,KAAK,IAAI,EAAE;gBACtB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;gBAChD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;gBAC9C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;gBAC9C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;gBAC1C,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBAC3C,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC5C,CAAC;SACF,CAAC;QAEF,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;QACrD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,eAAe,CACnB,UAAkB,EAClB,SAAiB,EACjB,QAEC;QAED,IAAI,aAAsC,CAAC;QAC3C,IAAI,YAAqC,CAAC;QAE1C,MAAM,eAAe,GAAG,GAAG,EAAE;YAC3B,IAAI,aAAa,IAAI,YAAY,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;gBAC3D,QAAQ,CAAC,YAAY,CAAC;oBACpB,GAAG,EAAE,aAAa;oBAClB,EAAE,EAAE,YAAY;oBAChB,MAAM,EAAE,aAAa,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK;iBACjD,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC;QAEF,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE;YACpD,aAAa,EAAE,CAAC,MAAM,EAAE,EAAE;gBACxB,IAAI,MAAM,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;oBAClC,aAAa,GAAG,MAAM,CAAC;gBACzB,CAAC;qBAAM,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;oBACxC,YAAY,GAAG,MAAM,CAAC;gBACxB,CAAC;gBACD,QAAQ,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC;gBACjC,eAAe,EAAE,CAAC;YACpB,CAAC;YACD,YAAY,EAAE,QAAQ,CAAC,YAAY;YACnC,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,OAAO,EAAE,QAAQ,CAAC,OAAO;SAC1B,CAAC,CAAC;IACL,CAAC;IAED,2BAA2B;IAE3B;;OAEG;IACH,QAAQ,CAAC,OAAe;QACtB,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,OAAe;QACrB,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,+BAA+B;IAE/B;;OAEG;IACH,sBAAsB;QACpB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,EAAU;QACxB,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc;QAClB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC;YAC9C,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;CACF"}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Swap Service
|
|
3
|
+
*
|
|
4
|
+
* Provides DEX swap functionality on Polygon using QuickSwap V3.
|
|
5
|
+
* Supports swapping between various tokens including MATIC, WETH, USDC, USDC.e, USDT, DAI.
|
|
6
|
+
*/
|
|
7
|
+
import { ethers } from 'ethers';
|
|
8
|
+
export declare const QUICKSWAP_ROUTER = "0xf5b509bB0909a69B1c207E495f687a596C168E12";
|
|
9
|
+
export declare const QUICKSWAP_QUOTER = "0xa15F0D7377B2A0C0c10db057f641beD21028FC89";
|
|
10
|
+
export declare const QUICKSWAP_FACTORY = "0x411b0fAcC3489691f28ad58c47006AF5E3Ab3A28";
|
|
11
|
+
export declare const WMATIC = "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270";
|
|
12
|
+
/**
|
|
13
|
+
* Supported tokens on Polygon
|
|
14
|
+
*
|
|
15
|
+
* ⚠️ IMPORTANT: USDC vs USDC.e for Polymarket CTF
|
|
16
|
+
*
|
|
17
|
+
* | Token | Address | Polymarket CTF |
|
|
18
|
+
* |-------------|--------------------------------------------|-----------------
|
|
19
|
+
* | USDC_E | 0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174 | ✅ Required |
|
|
20
|
+
* | USDC/NATIVE | 0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359 | ❌ Not accepted|
|
|
21
|
+
*
|
|
22
|
+
* For Polymarket CTF operations (split/merge/redeem):
|
|
23
|
+
* - Use transferUsdcE() to send USDC.e
|
|
24
|
+
* - Use swap('USDC', 'USDC_E', amount) to convert native USDC to USDC.e
|
|
25
|
+
*
|
|
26
|
+
* For general transfers:
|
|
27
|
+
* - transferUsdc() sends native USDC (most DEXs, CEXs use this)
|
|
28
|
+
* - transferUsdcE() sends bridged USDC.e (Polymarket CTF requires this)
|
|
29
|
+
*/
|
|
30
|
+
export declare const POLYGON_TOKENS: {
|
|
31
|
+
readonly MATIC: "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270";
|
|
32
|
+
readonly WMATIC: "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270";
|
|
33
|
+
readonly USDC: "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359";
|
|
34
|
+
readonly NATIVE_USDC: "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359";
|
|
35
|
+
readonly USDC_E: "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174";
|
|
36
|
+
readonly USDT: "0xc2132D05D31c914a87C6611C10748AEb04B58e8F";
|
|
37
|
+
readonly DAI: "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063";
|
|
38
|
+
readonly WETH: "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619";
|
|
39
|
+
};
|
|
40
|
+
export declare const TOKEN_DECIMALS: Record<string, number>;
|
|
41
|
+
export type SupportedToken = keyof typeof POLYGON_TOKENS;
|
|
42
|
+
export interface SwapQuote {
|
|
43
|
+
tokenIn: string;
|
|
44
|
+
tokenOut: string;
|
|
45
|
+
amountIn: string;
|
|
46
|
+
estimatedAmountOut: string;
|
|
47
|
+
minAmountOut: string;
|
|
48
|
+
slippage: number;
|
|
49
|
+
priceImpact: string;
|
|
50
|
+
}
|
|
51
|
+
/** Quote result from Quoter contract */
|
|
52
|
+
export interface QuoteResult {
|
|
53
|
+
possible: boolean;
|
|
54
|
+
tokenIn: string;
|
|
55
|
+
tokenOut: string;
|
|
56
|
+
amountIn: string;
|
|
57
|
+
amountOut: string | null;
|
|
58
|
+
route: string[];
|
|
59
|
+
poolExists: boolean;
|
|
60
|
+
reason?: string;
|
|
61
|
+
}
|
|
62
|
+
/** Pool info */
|
|
63
|
+
export interface PoolInfo {
|
|
64
|
+
tokenA: string;
|
|
65
|
+
tokenB: string;
|
|
66
|
+
poolAddress: string | null;
|
|
67
|
+
exists: boolean;
|
|
68
|
+
}
|
|
69
|
+
export interface SwapResult {
|
|
70
|
+
success: boolean;
|
|
71
|
+
transactionHash: string;
|
|
72
|
+
tokenIn: string;
|
|
73
|
+
tokenOut: string;
|
|
74
|
+
amountIn: string;
|
|
75
|
+
amountOut: string;
|
|
76
|
+
gasUsed: string;
|
|
77
|
+
}
|
|
78
|
+
export interface TokenBalance {
|
|
79
|
+
token: string;
|
|
80
|
+
symbol: string;
|
|
81
|
+
balance: string;
|
|
82
|
+
decimals: number;
|
|
83
|
+
}
|
|
84
|
+
export interface TransferResult {
|
|
85
|
+
success: boolean;
|
|
86
|
+
transactionHash: string;
|
|
87
|
+
token: string;
|
|
88
|
+
to: string;
|
|
89
|
+
amount: string;
|
|
90
|
+
gasUsed: string;
|
|
91
|
+
}
|
|
92
|
+
export declare class SwapService {
|
|
93
|
+
private signer;
|
|
94
|
+
private provider;
|
|
95
|
+
private router;
|
|
96
|
+
private quoter;
|
|
97
|
+
private factory;
|
|
98
|
+
constructor(signer: ethers.Wallet);
|
|
99
|
+
/**
|
|
100
|
+
* Get dynamic gas options for Polygon network
|
|
101
|
+
* Uses RPC fee data with minimum priority fee of 30 gwei
|
|
102
|
+
*/
|
|
103
|
+
private getGasOptions;
|
|
104
|
+
/**
|
|
105
|
+
* Get the wallet address
|
|
106
|
+
*/
|
|
107
|
+
get address(): string;
|
|
108
|
+
/**
|
|
109
|
+
* Get token address from symbol
|
|
110
|
+
*/
|
|
111
|
+
getTokenAddress(token: string): string;
|
|
112
|
+
/**
|
|
113
|
+
* Get token decimals
|
|
114
|
+
*/
|
|
115
|
+
getTokenDecimals(token: string): number;
|
|
116
|
+
/**
|
|
117
|
+
* Check if a pool exists for a token pair
|
|
118
|
+
*/
|
|
119
|
+
checkPool(tokenA: string, tokenB: string): Promise<PoolInfo>;
|
|
120
|
+
/**
|
|
121
|
+
* Get all available pools for supported tokens
|
|
122
|
+
*/
|
|
123
|
+
getAvailablePools(): Promise<PoolInfo[]>;
|
|
124
|
+
/**
|
|
125
|
+
* Get a quote for a swap (checks if route is possible)
|
|
126
|
+
*/
|
|
127
|
+
getQuote(tokenIn: string, tokenOut: string, amountIn: string): Promise<QuoteResult>;
|
|
128
|
+
/**
|
|
129
|
+
* Execute a multi-hop swap
|
|
130
|
+
*/
|
|
131
|
+
swapMultiHop(tokenIn: string, tokenOut: string, amountIn: string, route: string[], options?: {
|
|
132
|
+
slippage?: number;
|
|
133
|
+
deadline?: number;
|
|
134
|
+
}): Promise<SwapResult>;
|
|
135
|
+
/**
|
|
136
|
+
* Get balances for all supported tokens
|
|
137
|
+
*/
|
|
138
|
+
getBalances(): Promise<TokenBalance[]>;
|
|
139
|
+
/**
|
|
140
|
+
* Get balance for a specific token
|
|
141
|
+
*/
|
|
142
|
+
getBalance(token: string): Promise<string>;
|
|
143
|
+
/**
|
|
144
|
+
* Wrap native MATIC to WMATIC
|
|
145
|
+
*/
|
|
146
|
+
wrapMatic(amount: string): Promise<SwapResult>;
|
|
147
|
+
/**
|
|
148
|
+
* Unwrap WMATIC to native MATIC
|
|
149
|
+
*/
|
|
150
|
+
unwrapMatic(amount: string): Promise<SwapResult>;
|
|
151
|
+
/**
|
|
152
|
+
* Execute a token swap using QuickSwap V3
|
|
153
|
+
*/
|
|
154
|
+
swap(tokenIn: string, tokenOut: string, amountIn: string, options?: {
|
|
155
|
+
slippage?: number;
|
|
156
|
+
deadline?: number;
|
|
157
|
+
}): Promise<SwapResult>;
|
|
158
|
+
/**
|
|
159
|
+
* Swap any supported token to USDC (for deposit)
|
|
160
|
+
*/
|
|
161
|
+
swapToUsdc(tokenIn: string, amountIn: string, options?: {
|
|
162
|
+
usdcType?: 'NATIVE_USDC' | 'USDC_E';
|
|
163
|
+
slippage?: number;
|
|
164
|
+
}): Promise<SwapResult>;
|
|
165
|
+
/**
|
|
166
|
+
* Get list of supported tokens
|
|
167
|
+
*/
|
|
168
|
+
getSupportedTokens(): string[];
|
|
169
|
+
/**
|
|
170
|
+
* Get balances for any wallet address (static method, no signer required)
|
|
171
|
+
*/
|
|
172
|
+
static getWalletBalances(address: string, provider?: ethers.providers.Provider): Promise<TokenBalance[]>;
|
|
173
|
+
/**
|
|
174
|
+
* Get balance for a specific token for any wallet (static)
|
|
175
|
+
*/
|
|
176
|
+
static getWalletBalance(address: string, token: string, provider?: ethers.providers.Provider): Promise<string>;
|
|
177
|
+
/**
|
|
178
|
+
* Transfer native MATIC (POL) to another address
|
|
179
|
+
*/
|
|
180
|
+
transferMatic(to: string, amount: string): Promise<TransferResult>;
|
|
181
|
+
/**
|
|
182
|
+
* Transfer an ERC20 token to another address
|
|
183
|
+
*/
|
|
184
|
+
transfer(token: string, to: string, amount: string): Promise<TransferResult>;
|
|
185
|
+
/**
|
|
186
|
+
* Transfer native USDC to another address
|
|
187
|
+
*
|
|
188
|
+
* ⚠️ WARNING: This transfers NATIVE USDC (0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359)
|
|
189
|
+
*
|
|
190
|
+
* For Polymarket CTF operations, you need USDC.e instead.
|
|
191
|
+
* Use transferUsdcE() for Polymarket CTF compatibility.
|
|
192
|
+
*
|
|
193
|
+
* @see transferUsdcE - For Polymarket CTF operations
|
|
194
|
+
*/
|
|
195
|
+
transferUsdc(to: string, amount: string): Promise<TransferResult>;
|
|
196
|
+
/**
|
|
197
|
+
* Transfer USDC.e (bridged USDC) to another address
|
|
198
|
+
*
|
|
199
|
+
* ✅ This is the correct method for Polymarket CTF operations.
|
|
200
|
+
*
|
|
201
|
+
* Polymarket's Conditional Token Framework (CTF) only accepts
|
|
202
|
+
* USDC.e (0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174).
|
|
203
|
+
*
|
|
204
|
+
* If you're funding a wallet for CTF trading, use this method.
|
|
205
|
+
*
|
|
206
|
+
* @example
|
|
207
|
+
* ```typescript
|
|
208
|
+
* // Fund a session wallet for Polymarket trading
|
|
209
|
+
* await swapService.transferUsdcE(sessionWallet, '100');
|
|
210
|
+
*
|
|
211
|
+
* // The session wallet can now perform CTF operations
|
|
212
|
+
* await ctf.split(conditionId, '100');
|
|
213
|
+
* ```
|
|
214
|
+
*/
|
|
215
|
+
transferUsdcE(to: string, amount: string): Promise<TransferResult>;
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=swap-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swap-service.d.ts","sourceRoot":"","sources":["../../src/services/swap-service.ts"],"names":[],"mappings":"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"}
|