@cyberdrk/onchain 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 (131) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +135 -0
  3. package/dist/cli/program.d.ts +4 -0
  4. package/dist/cli/program.d.ts.map +1 -0
  5. package/dist/cli/program.js +43 -0
  6. package/dist/cli/program.js.map +1 -0
  7. package/dist/cli/setup-wizard.d.ts +7 -0
  8. package/dist/cli/setup-wizard.d.ts.map +1 -0
  9. package/dist/cli/setup-wizard.js +96 -0
  10. package/dist/cli/setup-wizard.js.map +1 -0
  11. package/dist/cli/shared.d.ts +35 -0
  12. package/dist/cli/shared.d.ts.map +1 -0
  13. package/dist/cli/shared.js +120 -0
  14. package/dist/cli/shared.js.map +1 -0
  15. package/dist/cli.d.ts +3 -0
  16. package/dist/cli.d.ts.map +1 -0
  17. package/dist/cli.js +10 -0
  18. package/dist/cli.js.map +1 -0
  19. package/dist/commands/balance.d.ts +4 -0
  20. package/dist/commands/balance.d.ts.map +1 -0
  21. package/dist/commands/balance.js +141 -0
  22. package/dist/commands/balance.js.map +1 -0
  23. package/dist/commands/binance.d.ts +4 -0
  24. package/dist/commands/binance.d.ts.map +1 -0
  25. package/dist/commands/binance.js +129 -0
  26. package/dist/commands/binance.js.map +1 -0
  27. package/dist/commands/coinbase.d.ts +4 -0
  28. package/dist/commands/coinbase.d.ts.map +1 -0
  29. package/dist/commands/coinbase.js +122 -0
  30. package/dist/commands/coinbase.js.map +1 -0
  31. package/dist/commands/config.d.ts +4 -0
  32. package/dist/commands/config.d.ts.map +1 -0
  33. package/dist/commands/config.js +90 -0
  34. package/dist/commands/config.js.map +1 -0
  35. package/dist/commands/history.d.ts +4 -0
  36. package/dist/commands/history.d.ts.map +1 -0
  37. package/dist/commands/history.js +124 -0
  38. package/dist/commands/history.js.map +1 -0
  39. package/dist/commands/markets.d.ts +4 -0
  40. package/dist/commands/markets.d.ts.map +1 -0
  41. package/dist/commands/markets.js +59 -0
  42. package/dist/commands/markets.js.map +1 -0
  43. package/dist/commands/polymarket.d.ts +4 -0
  44. package/dist/commands/polymarket.d.ts.map +1 -0
  45. package/dist/commands/polymarket.js +180 -0
  46. package/dist/commands/polymarket.js.map +1 -0
  47. package/dist/commands/portfolio.d.ts +4 -0
  48. package/dist/commands/portfolio.d.ts.map +1 -0
  49. package/dist/commands/portfolio.js +162 -0
  50. package/dist/commands/portfolio.js.map +1 -0
  51. package/dist/commands/price.d.ts +4 -0
  52. package/dist/commands/price.d.ts.map +1 -0
  53. package/dist/commands/price.js +95 -0
  54. package/dist/commands/price.js.map +1 -0
  55. package/dist/commands/setup.d.ts +4 -0
  56. package/dist/commands/setup.d.ts.map +1 -0
  57. package/dist/commands/setup.js +47 -0
  58. package/dist/commands/setup.js.map +1 -0
  59. package/dist/commands/test.d.ts +4 -0
  60. package/dist/commands/test.d.ts.map +1 -0
  61. package/dist/commands/test.js +198 -0
  62. package/dist/commands/test.js.map +1 -0
  63. package/dist/index.d.ts +5 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +6 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/lib/browser-scraper.d.ts +39 -0
  68. package/dist/lib/browser-scraper.d.ts.map +1 -0
  69. package/dist/lib/browser-scraper.js +214 -0
  70. package/dist/lib/browser-scraper.js.map +1 -0
  71. package/dist/lib/config.d.ts +19 -0
  72. package/dist/lib/config.d.ts.map +1 -0
  73. package/dist/lib/config.js +52 -0
  74. package/dist/lib/config.js.map +1 -0
  75. package/dist/lib/credentials.d.ts +23 -0
  76. package/dist/lib/credentials.d.ts.map +1 -0
  77. package/dist/lib/credentials.js +49 -0
  78. package/dist/lib/credentials.js.map +1 -0
  79. package/dist/lib/mixins/binance.d.ts +12 -0
  80. package/dist/lib/mixins/binance.d.ts.map +1 -0
  81. package/dist/lib/mixins/binance.js +167 -0
  82. package/dist/lib/mixins/binance.js.map +1 -0
  83. package/dist/lib/mixins/coinbase.d.ts +11 -0
  84. package/dist/lib/mixins/coinbase.d.ts.map +1 -0
  85. package/dist/lib/mixins/coinbase.js +266 -0
  86. package/dist/lib/mixins/coinbase.js.map +1 -0
  87. package/dist/lib/mixins/coingecko.d.ts +10 -0
  88. package/dist/lib/mixins/coingecko.d.ts.map +1 -0
  89. package/dist/lib/mixins/coingecko.js +217 -0
  90. package/dist/lib/mixins/coingecko.js.map +1 -0
  91. package/dist/lib/mixins/coinmarketcap.d.ts +9 -0
  92. package/dist/lib/mixins/coinmarketcap.d.ts.map +1 -0
  93. package/dist/lib/mixins/coinmarketcap.js +142 -0
  94. package/dist/lib/mixins/coinmarketcap.js.map +1 -0
  95. package/dist/lib/mixins/debank.d.ts +21 -0
  96. package/dist/lib/mixins/debank.d.ts.map +1 -0
  97. package/dist/lib/mixins/debank.js +280 -0
  98. package/dist/lib/mixins/debank.js.map +1 -0
  99. package/dist/lib/mixins/helius.d.ts +12 -0
  100. package/dist/lib/mixins/helius.d.ts.map +1 -0
  101. package/dist/lib/mixins/helius.js +281 -0
  102. package/dist/lib/mixins/helius.js.map +1 -0
  103. package/dist/lib/mixins/polymarket.d.ts +13 -0
  104. package/dist/lib/mixins/polymarket.d.ts.map +1 -0
  105. package/dist/lib/mixins/polymarket.js +186 -0
  106. package/dist/lib/mixins/polymarket.js.map +1 -0
  107. package/dist/lib/onchain-client-base.d.ts +20 -0
  108. package/dist/lib/onchain-client-base.d.ts.map +1 -0
  109. package/dist/lib/onchain-client-base.js +45 -0
  110. package/dist/lib/onchain-client-base.js.map +1 -0
  111. package/dist/lib/onchain-client-types.d.ts +228 -0
  112. package/dist/lib/onchain-client-types.d.ts.map +1 -0
  113. package/dist/lib/onchain-client-types.js +2 -0
  114. package/dist/lib/onchain-client-types.js.map +1 -0
  115. package/dist/lib/onchain-client.d.ts +15 -0
  116. package/dist/lib/onchain-client.d.ts.map +1 -0
  117. package/dist/lib/onchain-client.js +13 -0
  118. package/dist/lib/onchain-client.js.map +1 -0
  119. package/dist/lib/output.d.ts +28 -0
  120. package/dist/lib/output.d.ts.map +1 -0
  121. package/dist/lib/output.js +94 -0
  122. package/dist/lib/output.js.map +1 -0
  123. package/dist/lib/utils/address.d.ts +26 -0
  124. package/dist/lib/utils/address.d.ts.map +1 -0
  125. package/dist/lib/utils/address.js +61 -0
  126. package/dist/lib/utils/address.js.map +1 -0
  127. package/dist/lib/utils/formatters.d.ts +42 -0
  128. package/dist/lib/utils/formatters.d.ts.map +1 -0
  129. package/dist/lib/utils/formatters.js +173 -0
  130. package/dist/lib/utils/formatters.js.map +1 -0
  131. package/package.json +77 -0
@@ -0,0 +1,281 @@
1
+ const HELIUS_API_BASE = 'https://api.helius.xyz/v0';
2
+ const HELIUS_RPC_BASE = 'https://mainnet.helius-rpc.com';
3
+ // Jupiter price API for token prices
4
+ const JUPITER_PRICE_API = 'https://price.jup.ag/v6/price';
5
+ export function withHelius(Base) {
6
+ class HeliusMixin extends Base {
7
+ getHeliusUrl(endpoint) {
8
+ if (!this.heliusApiKey) {
9
+ throw new Error('Helius API key required');
10
+ }
11
+ return `${HELIUS_API_BASE}${endpoint}?api-key=${this.heliusApiKey}`;
12
+ }
13
+ getHeliusRpcUrl() {
14
+ if (!this.heliusApiKey) {
15
+ throw new Error('Helius API key required');
16
+ }
17
+ return `${HELIUS_RPC_BASE}/?api-key=${this.heliusApiKey}`;
18
+ }
19
+ async getTokenPrices(mints) {
20
+ try {
21
+ const url = `${JUPITER_PRICE_API}?ids=${mints.join(',')}`;
22
+ const response = await this.fetchWithTimeout(url);
23
+ if (!response.ok) {
24
+ return new Map();
25
+ }
26
+ const data = (await response.json());
27
+ const prices = new Map();
28
+ for (const [mint, priceData] of Object.entries(data.data)) {
29
+ prices.set(mint, priceData.price);
30
+ }
31
+ return prices;
32
+ }
33
+ catch {
34
+ return new Map();
35
+ }
36
+ }
37
+ async getSolanaBalances(address) {
38
+ if (!this.heliusApiKey) {
39
+ return { success: false, error: 'Helius API key not configured' };
40
+ }
41
+ try {
42
+ // Get SOL balance via RPC
43
+ const rpcResponse = await this.fetchWithTimeout(this.getHeliusRpcUrl(), {
44
+ method: 'POST',
45
+ headers: { 'Content-Type': 'application/json' },
46
+ body: JSON.stringify({
47
+ jsonrpc: '2.0',
48
+ id: 1,
49
+ method: 'getBalance',
50
+ params: [address],
51
+ }),
52
+ });
53
+ const solBalanceData = (await rpcResponse.json());
54
+ // Get token balances
55
+ const tokensResponse = await this.fetchWithTimeout(this.getHeliusRpcUrl(), {
56
+ method: 'POST',
57
+ headers: { 'Content-Type': 'application/json' },
58
+ body: JSON.stringify({
59
+ jsonrpc: '2.0',
60
+ id: 2,
61
+ method: 'getTokenAccountsByOwner',
62
+ params: [address, { programId: 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' }, { encoding: 'jsonParsed' }],
63
+ }),
64
+ });
65
+ const tokensData = (await tokensResponse.json());
66
+ const balances = [];
67
+ let totalValueUsd = 0;
68
+ // Add SOL balance
69
+ const solBalance = solBalanceData.result?.value ?? 0;
70
+ const solFormatted = solBalance / 1e9;
71
+ // Get SOL price from Jupiter
72
+ const solPrices = await this.getTokenPrices(['So11111111111111111111111111111111111111112']);
73
+ const solPrice = solPrices.get('So11111111111111111111111111111111111111112') ?? null;
74
+ const solValue = solPrice ? solFormatted * solPrice : null;
75
+ if (solValue) {
76
+ totalValueUsd += solValue;
77
+ }
78
+ balances.push({
79
+ symbol: 'SOL',
80
+ name: 'Solana',
81
+ chain: 'solana',
82
+ balanceRaw: String(solBalance),
83
+ balanceFormatted: solFormatted,
84
+ decimals: 9,
85
+ priceUsd: solPrice,
86
+ valueUsd: solValue,
87
+ });
88
+ // Process token balances
89
+ const tokenAccounts = tokensData.result?.value ?? [];
90
+ const mints = tokenAccounts
91
+ .filter((ta) => ta.account.data.parsed.info.tokenAmount.uiAmount > 0)
92
+ .map((ta) => ta.account.data.parsed.info.mint);
93
+ // Get prices for all tokens
94
+ const tokenPrices = mints.length > 0 ? await this.getTokenPrices(mints) : new Map();
95
+ // Get token metadata
96
+ const tokenMetadata = new Map();
97
+ if (mints.length > 0) {
98
+ try {
99
+ const metadataResponse = await this.fetchWithTimeout(this.getHeliusUrl('/token-metadata'), {
100
+ method: 'POST',
101
+ headers: { 'Content-Type': 'application/json' },
102
+ body: JSON.stringify({ mintAccounts: mints }),
103
+ });
104
+ if (metadataResponse.ok) {
105
+ const metadataData = (await metadataResponse.json());
106
+ for (const meta of metadataData) {
107
+ tokenMetadata.set(meta.mint, meta);
108
+ }
109
+ }
110
+ }
111
+ catch {
112
+ // Continue without metadata
113
+ }
114
+ }
115
+ for (const tokenAccount of tokenAccounts) {
116
+ const info = tokenAccount.account.data.parsed.info;
117
+ const amount = info.tokenAmount.uiAmount;
118
+ if (amount <= 0) {
119
+ continue;
120
+ }
121
+ const mint = info.mint;
122
+ const meta = tokenMetadata.get(mint);
123
+ const price = tokenPrices.get(mint) ?? null;
124
+ const value = price ? amount * price : null;
125
+ if (value) {
126
+ totalValueUsd += value;
127
+ }
128
+ const symbol = meta?.offChainMetadata?.metadata?.symbol ??
129
+ meta?.onChainMetadata?.metadata?.data?.symbol ??
130
+ meta?.legacyMetadata?.symbol ??
131
+ 'UNKNOWN';
132
+ const name = meta?.offChainMetadata?.metadata?.name ??
133
+ meta?.onChainMetadata?.metadata?.data?.name ??
134
+ meta?.legacyMetadata?.name ??
135
+ 'Unknown Token';
136
+ const logoUrl = meta?.offChainMetadata?.metadata?.image ?? meta?.legacyMetadata?.logoURI;
137
+ balances.push({
138
+ symbol,
139
+ name,
140
+ chain: 'solana',
141
+ contractAddress: mint,
142
+ balanceRaw: info.tokenAmount.amount,
143
+ balanceFormatted: amount,
144
+ decimals: info.tokenAmount.decimals,
145
+ priceUsd: price,
146
+ valueUsd: value,
147
+ logoUrl,
148
+ });
149
+ }
150
+ // Sort by value descending
151
+ balances.sort((a, b) => (b.valueUsd ?? 0) - (a.valueUsd ?? 0));
152
+ return { success: true, balances, totalValueUsd };
153
+ }
154
+ catch (error) {
155
+ return {
156
+ success: false,
157
+ error: `Failed to fetch Solana balances: ${error instanceof Error ? error.message : String(error)}`,
158
+ };
159
+ }
160
+ }
161
+ async getSolanaNfts(address) {
162
+ if (!this.heliusApiKey) {
163
+ return { success: false, error: 'Helius API key not configured' };
164
+ }
165
+ try {
166
+ const url = this.getHeliusUrl(`/addresses/${address}/nfts`);
167
+ const response = await this.fetchWithTimeout(url);
168
+ if (!response.ok) {
169
+ return { success: false, error: `Helius API error: ${response.status}` };
170
+ }
171
+ const data = (await response.json());
172
+ const nfts = (data.nfts ?? []).map((nft) => {
173
+ const collection = nft.grouping?.find((g) => g.group_key === 'collection');
174
+ return {
175
+ id: nft.id,
176
+ name: nft.content?.metadata?.name ?? `#${nft.id.slice(0, 8)}`,
177
+ collection: collection?.collection_metadata?.name ?? collection?.group_value ?? 'Unknown',
178
+ chain: 'solana',
179
+ contractAddress: collection?.group_value ?? '',
180
+ tokenId: nft.id,
181
+ imageUrl: nft.content?.links?.image,
182
+ };
183
+ });
184
+ return { success: true, nfts };
185
+ }
186
+ catch (error) {
187
+ return {
188
+ success: false,
189
+ error: `Failed to fetch Solana NFTs: ${error instanceof Error ? error.message : String(error)}`,
190
+ };
191
+ }
192
+ }
193
+ async getSolanaHistory(address, options) {
194
+ if (!this.heliusApiKey) {
195
+ return { success: false, error: 'Helius API key not configured' };
196
+ }
197
+ try {
198
+ let url = this.getHeliusUrl(`/addresses/${address}/transactions`);
199
+ const limit = options?.limit ?? 20;
200
+ // Add query params manually since getHeliusUrl already has ?api-key
201
+ url += `&limit=${limit}`;
202
+ if (options?.cursor) {
203
+ url += `&before=${options.cursor}`;
204
+ }
205
+ const response = await this.fetchWithTimeout(url);
206
+ if (!response.ok) {
207
+ return { success: false, error: `Helius API error: ${response.status}` };
208
+ }
209
+ const data = (await response.json());
210
+ const transactions = data.map((tx) => {
211
+ // Determine transaction type
212
+ let type = 'other';
213
+ const txType = tx.type.toLowerCase();
214
+ if (txType === 'transfer' || txType === 'sol_transfer') {
215
+ // Check if this address is sender or receiver
216
+ const isSender = tx.nativeTransfers?.some((t) => t.fromUserAccount === address);
217
+ type = isSender ? 'send' : 'receive';
218
+ }
219
+ else if (txType === 'swap' || txType.includes('swap')) {
220
+ type = 'swap';
221
+ }
222
+ else if (txType === 'token_transfer') {
223
+ const isSender = tx.tokenTransfers?.some((t) => t.fromUserAccount === address);
224
+ type = isSender ? 'send' : 'receive';
225
+ }
226
+ // Collect token transfers
227
+ const tokens = [];
228
+ // Native SOL transfers
229
+ if (tx.nativeTransfers) {
230
+ for (const transfer of tx.nativeTransfers) {
231
+ const direction = transfer.fromUserAccount === address ? 'out' : 'in';
232
+ tokens.push({
233
+ symbol: 'SOL',
234
+ amount: transfer.amount / 1e9,
235
+ direction,
236
+ });
237
+ }
238
+ }
239
+ // Token transfers
240
+ if (tx.tokenTransfers) {
241
+ for (const transfer of tx.tokenTransfers) {
242
+ const direction = transfer.fromUserAccount === address ? 'out' : 'in';
243
+ tokens.push({
244
+ symbol: `${transfer.mint.slice(0, 6)}...`,
245
+ amount: transfer.tokenAmount,
246
+ direction,
247
+ });
248
+ }
249
+ }
250
+ return {
251
+ id: tx.signature,
252
+ hash: tx.signature,
253
+ chain: 'solana',
254
+ timestamp: tx.timestamp,
255
+ type,
256
+ status: tx.transactionError ? 'failed' : 'success',
257
+ from: tx.feePayer,
258
+ to: tx.nativeTransfers?.[0]?.toUserAccount ?? '',
259
+ fee: {
260
+ amount: tx.fee / 1e9,
261
+ symbol: 'SOL',
262
+ },
263
+ tokens: tokens.length > 0 ? tokens : undefined,
264
+ };
265
+ });
266
+ // Use last transaction signature as cursor
267
+ const lastTx = data[data.length - 1];
268
+ const nextCursor = lastTx?.signature;
269
+ return { success: true, transactions, nextCursor };
270
+ }
271
+ catch (error) {
272
+ return {
273
+ success: false,
274
+ error: `Failed to fetch Solana history: ${error instanceof Error ? error.message : String(error)}`,
275
+ };
276
+ }
277
+ }
278
+ }
279
+ return HeliusMixin;
280
+ }
281
+ //# sourceMappingURL=helius.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helius.js","sourceRoot":"","sources":["../../../src/lib/mixins/helius.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { AbstractConstructor, Mixin, OnchainClientBase } from '../onchain-client-base.js';
2
+ import type { PolymarketDetailResult, PolymarketResult } from '../onchain-client-types.js';
3
+ export interface PolymarketMethods {
4
+ getPolymarketTrending(options?: {
5
+ limit?: number;
6
+ }): Promise<PolymarketResult>;
7
+ getPolymarketMarket(marketIdOrSlug: string): Promise<PolymarketDetailResult>;
8
+ searchPolymarkets(query: string, options?: {
9
+ limit?: number;
10
+ }): Promise<PolymarketResult>;
11
+ }
12
+ export declare function withPolymarket<TBase extends AbstractConstructor<OnchainClientBase>>(Base: TBase): Mixin<TBase, PolymarketMethods>;
13
+ //# sourceMappingURL=polymarket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polymarket.d.ts","sourceRoot":"","sources":["../../../src/lib/mixins/polymarket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC/F,OAAO,KAAK,EAAE,sBAAsB,EAAoB,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAK7G,MAAM,WAAW,iBAAiB;IAChC,qBAAqB,CAAC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC/E,mBAAmB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAC7E,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC3F;AAkED,wBAAgB,cAAc,CAAC,KAAK,SAAS,mBAAmB,CAAC,iBAAiB,CAAC,EACjF,IAAI,EAAE,KAAK,GACV,KAAK,CAAC,KAAK,EAAE,iBAAiB,CAAC,CA+KjC"}
@@ -0,0 +1,186 @@
1
+ const POLYMARKET_API_BASE = 'https://gamma-api.polymarket.com';
2
+ const POLYMARKET_CLOB_API = 'https://clob.polymarket.com';
3
+ function parseOutcomes(outcomes) {
4
+ if (!outcomes) {
5
+ return ['Yes', 'No'];
6
+ }
7
+ if (Array.isArray(outcomes)) {
8
+ return outcomes;
9
+ }
10
+ try {
11
+ return JSON.parse(outcomes);
12
+ }
13
+ catch {
14
+ return ['Yes', 'No'];
15
+ }
16
+ }
17
+ function parseOutcomePrices(prices) {
18
+ if (!prices) {
19
+ return [0.5, 0.5];
20
+ }
21
+ if (Array.isArray(prices)) {
22
+ return prices.map((p) => Number.parseFloat(p));
23
+ }
24
+ try {
25
+ const parsed = JSON.parse(prices);
26
+ return parsed.map((p) => Number.parseFloat(p));
27
+ }
28
+ catch {
29
+ return [0.5, 0.5];
30
+ }
31
+ }
32
+ export function withPolymarket(Base) {
33
+ class PolymarketMixin extends Base {
34
+ async getPolymarketTrending(options) {
35
+ try {
36
+ const limit = options?.limit ?? 10;
37
+ const url = `${POLYMARKET_API_BASE}/events?active=true&closed=false&limit=${limit}&order=volume&ascending=false`;
38
+ const response = await this.fetchWithTimeout(url, {
39
+ headers: { Accept: 'application/json' },
40
+ });
41
+ if (!response.ok) {
42
+ return { success: false, error: `Polymarket API error: ${response.status}` };
43
+ }
44
+ const data = (await response.json());
45
+ const markets = [];
46
+ for (const event of data) {
47
+ const eventMarkets = event.markets ?? [];
48
+ for (const market of eventMarkets) {
49
+ const outcomes = parseOutcomes(market.outcomes);
50
+ const outcomePrices = parseOutcomePrices(market.outcomePrices);
51
+ markets.push({
52
+ id: market.id,
53
+ question: market.question || event.title,
54
+ description: market.description || event.description,
55
+ endDate: market.endDate || event.endDate,
56
+ volume: Number.parseFloat(market.volume ?? event.volume ?? '0'),
57
+ liquidity: Number.parseFloat(market.liquidity ?? event.liquidity ?? '0'),
58
+ outcomes: outcomes.map((outcome, i) => ({
59
+ name: outcome,
60
+ price: outcomePrices[i] ?? 0.5,
61
+ })),
62
+ category: event.category,
63
+ slug: event.slug,
64
+ });
65
+ }
66
+ }
67
+ return { success: true, markets: markets.slice(0, limit) };
68
+ }
69
+ catch (error) {
70
+ return {
71
+ success: false,
72
+ error: `Failed to fetch trending markets: ${error instanceof Error ? error.message : String(error)}`,
73
+ };
74
+ }
75
+ }
76
+ async getPolymarketMarket(marketIdOrSlug) {
77
+ try {
78
+ // Try fetching as event slug first
79
+ let url = `${POLYMARKET_API_BASE}/events?slug=${encodeURIComponent(marketIdOrSlug)}`;
80
+ let response = await this.fetchWithTimeout(url, {
81
+ headers: { Accept: 'application/json' },
82
+ });
83
+ if (response.ok) {
84
+ const data = (await response.json());
85
+ if (data.length > 0 && (data[0].markets ?? []).length > 0) {
86
+ const event = data[0];
87
+ const market = (event.markets ?? [])[0];
88
+ const outcomes = parseOutcomes(market.outcomes);
89
+ const outcomePrices = parseOutcomePrices(market.outcomePrices);
90
+ return {
91
+ success: true,
92
+ market: {
93
+ id: market.id,
94
+ question: market.question || event.title,
95
+ description: market.description || event.description,
96
+ endDate: market.endDate || event.endDate,
97
+ volume: Number.parseFloat(market.volume ?? event.volume ?? '0'),
98
+ liquidity: Number.parseFloat(market.liquidity ?? event.liquidity ?? '0'),
99
+ outcomes: outcomes.map((outcome, i) => ({
100
+ name: outcome,
101
+ price: outcomePrices[i] ?? 0.5,
102
+ })),
103
+ category: event.category,
104
+ slug: event.slug,
105
+ },
106
+ };
107
+ }
108
+ }
109
+ // Try fetching from CLOB API by condition ID
110
+ url = `${POLYMARKET_CLOB_API}/markets/${marketIdOrSlug}`;
111
+ response = await this.fetchWithTimeout(url, {
112
+ headers: { Accept: 'application/json' },
113
+ });
114
+ if (!response.ok) {
115
+ return { success: false, error: `Market "${marketIdOrSlug}" not found` };
116
+ }
117
+ const clobData = (await response.json());
118
+ return {
119
+ success: true,
120
+ market: {
121
+ id: clobData.condition_id,
122
+ question: clobData.question,
123
+ description: clobData.description,
124
+ endDate: clobData.end_date_iso,
125
+ volume: 0,
126
+ liquidity: 0,
127
+ outcomes: clobData.tokens.map((token) => ({
128
+ name: token.outcome,
129
+ price: token.price,
130
+ })),
131
+ },
132
+ };
133
+ }
134
+ catch (error) {
135
+ return {
136
+ success: false,
137
+ error: `Failed to fetch market: ${error instanceof Error ? error.message : String(error)}`,
138
+ };
139
+ }
140
+ }
141
+ async searchPolymarkets(query, options) {
142
+ try {
143
+ const limit = options?.limit ?? 10;
144
+ const url = `${POLYMARKET_API_BASE}/events?title_contains=${encodeURIComponent(query)}&active=true&closed=false&limit=${limit}`;
145
+ const response = await this.fetchWithTimeout(url, {
146
+ headers: { Accept: 'application/json' },
147
+ });
148
+ if (!response.ok) {
149
+ return { success: false, error: `Polymarket API error: ${response.status}` };
150
+ }
151
+ const data = (await response.json());
152
+ const markets = [];
153
+ for (const event of data) {
154
+ const eventMarkets = event.markets ?? [];
155
+ for (const market of eventMarkets) {
156
+ const outcomes = parseOutcomes(market.outcomes);
157
+ const outcomePrices = parseOutcomePrices(market.outcomePrices);
158
+ markets.push({
159
+ id: market.id,
160
+ question: market.question || event.title,
161
+ description: market.description || event.description,
162
+ endDate: market.endDate || event.endDate,
163
+ volume: Number.parseFloat(market.volume ?? event.volume ?? '0'),
164
+ liquidity: Number.parseFloat(market.liquidity ?? event.liquidity ?? '0'),
165
+ outcomes: outcomes.map((outcome, i) => ({
166
+ name: outcome,
167
+ price: outcomePrices[i] ?? 0.5,
168
+ })),
169
+ category: event.category,
170
+ slug: event.slug,
171
+ });
172
+ }
173
+ }
174
+ return { success: true, markets: markets.slice(0, limit) };
175
+ }
176
+ catch (error) {
177
+ return {
178
+ success: false,
179
+ error: `Failed to search markets: ${error instanceof Error ? error.message : String(error)}`,
180
+ };
181
+ }
182
+ }
183
+ }
184
+ return PolymarketMixin;
185
+ }
186
+ //# sourceMappingURL=polymarket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polymarket.js","sourceRoot":"","sources":["../../../src/lib/mixins/polymarket.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { OnchainClientOptions } from './onchain-client-types.js';
2
+ export type Constructor<T = object> = new (...args: any[]) => T;
3
+ export type AbstractConstructor<T = object> = abstract new (...args: any[]) => T;
4
+ export type Mixin<TBase extends AbstractConstructor<OnchainClientBase>, TAdded> = abstract new (...args: ConstructorParameters<TBase>) => OnchainClientBase & TAdded;
5
+ export declare abstract class OnchainClientBase {
6
+ protected debankApiKey?: string;
7
+ protected heliusApiKey?: string;
8
+ protected coinbaseApiKeyId?: string;
9
+ protected coinbaseApiKeySecret?: string;
10
+ protected binanceApiKey?: string;
11
+ protected binanceApiSecret?: string;
12
+ protected coingeckoApiKey?: string;
13
+ protected coinmarketcapApiKey?: string;
14
+ protected timeoutMs?: number;
15
+ constructor(options?: OnchainClientOptions);
16
+ protected sleep(ms: number): Promise<void>;
17
+ protected fetchWithTimeout(url: string, init?: RequestInit): Promise<Response>;
18
+ protected getJsonHeaders(): Record<string, string>;
19
+ }
20
+ //# sourceMappingURL=onchain-client-base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onchain-client-base.d.ts","sourceRoot":"","sources":["../../src/lib/onchain-client-base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAGtE,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAEhE,MAAM,MAAM,mBAAmB,CAAC,CAAC,GAAG,MAAM,IAAI,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AACjF,MAAM,MAAM,KAAK,CAAC,KAAK,SAAS,mBAAmB,CAAC,iBAAiB,CAAC,EAAE,MAAM,IAAI,QAAQ,MACxF,GAAG,IAAI,EAAE,qBAAqB,CAAC,KAAK,CAAC,KAClC,iBAAiB,GAAG,MAAM,CAAC;AAEhC,8BAAsB,iBAAiB;IACrC,SAAS,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACpC,SAAS,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IACxC,SAAS,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IACjC,SAAS,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACpC,SAAS,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IACnC,SAAS,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IACvC,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;gBAEjB,OAAO,GAAE,oBAAyB;cAY9B,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;cAIhC,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAcxF,SAAS,CAAC,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAMnD"}
@@ -0,0 +1,45 @@
1
+ export class OnchainClientBase {
2
+ debankApiKey;
3
+ heliusApiKey;
4
+ coinbaseApiKeyId;
5
+ coinbaseApiKeySecret;
6
+ binanceApiKey;
7
+ binanceApiSecret;
8
+ coingeckoApiKey;
9
+ coinmarketcapApiKey;
10
+ timeoutMs;
11
+ constructor(options = {}) {
12
+ this.debankApiKey = options.debankApiKey;
13
+ this.heliusApiKey = options.heliusApiKey;
14
+ this.coinbaseApiKeyId = options.coinbaseApiKeyId;
15
+ this.coinbaseApiKeySecret = options.coinbaseApiKeySecret;
16
+ this.binanceApiKey = options.binanceApiKey;
17
+ this.binanceApiSecret = options.binanceApiSecret;
18
+ this.coingeckoApiKey = options.coingeckoApiKey;
19
+ this.coinmarketcapApiKey = options.coinmarketcapApiKey;
20
+ this.timeoutMs = options.timeoutMs;
21
+ }
22
+ async sleep(ms) {
23
+ await new Promise((resolve) => setTimeout(resolve, ms));
24
+ }
25
+ async fetchWithTimeout(url, init = {}) {
26
+ if (!this.timeoutMs || this.timeoutMs <= 0) {
27
+ return fetch(url, init);
28
+ }
29
+ const controller = new AbortController();
30
+ const timeoutId = setTimeout(() => controller.abort(), this.timeoutMs);
31
+ try {
32
+ return await fetch(url, { ...init, signal: controller.signal });
33
+ }
34
+ finally {
35
+ clearTimeout(timeoutId);
36
+ }
37
+ }
38
+ getJsonHeaders() {
39
+ return {
40
+ Accept: 'application/json',
41
+ 'Content-Type': 'application/json',
42
+ };
43
+ }
44
+ }
45
+ //# sourceMappingURL=onchain-client-base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onchain-client-base.js","sourceRoot":"","sources":["../../src/lib/onchain-client-base.ts"],"names":[],"mappings":"AAUA,MAAM,OAAgB,iBAAiB;IAC3B,YAAY,CAAU;IACtB,YAAY,CAAU;IACtB,gBAAgB,CAAU;IAC1B,oBAAoB,CAAU;IAC9B,aAAa,CAAU;IACvB,gBAAgB,CAAU;IAC1B,eAAe,CAAU;IACzB,mBAAmB,CAAU;IAC7B,SAAS,CAAU;IAE7B,YAAY,UAAgC,EAAE;QAC5C,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACjD,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC;QACzD,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAC3C,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACjD,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;QAC/C,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;QACvD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACrC,CAAC;IAES,KAAK,CAAC,KAAK,CAAC,EAAU;QAC9B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1D,CAAC;IAES,KAAK,CAAC,gBAAgB,CAAC,GAAW,EAAE,OAAoB,EAAE;QAClE,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC;YAC3C,OAAO,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC1B,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACvE,IAAI,CAAC;YACH,OAAO,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QAClE,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAES,cAAc;QACtB,OAAO;YACL,MAAM,EAAE,kBAAkB;YAC1B,cAAc,EAAE,kBAAkB;SACnC,CAAC;IACJ,CAAC;CACF"}