@catalyst-team/poly-sdk 0.4.0 → 0.4.3
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 +8 -1
- package/README.zh-CN.md +2 -0
- package/dist/src/__tests__/integration/data-api.integration.test.js +21 -18
- package/dist/src/__tests__/integration/data-api.integration.test.js.map +1 -1
- package/dist/src/catalyst/catalyst-query-service.d.ts +109 -0
- package/dist/src/catalyst/catalyst-query-service.d.ts.map +1 -0
- package/dist/src/catalyst/catalyst-query-service.js +141 -0
- package/dist/src/catalyst/catalyst-query-service.js.map +1 -0
- package/dist/src/catalyst/catalyst-realtime-service.d.ts +40 -0
- package/dist/src/catalyst/catalyst-realtime-service.d.ts.map +1 -0
- package/dist/src/catalyst/catalyst-realtime-service.js +125 -0
- package/dist/src/catalyst/catalyst-realtime-service.js.map +1 -0
- package/dist/src/catalyst/index.d.ts +4 -0
- package/dist/src/catalyst/index.d.ts.map +1 -0
- package/dist/src/catalyst/index.js +4 -0
- package/dist/src/catalyst/index.js.map +1 -0
- package/dist/src/catalyst/types.d.ts +178 -0
- package/dist/src/catalyst/types.d.ts.map +1 -0
- package/dist/src/catalyst/types.js +2 -0
- package/dist/src/catalyst/types.js.map +1 -0
- package/dist/src/clients/data-api.d.ts +75 -14
- package/dist/src/clients/data-api.d.ts.map +1 -1
- package/dist/src/clients/data-api.js +40 -18
- package/dist/src/clients/data-api.js.map +1 -1
- package/dist/src/clients/gamma-api.d.ts +54 -0
- package/dist/src/clients/gamma-api.d.ts.map +1 -1
- package/dist/src/clients/gamma-api.js.map +1 -1
- package/dist/src/index.d.ts +15 -4
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +22 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/insider-scan/index.d.ts +3 -0
- package/dist/src/insider-scan/index.d.ts.map +1 -0
- package/dist/src/insider-scan/index.js +3 -0
- package/dist/src/insider-scan/index.js.map +1 -0
- package/dist/src/insider-scan/insider-scan-service.d.ts +63 -0
- package/dist/src/insider-scan/insider-scan-service.d.ts.map +1 -0
- package/dist/src/insider-scan/insider-scan-service.js +153 -0
- package/dist/src/insider-scan/insider-scan-service.js.map +1 -0
- package/dist/src/insider-scan/types.d.ts +205 -0
- package/dist/src/insider-scan/types.d.ts.map +1 -0
- package/dist/src/insider-scan/types.js +7 -0
- package/dist/src/insider-scan/types.js.map +1 -0
- package/dist/src/services/market-service.d.ts +61 -0
- package/dist/src/services/market-service.d.ts.map +1 -1
- package/dist/src/services/market-service.js +58 -0
- package/dist/src/services/market-service.js.map +1 -1
- package/dist/src/services/onchain-service.d.ts +10 -2
- package/dist/src/services/onchain-service.d.ts.map +1 -1
- package/dist/src/services/onchain-service.js +8 -0
- package/dist/src/services/onchain-service.js.map +1 -1
- package/dist/src/services/smart-money-service.d.ts +420 -3
- package/dist/src/services/smart-money-service.d.ts.map +1 -1
- package/dist/src/services/smart-money-service.js +869 -3
- package/dist/src/services/smart-money-service.js.map +1 -1
- package/dist/src/services/trading-service.d.ts +5 -0
- package/dist/src/services/trading-service.d.ts.map +1 -1
- package/dist/src/services/trading-service.js +5 -0
- package/dist/src/services/trading-service.js.map +1 -1
- package/dist/src/services/wallet-service.d.ts +38 -2
- package/dist/src/services/wallet-service.d.ts.map +1 -1
- package/dist/src/services/wallet-service.js +72 -5
- package/dist/src/services/wallet-service.js.map +1 -1
- package/dist/src/signal/index.d.ts +8 -0
- package/dist/src/signal/index.d.ts.map +1 -0
- package/dist/src/signal/index.js +7 -0
- package/dist/src/signal/index.js.map +1 -0
- package/dist/src/signal/signal-service.d.ts +89 -0
- package/dist/src/signal/signal-service.d.ts.map +1 -0
- package/dist/src/signal/signal-service.js +226 -0
- package/dist/src/signal/signal-service.js.map +1 -0
- package/dist/src/signal/types.d.ts +280 -0
- package/dist/src/signal/types.d.ts.map +1 -0
- package/dist/src/signal/types.js +7 -0
- package/dist/src/signal/types.js.map +1 -0
- package/dist/src/wallet-report/index.d.ts +3 -0
- package/dist/src/wallet-report/index.d.ts.map +1 -0
- package/dist/src/wallet-report/index.js +3 -0
- package/dist/src/wallet-report/index.js.map +1 -0
- package/dist/src/wallet-report/types.d.ts +187 -0
- package/dist/src/wallet-report/types.d.ts.map +1 -0
- package/dist/src/wallet-report/types.js +7 -0
- package/dist/src/wallet-report/types.js.map +1 -0
- package/dist/src/wallet-report/wallet-report-service.d.ts +91 -0
- package/dist/src/wallet-report/wallet-report-service.d.ts.map +1 -0
- package/dist/src/wallet-report/wallet-report-service.js +208 -0
- package/dist/src/wallet-report/wallet-report-service.js.map +1 -0
- package/dist/src/wallets/hot-wallet-service.d.ts +162 -0
- package/dist/src/wallets/hot-wallet-service.d.ts.map +1 -0
- package/dist/src/wallets/hot-wallet-service.js +251 -0
- package/dist/src/wallets/hot-wallet-service.js.map +1 -0
- package/dist/src/wallets/index.d.ts +15 -0
- package/dist/src/wallets/index.d.ts.map +1 -0
- package/dist/src/wallets/index.js +26 -0
- package/dist/src/wallets/index.js.map +1 -0
- package/package.json +5 -5
- package/dist/__tests__/clob-api.test.d.ts +0 -5
- package/dist/__tests__/clob-api.test.d.ts.map +0 -1
- package/dist/__tests__/clob-api.test.js +0 -240
- package/dist/__tests__/clob-api.test.js.map +0 -1
- package/dist/__tests__/integration/arbitrage-service.integration.test.d.ts +0 -12
- package/dist/__tests__/integration/arbitrage-service.integration.test.d.ts.map +0 -1
- package/dist/__tests__/integration/arbitrage-service.integration.test.js +0 -267
- package/dist/__tests__/integration/arbitrage-service.integration.test.js.map +0 -1
- package/dist/__tests__/integration/bridge-client.integration.test.d.ts +0 -11
- package/dist/__tests__/integration/bridge-client.integration.test.d.ts.map +0 -1
- package/dist/__tests__/integration/bridge-client.integration.test.js +0 -260
- package/dist/__tests__/integration/bridge-client.integration.test.js.map +0 -1
- package/dist/__tests__/integration/clob-api.integration.test.d.ts +0 -13
- package/dist/__tests__/integration/clob-api.integration.test.d.ts.map +0 -1
- package/dist/__tests__/integration/clob-api.integration.test.js +0 -170
- package/dist/__tests__/integration/clob-api.integration.test.js.map +0 -1
- package/dist/__tests__/integration/ctf-client.integration.test.d.ts +0 -17
- package/dist/__tests__/integration/ctf-client.integration.test.d.ts.map +0 -1
- package/dist/__tests__/integration/ctf-client.integration.test.js +0 -234
- package/dist/__tests__/integration/ctf-client.integration.test.js.map +0 -1
- package/dist/__tests__/integration/data-api.integration.test.d.ts +0 -9
- package/dist/__tests__/integration/data-api.integration.test.d.ts.map +0 -1
- package/dist/__tests__/integration/data-api.integration.test.js +0 -164
- package/dist/__tests__/integration/data-api.integration.test.js.map +0 -1
- package/dist/__tests__/integration/gamma-api.integration.test.d.ts +0 -9
- package/dist/__tests__/integration/gamma-api.integration.test.d.ts.map +0 -1
- package/dist/__tests__/integration/gamma-api.integration.test.js +0 -170
- package/dist/__tests__/integration/gamma-api.integration.test.js.map +0 -1
- package/dist/__tests__/integration/market-service.integration.test.d.ts +0 -10
- package/dist/__tests__/integration/market-service.integration.test.d.ts.map +0 -1
- package/dist/__tests__/integration/market-service.integration.test.js +0 -173
- package/dist/__tests__/integration/market-service.integration.test.js.map +0 -1
- package/dist/__tests__/integration/realtime-service-v2.integration.test.d.ts +0 -10
- package/dist/__tests__/integration/realtime-service-v2.integration.test.d.ts.map +0 -1
- package/dist/__tests__/integration/realtime-service-v2.integration.test.js +0 -307
- package/dist/__tests__/integration/realtime-service-v2.integration.test.js.map +0 -1
- package/dist/__tests__/integration/trading-service.integration.test.d.ts +0 -10
- package/dist/__tests__/integration/trading-service.integration.test.d.ts.map +0 -1
- package/dist/__tests__/integration/trading-service.integration.test.js +0 -58
- package/dist/__tests__/integration/trading-service.integration.test.js.map +0 -1
- package/dist/__tests__/test-utils.d.ts +0 -92
- package/dist/__tests__/test-utils.d.ts.map +0 -1
- package/dist/__tests__/test-utils.js +0 -143
- package/dist/__tests__/test-utils.js.map +0 -1
- package/dist/clients/bridge-client.d.ts +0 -388
- package/dist/clients/bridge-client.d.ts.map +0 -1
- package/dist/clients/bridge-client.js +0 -587
- package/dist/clients/bridge-client.js.map +0 -1
- package/dist/clients/clob-api.d.ts +0 -391
- package/dist/clients/clob-api.d.ts.map +0 -1
- package/dist/clients/clob-api.js +0 -448
- package/dist/clients/clob-api.js.map +0 -1
- package/dist/clients/ctf-client.d.ts +0 -475
- package/dist/clients/ctf-client.d.ts.map +0 -1
- package/dist/clients/ctf-client.js +0 -915
- package/dist/clients/ctf-client.js.map +0 -1
- package/dist/clients/data-api.d.ts +0 -452
- package/dist/clients/data-api.d.ts.map +0 -1
- package/dist/clients/data-api.js +0 -637
- package/dist/clients/data-api.js.map +0 -1
- package/dist/clients/gamma-api.d.ts +0 -406
- package/dist/clients/gamma-api.d.ts.map +0 -1
- package/dist/clients/gamma-api.js +0 -354
- package/dist/clients/gamma-api.js.map +0 -1
- package/dist/clients/subgraph.d.ts +0 -196
- package/dist/clients/subgraph.d.ts.map +0 -1
- package/dist/clients/subgraph.js +0 -332
- package/dist/clients/subgraph.js.map +0 -1
- package/dist/clients/trading-client.d.ts +0 -252
- package/dist/clients/trading-client.d.ts.map +0 -1
- package/dist/clients/trading-client.js +0 -543
- package/dist/clients/trading-client.js.map +0 -1
- package/dist/clients/websocket-manager.d.ts +0 -103
- package/dist/clients/websocket-manager.d.ts.map +0 -1
- package/dist/clients/websocket-manager.js +0 -200
- package/dist/clients/websocket-manager.js.map +0 -1
- package/dist/core/cache-adapter-bridge.d.ts +0 -36
- package/dist/core/cache-adapter-bridge.d.ts.map +0 -1
- package/dist/core/cache-adapter-bridge.js +0 -81
- package/dist/core/cache-adapter-bridge.js.map +0 -1
- package/dist/core/cache.d.ts +0 -43
- package/dist/core/cache.d.ts.map +0 -1
- package/dist/core/cache.js +0 -76
- package/dist/core/cache.js.map +0 -1
- package/dist/core/errors.d.ts +0 -39
- package/dist/core/errors.d.ts.map +0 -1
- package/dist/core/errors.js +0 -86
- package/dist/core/errors.js.map +0 -1
- package/dist/core/rate-limiter.d.ts +0 -33
- package/dist/core/rate-limiter.d.ts.map +0 -1
- package/dist/core/rate-limiter.js +0 -82
- package/dist/core/rate-limiter.js.map +0 -1
- package/dist/core/types.d.ts +0 -506
- package/dist/core/types.d.ts.map +0 -1
- package/dist/core/types.js +0 -49
- package/dist/core/types.js.map +0 -1
- package/dist/core/types.test.d.ts +0 -7
- package/dist/core/types.test.d.ts.map +0 -1
- package/dist/core/types.test.js +0 -122
- package/dist/core/types.test.js.map +0 -1
- package/dist/core/unified-cache.d.ts +0 -63
- package/dist/core/unified-cache.d.ts.map +0 -1
- package/dist/core/unified-cache.js +0 -114
- package/dist/core/unified-cache.js.map +0 -1
- package/dist/index.d.ts +0 -159
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -262
- package/dist/index.js.map +0 -1
- package/dist/services/arbitrage-service.d.ts +0 -409
- package/dist/services/arbitrage-service.d.ts.map +0 -1
- package/dist/services/arbitrage-service.js +0 -1450
- package/dist/services/arbitrage-service.js.map +0 -1
- package/dist/services/authorization-service.d.ts +0 -97
- package/dist/services/authorization-service.d.ts.map +0 -1
- package/dist/services/authorization-service.js +0 -279
- package/dist/services/authorization-service.js.map +0 -1
- package/dist/services/binance-service.d.ts +0 -154
- package/dist/services/binance-service.d.ts.map +0 -1
- package/dist/services/binance-service.js +0 -266
- package/dist/services/binance-service.js.map +0 -1
- package/dist/services/dip-arb-service.d.ts +0 -209
- package/dist/services/dip-arb-service.d.ts.map +0 -1
- package/dist/services/dip-arb-service.js +0 -1602
- package/dist/services/dip-arb-service.js.map +0 -1
- package/dist/services/dip-arb-types.d.ts +0 -553
- package/dist/services/dip-arb-types.d.ts.map +0 -1
- package/dist/services/dip-arb-types.js +0 -164
- package/dist/services/dip-arb-types.js.map +0 -1
- package/dist/services/market-service.d.ts +0 -367
- package/dist/services/market-service.d.ts.map +0 -1
- package/dist/services/market-service.js +0 -1187
- package/dist/services/market-service.js.map +0 -1
- package/dist/services/onchain-service.d.ts +0 -309
- package/dist/services/onchain-service.d.ts.map +0 -1
- package/dist/services/onchain-service.js +0 -417
- package/dist/services/onchain-service.js.map +0 -1
- package/dist/services/realtime-service-v2.d.ts +0 -362
- package/dist/services/realtime-service-v2.d.ts.map +0 -1
- package/dist/services/realtime-service-v2.js +0 -858
- package/dist/services/realtime-service-v2.js.map +0 -1
- package/dist/services/realtime-service.d.ts +0 -82
- package/dist/services/realtime-service.d.ts.map +0 -1
- package/dist/services/realtime-service.js +0 -182
- package/dist/services/realtime-service.js.map +0 -1
- package/dist/services/smart-money-service.d.ts +0 -352
- package/dist/services/smart-money-service.d.ts.map +0 -1
- package/dist/services/smart-money-service.js +0 -582
- package/dist/services/smart-money-service.js.map +0 -1
- package/dist/services/swap-service.d.ts +0 -217
- package/dist/services/swap-service.d.ts.map +0 -1
- package/dist/services/swap-service.js +0 -695
- package/dist/services/swap-service.js.map +0 -1
- package/dist/services/trading-service.d.ts +0 -177
- package/dist/services/trading-service.d.ts.map +0 -1
- package/dist/services/trading-service.js +0 -422
- package/dist/services/trading-service.js.map +0 -1
- package/dist/services/wallet-service.d.ts +0 -316
- package/dist/services/wallet-service.d.ts.map +0 -1
- package/dist/services/wallet-service.js +0 -681
- package/dist/services/wallet-service.js.map +0 -1
- package/dist/utils/price-utils.d.ts +0 -153
- package/dist/utils/price-utils.d.ts.map +0 -1
- package/dist/utils/price-utils.js +0 -236
- package/dist/utils/price-utils.js.map +0 -1
- package/dist/utils/price-utils.test.d.ts +0 -5
- package/dist/utils/price-utils.test.d.ts.map +0 -1
- package/dist/utils/price-utils.test.js +0 -192
- package/dist/utils/price-utils.test.js.map +0 -1
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WalletReport Service Types
|
|
3
|
+
*
|
|
4
|
+
* Types for querying the WalletReportWorker API
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Report type identifiers
|
|
8
|
+
*/
|
|
9
|
+
export type ReportType = 'wallet' | 'leaderboard_daily' | 'leaderboard_weekly' | 'leaderboard_monthly';
|
|
10
|
+
/**
|
|
11
|
+
* Report status
|
|
12
|
+
*/
|
|
13
|
+
export type ReportStatus = 'pending' | 'generating' | 'completed' | 'failed';
|
|
14
|
+
/**
|
|
15
|
+
* Daily performance entry
|
|
16
|
+
*/
|
|
17
|
+
export interface DailyPerformance {
|
|
18
|
+
date: string;
|
|
19
|
+
pnl: number;
|
|
20
|
+
volume: number;
|
|
21
|
+
tradeCount: number;
|
|
22
|
+
winRate: number;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Wallet report data structure
|
|
26
|
+
*/
|
|
27
|
+
export interface WalletReportData {
|
|
28
|
+
address: string;
|
|
29
|
+
displayName?: string;
|
|
30
|
+
metrics: {
|
|
31
|
+
totalPnL: number;
|
|
32
|
+
totalVolume: number;
|
|
33
|
+
winRate: number;
|
|
34
|
+
tradeCount: number;
|
|
35
|
+
avgHoldingDays: number;
|
|
36
|
+
bestTrade: number;
|
|
37
|
+
worstTrade: number;
|
|
38
|
+
};
|
|
39
|
+
recentPerformance: DailyPerformance[];
|
|
40
|
+
marketBreakdown: {
|
|
41
|
+
category: string;
|
|
42
|
+
volume: number;
|
|
43
|
+
pnl: number;
|
|
44
|
+
tradeCount: number;
|
|
45
|
+
}[];
|
|
46
|
+
topPositions: {
|
|
47
|
+
marketTitle: string;
|
|
48
|
+
conditionId: string;
|
|
49
|
+
size: number;
|
|
50
|
+
avgPrice: number;
|
|
51
|
+
currentPrice: number;
|
|
52
|
+
unrealizedPnL: number;
|
|
53
|
+
}[];
|
|
54
|
+
generatedAt: number;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Leaderboard entry
|
|
58
|
+
*/
|
|
59
|
+
export interface LeaderboardEntry {
|
|
60
|
+
rank: number;
|
|
61
|
+
address: string;
|
|
62
|
+
displayName?: string;
|
|
63
|
+
pnl: number;
|
|
64
|
+
volume: number;
|
|
65
|
+
winRate: number;
|
|
66
|
+
tradeCount: number;
|
|
67
|
+
rankChange: number | null;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Leaderboard report data structure
|
|
71
|
+
*/
|
|
72
|
+
export interface LeaderboardReportData {
|
|
73
|
+
period: 'daily' | 'weekly' | 'monthly';
|
|
74
|
+
periodStart: string;
|
|
75
|
+
periodEnd: string;
|
|
76
|
+
entries: LeaderboardEntry[];
|
|
77
|
+
stats: {
|
|
78
|
+
totalTraders: number;
|
|
79
|
+
totalVolume: number;
|
|
80
|
+
totalPnL: number;
|
|
81
|
+
avgWinRate: number;
|
|
82
|
+
};
|
|
83
|
+
generatedAt: number;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Health response
|
|
87
|
+
*/
|
|
88
|
+
export interface WalletReportHealthResponse {
|
|
89
|
+
status: string;
|
|
90
|
+
service: string;
|
|
91
|
+
version: string;
|
|
92
|
+
now: number;
|
|
93
|
+
stats: {
|
|
94
|
+
totalReports: number;
|
|
95
|
+
byType: {
|
|
96
|
+
wallet: number;
|
|
97
|
+
leaderboard_daily: number;
|
|
98
|
+
leaderboard_weekly: number;
|
|
99
|
+
leaderboard_monthly: number;
|
|
100
|
+
};
|
|
101
|
+
byStatus: {
|
|
102
|
+
pending: number;
|
|
103
|
+
generating: number;
|
|
104
|
+
completed: number;
|
|
105
|
+
failed: number;
|
|
106
|
+
};
|
|
107
|
+
schedulerEnabled: boolean;
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Stats response
|
|
112
|
+
*/
|
|
113
|
+
export interface WalletReportStatsResponse {
|
|
114
|
+
totalReports: number;
|
|
115
|
+
byType: {
|
|
116
|
+
wallet: number;
|
|
117
|
+
leaderboard_daily: number;
|
|
118
|
+
leaderboard_weekly: number;
|
|
119
|
+
leaderboard_monthly: number;
|
|
120
|
+
};
|
|
121
|
+
byStatus: {
|
|
122
|
+
pending: number;
|
|
123
|
+
generating: number;
|
|
124
|
+
completed: number;
|
|
125
|
+
failed: number;
|
|
126
|
+
};
|
|
127
|
+
oldestReport: number | null;
|
|
128
|
+
newestReport: number | null;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Wallet report response
|
|
132
|
+
*/
|
|
133
|
+
export interface GetWalletReportResponse {
|
|
134
|
+
source: 'cache' | 'generated';
|
|
135
|
+
report: WalletReportData;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Report generating response
|
|
139
|
+
*/
|
|
140
|
+
export interface ReportGeneratingResponse {
|
|
141
|
+
status: 'generating';
|
|
142
|
+
message: string;
|
|
143
|
+
reportId: string;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Leaderboard response
|
|
147
|
+
*/
|
|
148
|
+
export interface GetLeaderboardResponse {
|
|
149
|
+
identifier: string;
|
|
150
|
+
report: LeaderboardReportData | null;
|
|
151
|
+
createdAt: number;
|
|
152
|
+
expiresAt: number;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Report summary (list view)
|
|
156
|
+
*/
|
|
157
|
+
export interface ReportSummary {
|
|
158
|
+
id: string;
|
|
159
|
+
type: ReportType;
|
|
160
|
+
status: ReportStatus;
|
|
161
|
+
identifier: string;
|
|
162
|
+
createdAt: number;
|
|
163
|
+
updatedAt: number;
|
|
164
|
+
expiresAt: number;
|
|
165
|
+
hasData: boolean;
|
|
166
|
+
error: string | null;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* List reports response
|
|
170
|
+
*/
|
|
171
|
+
export interface ListReportsResponse {
|
|
172
|
+
reports: ReportSummary[];
|
|
173
|
+
pagination: {
|
|
174
|
+
limit: number;
|
|
175
|
+
offset: number;
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* List reports params
|
|
180
|
+
*/
|
|
181
|
+
export interface ListReportsParams {
|
|
182
|
+
type?: ReportType;
|
|
183
|
+
status?: ReportStatus;
|
|
184
|
+
limit?: number;
|
|
185
|
+
offset?: number;
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/wallet-report/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/wallet-report/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WalletReportService
|
|
3
|
+
*
|
|
4
|
+
* Client for querying the WalletReportWorker API.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* const service = new WalletReportService({
|
|
9
|
+
* baseUrl: 'http://localhost:8789',
|
|
10
|
+
* });
|
|
11
|
+
*
|
|
12
|
+
* // Get health status
|
|
13
|
+
* const health = await service.health();
|
|
14
|
+
*
|
|
15
|
+
* // Get or generate wallet report
|
|
16
|
+
* const report = await service.getWalletReport('0x...');
|
|
17
|
+
*
|
|
18
|
+
* // Get daily leaderboard
|
|
19
|
+
* const leaderboard = await service.getDailyLeaderboard();
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
import type { WalletReportHealthResponse, WalletReportStatsResponse, GetWalletReportResponse, ReportGeneratingResponse, GetLeaderboardResponse, ListReportsResponse, ListReportsParams, WalletReportData, LeaderboardReportData } from './types.js';
|
|
23
|
+
export interface WalletReportServiceConfig {
|
|
24
|
+
/** Base URL of WalletReportWorker (e.g., http://localhost:8789) */
|
|
25
|
+
baseUrl: string;
|
|
26
|
+
/** Request timeout in milliseconds (default: 60000) */
|
|
27
|
+
timeoutMs?: number;
|
|
28
|
+
}
|
|
29
|
+
export declare class WalletReportService {
|
|
30
|
+
private readonly baseUrl;
|
|
31
|
+
private readonly timeoutMs;
|
|
32
|
+
constructor(config: WalletReportServiceConfig);
|
|
33
|
+
/**
|
|
34
|
+
* Check worker health and get basic stats
|
|
35
|
+
*/
|
|
36
|
+
health(): Promise<WalletReportHealthResponse>;
|
|
37
|
+
/**
|
|
38
|
+
* Get detailed statistics
|
|
39
|
+
*/
|
|
40
|
+
getStats(): Promise<WalletReportStatsResponse>;
|
|
41
|
+
/**
|
|
42
|
+
* Get or generate a wallet report
|
|
43
|
+
*
|
|
44
|
+
* Returns cached report if available, otherwise generates a new one.
|
|
45
|
+
* Use forceRefresh to skip cache and generate a fresh report.
|
|
46
|
+
*
|
|
47
|
+
* @param address - Wallet address
|
|
48
|
+
* @param forceRefresh - Force regeneration even if cached (default: false)
|
|
49
|
+
*/
|
|
50
|
+
getWalletReport(address: string, forceRefresh?: boolean): Promise<GetWalletReportResponse | ReportGeneratingResponse>;
|
|
51
|
+
/**
|
|
52
|
+
* Get wallet report data directly (convenience method)
|
|
53
|
+
*
|
|
54
|
+
* Throws if report is still generating.
|
|
55
|
+
*/
|
|
56
|
+
getWalletReportData(address: string, forceRefresh?: boolean): Promise<WalletReportData>;
|
|
57
|
+
/**
|
|
58
|
+
* Get the latest daily leaderboard
|
|
59
|
+
*/
|
|
60
|
+
getDailyLeaderboard(): Promise<GetLeaderboardResponse | null>;
|
|
61
|
+
/**
|
|
62
|
+
* Get the latest weekly leaderboard
|
|
63
|
+
*/
|
|
64
|
+
getWeeklyLeaderboard(): Promise<GetLeaderboardResponse | null>;
|
|
65
|
+
/**
|
|
66
|
+
* Get the latest monthly leaderboard
|
|
67
|
+
*/
|
|
68
|
+
getMonthlyLeaderboard(): Promise<GetLeaderboardResponse | null>;
|
|
69
|
+
/**
|
|
70
|
+
* Get leaderboard report data directly (convenience method)
|
|
71
|
+
*/
|
|
72
|
+
getLeaderboardData(period: 'daily' | 'weekly' | 'monthly'): Promise<LeaderboardReportData | null>;
|
|
73
|
+
/**
|
|
74
|
+
* Force generate a leaderboard report
|
|
75
|
+
*/
|
|
76
|
+
forceGenerateLeaderboard(type: 'daily' | 'weekly' | 'monthly'): Promise<void>;
|
|
77
|
+
/**
|
|
78
|
+
* List all reports
|
|
79
|
+
*/
|
|
80
|
+
listReports(params?: ListReportsParams): Promise<ListReportsResponse>;
|
|
81
|
+
/**
|
|
82
|
+
* Delete a report by ID
|
|
83
|
+
*/
|
|
84
|
+
deleteReport(id: string): Promise<boolean>;
|
|
85
|
+
/**
|
|
86
|
+
* Cleanup expired reports
|
|
87
|
+
*/
|
|
88
|
+
cleanupExpired(): Promise<number>;
|
|
89
|
+
private fetchJson;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=wallet-report-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet-report-service.d.ts","sourceRoot":"","sources":["../../../src/wallet-report/wallet-report-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EACV,0BAA0B,EAC1B,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,yBAAyB;IACxC,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,MAAM,EAAE,yBAAyB;IAS7C;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,0BAA0B,CAAC;IAInD;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,yBAAyB,CAAC;IAQpD;;;;;;;;OAQG;IACG,eAAe,CACnB,OAAO,EAAE,MAAM,EACf,YAAY,UAAQ,GACnB,OAAO,CAAC,uBAAuB,GAAG,wBAAwB,CAAC;IAO9D;;;;OAIG;IACG,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,UAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAc3F;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC;IAWnE;;OAEG;IACG,oBAAoB,IAAI,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC;IAWpE;;OAEG;IACG,qBAAqB,IAAI,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC;IAWrE;;OAEG;IACG,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;IAkBvG;;OAEG;IACG,wBAAwB,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAQnF;;OAEG;IACG,WAAW,CAAC,MAAM,GAAE,iBAAsB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAW/E;;OAEG;IACG,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYhD;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;YASzB,SAAS;CAwBxB"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WalletReportService
|
|
3
|
+
*
|
|
4
|
+
* Client for querying the WalletReportWorker API.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* const service = new WalletReportService({
|
|
9
|
+
* baseUrl: 'http://localhost:8789',
|
|
10
|
+
* });
|
|
11
|
+
*
|
|
12
|
+
* // Get health status
|
|
13
|
+
* const health = await service.health();
|
|
14
|
+
*
|
|
15
|
+
* // Get or generate wallet report
|
|
16
|
+
* const report = await service.getWalletReport('0x...');
|
|
17
|
+
*
|
|
18
|
+
* // Get daily leaderboard
|
|
19
|
+
* const leaderboard = await service.getDailyLeaderboard();
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export class WalletReportService {
|
|
23
|
+
baseUrl;
|
|
24
|
+
timeoutMs;
|
|
25
|
+
constructor(config) {
|
|
26
|
+
this.baseUrl = config.baseUrl.replace(/\/+$/, '');
|
|
27
|
+
this.timeoutMs = config.timeoutMs ?? 60_000;
|
|
28
|
+
}
|
|
29
|
+
// ============================================================================
|
|
30
|
+
// Health & Stats
|
|
31
|
+
// ============================================================================
|
|
32
|
+
/**
|
|
33
|
+
* Check worker health and get basic stats
|
|
34
|
+
*/
|
|
35
|
+
async health() {
|
|
36
|
+
return this.fetchJson('/v1/health');
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Get detailed statistics
|
|
40
|
+
*/
|
|
41
|
+
async getStats() {
|
|
42
|
+
return this.fetchJson('/v1/stats');
|
|
43
|
+
}
|
|
44
|
+
// ============================================================================
|
|
45
|
+
// Wallet Reports
|
|
46
|
+
// ============================================================================
|
|
47
|
+
/**
|
|
48
|
+
* Get or generate a wallet report
|
|
49
|
+
*
|
|
50
|
+
* Returns cached report if available, otherwise generates a new one.
|
|
51
|
+
* Use forceRefresh to skip cache and generate a fresh report.
|
|
52
|
+
*
|
|
53
|
+
* @param address - Wallet address
|
|
54
|
+
* @param forceRefresh - Force regeneration even if cached (default: false)
|
|
55
|
+
*/
|
|
56
|
+
async getWalletReport(address, forceRefresh = false) {
|
|
57
|
+
const query = forceRefresh ? '?refresh=true' : '';
|
|
58
|
+
return this.fetchJson(`/v1/wallets/${address.toLowerCase()}/report${query}`);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Get wallet report data directly (convenience method)
|
|
62
|
+
*
|
|
63
|
+
* Throws if report is still generating.
|
|
64
|
+
*/
|
|
65
|
+
async getWalletReportData(address, forceRefresh = false) {
|
|
66
|
+
const response = await this.getWalletReport(address, forceRefresh);
|
|
67
|
+
if ('status' in response && response.status === 'generating') {
|
|
68
|
+
throw new Error('Report is still generating');
|
|
69
|
+
}
|
|
70
|
+
return response.report;
|
|
71
|
+
}
|
|
72
|
+
// ============================================================================
|
|
73
|
+
// Leaderboards
|
|
74
|
+
// ============================================================================
|
|
75
|
+
/**
|
|
76
|
+
* Get the latest daily leaderboard
|
|
77
|
+
*/
|
|
78
|
+
async getDailyLeaderboard() {
|
|
79
|
+
try {
|
|
80
|
+
return await this.fetchJson('/v1/leaderboards/daily');
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
if (error instanceof Error && error.message.includes('404')) {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
throw error;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Get the latest weekly leaderboard
|
|
91
|
+
*/
|
|
92
|
+
async getWeeklyLeaderboard() {
|
|
93
|
+
try {
|
|
94
|
+
return await this.fetchJson('/v1/leaderboards/weekly');
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
if (error instanceof Error && error.message.includes('404')) {
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
throw error;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Get the latest monthly leaderboard
|
|
105
|
+
*/
|
|
106
|
+
async getMonthlyLeaderboard() {
|
|
107
|
+
try {
|
|
108
|
+
return await this.fetchJson('/v1/leaderboards/monthly');
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
if (error instanceof Error && error.message.includes('404')) {
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
throw error;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Get leaderboard report data directly (convenience method)
|
|
119
|
+
*/
|
|
120
|
+
async getLeaderboardData(period) {
|
|
121
|
+
let response;
|
|
122
|
+
switch (period) {
|
|
123
|
+
case 'daily':
|
|
124
|
+
response = await this.getDailyLeaderboard();
|
|
125
|
+
break;
|
|
126
|
+
case 'weekly':
|
|
127
|
+
response = await this.getWeeklyLeaderboard();
|
|
128
|
+
break;
|
|
129
|
+
case 'monthly':
|
|
130
|
+
response = await this.getMonthlyLeaderboard();
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
return response?.report ?? null;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Force generate a leaderboard report
|
|
137
|
+
*/
|
|
138
|
+
async forceGenerateLeaderboard(type) {
|
|
139
|
+
await this.fetchJson(`/v1/leaderboards/${type}/generate`, { method: 'POST' });
|
|
140
|
+
}
|
|
141
|
+
// ============================================================================
|
|
142
|
+
// Report Management
|
|
143
|
+
// ============================================================================
|
|
144
|
+
/**
|
|
145
|
+
* List all reports
|
|
146
|
+
*/
|
|
147
|
+
async listReports(params = {}) {
|
|
148
|
+
const query = new URLSearchParams();
|
|
149
|
+
if (params.type)
|
|
150
|
+
query.set('type', params.type);
|
|
151
|
+
if (params.status)
|
|
152
|
+
query.set('status', params.status);
|
|
153
|
+
if (params.limit != null)
|
|
154
|
+
query.set('limit', String(params.limit));
|
|
155
|
+
if (params.offset != null)
|
|
156
|
+
query.set('offset', String(params.offset));
|
|
157
|
+
const q = query.toString();
|
|
158
|
+
return this.fetchJson(`/v1/reports${q ? `?${q}` : ''}`);
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Delete a report by ID
|
|
162
|
+
*/
|
|
163
|
+
async deleteReport(id) {
|
|
164
|
+
try {
|
|
165
|
+
await this.fetchJson(`/v1/reports/${id}`, { method: 'DELETE' });
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
if (error instanceof Error && error.message.includes('404')) {
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
172
|
+
throw error;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Cleanup expired reports
|
|
177
|
+
*/
|
|
178
|
+
async cleanupExpired() {
|
|
179
|
+
const result = await this.fetchJson('/v1/reports/cleanup', { method: 'POST' });
|
|
180
|
+
return result.deletedCount;
|
|
181
|
+
}
|
|
182
|
+
// ============================================================================
|
|
183
|
+
// Private Methods
|
|
184
|
+
// ============================================================================
|
|
185
|
+
async fetchJson(path, options = {}) {
|
|
186
|
+
const controller = new AbortController();
|
|
187
|
+
const timeout = setTimeout(() => controller.abort(), this.timeoutMs);
|
|
188
|
+
try {
|
|
189
|
+
const res = await fetch(`${this.baseUrl}${path}`, {
|
|
190
|
+
...options,
|
|
191
|
+
signal: controller.signal,
|
|
192
|
+
headers: {
|
|
193
|
+
'Content-Type': 'application/json',
|
|
194
|
+
...options.headers,
|
|
195
|
+
},
|
|
196
|
+
});
|
|
197
|
+
if (!res.ok) {
|
|
198
|
+
const text = await res.text().catch(() => '');
|
|
199
|
+
throw new Error(`WalletReportService HTTP ${res.status}: ${text || res.statusText}`);
|
|
200
|
+
}
|
|
201
|
+
return await res.json();
|
|
202
|
+
}
|
|
203
|
+
finally {
|
|
204
|
+
clearTimeout(timeout);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=wallet-report-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet-report-service.js","sourceRoot":"","sources":["../../../src/wallet-report/wallet-report-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HotWalletService - 自管 Hot Wallet 服务
|
|
3
|
+
*
|
|
4
|
+
* 为每个用户创建专用的 hot wallet,私钥加密存储在服务端。
|
|
5
|
+
* 策略引擎可以完全自动执行所有链上操作。
|
|
6
|
+
*
|
|
7
|
+
* 安全措施:
|
|
8
|
+
* 1. 私钥使用 AES-256-GCM 加密存储
|
|
9
|
+
* 2. 加密密钥从环境变量读取(生产环境应使用 KMS)
|
|
10
|
+
* 3. 私钥解密后仅在内存中短暂存在
|
|
11
|
+
* 4. 操作完成后立即清除内存中的私钥
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* const hotWalletService = new HotWalletService({
|
|
16
|
+
* encryptionKey: process.env.WALLET_ENCRYPTION_KEY!,
|
|
17
|
+
* store: new UserStore(), // 实现 IWalletStore 接口
|
|
18
|
+
* });
|
|
19
|
+
*
|
|
20
|
+
* // 创建新钱包
|
|
21
|
+
* const { address, encryptedKey } = await hotWalletService.createWallet();
|
|
22
|
+
*
|
|
23
|
+
* // 执行操作
|
|
24
|
+
* await hotWalletService.executeWithWallet(userId, async (wallet) => {
|
|
25
|
+
* await wallet.sendTransaction({ to: '0x...', data: '0x...' });
|
|
26
|
+
* });
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
import { ethers } from 'ethers';
|
|
30
|
+
export interface HotWalletServiceConfig {
|
|
31
|
+
/** 32-byte hex string for AES-256 encryption */
|
|
32
|
+
encryptionKey: string;
|
|
33
|
+
/** Wallet store implementation */
|
|
34
|
+
store: IWalletStore;
|
|
35
|
+
/** RPC URL (default: Polygon mainnet) */
|
|
36
|
+
rpcUrl?: string;
|
|
37
|
+
/** Chain ID (default: 137) */
|
|
38
|
+
chainId?: number;
|
|
39
|
+
}
|
|
40
|
+
export interface IWalletStore {
|
|
41
|
+
/** Get encrypted private key by user ID */
|
|
42
|
+
getEncryptedKey(userId: string): Promise<string | null>;
|
|
43
|
+
/** Store encrypted private key for user */
|
|
44
|
+
setEncryptedKey(userId: string, encryptedKey: string, address: string): Promise<void>;
|
|
45
|
+
/** Get wallet address by user ID */
|
|
46
|
+
getWalletAddress(userId: string): Promise<string | null>;
|
|
47
|
+
/** Check if user has a wallet */
|
|
48
|
+
hasWallet(userId: string): Promise<boolean>;
|
|
49
|
+
}
|
|
50
|
+
export interface WalletInfo {
|
|
51
|
+
address: string;
|
|
52
|
+
encryptedKey: string;
|
|
53
|
+
}
|
|
54
|
+
export interface EncryptedData {
|
|
55
|
+
/** Initialization vector (hex) */
|
|
56
|
+
iv: string;
|
|
57
|
+
/** Auth tag for GCM (hex) */
|
|
58
|
+
authTag: string;
|
|
59
|
+
/** Encrypted data (hex) */
|
|
60
|
+
data: string;
|
|
61
|
+
}
|
|
62
|
+
export declare class HotWalletService {
|
|
63
|
+
private config;
|
|
64
|
+
private provider;
|
|
65
|
+
constructor(config: HotWalletServiceConfig);
|
|
66
|
+
/**
|
|
67
|
+
* 创建新的 Hot Wallet
|
|
68
|
+
*
|
|
69
|
+
* @returns 钱包地址和加密后的私钥
|
|
70
|
+
*/
|
|
71
|
+
createWallet(): Promise<WalletInfo>;
|
|
72
|
+
/**
|
|
73
|
+
* 为用户创建并存储钱包
|
|
74
|
+
*
|
|
75
|
+
* @param userId - 用户 ID
|
|
76
|
+
* @returns 钱包地址
|
|
77
|
+
*/
|
|
78
|
+
createWalletForUser(userId: string): Promise<string>;
|
|
79
|
+
/**
|
|
80
|
+
* 获取用户的钱包地址
|
|
81
|
+
*
|
|
82
|
+
* @param userId - 用户 ID
|
|
83
|
+
* @returns 钱包地址,如果没有则返回 null
|
|
84
|
+
*/
|
|
85
|
+
getWalletAddress(userId: string): Promise<string | null>;
|
|
86
|
+
/**
|
|
87
|
+
* 检查用户是否有钱包
|
|
88
|
+
*
|
|
89
|
+
* @param userId - 用户 ID
|
|
90
|
+
*/
|
|
91
|
+
hasWallet(userId: string): Promise<boolean>;
|
|
92
|
+
/**
|
|
93
|
+
* 使用用户钱包执行操作
|
|
94
|
+
*
|
|
95
|
+
* 私钥仅在回调执行期间存在于内存中,执行完毕后立即清除。
|
|
96
|
+
*
|
|
97
|
+
* @param userId - 用户 ID
|
|
98
|
+
* @param callback - 使用钱包执行的操作
|
|
99
|
+
* @returns 回调的返回值
|
|
100
|
+
*/
|
|
101
|
+
executeWithWallet<T>(userId: string, callback: (wallet: ethers.Wallet) => Promise<T>): Promise<T>;
|
|
102
|
+
/**
|
|
103
|
+
* 获取用户钱包的私钥(危险操作,仅用于初始化 SDK)
|
|
104
|
+
*
|
|
105
|
+
* 调用者必须负责安全处理私钥!
|
|
106
|
+
*
|
|
107
|
+
* @param userId - 用户 ID
|
|
108
|
+
* @returns 私钥
|
|
109
|
+
*/
|
|
110
|
+
getPrivateKey(userId: string): Promise<string>;
|
|
111
|
+
/**
|
|
112
|
+
* 获取用户钱包余额
|
|
113
|
+
*
|
|
114
|
+
* @param userId - 用户 ID
|
|
115
|
+
*/
|
|
116
|
+
getBalance(userId: string): Promise<{
|
|
117
|
+
matic: string;
|
|
118
|
+
maticWei: string;
|
|
119
|
+
}>;
|
|
120
|
+
/**
|
|
121
|
+
* 发送交易
|
|
122
|
+
*
|
|
123
|
+
* @param userId - 用户 ID
|
|
124
|
+
* @param tx - 交易参数
|
|
125
|
+
*/
|
|
126
|
+
sendTransaction(userId: string, tx: ethers.providers.TransactionRequest): Promise<ethers.providers.TransactionResponse>;
|
|
127
|
+
/**
|
|
128
|
+
* 签名消息
|
|
129
|
+
*
|
|
130
|
+
* @param userId - 用户 ID
|
|
131
|
+
* @param message - 消息
|
|
132
|
+
*/
|
|
133
|
+
signMessage(userId: string, message: string): Promise<string>;
|
|
134
|
+
/**
|
|
135
|
+
* 签名 EIP-712 类型数据
|
|
136
|
+
*
|
|
137
|
+
* @param userId - 用户 ID
|
|
138
|
+
* @param domain - EIP-712 domain
|
|
139
|
+
* @param types - EIP-712 types
|
|
140
|
+
* @param value - 要签名的数据
|
|
141
|
+
*/
|
|
142
|
+
signTypedData(userId: string, domain: ethers.TypedDataDomain, types: Record<string, ethers.TypedDataField[]>, value: Record<string, any>): Promise<string>;
|
|
143
|
+
/**
|
|
144
|
+
* 加密私钥
|
|
145
|
+
*/
|
|
146
|
+
private encryptPrivateKey;
|
|
147
|
+
/**
|
|
148
|
+
* 解密私钥
|
|
149
|
+
*/
|
|
150
|
+
private decryptPrivateKey;
|
|
151
|
+
/**
|
|
152
|
+
* 生成加密密钥
|
|
153
|
+
*
|
|
154
|
+
* 用于首次设置时生成 WALLET_ENCRYPTION_KEY
|
|
155
|
+
*/
|
|
156
|
+
static generateEncryptionKey(): string;
|
|
157
|
+
/**
|
|
158
|
+
* 验证加密密钥格式
|
|
159
|
+
*/
|
|
160
|
+
static validateEncryptionKey(key: string): boolean;
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=hot-wallet-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hot-wallet-service.d.ts","sourceRoot":"","sources":["../../../src/wallets/hot-wallet-service.ts"],"names":[],"mappings":"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"}
|