@catalyst-team/poly-sdk 0.3.0 → 0.4.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/README.md +125 -0
- package/dist/clients/ctf-client.d.ts +6 -4
- package/dist/clients/ctf-client.d.ts.map +1 -1
- package/dist/clients/ctf-client.js.map +1 -1
- package/dist/clients/data-api.d.ts +19 -6
- package/dist/clients/data-api.d.ts.map +1 -1
- package/dist/clients/data-api.js +79 -34
- package/dist/clients/data-api.js.map +1 -1
- package/dist/clients/gamma-api.d.ts +5 -0
- package/dist/clients/gamma-api.d.ts.map +1 -1
- package/dist/clients/gamma-api.js +2 -0
- package/dist/clients/gamma-api.js.map +1 -1
- package/dist/core/cache.d.ts +2 -0
- package/dist/core/cache.d.ts.map +1 -1
- package/dist/core/cache.js +4 -0
- package/dist/core/cache.js.map +1 -1
- package/dist/core/rate-limiter.d.ts +2 -1
- package/dist/core/rate-limiter.d.ts.map +1 -1
- package/dist/core/rate-limiter.js +7 -0
- package/dist/core/rate-limiter.js.map +1 -1
- package/dist/core/types.d.ts +105 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +30 -0
- package/dist/core/types.js.map +1 -1
- package/dist/index.d.ts +11 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -2
- package/dist/index.js.map +1 -1
- package/dist/scripts/dip-arb/auto-trade.d.ts +20 -0
- package/dist/scripts/dip-arb/auto-trade.d.ts.map +1 -0
- package/dist/scripts/dip-arb/auto-trade.js +373 -0
- package/dist/scripts/dip-arb/auto-trade.js.map +1 -0
- package/dist/scripts/dip-arb/example-basic.d.ts +30 -0
- package/dist/scripts/dip-arb/example-basic.d.ts.map +1 -0
- package/dist/scripts/dip-arb/example-basic.js +222 -0
- package/dist/scripts/dip-arb/example-basic.js.map +1 -0
- package/dist/scripts/dip-arb/redeem-positions.d.ts +11 -0
- package/dist/scripts/dip-arb/redeem-positions.d.ts.map +1 -0
- package/dist/scripts/dip-arb/redeem-positions.js +201 -0
- package/dist/scripts/dip-arb/redeem-positions.js.map +1 -0
- package/dist/scripts/dip-arb/scan-markets.d.ts +6 -0
- package/dist/scripts/dip-arb/scan-markets.d.ts.map +1 -0
- package/dist/scripts/dip-arb/scan-markets.js +73 -0
- package/dist/scripts/dip-arb/scan-markets.js.map +1 -0
- package/dist/services/arbitrage-service.d.ts.map +1 -1
- package/dist/services/arbitrage-service.js +14 -4
- package/dist/services/arbitrage-service.js.map +1 -1
- package/dist/services/binance-service.d.ts +154 -0
- package/dist/services/binance-service.d.ts.map +1 -0
- package/dist/services/binance-service.js +266 -0
- package/dist/services/binance-service.js.map +1 -0
- package/dist/services/dip-arb-service.d.ts +209 -0
- package/dist/services/dip-arb-service.d.ts.map +1 -0
- package/dist/services/dip-arb-service.js +1602 -0
- package/dist/services/dip-arb-service.js.map +1 -0
- package/dist/services/dip-arb-types.d.ts +553 -0
- package/dist/services/dip-arb-types.d.ts.map +1 -0
- package/dist/services/dip-arb-types.js +164 -0
- package/dist/services/dip-arb-types.js.map +1 -0
- package/dist/services/market-service.d.ts +162 -3
- package/dist/services/market-service.d.ts.map +1 -1
- package/dist/services/market-service.js +427 -14
- package/dist/services/market-service.js.map +1 -1
- package/dist/services/realtime-service-v2.d.ts +1 -0
- package/dist/services/realtime-service-v2.d.ts.map +1 -1
- package/dist/services/realtime-service-v2.js +20 -2
- package/dist/services/realtime-service-v2.js.map +1 -1
- package/dist/services/smart-money-service.d.ts +157 -1
- package/dist/services/smart-money-service.d.ts.map +1 -1
- package/dist/services/smart-money-service.js +224 -0
- package/dist/services/smart-money-service.js.map +1 -1
- package/dist/services/trading-service.d.ts +21 -0
- package/dist/services/trading-service.d.ts.map +1 -1
- package/dist/services/trading-service.js +67 -1
- package/dist/services/trading-service.js.map +1 -1
- package/dist/services/wallet-service.d.ts +43 -2
- package/dist/services/wallet-service.d.ts.map +1 -1
- package/dist/services/wallet-service.js +54 -3
- package/dist/services/wallet-service.js.map +1 -1
- package/dist/src/__tests__/integration/arbitrage-service.integration.test.d.ts +12 -0
- package/dist/src/__tests__/integration/arbitrage-service.integration.test.d.ts.map +1 -0
- package/dist/src/__tests__/integration/arbitrage-service.integration.test.js +267 -0
- package/dist/src/__tests__/integration/arbitrage-service.integration.test.js.map +1 -0
- package/dist/src/__tests__/integration/bridge-client.integration.test.d.ts +11 -0
- package/dist/src/__tests__/integration/bridge-client.integration.test.d.ts.map +1 -0
- package/dist/src/__tests__/integration/bridge-client.integration.test.js +260 -0
- package/dist/src/__tests__/integration/bridge-client.integration.test.js.map +1 -0
- package/dist/src/__tests__/integration/ctf-client.integration.test.d.ts +17 -0
- package/dist/src/__tests__/integration/ctf-client.integration.test.d.ts.map +1 -0
- package/dist/src/__tests__/integration/ctf-client.integration.test.js +234 -0
- package/dist/src/__tests__/integration/ctf-client.integration.test.js.map +1 -0
- package/dist/src/__tests__/integration/data-api.integration.test.d.ts +9 -0
- package/dist/src/__tests__/integration/data-api.integration.test.d.ts.map +1 -0
- package/dist/src/__tests__/integration/data-api.integration.test.js +164 -0
- package/dist/src/__tests__/integration/data-api.integration.test.js.map +1 -0
- package/dist/src/__tests__/integration/gamma-api.integration.test.d.ts +9 -0
- package/dist/src/__tests__/integration/gamma-api.integration.test.d.ts.map +1 -0
- package/dist/src/__tests__/integration/gamma-api.integration.test.js +170 -0
- package/dist/src/__tests__/integration/gamma-api.integration.test.js.map +1 -0
- package/dist/src/__tests__/integration/market-service.integration.test.d.ts +10 -0
- package/dist/src/__tests__/integration/market-service.integration.test.d.ts.map +1 -0
- package/dist/src/__tests__/integration/market-service.integration.test.js +180 -0
- package/dist/src/__tests__/integration/market-service.integration.test.js.map +1 -0
- package/dist/src/__tests__/integration/realtime-service-v2.integration.test.d.ts +10 -0
- package/dist/src/__tests__/integration/realtime-service-v2.integration.test.d.ts.map +1 -0
- package/dist/src/__tests__/integration/realtime-service-v2.integration.test.js +307 -0
- package/dist/src/__tests__/integration/realtime-service-v2.integration.test.js.map +1 -0
- package/dist/src/__tests__/integration/trading-service.integration.test.d.ts +10 -0
- package/dist/src/__tests__/integration/trading-service.integration.test.d.ts.map +1 -0
- package/dist/src/__tests__/integration/trading-service.integration.test.js +58 -0
- package/dist/src/__tests__/integration/trading-service.integration.test.js.map +1 -0
- package/dist/src/__tests__/test-utils.d.ts +92 -0
- package/dist/src/__tests__/test-utils.d.ts.map +1 -0
- package/dist/src/__tests__/test-utils.js +143 -0
- package/dist/src/__tests__/test-utils.js.map +1 -0
- package/dist/src/clients/bridge-client.d.ts +388 -0
- package/dist/src/clients/bridge-client.d.ts.map +1 -0
- package/dist/src/clients/bridge-client.js +587 -0
- package/dist/src/clients/bridge-client.js.map +1 -0
- package/dist/src/clients/ctf-client.d.ts +475 -0
- package/dist/src/clients/ctf-client.d.ts.map +1 -0
- package/dist/src/clients/ctf-client.js +915 -0
- package/dist/src/clients/ctf-client.js.map +1 -0
- package/dist/src/clients/data-api.d.ts +452 -0
- package/dist/src/clients/data-api.d.ts.map +1 -0
- package/dist/src/clients/data-api.js +637 -0
- package/dist/src/clients/data-api.js.map +1 -0
- package/dist/src/clients/gamma-api.d.ts +421 -0
- package/dist/src/clients/gamma-api.d.ts.map +1 -0
- package/dist/src/clients/gamma-api.js +359 -0
- package/dist/src/clients/gamma-api.js.map +1 -0
- package/dist/src/clients/subgraph.d.ts +196 -0
- package/dist/src/clients/subgraph.d.ts.map +1 -0
- package/dist/src/clients/subgraph.js +332 -0
- package/dist/src/clients/subgraph.js.map +1 -0
- package/dist/src/core/cache-adapter-bridge.d.ts +36 -0
- package/dist/src/core/cache-adapter-bridge.d.ts.map +1 -0
- package/dist/src/core/cache-adapter-bridge.js +81 -0
- package/dist/src/core/cache-adapter-bridge.js.map +1 -0
- package/dist/src/core/cache.d.ts +43 -0
- package/dist/src/core/cache.d.ts.map +1 -0
- package/dist/src/core/cache.js +76 -0
- package/dist/src/core/cache.js.map +1 -0
- package/dist/src/core/errors.d.ts +39 -0
- package/dist/src/core/errors.d.ts.map +1 -0
- package/dist/src/core/errors.js +86 -0
- package/dist/src/core/errors.js.map +1 -0
- package/dist/src/core/rate-limiter.d.ts +33 -0
- package/dist/src/core/rate-limiter.d.ts.map +1 -0
- package/dist/src/core/rate-limiter.js +82 -0
- package/dist/src/core/rate-limiter.js.map +1 -0
- package/dist/src/core/types.d.ts +506 -0
- package/dist/src/core/types.d.ts.map +1 -0
- package/dist/src/core/types.js +49 -0
- package/dist/src/core/types.js.map +1 -0
- package/dist/src/core/types.test.d.ts +7 -0
- package/dist/src/core/types.test.d.ts.map +1 -0
- package/dist/src/core/types.test.js +122 -0
- package/dist/src/core/types.test.js.map +1 -0
- package/dist/src/core/unified-cache.d.ts +63 -0
- package/dist/src/core/unified-cache.d.ts.map +1 -0
- package/dist/src/core/unified-cache.js +114 -0
- package/dist/src/core/unified-cache.js.map +1 -0
- package/dist/src/index.d.ts +159 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +262 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/services/arbitrage-service.d.ts +409 -0
- package/dist/src/services/arbitrage-service.d.ts.map +1 -0
- package/dist/src/services/arbitrage-service.js +1450 -0
- package/dist/src/services/arbitrage-service.js.map +1 -0
- package/dist/src/services/authorization-service.d.ts +97 -0
- package/dist/src/services/authorization-service.d.ts.map +1 -0
- package/dist/src/services/authorization-service.js +279 -0
- package/dist/src/services/authorization-service.js.map +1 -0
- package/dist/src/services/binance-service.d.ts +154 -0
- package/dist/src/services/binance-service.d.ts.map +1 -0
- package/dist/src/services/binance-service.js +266 -0
- package/dist/src/services/binance-service.js.map +1 -0
- package/dist/src/services/dip-arb-service.d.ts +245 -0
- package/dist/src/services/dip-arb-service.d.ts.map +1 -0
- package/dist/src/services/dip-arb-service.js +1865 -0
- package/dist/src/services/dip-arb-service.js.map +1 -0
- package/dist/src/services/dip-arb-types.d.ts +553 -0
- package/dist/src/services/dip-arb-types.d.ts.map +1 -0
- package/dist/src/services/dip-arb-types.js +164 -0
- package/dist/src/services/dip-arb-types.js.map +1 -0
- package/dist/src/services/market-service.d.ts +370 -0
- package/dist/src/services/market-service.d.ts.map +1 -0
- package/dist/src/services/market-service.js +1200 -0
- package/dist/src/services/market-service.js.map +1 -0
- package/dist/src/services/onchain-service.d.ts +309 -0
- package/dist/src/services/onchain-service.d.ts.map +1 -0
- package/dist/src/services/onchain-service.js +417 -0
- package/dist/src/services/onchain-service.js.map +1 -0
- package/dist/src/services/realtime-service-v2.d.ts +367 -0
- package/dist/src/services/realtime-service-v2.d.ts.map +1 -0
- package/dist/src/services/realtime-service-v2.js +876 -0
- package/dist/src/services/realtime-service-v2.js.map +1 -0
- package/dist/src/services/smart-money-service.d.ts +352 -0
- package/dist/src/services/smart-money-service.d.ts.map +1 -0
- package/dist/src/services/smart-money-service.js +582 -0
- package/dist/src/services/smart-money-service.js.map +1 -0
- package/dist/src/services/swap-service.d.ts +217 -0
- package/dist/src/services/swap-service.d.ts.map +1 -0
- package/dist/src/services/swap-service.js +695 -0
- package/dist/src/services/swap-service.js.map +1 -0
- package/dist/src/services/trading-service.d.ts +177 -0
- package/dist/src/services/trading-service.d.ts.map +1 -0
- package/dist/src/services/trading-service.js +422 -0
- package/dist/src/services/trading-service.js.map +1 -0
- package/dist/src/services/wallet-service.d.ts +316 -0
- package/dist/src/services/wallet-service.d.ts.map +1 -0
- package/dist/src/services/wallet-service.js +681 -0
- package/dist/src/services/wallet-service.js.map +1 -0
- package/dist/src/utils/price-utils.d.ts +153 -0
- package/dist/src/utils/price-utils.d.ts.map +1 -0
- package/dist/src/utils/price-utils.js +236 -0
- package/dist/src/utils/price-utils.js.map +1 -0
- package/dist/src/utils/price-utils.test.d.ts +5 -0
- package/dist/src/utils/price-utils.test.d.ts.map +1 -0
- package/dist/src/utils/price-utils.test.js +192 -0
- package/dist/src/utils/price-utils.test.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Polymarket Subgraph Client
|
|
3
|
+
*
|
|
4
|
+
* 官方文档: https://docs.polymarket.com/developers/subgraph/overview
|
|
5
|
+
* Schema 仓库: https://github.com/Polymarket/polymarket-subgraph
|
|
6
|
+
*
|
|
7
|
+
* 5 个 Subgraph:
|
|
8
|
+
* - Positions (0.0.7): 用户余额、Net 余额
|
|
9
|
+
* - PnL (0.0.14): 用户持仓、PnL、Condition 结算状态
|
|
10
|
+
* - Activity (0.0.4): Split/Merge/Redemption 事件
|
|
11
|
+
* - OI (0.0.6): 市场/全局 Open Interest
|
|
12
|
+
* - Orderbook (0.0.1): 订单成交事件
|
|
13
|
+
*/
|
|
14
|
+
import { ApiType } from '../core/rate-limiter.js';
|
|
15
|
+
// ==================== 端点配置 ====================
|
|
16
|
+
export const SUBGRAPH_ENDPOINTS = {
|
|
17
|
+
positions: 'https://api.goldsky.com/api/public/project_cl6mb8i9h0003e201j6li0diw/subgraphs/positions-subgraph/0.0.7/gn',
|
|
18
|
+
pnl: 'https://api.goldsky.com/api/public/project_cl6mb8i9h0003e201j6li0diw/subgraphs/pnl-subgraph/0.0.14/gn',
|
|
19
|
+
activity: 'https://api.goldsky.com/api/public/project_cl6mb8i9h0003e201j6li0diw/subgraphs/activity-subgraph/0.0.4/gn',
|
|
20
|
+
oi: 'https://api.goldsky.com/api/public/project_cl6mb8i9h0003e201j6li0diw/subgraphs/oi-subgraph/0.0.6/gn',
|
|
21
|
+
orderbook: 'https://api.goldsky.com/api/public/project_cl6mb8i9h0003e201j6li0diw/subgraphs/orderbook-subgraph/0.0.1/gn',
|
|
22
|
+
};
|
|
23
|
+
// ==================== 客户端实现 ====================
|
|
24
|
+
export class SubgraphClient {
|
|
25
|
+
rateLimiter;
|
|
26
|
+
cache;
|
|
27
|
+
constructor(rateLimiter, cache) {
|
|
28
|
+
this.rateLimiter = rateLimiter;
|
|
29
|
+
this.cache = cache;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* 执行 GraphQL 查询
|
|
33
|
+
*/
|
|
34
|
+
async query(subgraph, queryStr) {
|
|
35
|
+
const endpoint = SUBGRAPH_ENDPOINTS[subgraph];
|
|
36
|
+
const cacheKey = `subgraph:${subgraph}:${queryStr}`;
|
|
37
|
+
// 检查缓存
|
|
38
|
+
const cached = await this.cache.get(cacheKey);
|
|
39
|
+
if (cached !== undefined) {
|
|
40
|
+
return cached;
|
|
41
|
+
}
|
|
42
|
+
// 限流并执行请求
|
|
43
|
+
const data = await this.rateLimiter.execute(ApiType.SUBGRAPH, async () => {
|
|
44
|
+
const response = await fetch(endpoint, {
|
|
45
|
+
method: 'POST',
|
|
46
|
+
headers: { 'Content-Type': 'application/json' },
|
|
47
|
+
body: JSON.stringify({ query: queryStr }),
|
|
48
|
+
});
|
|
49
|
+
if (!response.ok) {
|
|
50
|
+
const text = await response.text();
|
|
51
|
+
throw new Error(`Subgraph request failed: HTTP ${response.status} - ${text.slice(0, 200)}`);
|
|
52
|
+
}
|
|
53
|
+
const result = (await response.json());
|
|
54
|
+
if (result.errors && result.errors.length > 0) {
|
|
55
|
+
throw new Error(`GraphQL error: ${result.errors.map((e) => e.message).join(', ')}`);
|
|
56
|
+
}
|
|
57
|
+
if (!result.data) {
|
|
58
|
+
throw new Error(`No data returned from subgraph. Response: ${JSON.stringify(result).slice(0, 200)}`);
|
|
59
|
+
}
|
|
60
|
+
return result.data;
|
|
61
|
+
});
|
|
62
|
+
// 缓存结果 (短 TTL,subgraph 数据更新较快)
|
|
63
|
+
await this.cache.set(cacheKey, data, 30_000);
|
|
64
|
+
return data;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* 构建查询字符串
|
|
68
|
+
*/
|
|
69
|
+
buildQuery(entityName, fields, params = {}) {
|
|
70
|
+
const args = [];
|
|
71
|
+
if (params.first !== undefined) {
|
|
72
|
+
args.push(`first: ${params.first}`);
|
|
73
|
+
}
|
|
74
|
+
if (params.skip !== undefined) {
|
|
75
|
+
args.push(`skip: ${params.skip}`);
|
|
76
|
+
}
|
|
77
|
+
if (params.orderBy) {
|
|
78
|
+
args.push(`orderBy: ${params.orderBy}`);
|
|
79
|
+
}
|
|
80
|
+
if (params.orderDirection) {
|
|
81
|
+
args.push(`orderDirection: ${params.orderDirection}`);
|
|
82
|
+
}
|
|
83
|
+
if (params.where && Object.keys(params.where).length > 0) {
|
|
84
|
+
// Build where clause manually to avoid JSON quote issues
|
|
85
|
+
const whereParts = Object.entries(params.where).map(([key, value]) => {
|
|
86
|
+
if (typeof value === 'string') {
|
|
87
|
+
return `${key}: "${value}"`;
|
|
88
|
+
}
|
|
89
|
+
return `${key}: ${JSON.stringify(value)}`;
|
|
90
|
+
});
|
|
91
|
+
args.push(`where: { ${whereParts.join(', ')} }`);
|
|
92
|
+
}
|
|
93
|
+
const argsStr = args.length > 0 ? `(${args.join(', ')})` : '';
|
|
94
|
+
const fieldsStr = fields.join('\n ');
|
|
95
|
+
return `{
|
|
96
|
+
${entityName}${argsStr} {
|
|
97
|
+
${fieldsStr}
|
|
98
|
+
}
|
|
99
|
+
}`;
|
|
100
|
+
}
|
|
101
|
+
// ==================== Positions Subgraph ====================
|
|
102
|
+
/**
|
|
103
|
+
* 获取用户余额
|
|
104
|
+
*/
|
|
105
|
+
async getUserBalances(user, params = {}) {
|
|
106
|
+
const query = this.buildQuery('userBalances', ['id', 'user', 'asset', 'balance'], {
|
|
107
|
+
...params,
|
|
108
|
+
where: { ...params.where, user: user.toLowerCase() },
|
|
109
|
+
});
|
|
110
|
+
const result = await this.query('positions', query);
|
|
111
|
+
return result.userBalances;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* 获取 Net 用户余额
|
|
115
|
+
*/
|
|
116
|
+
async getNetUserBalances(user, params = {}) {
|
|
117
|
+
const query = this.buildQuery('netUserBalances', ['id', 'user', 'asset', 'balance'], {
|
|
118
|
+
...params,
|
|
119
|
+
where: { ...params.where, user: user.toLowerCase() },
|
|
120
|
+
});
|
|
121
|
+
const result = await this.query('positions', query);
|
|
122
|
+
return result.netUserBalances;
|
|
123
|
+
}
|
|
124
|
+
// ==================== PnL Subgraph ====================
|
|
125
|
+
/**
|
|
126
|
+
* 获取用户持仓 (含 PnL)
|
|
127
|
+
*/
|
|
128
|
+
async getUserPositions(user, params = {}) {
|
|
129
|
+
const query = this.buildQuery('userPositions', ['id', 'user', 'tokenId', 'amount', 'avgPrice', 'realizedPnl', 'totalBought'], {
|
|
130
|
+
orderBy: 'realizedPnl',
|
|
131
|
+
orderDirection: 'desc',
|
|
132
|
+
...params,
|
|
133
|
+
where: { ...params.where, user: user.toLowerCase() },
|
|
134
|
+
});
|
|
135
|
+
const result = await this.query('pnl', query);
|
|
136
|
+
return result.userPositions;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* 获取 Condition 结算状态
|
|
140
|
+
*/
|
|
141
|
+
async getConditions(params = {}) {
|
|
142
|
+
const query = this.buildQuery('conditions', ['id', 'positionIds', 'payoutNumerators', 'payoutDenominator'], params);
|
|
143
|
+
const result = await this.query('pnl', query);
|
|
144
|
+
return result.conditions;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* 获取单个 Condition
|
|
148
|
+
*/
|
|
149
|
+
async getCondition(conditionId) {
|
|
150
|
+
const query = `{
|
|
151
|
+
condition(id: "${conditionId.toLowerCase()}") {
|
|
152
|
+
id
|
|
153
|
+
positionIds
|
|
154
|
+
payoutNumerators
|
|
155
|
+
payoutDenominator
|
|
156
|
+
}
|
|
157
|
+
}`;
|
|
158
|
+
const result = await this.query('pnl', query);
|
|
159
|
+
return result.condition;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* 检查 Condition 是否已结算
|
|
163
|
+
*/
|
|
164
|
+
async isConditionResolved(conditionId) {
|
|
165
|
+
const condition = await this.getCondition(conditionId);
|
|
166
|
+
if (!condition)
|
|
167
|
+
return false;
|
|
168
|
+
return condition.payoutNumerators.length > 0 && condition.payoutDenominator !== '0';
|
|
169
|
+
}
|
|
170
|
+
// ==================== Activity Subgraph ====================
|
|
171
|
+
/**
|
|
172
|
+
* 获取用户的 Split 事件
|
|
173
|
+
*/
|
|
174
|
+
async getSplits(user, params = {}) {
|
|
175
|
+
const query = this.buildQuery('splits', ['id', 'timestamp', 'stakeholder', 'condition', 'amount'], {
|
|
176
|
+
orderBy: 'timestamp',
|
|
177
|
+
orderDirection: 'desc',
|
|
178
|
+
...params,
|
|
179
|
+
where: { ...params.where, stakeholder: user.toLowerCase() },
|
|
180
|
+
});
|
|
181
|
+
const result = await this.query('activity', query);
|
|
182
|
+
return result.splits;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* 获取用户的 Merge 事件
|
|
186
|
+
*/
|
|
187
|
+
async getMerges(user, params = {}) {
|
|
188
|
+
const query = this.buildQuery('merges', ['id', 'timestamp', 'stakeholder', 'condition', 'amount'], {
|
|
189
|
+
orderBy: 'timestamp',
|
|
190
|
+
orderDirection: 'desc',
|
|
191
|
+
...params,
|
|
192
|
+
where: { ...params.where, stakeholder: user.toLowerCase() },
|
|
193
|
+
});
|
|
194
|
+
const result = await this.query('activity', query);
|
|
195
|
+
return result.merges;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* 获取用户的 Redemption 事件
|
|
199
|
+
*/
|
|
200
|
+
async getRedemptions(user, params = {}) {
|
|
201
|
+
const query = this.buildQuery('redemptions', ['id', 'timestamp', 'redeemer', 'condition', 'payout'], {
|
|
202
|
+
orderBy: 'timestamp',
|
|
203
|
+
orderDirection: 'desc',
|
|
204
|
+
...params,
|
|
205
|
+
where: { ...params.where, redeemer: user.toLowerCase() },
|
|
206
|
+
});
|
|
207
|
+
const result = await this.query('activity', query);
|
|
208
|
+
return result.redemptions;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* 获取最近的 Redemption 事件 (不限用户)
|
|
212
|
+
*/
|
|
213
|
+
async getRecentRedemptions(params = {}) {
|
|
214
|
+
const query = this.buildQuery('redemptions', ['id', 'timestamp', 'redeemer', 'condition', 'payout'], {
|
|
215
|
+
orderBy: 'timestamp',
|
|
216
|
+
orderDirection: 'desc',
|
|
217
|
+
first: 100,
|
|
218
|
+
...params,
|
|
219
|
+
});
|
|
220
|
+
const result = await this.query('activity', query);
|
|
221
|
+
return result.redemptions;
|
|
222
|
+
}
|
|
223
|
+
// ==================== OI Subgraph ====================
|
|
224
|
+
/**
|
|
225
|
+
* 获取市场 Open Interest
|
|
226
|
+
*/
|
|
227
|
+
async getMarketOpenInterest(conditionId) {
|
|
228
|
+
const query = `{
|
|
229
|
+
marketOpenInterest(id: "${conditionId.toLowerCase()}") {
|
|
230
|
+
id
|
|
231
|
+
amount
|
|
232
|
+
}
|
|
233
|
+
}`;
|
|
234
|
+
const result = await this.query('oi', query);
|
|
235
|
+
return result.marketOpenInterest;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* 获取 Top 市场按 OI 排序
|
|
239
|
+
*/
|
|
240
|
+
async getTopMarketsByOI(params = {}) {
|
|
241
|
+
const query = this.buildQuery('marketOpenInterests', ['id', 'amount'], {
|
|
242
|
+
orderBy: 'amount',
|
|
243
|
+
orderDirection: 'desc',
|
|
244
|
+
first: 50,
|
|
245
|
+
...params,
|
|
246
|
+
});
|
|
247
|
+
const result = await this.query('oi', query);
|
|
248
|
+
return result.marketOpenInterests;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* 获取全局 Open Interest
|
|
252
|
+
*/
|
|
253
|
+
async getGlobalOpenInterest() {
|
|
254
|
+
const query = `{
|
|
255
|
+
globalOpenInterests(first: 1) {
|
|
256
|
+
id
|
|
257
|
+
amount
|
|
258
|
+
}
|
|
259
|
+
}`;
|
|
260
|
+
const result = await this.query('oi', query);
|
|
261
|
+
return result.globalOpenInterests[0]?.amount || '0';
|
|
262
|
+
}
|
|
263
|
+
// ==================== Orderbook Subgraph ====================
|
|
264
|
+
/**
|
|
265
|
+
* 获取订单成交事件
|
|
266
|
+
*/
|
|
267
|
+
async getOrderFilledEvents(params = {}) {
|
|
268
|
+
const query = this.buildQuery('orderFilledEvents', ['id', 'transactionHash', 'timestamp', 'orderHash', 'maker', 'taker', 'makerAssetId', 'takerAssetId', 'makerAmountFilled', 'takerAmountFilled', 'fee'], {
|
|
269
|
+
orderBy: 'timestamp',
|
|
270
|
+
orderDirection: 'desc',
|
|
271
|
+
first: 100,
|
|
272
|
+
...params,
|
|
273
|
+
});
|
|
274
|
+
const result = await this.query('orderbook', query);
|
|
275
|
+
return result.orderFilledEvents;
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* 获取用户作为 maker 的成交事件
|
|
279
|
+
*/
|
|
280
|
+
async getMakerFills(maker, params = {}) {
|
|
281
|
+
const query = this.buildQuery('orderFilledEvents', ['id', 'transactionHash', 'timestamp', 'orderHash', 'maker', 'taker', 'makerAssetId', 'takerAssetId', 'makerAmountFilled', 'takerAmountFilled', 'fee'], {
|
|
282
|
+
orderBy: 'timestamp',
|
|
283
|
+
orderDirection: 'desc',
|
|
284
|
+
...params,
|
|
285
|
+
where: { ...params.where, maker: maker.toLowerCase() },
|
|
286
|
+
});
|
|
287
|
+
const result = await this.query('orderbook', query);
|
|
288
|
+
return result.orderFilledEvents;
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* 获取用户作为 taker 的成交事件
|
|
292
|
+
*/
|
|
293
|
+
async getTakerFills(taker, params = {}) {
|
|
294
|
+
const query = this.buildQuery('orderFilledEvents', ['id', 'transactionHash', 'timestamp', 'orderHash', 'maker', 'taker', 'makerAssetId', 'takerAssetId', 'makerAmountFilled', 'takerAmountFilled', 'fee'], {
|
|
295
|
+
orderBy: 'timestamp',
|
|
296
|
+
orderDirection: 'desc',
|
|
297
|
+
...params,
|
|
298
|
+
where: { ...params.where, taker: taker.toLowerCase() },
|
|
299
|
+
});
|
|
300
|
+
const result = await this.query('orderbook', query);
|
|
301
|
+
return result.orderFilledEvents;
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* 获取市场数据
|
|
305
|
+
*/
|
|
306
|
+
async getMarketData(assetId) {
|
|
307
|
+
const query = `{
|
|
308
|
+
marketData(id: "${assetId}") {
|
|
309
|
+
id
|
|
310
|
+
volume
|
|
311
|
+
}
|
|
312
|
+
}`;
|
|
313
|
+
const result = await this.query('orderbook', query);
|
|
314
|
+
return result.marketData;
|
|
315
|
+
}
|
|
316
|
+
// ==================== 便捷方法 ====================
|
|
317
|
+
/**
|
|
318
|
+
* 获取用户完整的链上活动摘要
|
|
319
|
+
*/
|
|
320
|
+
async getUserActivitySummary(user) {
|
|
321
|
+
const [positions, splits, merges, redemptions, makerFills, takerFills] = await Promise.all([
|
|
322
|
+
this.getUserPositions(user, { first: 100 }),
|
|
323
|
+
this.getSplits(user, { first: 50 }),
|
|
324
|
+
this.getMerges(user, { first: 50 }),
|
|
325
|
+
this.getRedemptions(user, { first: 50 }),
|
|
326
|
+
this.getMakerFills(user, { first: 50 }),
|
|
327
|
+
this.getTakerFills(user, { first: 50 }),
|
|
328
|
+
]);
|
|
329
|
+
return { positions, splits, merges, redemptions, makerFills, takerFills };
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
//# sourceMappingURL=subgraph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subgraph.js","sourceRoot":"","sources":["../../../src/clients/subgraph.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bridge adapter between legacy Cache class and new CacheAdapter interface
|
|
3
|
+
*
|
|
4
|
+
* This allows the SDK to work with both:
|
|
5
|
+
* 1. Legacy internal Cache (synchronous, millisecond TTL)
|
|
6
|
+
* 2. New CacheAdapter interface (async, second TTL)
|
|
7
|
+
*/
|
|
8
|
+
import type { CacheAdapter } from '@catalyst-team/cache';
|
|
9
|
+
import { Cache } from './cache.js';
|
|
10
|
+
/**
|
|
11
|
+
* Wraps the legacy Cache class to implement CacheAdapter interface
|
|
12
|
+
*/
|
|
13
|
+
export declare class LegacyCacheAdapter implements CacheAdapter {
|
|
14
|
+
private cache;
|
|
15
|
+
constructor(cache: Cache);
|
|
16
|
+
get<T>(key: string): Promise<T | null>;
|
|
17
|
+
set<T>(key: string, value: T, ttl?: number): Promise<void>;
|
|
18
|
+
del(key: string): Promise<void>;
|
|
19
|
+
exists(key: string): Promise<boolean>;
|
|
20
|
+
clear(): Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Wraps a CacheAdapter to provide the legacy Cache interface
|
|
24
|
+
* This allows using new cache adapters with code expecting the old Cache class
|
|
25
|
+
*/
|
|
26
|
+
export declare class CacheAdapterWrapper {
|
|
27
|
+
private adapter;
|
|
28
|
+
constructor(adapter: CacheAdapter);
|
|
29
|
+
get<T>(key: string): T | undefined;
|
|
30
|
+
set<T>(key: string, value: T, ttlMs: number): void;
|
|
31
|
+
getOrSet<T>(key: string, ttlMs: number, factory: () => Promise<T>): Promise<T>;
|
|
32
|
+
invalidate(pattern: string): void;
|
|
33
|
+
clear(): void;
|
|
34
|
+
size(): number;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=cache-adapter-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-adapter-bridge.d.ts","sourceRoot":"","sources":["../../../src/core/cache-adapter-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC;;GAEG;AACH,qBAAa,kBAAmB,YAAW,YAAY;IACzC,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,KAAK;IAE1B,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAKtC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM1D,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/B,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKrC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B;AAED;;;GAGG;AACH,qBAAa,mBAAmB;IAClB,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,YAAY;IAEzC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAUlC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAM5C,QAAQ,CAAC,CAAC,EACd,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,CAAC,CAAC;IAUb,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAMjC,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,MAAM;CAIf"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bridge adapter between legacy Cache class and new CacheAdapter interface
|
|
3
|
+
*
|
|
4
|
+
* This allows the SDK to work with both:
|
|
5
|
+
* 1. Legacy internal Cache (synchronous, millisecond TTL)
|
|
6
|
+
* 2. New CacheAdapter interface (async, second TTL)
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Wraps the legacy Cache class to implement CacheAdapter interface
|
|
10
|
+
*/
|
|
11
|
+
export class LegacyCacheAdapter {
|
|
12
|
+
cache;
|
|
13
|
+
constructor(cache) {
|
|
14
|
+
this.cache = cache;
|
|
15
|
+
}
|
|
16
|
+
async get(key) {
|
|
17
|
+
const value = this.cache.get(key);
|
|
18
|
+
return value === undefined ? null : value;
|
|
19
|
+
}
|
|
20
|
+
async set(key, value, ttl) {
|
|
21
|
+
// Convert seconds to milliseconds (CacheAdapter uses seconds, Cache uses ms)
|
|
22
|
+
const ttlMs = ttl ? ttl * 1000 : 60000; // Default 60s
|
|
23
|
+
this.cache.set(key, value, ttlMs);
|
|
24
|
+
}
|
|
25
|
+
async del(key) {
|
|
26
|
+
this.cache.invalidate(key);
|
|
27
|
+
}
|
|
28
|
+
async exists(key) {
|
|
29
|
+
const value = this.cache.get(key);
|
|
30
|
+
return value !== undefined;
|
|
31
|
+
}
|
|
32
|
+
async clear() {
|
|
33
|
+
this.cache.clear();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Wraps a CacheAdapter to provide the legacy Cache interface
|
|
38
|
+
* This allows using new cache adapters with code expecting the old Cache class
|
|
39
|
+
*/
|
|
40
|
+
export class CacheAdapterWrapper {
|
|
41
|
+
adapter;
|
|
42
|
+
constructor(adapter) {
|
|
43
|
+
this.adapter = adapter;
|
|
44
|
+
}
|
|
45
|
+
get(key) {
|
|
46
|
+
// Note: This makes an async operation sync, which may cause issues
|
|
47
|
+
// However, we need to maintain backward compatibility
|
|
48
|
+
let result;
|
|
49
|
+
this.adapter.get(key).then((value) => {
|
|
50
|
+
result = value ?? undefined;
|
|
51
|
+
});
|
|
52
|
+
return result;
|
|
53
|
+
}
|
|
54
|
+
set(key, value, ttlMs) {
|
|
55
|
+
// Convert milliseconds to seconds
|
|
56
|
+
const ttlSeconds = Math.ceil(ttlMs / 1000);
|
|
57
|
+
void this.adapter.set(key, value, ttlSeconds);
|
|
58
|
+
}
|
|
59
|
+
async getOrSet(key, ttlMs, factory) {
|
|
60
|
+
const cached = await this.adapter.get(key);
|
|
61
|
+
if (cached !== null)
|
|
62
|
+
return cached;
|
|
63
|
+
const value = await factory();
|
|
64
|
+
const ttlSeconds = Math.ceil(ttlMs / 1000);
|
|
65
|
+
await this.adapter.set(key, value, ttlSeconds);
|
|
66
|
+
return value;
|
|
67
|
+
}
|
|
68
|
+
invalidate(pattern) {
|
|
69
|
+
// CacheAdapter doesn't have pattern matching, so we can't implement this
|
|
70
|
+
// This is a limitation of the adapter approach
|
|
71
|
+
console.warn('invalidate(pattern) not supported with external cache adapter');
|
|
72
|
+
}
|
|
73
|
+
clear() {
|
|
74
|
+
void this.adapter.clear?.();
|
|
75
|
+
}
|
|
76
|
+
size() {
|
|
77
|
+
// CacheAdapter doesn't expose size, return -1 to indicate unknown
|
|
78
|
+
return -1;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=cache-adapter-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-adapter-bridge.js","sourceRoot":"","sources":["../../../src/core/cache-adapter-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH;;GAEG;AACH,MAAM,OAAO,kBAAkB;IACT;IAApB,YAAoB,KAAY;QAAZ,UAAK,GAAL,KAAK,CAAO;IAAG,CAAC;IAEpC,KAAK,CAAC,GAAG,CAAI,GAAW;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAI,GAAG,CAAC,CAAC;QACrC,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,GAAW,EAAE,KAAQ,EAAE,GAAY;QAC9C,6EAA6E;QAC7E,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,cAAc;QACtD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,OAAO,KAAK,KAAK,SAAS,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,mBAAmB;IACV;IAApB,YAAoB,OAAqB;QAArB,YAAO,GAAP,OAAO,CAAc;IAAG,CAAC;IAE7C,GAAG,CAAI,GAAW;QAChB,mEAAmE;QACnE,sDAAsD;QACtD,IAAI,MAAqB,CAAC;QAC1B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YACtC,MAAM,GAAG,KAAK,IAAI,SAAS,CAAC;QAC9B,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,GAAG,CAAI,GAAW,EAAE,KAAQ,EAAE,KAAa;QACzC,kCAAkC;QAClC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;QAC3C,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,GAAW,EACX,KAAa,EACb,OAAyB;QAEzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAI,GAAG,CAAC,CAAC;QAC9C,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,MAAM,CAAC;QAEnC,MAAM,KAAK,GAAG,MAAM,OAAO,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;QAC3C,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;QAC/C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,UAAU,CAAC,OAAe;QACxB,yEAAyE;QACzE,+CAA+C;QAC/C,OAAO,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;IAChF,CAAC;IAED,KAAK;QACH,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;IAC9B,CAAC;IAED,IAAI;QACF,kEAAkE;QAClE,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;CACF"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simple in-memory cache with TTL support
|
|
3
|
+
*/
|
|
4
|
+
export declare class Cache {
|
|
5
|
+
private store;
|
|
6
|
+
/**
|
|
7
|
+
* Get a cached value
|
|
8
|
+
*/
|
|
9
|
+
get<T>(key: string): T | undefined;
|
|
10
|
+
/**
|
|
11
|
+
* Set a cached value with TTL
|
|
12
|
+
*/
|
|
13
|
+
set<T>(key: string, value: T, ttlMs: number): void;
|
|
14
|
+
/**
|
|
15
|
+
* Get a cached value or set it if not present
|
|
16
|
+
*/
|
|
17
|
+
getOrSet<T>(key: string, ttlMs: number, factory: () => Promise<T>): Promise<T>;
|
|
18
|
+
/**
|
|
19
|
+
* Invalidate all keys matching a pattern
|
|
20
|
+
*/
|
|
21
|
+
invalidate(pattern: string): void;
|
|
22
|
+
/**
|
|
23
|
+
* Clear all cached values
|
|
24
|
+
*/
|
|
25
|
+
clear(): void;
|
|
26
|
+
/**
|
|
27
|
+
* Get the number of cached entries
|
|
28
|
+
*/
|
|
29
|
+
size(): number;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Cache TTL constants (in milliseconds)
|
|
33
|
+
*/
|
|
34
|
+
export declare const CACHE_TTL: {
|
|
35
|
+
MARKET_INFO: number;
|
|
36
|
+
WALLET_POSITIONS: number;
|
|
37
|
+
LEADERBOARD: number;
|
|
38
|
+
TICK_SIZE: number;
|
|
39
|
+
ACTIVITY: number;
|
|
40
|
+
BINANCE_KLINE: number;
|
|
41
|
+
BINANCE_PRICE: number;
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../src/core/cache.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,qBAAa,KAAK;IAChB,OAAO,CAAC,KAAK,CAA+C;IAE5D;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAUlC;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAOlD;;OAEG;IACG,QAAQ,CAAC,CAAC,EACd,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,CAAC,CAAC;IAQb;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQjC;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,IAAI,IAAI,MAAM;CAGf;AAED;;GAEG;AACH,eAAO,MAAM,SAAS;;;;;;;;CAUrB,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simple in-memory cache with TTL support
|
|
3
|
+
*/
|
|
4
|
+
export class Cache {
|
|
5
|
+
store = new Map();
|
|
6
|
+
/**
|
|
7
|
+
* Get a cached value
|
|
8
|
+
*/
|
|
9
|
+
get(key) {
|
|
10
|
+
const entry = this.store.get(key);
|
|
11
|
+
if (!entry)
|
|
12
|
+
return undefined;
|
|
13
|
+
if (Date.now() > entry.expiresAt) {
|
|
14
|
+
this.store.delete(key);
|
|
15
|
+
return undefined;
|
|
16
|
+
}
|
|
17
|
+
return entry.value;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Set a cached value with TTL
|
|
21
|
+
*/
|
|
22
|
+
set(key, value, ttlMs) {
|
|
23
|
+
this.store.set(key, {
|
|
24
|
+
value,
|
|
25
|
+
expiresAt: Date.now() + ttlMs,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Get a cached value or set it if not present
|
|
30
|
+
*/
|
|
31
|
+
async getOrSet(key, ttlMs, factory) {
|
|
32
|
+
const cached = this.get(key);
|
|
33
|
+
if (cached !== undefined)
|
|
34
|
+
return cached;
|
|
35
|
+
const value = await factory();
|
|
36
|
+
this.set(key, value, ttlMs);
|
|
37
|
+
return value;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Invalidate all keys matching a pattern
|
|
41
|
+
*/
|
|
42
|
+
invalidate(pattern) {
|
|
43
|
+
for (const key of this.store.keys()) {
|
|
44
|
+
if (key.includes(pattern)) {
|
|
45
|
+
this.store.delete(key);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Clear all cached values
|
|
51
|
+
*/
|
|
52
|
+
clear() {
|
|
53
|
+
this.store.clear();
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Get the number of cached entries
|
|
57
|
+
*/
|
|
58
|
+
size() {
|
|
59
|
+
return this.store.size;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Cache TTL constants (in milliseconds)
|
|
64
|
+
*/
|
|
65
|
+
export const CACHE_TTL = {
|
|
66
|
+
MARKET_INFO: 60 * 1000, // 1 minute
|
|
67
|
+
WALLET_POSITIONS: 5 * 60 * 1000, // 5 minutes
|
|
68
|
+
LEADERBOARD: 60 * 60 * 1000, // 1 hour
|
|
69
|
+
TICK_SIZE: 24 * 60 * 60 * 1000, // 24 hours
|
|
70
|
+
ACTIVITY: 2 * 60 * 1000, // 2 minutes (wallet activity data)
|
|
71
|
+
// Binance K-line cache (historical data doesn't change)
|
|
72
|
+
BINANCE_KLINE: 60 * 1000, // 1 minute
|
|
73
|
+
// Binance current price cache (more volatile)
|
|
74
|
+
BINANCE_PRICE: 5 * 1000, // 5 seconds
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/core/cache.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,MAAM,OAAO,KAAK;IACR,KAAK,GAAqC,IAAI,GAAG,EAAE,CAAC;IAE5D;;OAEG;IACH,GAAG,CAAI,GAAW;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAC7B,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,KAAK,CAAC,KAAU,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,GAAG,CAAI,GAAW,EAAE,KAAQ,EAAE,KAAa;QACzC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;YAClB,KAAK;YACL,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;SAC9B,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CACZ,GAAW,EACX,KAAa,EACb,OAAyB;QAEzB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAI,GAAG,CAAC,CAAC;QAChC,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;QACxC,MAAM,KAAK,GAAG,MAAM,OAAO,EAAE,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAC5B,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,OAAe;QACxB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YACpC,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,WAAW,EAAE,EAAE,GAAG,IAAI,EAAE,WAAW;IACnC,gBAAgB,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,YAAY;IAC7C,WAAW,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,SAAS;IACtC,SAAS,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,WAAW;IAC3C,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,mCAAmC;IAC5D,wDAAwD;IACxD,aAAa,EAAE,EAAE,GAAG,IAAI,EAAE,WAAW;IACrC,8CAA8C;IAC9C,aAAa,EAAE,CAAC,GAAG,IAAI,EAAE,YAAY;CACtC,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified error handling for Polymarket SDK
|
|
3
|
+
*/
|
|
4
|
+
export declare enum ErrorCode {
|
|
5
|
+
NETWORK_ERROR = "NETWORK_ERROR",
|
|
6
|
+
TIMEOUT = "TIMEOUT",
|
|
7
|
+
RATE_LIMITED = "RATE_LIMITED",
|
|
8
|
+
AUTH_FAILED = "AUTH_FAILED",
|
|
9
|
+
API_KEY_EXPIRED = "API_KEY_EXPIRED",
|
|
10
|
+
INVALID_SIGNATURE = "INVALID_SIGNATURE",
|
|
11
|
+
MARKET_NOT_FOUND = "MARKET_NOT_FOUND",
|
|
12
|
+
WALLET_NOT_FOUND = "WALLET_NOT_FOUND",
|
|
13
|
+
INVALID_RESPONSE = "INVALID_RESPONSE",
|
|
14
|
+
INSUFFICIENT_BALANCE = "INSUFFICIENT_BALANCE",
|
|
15
|
+
ORDER_REJECTED = "ORDER_REJECTED",
|
|
16
|
+
ORDER_FAILED = "ORDER_FAILED",
|
|
17
|
+
MARKET_CLOSED = "MARKET_CLOSED",
|
|
18
|
+
API_ERROR = "API_ERROR",
|
|
19
|
+
INTERNAL_ERROR = "INTERNAL_ERROR",
|
|
20
|
+
INVALID_CONFIG = "INVALID_CONFIG"
|
|
21
|
+
}
|
|
22
|
+
export declare class PolymarketError extends Error {
|
|
23
|
+
code: ErrorCode;
|
|
24
|
+
retryable: boolean;
|
|
25
|
+
originalError?: Error | undefined;
|
|
26
|
+
constructor(code: ErrorCode, message: string, retryable?: boolean, originalError?: Error | undefined);
|
|
27
|
+
/**
|
|
28
|
+
* Create error from HTTP response status
|
|
29
|
+
*/
|
|
30
|
+
static fromHttpError(status: number, body?: unknown): PolymarketError;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Retry decorator for async functions
|
|
34
|
+
*/
|
|
35
|
+
export declare function withRetry<T>(fn: () => Promise<T>, options?: {
|
|
36
|
+
maxRetries?: number;
|
|
37
|
+
delay?: number;
|
|
38
|
+
}): Promise<T>;
|
|
39
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/core/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,oBAAY,SAAS;IAEnB,aAAa,kBAAkB;IAC/B,OAAO,YAAY;IACnB,YAAY,iBAAiB;IAG7B,WAAW,gBAAgB;IAC3B,eAAe,oBAAoB;IACnC,iBAAiB,sBAAsB;IAGvC,gBAAgB,qBAAqB;IACrC,gBAAgB,qBAAqB;IACrC,gBAAgB,qBAAqB;IAGrC,oBAAoB,yBAAyB;IAC7C,cAAc,mBAAmB;IACjC,YAAY,iBAAiB;IAC7B,aAAa,kBAAkB;IAG/B,SAAS,cAAc;IAGvB,cAAc,mBAAmB;IAGjC,cAAc,mBAAmB;CAClC;AAED,qBAAa,eAAgB,SAAQ,KAAK;IAE/B,IAAI,EAAE,SAAS;IAEf,SAAS,EAAE,OAAO;IAClB,aAAa,CAAC,EAAE,KAAK;gBAHrB,IAAI,EAAE,SAAS,EACtB,OAAO,EAAE,MAAM,EACR,SAAS,GAAE,OAAe,EAC1B,aAAa,CAAC,EAAE,KAAK,YAAA;IAM9B;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,eAAe;CAyCtE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAC/B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GACpD,OAAO,CAAC,CAAC,CAAC,CAoBZ"}
|