@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.
Files changed (244) hide show
  1. package/.env +0 -0
  2. package/README.md +803 -0
  3. package/dist/__tests__/clob-api.test.d.ts +5 -0
  4. package/dist/__tests__/clob-api.test.d.ts.map +1 -0
  5. package/dist/__tests__/clob-api.test.js +240 -0
  6. package/dist/__tests__/clob-api.test.js.map +1 -0
  7. package/dist/__tests__/integration/bridge-client.integration.test.d.ts +11 -0
  8. package/dist/__tests__/integration/bridge-client.integration.test.d.ts.map +1 -0
  9. package/dist/__tests__/integration/bridge-client.integration.test.js +260 -0
  10. package/dist/__tests__/integration/bridge-client.integration.test.js.map +1 -0
  11. package/dist/__tests__/integration/clob-api.integration.test.d.ts +13 -0
  12. package/dist/__tests__/integration/clob-api.integration.test.d.ts.map +1 -0
  13. package/dist/__tests__/integration/clob-api.integration.test.js +170 -0
  14. package/dist/__tests__/integration/clob-api.integration.test.js.map +1 -0
  15. package/dist/__tests__/integration/ctf-client.integration.test.d.ts +17 -0
  16. package/dist/__tests__/integration/ctf-client.integration.test.d.ts.map +1 -0
  17. package/dist/__tests__/integration/ctf-client.integration.test.js +234 -0
  18. package/dist/__tests__/integration/ctf-client.integration.test.js.map +1 -0
  19. package/dist/__tests__/integration/data-api.integration.test.d.ts +9 -0
  20. package/dist/__tests__/integration/data-api.integration.test.d.ts.map +1 -0
  21. package/dist/__tests__/integration/data-api.integration.test.js +161 -0
  22. package/dist/__tests__/integration/data-api.integration.test.js.map +1 -0
  23. package/dist/__tests__/integration/gamma-api.integration.test.d.ts +9 -0
  24. package/dist/__tests__/integration/gamma-api.integration.test.d.ts.map +1 -0
  25. package/dist/__tests__/integration/gamma-api.integration.test.js +170 -0
  26. package/dist/__tests__/integration/gamma-api.integration.test.js.map +1 -0
  27. package/dist/__tests__/test-utils.d.ts +92 -0
  28. package/dist/__tests__/test-utils.d.ts.map +1 -0
  29. package/dist/__tests__/test-utils.js +143 -0
  30. package/dist/__tests__/test-utils.js.map +1 -0
  31. package/dist/clients/bridge-client.d.ts +388 -0
  32. package/dist/clients/bridge-client.d.ts.map +1 -0
  33. package/dist/clients/bridge-client.js +587 -0
  34. package/dist/clients/bridge-client.js.map +1 -0
  35. package/dist/clients/clob-api.d.ts +318 -0
  36. package/dist/clients/clob-api.d.ts.map +1 -0
  37. package/dist/clients/clob-api.js +388 -0
  38. package/dist/clients/clob-api.js.map +1 -0
  39. package/dist/clients/ctf-client.d.ts +473 -0
  40. package/dist/clients/ctf-client.d.ts.map +1 -0
  41. package/dist/clients/ctf-client.js +915 -0
  42. package/dist/clients/ctf-client.js.map +1 -0
  43. package/dist/clients/data-api.d.ts +134 -0
  44. package/dist/clients/data-api.d.ts.map +1 -0
  45. package/dist/clients/data-api.js +265 -0
  46. package/dist/clients/data-api.js.map +1 -0
  47. package/dist/clients/gamma-api.d.ts +401 -0
  48. package/dist/clients/gamma-api.d.ts.map +1 -0
  49. package/dist/clients/gamma-api.js +352 -0
  50. package/dist/clients/gamma-api.js.map +1 -0
  51. package/dist/clients/trading-client.d.ts +252 -0
  52. package/dist/clients/trading-client.d.ts.map +1 -0
  53. package/dist/clients/trading-client.js +543 -0
  54. package/dist/clients/trading-client.js.map +1 -0
  55. package/dist/clients/websocket-manager.d.ts +100 -0
  56. package/dist/clients/websocket-manager.d.ts.map +1 -0
  57. package/dist/clients/websocket-manager.js +193 -0
  58. package/dist/clients/websocket-manager.js.map +1 -0
  59. package/dist/core/cache-adapter-bridge.d.ts +36 -0
  60. package/dist/core/cache-adapter-bridge.d.ts.map +1 -0
  61. package/dist/core/cache-adapter-bridge.js +81 -0
  62. package/dist/core/cache-adapter-bridge.js.map +1 -0
  63. package/dist/core/cache.d.ts +40 -0
  64. package/dist/core/cache.d.ts.map +1 -0
  65. package/dist/core/cache.js +71 -0
  66. package/dist/core/cache.js.map +1 -0
  67. package/dist/core/errors.d.ts +38 -0
  68. package/dist/core/errors.d.ts.map +1 -0
  69. package/dist/core/errors.js +84 -0
  70. package/dist/core/errors.js.map +1 -0
  71. package/dist/core/rate-limiter.d.ts +31 -0
  72. package/dist/core/rate-limiter.d.ts.map +1 -0
  73. package/dist/core/rate-limiter.js +70 -0
  74. package/dist/core/rate-limiter.js.map +1 -0
  75. package/dist/core/types.d.ts +314 -0
  76. package/dist/core/types.d.ts.map +1 -0
  77. package/dist/core/types.js +19 -0
  78. package/dist/core/types.js.map +1 -0
  79. package/dist/core/unified-cache.d.ts +63 -0
  80. package/dist/core/unified-cache.d.ts.map +1 -0
  81. package/dist/core/unified-cache.js +114 -0
  82. package/dist/core/unified-cache.js.map +1 -0
  83. package/dist/index.d.ts +94 -0
  84. package/dist/index.d.ts.map +1 -0
  85. package/dist/index.js +258 -0
  86. package/dist/index.js.map +1 -0
  87. package/dist/mcp/errors.d.ts +33 -0
  88. package/dist/mcp/errors.d.ts.map +1 -0
  89. package/dist/mcp/errors.js +86 -0
  90. package/dist/mcp/errors.js.map +1 -0
  91. package/dist/mcp/index.d.ts +62 -0
  92. package/dist/mcp/index.d.ts.map +1 -0
  93. package/dist/mcp/index.js +173 -0
  94. package/dist/mcp/index.js.map +1 -0
  95. package/dist/mcp/server.d.ts +17 -0
  96. package/dist/mcp/server.d.ts.map +1 -0
  97. package/dist/mcp/server.js +155 -0
  98. package/dist/mcp/server.js.map +1 -0
  99. package/dist/mcp/tools/guide.d.ts +12 -0
  100. package/dist/mcp/tools/guide.d.ts.map +1 -0
  101. package/dist/mcp/tools/guide.js +801 -0
  102. package/dist/mcp/tools/guide.js.map +1 -0
  103. package/dist/mcp/tools/index.d.ts +11 -0
  104. package/dist/mcp/tools/index.d.ts.map +1 -0
  105. package/dist/mcp/tools/index.js +27 -0
  106. package/dist/mcp/tools/index.js.map +1 -0
  107. package/dist/mcp/tools/market.d.ts +11 -0
  108. package/dist/mcp/tools/market.d.ts.map +1 -0
  109. package/dist/mcp/tools/market.js +314 -0
  110. package/dist/mcp/tools/market.js.map +1 -0
  111. package/dist/mcp/tools/order.d.ts +10 -0
  112. package/dist/mcp/tools/order.d.ts.map +1 -0
  113. package/dist/mcp/tools/order.js +258 -0
  114. package/dist/mcp/tools/order.js.map +1 -0
  115. package/dist/mcp/tools/trade.d.ts +38 -0
  116. package/dist/mcp/tools/trade.d.ts.map +1 -0
  117. package/dist/mcp/tools/trade.js +314 -0
  118. package/dist/mcp/tools/trade.js.map +1 -0
  119. package/dist/mcp/tools/trader.d.ts +11 -0
  120. package/dist/mcp/tools/trader.d.ts.map +1 -0
  121. package/dist/mcp/tools/trader.js +277 -0
  122. package/dist/mcp/tools/trader.js.map +1 -0
  123. package/dist/mcp/tools/wallet.d.ts +274 -0
  124. package/dist/mcp/tools/wallet.d.ts.map +1 -0
  125. package/dist/mcp/tools/wallet.js +579 -0
  126. package/dist/mcp/tools/wallet.js.map +1 -0
  127. package/dist/mcp/types.d.ts +413 -0
  128. package/dist/mcp/types.d.ts.map +1 -0
  129. package/dist/mcp/types.js +5 -0
  130. package/dist/mcp/types.js.map +1 -0
  131. package/dist/services/authorization-service.d.ts +97 -0
  132. package/dist/services/authorization-service.d.ts.map +1 -0
  133. package/dist/services/authorization-service.js +279 -0
  134. package/dist/services/authorization-service.js.map +1 -0
  135. package/dist/services/market-service.d.ts +108 -0
  136. package/dist/services/market-service.d.ts.map +1 -0
  137. package/dist/services/market-service.js +458 -0
  138. package/dist/services/market-service.js.map +1 -0
  139. package/dist/services/realtime-service.d.ts +82 -0
  140. package/dist/services/realtime-service.d.ts.map +1 -0
  141. package/dist/services/realtime-service.js +150 -0
  142. package/dist/services/realtime-service.js.map +1 -0
  143. package/dist/services/swap-service.d.ts +217 -0
  144. package/dist/services/swap-service.d.ts.map +1 -0
  145. package/dist/services/swap-service.js +695 -0
  146. package/dist/services/swap-service.js.map +1 -0
  147. package/dist/services/wallet-service.d.ts +94 -0
  148. package/dist/services/wallet-service.d.ts.map +1 -0
  149. package/dist/services/wallet-service.js +173 -0
  150. package/dist/services/wallet-service.js.map +1 -0
  151. package/dist/utils/price-utils.d.ts +153 -0
  152. package/dist/utils/price-utils.d.ts.map +1 -0
  153. package/dist/utils/price-utils.js +236 -0
  154. package/dist/utils/price-utils.js.map +1 -0
  155. package/docs/00-design.md +760 -0
  156. package/docs/01-mcp.md +2041 -0
  157. package/docs/02-API.md +1148 -0
  158. package/docs/e2e/01-trader-tools.md +159 -0
  159. package/docs/e2e/02-market-tools.md +180 -0
  160. package/docs/e2e/03-order-tools.md +166 -0
  161. package/docs/e2e/04-wallet-tools.md +224 -0
  162. package/docs/e2e/05-trading-tools.md +327 -0
  163. package/docs/e2e/06-integration-scenarios.md +481 -0
  164. package/docs/e2e/coordinator.md +376 -0
  165. package/examples/01-basic-usage.ts +68 -0
  166. package/examples/02-smart-money.ts +95 -0
  167. package/examples/03-market-analysis.ts +108 -0
  168. package/examples/04-kline-aggregation.ts +158 -0
  169. package/examples/05-follow-wallet-strategy.ts +156 -0
  170. package/examples/06-services-demo.ts +124 -0
  171. package/examples/07-realtime-websocket.ts +117 -0
  172. package/examples/08-trading-orders.ts +278 -0
  173. package/examples/09-rewards-tracking.ts +187 -0
  174. package/examples/10-ctf-operations.ts +336 -0
  175. package/examples/11-live-arbitrage-scan.ts +221 -0
  176. package/examples/12-trending-arb-monitor.ts +406 -0
  177. package/examples/README.md +179 -0
  178. package/package.json +62 -0
  179. package/scripts/README.md +163 -0
  180. package/scripts/approvals/approve-erc1155.ts +129 -0
  181. package/scripts/approvals/approve-neg-risk-erc1155.ts +149 -0
  182. package/scripts/approvals/approve-neg-risk.ts +102 -0
  183. package/scripts/approvals/check-all-allowances.ts +150 -0
  184. package/scripts/approvals/check-allowance.ts +129 -0
  185. package/scripts/approvals/check-ctf-approval.ts +158 -0
  186. package/scripts/datas/001-report.md +486 -0
  187. package/scripts/datas/clone-modal-screenshot.png +0 -0
  188. package/scripts/deposit/deposit-native-usdc.ts +179 -0
  189. package/scripts/deposit/deposit-usdc.ts +155 -0
  190. package/scripts/deposit/swap-usdc-to-usdce.ts +375 -0
  191. package/scripts/research/research-markets.ts +166 -0
  192. package/scripts/trading/check-orders.ts +50 -0
  193. package/scripts/trading/sell-nvidia-positions.ts +206 -0
  194. package/scripts/trading/test-order.ts +172 -0
  195. package/scripts/truth.md +440 -0
  196. package/scripts/verify/test-approve-trading.ts +98 -0
  197. package/scripts/verify/test-provider-fix.ts +43 -0
  198. package/scripts/verify/test-search-mcp.ts +113 -0
  199. package/scripts/verify/verify-all-apis.ts +160 -0
  200. package/scripts/wallet/check-wallet-balances.ts +75 -0
  201. package/scripts/wallet/test-wallet-operations.ts +191 -0
  202. package/scripts/wallet/verify-wallet-tools.ts +124 -0
  203. package/src/__tests__/clob-api.test.ts +301 -0
  204. package/src/__tests__/integration/bridge-client.integration.test.ts +314 -0
  205. package/src/__tests__/integration/clob-api.integration.test.ts +218 -0
  206. package/src/__tests__/integration/ctf-client.integration.test.ts +331 -0
  207. package/src/__tests__/integration/data-api.integration.test.ts +194 -0
  208. package/src/__tests__/integration/gamma-api.integration.test.ts +206 -0
  209. package/src/__tests__/test-utils.ts +170 -0
  210. package/src/clients/bridge-client.ts +841 -0
  211. package/src/clients/clob-api.ts +629 -0
  212. package/src/clients/ctf-client.ts +1216 -0
  213. package/src/clients/data-api.ts +469 -0
  214. package/src/clients/gamma-api.ts +597 -0
  215. package/src/clients/trading-client.ts +749 -0
  216. package/src/clients/websocket-manager.ts +267 -0
  217. package/src/core/cache-adapter-bridge.ts +94 -0
  218. package/src/core/cache.ts +85 -0
  219. package/src/core/errors.ts +117 -0
  220. package/src/core/rate-limiter.ts +74 -0
  221. package/src/core/types.ts +360 -0
  222. package/src/core/unified-cache.ts +153 -0
  223. package/src/index.ts +455 -0
  224. package/src/mcp/README.md +380 -0
  225. package/src/mcp/errors.ts +124 -0
  226. package/src/mcp/index.ts +309 -0
  227. package/src/mcp/server.ts +183 -0
  228. package/src/mcp/tools/guide.ts +821 -0
  229. package/src/mcp/tools/index.ts +73 -0
  230. package/src/mcp/tools/market.ts +363 -0
  231. package/src/mcp/tools/order.ts +326 -0
  232. package/src/mcp/tools/trade.ts +417 -0
  233. package/src/mcp/tools/trader.ts +322 -0
  234. package/src/mcp/tools/wallet.ts +683 -0
  235. package/src/mcp/types.ts +472 -0
  236. package/src/services/authorization-service.ts +357 -0
  237. package/src/services/market-service.ts +544 -0
  238. package/src/services/realtime-service.ts +196 -0
  239. package/src/services/swap-service.ts +896 -0
  240. package/src/services/wallet-service.ts +259 -0
  241. package/src/utils/price-utils.ts +307 -0
  242. package/tsconfig.json +8 -0
  243. package/vitest.config.ts +19 -0
  244. package/vitest.integration.config.ts +18 -0
@@ -0,0 +1,587 @@
1
+ /**
2
+ * Bridge Client for Polymarket Cross-Chain Deposits
3
+ *
4
+ * Enables depositing assets from multiple chains (Ethereum, etc.)
5
+ * and having them automatically converted to USDC.e on Polygon for trading.
6
+ *
7
+ * Flow:
8
+ * 1. Request deposit addresses for your Polymarket wallet
9
+ * 2. Send assets to the unique deposit address for each chain/token
10
+ * 3. Assets are automatically bridged and swapped to USDC.e on Polygon
11
+ * 4. USDC.e is credited to your Polymarket account
12
+ *
13
+ * @see https://docs.polymarket.com/developers/misc-endpoints/bridge-deposit
14
+ * @see https://docs.polymarket.com/developers/misc-endpoints/bridge-supported-assets
15
+ */
16
+ // ===== Constants =====
17
+ const BRIDGE_API_BASE = 'https://bridge.polymarket.com';
18
+ // Known chain information
19
+ export const SUPPORTED_CHAINS = {
20
+ ETHEREUM: {
21
+ chainId: 1,
22
+ name: 'Ethereum',
23
+ rpcUrl: 'https://eth.llamarpc.com',
24
+ },
25
+ POLYGON: {
26
+ chainId: 137,
27
+ name: 'Polygon',
28
+ rpcUrl: 'https://polygon-rpc.com',
29
+ },
30
+ };
31
+ // Known token addresses
32
+ export const BRIDGE_TOKENS = {
33
+ // Ethereum
34
+ ETH_USDC: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
35
+ ETH_WETH: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',
36
+ ETH_DAI: '0x6B175474E89094C44Da98b954EeDeaC495271d0F',
37
+ // Polygon (destination)
38
+ POLYGON_USDC_E: '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174',
39
+ POLYGON_NATIVE_USDC: '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359',
40
+ };
41
+ // ===== Bridge Client =====
42
+ /**
43
+ * Client for interacting with Polymarket's cross-chain bridge
44
+ *
45
+ * @example
46
+ * ```typescript
47
+ * const bridge = new BridgeClient();
48
+ *
49
+ * // Get supported assets
50
+ * const assets = await bridge.getSupportedAssets();
51
+ * console.log(`Supported: ${assets.map(a => a.tokenSymbol).join(', ')}`);
52
+ *
53
+ * // Create deposit addresses for your wallet
54
+ * const deposit = await bridge.createDepositAddresses('0xYourAddress');
55
+ * const ethUsdc = deposit.depositAddresses.find(
56
+ * d => d.chainName === 'Ethereum' && d.tokenSymbol === 'USDC'
57
+ * );
58
+ * console.log(`Send USDC on Ethereum to: ${ethUsdc.depositAddress}`);
59
+ * ```
60
+ */
61
+ export class BridgeClient {
62
+ baseUrl;
63
+ timeout;
64
+ constructor(config = {}) {
65
+ this.baseUrl = config.baseUrl || BRIDGE_API_BASE;
66
+ this.timeout = config.timeout || 30000;
67
+ }
68
+ /**
69
+ * Get all supported assets for bridge deposits
70
+ *
71
+ * @returns Array of supported assets with their chain/token details
72
+ *
73
+ * @example
74
+ * ```typescript
75
+ * const assets = await bridge.getSupportedAssets();
76
+ * for (const asset of assets) {
77
+ * console.log(`${asset.chainName} ${asset.tokenSymbol}: min $${asset.minDepositUsd}`);
78
+ * }
79
+ * ```
80
+ */
81
+ async getSupportedAssets() {
82
+ const response = await this.fetch('/supported-assets');
83
+ // Normalize the API response to match our interface
84
+ return response.supportedAssets.map((asset) => ({
85
+ chainId: parseInt(asset.chainId, 10),
86
+ chainName: asset.chainName,
87
+ tokenSymbol: asset.token.symbol,
88
+ tokenName: asset.token.name,
89
+ tokenAddress: asset.token.address,
90
+ decimals: asset.token.decimals,
91
+ minDeposit: asset.minCheckoutUsd.toString(),
92
+ minDepositUsd: asset.minCheckoutUsd,
93
+ active: true,
94
+ }));
95
+ }
96
+ /**
97
+ * Get unique deposit addresses for a Polymarket wallet
98
+ *
99
+ * The Bridge API returns a universal deposit address structure:
100
+ * - A single EVM address works for ALL EVM chains (Ethereum, Polygon, Arbitrum, Base, Optimism)
101
+ * - A Solana address for SVM deposits
102
+ * - A Bitcoin address for BTC deposits
103
+ *
104
+ * Funds sent to these addresses are automatically bridged to Polygon
105
+ * and converted to USDC.e for your Polymarket account.
106
+ *
107
+ * @param walletAddress - Your Polymarket wallet address (EOA address)
108
+ * @returns Universal deposit addresses for EVM, Solana, and Bitcoin
109
+ *
110
+ * @example
111
+ * ```typescript
112
+ * const result = await bridge.createDepositAddresses('0xYourPolymarketWallet');
113
+ *
114
+ * // The EVM address works for Ethereum, Polygon, Arbitrum, Base, Optimism
115
+ * console.log(`EVM deposit address: ${result.address.evm}`);
116
+ *
117
+ * // For Solana deposits
118
+ * console.log(`Solana deposit address: ${result.address.svm}`);
119
+ *
120
+ * // For Bitcoin deposits
121
+ * console.log(`Bitcoin deposit address: ${result.address.btc}`);
122
+ * ```
123
+ */
124
+ async createDepositAddresses(walletAddress) {
125
+ const response = await this.fetch('/deposit', {
126
+ method: 'POST',
127
+ body: JSON.stringify({ address: walletAddress }),
128
+ });
129
+ return response;
130
+ }
131
+ /**
132
+ * Get the EVM deposit address for a wallet
133
+ *
134
+ * This address works for ALL supported EVM chains:
135
+ * - Ethereum (chainId: 1)
136
+ * - Polygon (chainId: 137)
137
+ * - Arbitrum (chainId: 42161)
138
+ * - Base (chainId: 8453)
139
+ * - Optimism (chainId: 10)
140
+ *
141
+ * @param walletAddress - Your Polymarket wallet address
142
+ * @returns The universal EVM deposit address
143
+ *
144
+ * @example
145
+ * ```typescript
146
+ * const evmAddr = await bridge.getEvmDepositAddress('0xYourWallet');
147
+ * // Send Native USDC on Polygon to this address
148
+ * // Or send USDC on Ethereum to this address
149
+ * console.log(`Deposit to: ${evmAddr}`);
150
+ * ```
151
+ */
152
+ async getEvmDepositAddress(walletAddress) {
153
+ const result = await this.createDepositAddresses(walletAddress);
154
+ return result.address.evm;
155
+ }
156
+ /**
157
+ * Get the Solana deposit address for a wallet
158
+ *
159
+ * @param walletAddress - Your Polymarket wallet address
160
+ * @returns The Solana deposit address
161
+ */
162
+ async getSolanaDepositAddress(walletAddress) {
163
+ const result = await this.createDepositAddresses(walletAddress);
164
+ return result.address.svm;
165
+ }
166
+ /**
167
+ * Get the Bitcoin deposit address for a wallet
168
+ *
169
+ * @param walletAddress - Your Polymarket wallet address
170
+ * @returns The Bitcoin deposit address
171
+ */
172
+ async getBtcDepositAddress(walletAddress) {
173
+ const result = await this.createDepositAddresses(walletAddress);
174
+ return result.address.btc;
175
+ }
176
+ /**
177
+ * @deprecated Use getEvmDepositAddress(), getSolanaDepositAddress(), or getBtcDepositAddress() instead.
178
+ *
179
+ * The Bridge API returns universal addresses by chain type (EVM/SVM/BTC),
180
+ * not by specific chain/token combinations.
181
+ *
182
+ * For EVM chains (Ethereum, Polygon, Arbitrum, Base, Optimism), use getEvmDepositAddress()
183
+ */
184
+ async getDepositAddress(address, _chainId, _tokenSymbol) {
185
+ // Return a compatibility shim - the EVM address works for all EVM chains
186
+ const result = await this.createDepositAddresses(address);
187
+ return {
188
+ chainId: _chainId,
189
+ chainName: 'Universal EVM',
190
+ tokenAddress: '',
191
+ tokenSymbol: _tokenSymbol,
192
+ depositAddress: result.address.evm,
193
+ minDeposit: '2', // Default minimum
194
+ };
195
+ }
196
+ /**
197
+ * Check if a chain/token combination is supported
198
+ *
199
+ * @param chainId - The chain ID to check
200
+ * @param tokenSymbol - The token symbol to check
201
+ * @returns True if supported, false otherwise
202
+ */
203
+ async isSupported(chainId, tokenSymbol) {
204
+ const assets = await this.getSupportedAssets();
205
+ return assets.some((a) => a.chainId === chainId && a.tokenSymbol.toUpperCase() === tokenSymbol.toUpperCase());
206
+ }
207
+ /**
208
+ * Get minimum deposit amount for a chain/token
209
+ *
210
+ * @param chainId - The chain ID
211
+ * @param tokenSymbol - The token symbol
212
+ * @returns Minimum deposit info or null if not supported
213
+ */
214
+ async getMinDeposit(chainId, tokenSymbol) {
215
+ const assets = await this.getSupportedAssets();
216
+ const asset = assets.find((a) => a.chainId === chainId && a.tokenSymbol.toUpperCase() === tokenSymbol.toUpperCase());
217
+ if (!asset)
218
+ return null;
219
+ return {
220
+ amount: asset.minDeposit,
221
+ usd: asset.minDepositUsd,
222
+ };
223
+ }
224
+ /**
225
+ * Format deposit instructions for a user
226
+ *
227
+ * @param walletAddress - The Polymarket wallet address
228
+ * @returns Formatted instructions string
229
+ */
230
+ async getDepositInstructions(walletAddress) {
231
+ const result = await this.createDepositAddresses(walletAddress);
232
+ const assets = await this.getSupportedAssets();
233
+ const lines = [
234
+ '═══════════════════════════════════════════════════════════',
235
+ ' POLYMARKET DEPOSIT INSTRUCTIONS',
236
+ '═══════════════════════════════════════════════════════════',
237
+ '',
238
+ `Wallet: ${walletAddress}`,
239
+ '',
240
+ 'Send assets to these addresses to deposit to your Polymarket account:',
241
+ '(Assets will be automatically converted to USDC.e on Polygon)',
242
+ '',
243
+ ];
244
+ // EVM Deposit Address (works for all EVM chains)
245
+ lines.push('── EVM CHAINS ──');
246
+ lines.push('(Ethereum, Polygon, Arbitrum, Base, Optimism)');
247
+ lines.push('');
248
+ lines.push(` Universal EVM Address: ${result.address.evm}`);
249
+ lines.push('');
250
+ // Group assets by chain for display
251
+ const evmChainIds = [1, 137, 42161, 8453, 10];
252
+ const evmAssets = assets.filter((a) => evmChainIds.includes(a.chainId));
253
+ // Group by chain
254
+ const byChain = new Map();
255
+ for (const asset of evmAssets) {
256
+ const existing = byChain.get(asset.chainId) || [];
257
+ existing.push(asset);
258
+ byChain.set(asset.chainId, existing);
259
+ }
260
+ for (const [chainId, chainAssets] of byChain) {
261
+ const chainName = chainAssets[0]?.chainName || `Chain ${chainId}`;
262
+ lines.push(` ${chainName} (${chainId}):`);
263
+ for (const asset of chainAssets) {
264
+ lines.push(` - ${asset.tokenSymbol}: min $${asset.minDepositUsd}`);
265
+ }
266
+ lines.push('');
267
+ }
268
+ // Solana Deposit Address
269
+ lines.push('── SOLANA ──');
270
+ lines.push(` Address: ${result.address.svm}`);
271
+ const solAssets = assets.filter((a) => a.chainName?.toLowerCase().includes('solana'));
272
+ for (const asset of solAssets) {
273
+ lines.push(` - ${asset.tokenSymbol}: min $${asset.minDepositUsd}`);
274
+ }
275
+ lines.push('');
276
+ // Bitcoin Deposit Address
277
+ lines.push('── BITCOIN ──');
278
+ lines.push(` Address: ${result.address.btc}`);
279
+ const btcAssets = assets.filter((a) => a.chainName?.toLowerCase().includes('bitcoin'));
280
+ for (const asset of btcAssets) {
281
+ lines.push(` - ${asset.tokenSymbol}: min $${asset.minDepositUsd}`);
282
+ }
283
+ lines.push('');
284
+ lines.push('═══════════════════════════════════════════════════════════');
285
+ lines.push('');
286
+ lines.push('IMPORTANT:');
287
+ lines.push(' - Always send more than the minimum amount');
288
+ lines.push(' - Deposits may take 1-30 minutes to process');
289
+ lines.push(' - Check Polymarket balance after deposit completes');
290
+ lines.push(' - Bridge fee is approximately 0.16%');
291
+ lines.push('');
292
+ return lines.join('\n');
293
+ }
294
+ // ===== Private Methods =====
295
+ async fetch(path, options = {}) {
296
+ const url = `${this.baseUrl}${path}`;
297
+ const controller = new AbortController();
298
+ const timeoutId = setTimeout(() => controller.abort(), this.timeout);
299
+ try {
300
+ const response = await fetch(url, {
301
+ ...options,
302
+ headers: {
303
+ 'Content-Type': 'application/json',
304
+ ...options.headers,
305
+ },
306
+ signal: controller.signal,
307
+ });
308
+ if (!response.ok) {
309
+ const errorText = await response.text();
310
+ throw new Error(`Bridge API error (${response.status}): ${errorText}`);
311
+ }
312
+ return await response.json();
313
+ }
314
+ finally {
315
+ clearTimeout(timeoutId);
316
+ }
317
+ }
318
+ }
319
+ // ===== Deposit Execution =====
320
+ import { ethers } from 'ethers';
321
+ // ERC20 ABI for deposits
322
+ const ERC20_DEPOSIT_ABI = [
323
+ 'function balanceOf(address owner) view returns (uint256)',
324
+ 'function transfer(address to, uint256 amount) returns (bool)',
325
+ ];
326
+ /**
327
+ * Deposit USDC to Polymarket via Bridge
328
+ *
329
+ * This function:
330
+ * 1. Gets the deposit address for your wallet
331
+ * 2. Transfers USDC to that address
332
+ * 3. The bridge automatically converts it to USDC.e for your Polymarket account
333
+ *
334
+ * @param signer - Ethers wallet/signer to send from
335
+ * @param amount - Amount in USDC (e.g., 10.5 for $10.50)
336
+ * @param options - Deposit options
337
+ * @returns Deposit result with transaction hash
338
+ *
339
+ * @example
340
+ * ```typescript
341
+ * const bridge = new BridgeClient();
342
+ * const result = await bridge.depositUsdc(signer, 100);
343
+ * console.log(`Deposited $100: ${result.txHash}`);
344
+ * ```
345
+ */
346
+ export async function depositUsdc(signer, amount, options = {}) {
347
+ const { token = 'NATIVE_USDC', gasPriceMultiplier = 1.2 } = options;
348
+ // Validate minimum deposit
349
+ if (amount < 2) {
350
+ return {
351
+ success: false,
352
+ amount: amount.toString(),
353
+ depositAddress: '',
354
+ error: 'Minimum deposit is $2',
355
+ };
356
+ }
357
+ // Get token address
358
+ const tokenAddress = token === 'NATIVE_USDC' ? BRIDGE_TOKENS.POLYGON_NATIVE_USDC : BRIDGE_TOKENS.POLYGON_USDC_E;
359
+ try {
360
+ // Get deposit address
361
+ const bridge = new BridgeClient();
362
+ const depositAddr = await bridge.getEvmDepositAddress(signer.address);
363
+ // Create token contract
364
+ const tokenContract = new ethers.Contract(tokenAddress, ERC20_DEPOSIT_ABI, signer);
365
+ // Check balance
366
+ const balance = await tokenContract.balanceOf(signer.address);
367
+ const amountWei = ethers.utils.parseUnits(amount.toString(), 6);
368
+ if (balance.lt(amountWei)) {
369
+ const balanceFormatted = ethers.utils.formatUnits(balance, 6);
370
+ return {
371
+ success: false,
372
+ amount: amount.toString(),
373
+ depositAddress: depositAddr,
374
+ error: `Insufficient balance. Have: ${balanceFormatted}, Need: ${amount}`,
375
+ };
376
+ }
377
+ // Get gas price with buffer
378
+ const feeData = await signer.provider.getFeeData();
379
+ const gasPrice = feeData.gasPrice
380
+ ? feeData.gasPrice.mul(Math.floor(gasPriceMultiplier * 100)).div(100)
381
+ : undefined;
382
+ // Execute transfer
383
+ const tx = await tokenContract.transfer(depositAddr, amountWei, {
384
+ gasPrice,
385
+ });
386
+ const receipt = await tx.wait();
387
+ if (receipt.status !== 1) {
388
+ return {
389
+ success: false,
390
+ txHash: tx.hash,
391
+ amount: amount.toString(),
392
+ depositAddress: depositAddr,
393
+ error: 'Transaction failed',
394
+ };
395
+ }
396
+ return {
397
+ success: true,
398
+ txHash: tx.hash,
399
+ amount: amount.toString(),
400
+ depositAddress: depositAddr,
401
+ };
402
+ }
403
+ catch (err) {
404
+ return {
405
+ success: false,
406
+ amount: amount.toString(),
407
+ depositAddress: '',
408
+ error: err instanceof Error ? err.message : 'Unknown error',
409
+ };
410
+ }
411
+ }
412
+ // ===== Swap and Deposit =====
413
+ import { SwapService, POLYGON_TOKENS } from '../services/swap-service.js';
414
+ /**
415
+ * Swap any supported Polygon token to USDC and deposit to Polymarket
416
+ *
417
+ * Supported tokens: MATIC, WMATIC, USDC, USDC_E, USDT, DAI, WETH
418
+ *
419
+ * Flow:
420
+ * 1. If token is not USDC, swap to USDC using QuickSwap
421
+ * 2. Deposit USDC to the bridge deposit address
422
+ *
423
+ * @param signer - Ethers wallet/signer
424
+ * @param token - Token symbol to deposit (e.g., 'MATIC', 'WETH', 'USDT')
425
+ * @param amount - Amount to deposit in token units
426
+ * @param options - Swap and deposit options
427
+ * @returns Result with transaction hashes
428
+ *
429
+ * @example
430
+ * ```typescript
431
+ * // Deposit 10 MATIC
432
+ * const result = await swapAndDeposit(signer, 'MATIC', '10');
433
+ *
434
+ * // Deposit 100 USDT
435
+ * const result = await swapAndDeposit(signer, 'USDT', '100');
436
+ *
437
+ * // Deposit 0.1 WETH
438
+ * const result = await swapAndDeposit(signer, 'WETH', '0.1');
439
+ * ```
440
+ */
441
+ export async function swapAndDeposit(signer, token, amount, options = {}) {
442
+ const { slippage = 0.5, gasPriceMultiplier = 1.2 } = options;
443
+ const upperToken = token.toUpperCase();
444
+ try {
445
+ const swapService = new SwapService(signer);
446
+ const bridge = new BridgeClient();
447
+ // Get deposit address
448
+ const depositAddr = await bridge.getEvmDepositAddress(signer.address);
449
+ // If already USDC, skip swap
450
+ if (upperToken === 'USDC' || upperToken === 'NATIVE_USDC') {
451
+ const result = await depositUsdc(signer, parseFloat(amount), {
452
+ token: 'NATIVE_USDC',
453
+ gasPriceMultiplier,
454
+ });
455
+ return {
456
+ success: result.success,
457
+ depositTxHash: result.txHash,
458
+ tokenIn: upperToken,
459
+ amountIn: amount,
460
+ usdcAmount: amount,
461
+ depositAddress: depositAddr,
462
+ error: result.error,
463
+ };
464
+ }
465
+ if (upperToken === 'USDC_E') {
466
+ const result = await depositUsdc(signer, parseFloat(amount), {
467
+ token: 'USDC_E',
468
+ gasPriceMultiplier,
469
+ });
470
+ return {
471
+ success: result.success,
472
+ depositTxHash: result.txHash,
473
+ tokenIn: upperToken,
474
+ amountIn: amount,
475
+ usdcAmount: amount,
476
+ depositAddress: depositAddr,
477
+ error: result.error,
478
+ };
479
+ }
480
+ // Check balance
481
+ const balance = await swapService.getBalance(token);
482
+ if (parseFloat(balance) < parseFloat(amount)) {
483
+ return {
484
+ success: false,
485
+ tokenIn: upperToken,
486
+ amountIn: amount,
487
+ usdcAmount: '0',
488
+ depositAddress: depositAddr,
489
+ error: `Insufficient ${upperToken} balance. Have: ${balance}, Need: ${amount}`,
490
+ };
491
+ }
492
+ // Swap to USDC
493
+ const swapResult = await swapService.swapToUsdc(token, amount, {
494
+ usdcType: 'NATIVE_USDC',
495
+ slippage,
496
+ });
497
+ if (!swapResult.success) {
498
+ return {
499
+ success: false,
500
+ tokenIn: upperToken,
501
+ amountIn: amount,
502
+ usdcAmount: '0',
503
+ depositAddress: depositAddr,
504
+ error: `Swap failed: ${swapResult.transactionHash}`,
505
+ };
506
+ }
507
+ // Get USDC balance after swap
508
+ const usdcBalance = await swapService.getBalance('USDC');
509
+ // Deposit USDC
510
+ const depositResult = await depositUsdc(signer, parseFloat(usdcBalance), {
511
+ token: 'NATIVE_USDC',
512
+ gasPriceMultiplier,
513
+ });
514
+ return {
515
+ success: depositResult.success,
516
+ swapTxHash: swapResult.transactionHash,
517
+ depositTxHash: depositResult.txHash,
518
+ tokenIn: upperToken,
519
+ amountIn: amount,
520
+ usdcAmount: usdcBalance,
521
+ depositAddress: depositAddr,
522
+ error: depositResult.error,
523
+ };
524
+ }
525
+ catch (err) {
526
+ return {
527
+ success: false,
528
+ tokenIn: upperToken,
529
+ amountIn: amount,
530
+ usdcAmount: '0',
531
+ depositAddress: '',
532
+ error: err instanceof Error ? err.message : 'Unknown error',
533
+ };
534
+ }
535
+ }
536
+ /**
537
+ * Get list of supported tokens for swap and deposit
538
+ */
539
+ export function getSupportedDepositTokens() {
540
+ return Object.keys(POLYGON_TOKENS);
541
+ }
542
+ // ===== Utility Functions =====
543
+ /**
544
+ * Calculate the expected USDC.e output after bridge fees
545
+ *
546
+ * Note: This is an estimate. Actual output depends on bridge/swap fees.
547
+ *
548
+ * @param amount - Input amount in source token
549
+ * @param tokenSymbol - Source token symbol
550
+ * @returns Estimated USDC.e output
551
+ */
552
+ export function estimateBridgeOutput(amount, tokenSymbol) {
553
+ // Typical bridge fees: ~0.5-1%
554
+ // Swap fees: ~0.3%
555
+ const totalFeePercent = 0.01; // 1% estimate
556
+ // For stablecoins, 1:1 minus fees
557
+ if (['USDC', 'USDT', 'DAI', 'BUSD'].includes(tokenSymbol.toUpperCase())) {
558
+ return amount * (1 - totalFeePercent);
559
+ }
560
+ // For ETH and other tokens, would need price oracle
561
+ // This is just a placeholder
562
+ return amount * (1 - totalFeePercent);
563
+ }
564
+ /**
565
+ * Get explorer URL for a deposit transaction
566
+ *
567
+ * @param chainId - The chain ID
568
+ * @param txHash - The transaction hash
569
+ * @returns Block explorer URL
570
+ */
571
+ export function getExplorerUrl(chainId, txHash) {
572
+ switch (chainId) {
573
+ case 1:
574
+ return `https://etherscan.io/tx/${txHash}`;
575
+ case 137:
576
+ return `https://polygonscan.com/tx/${txHash}`;
577
+ case 10:
578
+ return `https://optimistic.etherscan.io/tx/${txHash}`;
579
+ case 42161:
580
+ return `https://arbiscan.io/tx/${txHash}`;
581
+ case 8453:
582
+ return `https://basescan.org/tx/${txHash}`;
583
+ default:
584
+ return `https://blockscan.com/tx/${txHash}`;
585
+ }
586
+ }
587
+ //# sourceMappingURL=bridge-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-client.js","sourceRoot":"","sources":["../../src/clients/bridge-client.ts"],"names":[],"mappings":"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"}