@clawnch/clawncher-sdk 0.1.3 → 0.3.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 (63) hide show
  1. package/README.md +190 -0
  2. package/dist/analytics.d.ts +157 -0
  3. package/dist/analytics.d.ts.map +1 -0
  4. package/dist/analytics.js +468 -0
  5. package/dist/analytics.js.map +1 -0
  6. package/dist/api-deployer.d.ts.map +1 -1
  7. package/dist/api-deployer.js +38 -35
  8. package/dist/api-deployer.js.map +1 -1
  9. package/dist/claimer.d.ts.map +1 -1
  10. package/dist/claimer.js +9 -7
  11. package/dist/claimer.js.map +1 -1
  12. package/dist/errors.d.ts +13 -0
  13. package/dist/errors.d.ts.map +1 -1
  14. package/dist/errors.js +50 -0
  15. package/dist/errors.js.map +1 -1
  16. package/dist/index.d.ts +8 -0
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +16 -0
  19. package/dist/index.js.map +1 -1
  20. package/dist/liquidity.d.ts +13 -7
  21. package/dist/liquidity.d.ts.map +1 -1
  22. package/dist/liquidity.js +143 -46
  23. package/dist/liquidity.js.map +1 -1
  24. package/dist/orders.d.ts +338 -0
  25. package/dist/orders.d.ts.map +1 -0
  26. package/dist/orders.js +611 -0
  27. package/dist/orders.js.map +1 -0
  28. package/dist/permit2.d.ts +258 -0
  29. package/dist/permit2.d.ts.map +1 -0
  30. package/dist/permit2.js +520 -0
  31. package/dist/permit2.js.map +1 -0
  32. package/dist/price.d.ts +95 -0
  33. package/dist/price.d.ts.map +1 -0
  34. package/dist/price.js +207 -0
  35. package/dist/price.js.map +1 -0
  36. package/dist/swap.d.ts.map +1 -1
  37. package/dist/swap.js +21 -19
  38. package/dist/swap.js.map +1 -1
  39. package/dist/trader.d.ts +188 -0
  40. package/dist/trader.d.ts.map +1 -0
  41. package/dist/trader.js +277 -0
  42. package/dist/trader.js.map +1 -0
  43. package/dist/uniswap-abis.d.ts +525 -0
  44. package/dist/uniswap-abis.d.ts.map +1 -1
  45. package/dist/uniswap-abis.js +432 -1
  46. package/dist/uniswap-abis.js.map +1 -1
  47. package/dist/uniswap-chains.d.ts +77 -0
  48. package/dist/uniswap-chains.d.ts.map +1 -0
  49. package/dist/uniswap-chains.js +362 -0
  50. package/dist/uniswap-chains.js.map +1 -0
  51. package/dist/uniswap-quoter.d.ts +178 -0
  52. package/dist/uniswap-quoter.d.ts.map +1 -0
  53. package/dist/uniswap-quoter.js +432 -0
  54. package/dist/uniswap-quoter.js.map +1 -0
  55. package/dist/uniswap-trading.d.ts +203 -0
  56. package/dist/uniswap-trading.d.ts.map +1 -0
  57. package/dist/uniswap-trading.js +380 -0
  58. package/dist/uniswap-trading.js.map +1 -0
  59. package/dist/watcher.d.ts +117 -2
  60. package/dist/watcher.d.ts.map +1 -1
  61. package/dist/watcher.js +147 -2
  62. package/dist/watcher.js.map +1 -1
  63. package/package.json +3 -1
@@ -0,0 +1,380 @@
1
+ /**
2
+ * UniswapTradingApi — Swap execution via Uniswap's Trading API.
3
+ *
4
+ * Implements the 3-step flow:
5
+ * 1. POST /check_approval → tells you if token approval is needed
6
+ * 2. POST /quote → returns a firm swap quote
7
+ * 3. POST /swap → returns signed calldata for UniversalRouter
8
+ *
9
+ * Supports all 15 Uniswap chains via the multi-chain registry.
10
+ * Falls through to direct V4 UniversalRouter execution if no API key
11
+ * is available (see uniswap-quoter.ts for on-chain quoting).
12
+ *
13
+ * @see https://docs.uniswap.org/api/trading-api
14
+ *
15
+ * Critical Trading API rules (from Uniswap AI swap-integration skill):
16
+ * - Spread the quote response INTO the swap request (don't nest/wrap it)
17
+ * - Strip `permitData: null` before sending to /swap
18
+ * - Quotes expire in ~30 seconds — execute promptly
19
+ * - Use `x-universal-router-version: 2.0` header
20
+ */
21
+ import { erc20Abi, maxUint256, } from 'viem';
22
+ import { ClawnchErrorCode, ClawnchDeployError, withRetry } from './errors.js';
23
+ import { getUniswapChain } from './uniswap-chains.js';
24
+ import { Permit2Client, PERMIT2_ADDRESS } from './permit2.js';
25
+ // ============================================================================
26
+ // Constants
27
+ // ============================================================================
28
+ const TRADING_API_BASE = 'https://trade-api.gateway.uniswap.org/v1';
29
+ const NATIVE_ADDRESS = '0x0000000000000000000000000000000000000000';
30
+ // ============================================================================
31
+ // UniswapTradingApi
32
+ // ============================================================================
33
+ export class UniswapTradingApi {
34
+ wallet;
35
+ publicClient;
36
+ chainId;
37
+ apiKey;
38
+ slippageBps;
39
+ chainConfig;
40
+ constructor(config) {
41
+ if (!config.wallet) {
42
+ throw new ClawnchDeployError(ClawnchErrorCode.WALLET_NOT_CONFIGURED, 'Wallet client is required for UniswapTradingApi');
43
+ }
44
+ this.wallet = config.wallet;
45
+ this.publicClient = config.publicClient;
46
+ this.chainId = config.chainId ?? 8453;
47
+ this.apiKey = config.apiKey;
48
+ this.slippageBps = config.slippageBps ?? 50;
49
+ const chain = getUniswapChain(this.chainId);
50
+ if (!chain) {
51
+ throw new ClawnchDeployError(ClawnchErrorCode.INVALID_CHAIN, `Chain ${this.chainId} is not supported by Uniswap`);
52
+ }
53
+ if (!chain.tradingApi) {
54
+ throw new ClawnchDeployError(ClawnchErrorCode.INVALID_CHAIN, `Chain ${chain.name} (${this.chainId}) does not support the Uniswap Trading API`);
55
+ }
56
+ this.chainConfig = chain;
57
+ }
58
+ /** Lazy-initialized Permit2 client for signature-based approvals */
59
+ _permit2 = null;
60
+ /** Check if the Trading API is available (has API key) */
61
+ get isAvailable() {
62
+ return !!this.apiKey;
63
+ }
64
+ /** Get the taker address */
65
+ get taker() {
66
+ return this.wallet.account.address;
67
+ }
68
+ /** Get Permit2 client for advanced approval flows */
69
+ get permit2() {
70
+ if (!this._permit2) {
71
+ this._permit2 = new Permit2Client({
72
+ wallet: this.wallet,
73
+ publicClient: this.publicClient,
74
+ chainId: this.chainId,
75
+ });
76
+ }
77
+ return this._permit2;
78
+ }
79
+ // ==========================================================================
80
+ // API helpers
81
+ // ==========================================================================
82
+ async apiPost(path, body) {
83
+ if (!this.apiKey) {
84
+ throw new ClawnchDeployError(ClawnchErrorCode.WALLET_NOT_CONFIGURED, 'Uniswap Trading API key is required. Set apiKey in config.');
85
+ }
86
+ return withRetry(async () => {
87
+ const url = `${TRADING_API_BASE}${path}`;
88
+ const response = await fetch(url, {
89
+ method: 'POST',
90
+ headers: {
91
+ 'Content-Type': 'application/json',
92
+ 'x-api-key': this.apiKey,
93
+ 'x-universal-router-version': '2.0',
94
+ },
95
+ body: JSON.stringify(body),
96
+ });
97
+ if (!response.ok) {
98
+ let errorMsg;
99
+ try {
100
+ const errBody = await response.json();
101
+ errorMsg = errBody.errorCode
102
+ ? `${errBody.errorCode}: ${errBody.detail || errBody.message || JSON.stringify(errBody)}`
103
+ : JSON.stringify(errBody);
104
+ }
105
+ catch {
106
+ errorMsg = `HTTP ${response.status}: ${response.statusText}`;
107
+ }
108
+ throw new ClawnchDeployError(ClawnchErrorCode.RPC_ERROR, `Uniswap Trading API error (${path}): ${errorMsg}`);
109
+ }
110
+ return response.json();
111
+ });
112
+ }
113
+ // ==========================================================================
114
+ // Step 1: Check Approval
115
+ // ==========================================================================
116
+ /**
117
+ * Check if the sell token needs approval for Permit2 / UniversalRouter.
118
+ *
119
+ * Native ETH never needs approval.
120
+ */
121
+ async checkApproval(tokenIn, amount) {
122
+ if (this.isNative(tokenIn)) {
123
+ return { approvalNeeded: false, approvalTarget: null, token: null, approvalTx: null };
124
+ }
125
+ const response = await this.apiPost('/check_approval', {
126
+ token: tokenIn,
127
+ amount: amount.toString(),
128
+ chainId: this.chainId,
129
+ walletAddress: this.taker,
130
+ });
131
+ const approval = response.approval;
132
+ if (!approval) {
133
+ return { approvalNeeded: false, approvalTarget: null, token: null, approvalTx: null };
134
+ }
135
+ return {
136
+ approvalNeeded: true,
137
+ approvalTarget: (approval.spender ?? this.chainConfig.permit2),
138
+ token: tokenIn,
139
+ approvalTx: approval.txRequest
140
+ ? {
141
+ to: approval.txRequest.to,
142
+ data: approval.txRequest.data,
143
+ value: approval.txRequest.value ?? '0',
144
+ }
145
+ : null,
146
+ };
147
+ }
148
+ // ==========================================================================
149
+ // Step 2: Get Quote
150
+ // ==========================================================================
151
+ /**
152
+ * Get a firm swap quote from the Trading API.
153
+ *
154
+ * The raw quote response must be spread into the /swap request — the API
155
+ * expects the same shape, not a nested `quote` key.
156
+ */
157
+ async getQuote(params) {
158
+ const slippage = params.slippageBps ?? this.slippageBps;
159
+ const body = {
160
+ type: params.type ?? 'EXACT_INPUT',
161
+ tokenInChainId: this.chainId,
162
+ tokenOutChainId: this.chainId,
163
+ tokenIn: params.tokenIn,
164
+ tokenOut: params.tokenOut,
165
+ amount: params.amount.toString(),
166
+ swapper: this.taker,
167
+ slippageTolerance: (slippage / 10000).toString(), // API expects decimal like "0.005"
168
+ };
169
+ const raw = await this.apiPost('/quote', body);
170
+ // Parse useful fields
171
+ const quoteAmount = BigInt(raw.quote?.amount ?? raw.quoteGasAdjusted ?? '0');
172
+ const gasEstimate = BigInt(raw.gasEstimate ?? raw.gasFeeEstimate ?? '0');
173
+ const priceImpact = parseFloat(raw.priceImpact ?? '0');
174
+ const routeDescription = this.buildRouteDescription(raw);
175
+ return {
176
+ raw,
177
+ quoteAmount,
178
+ gasEstimate,
179
+ priceImpact,
180
+ routeDescription,
181
+ expiresAt: Date.now() + 30_000, // ~30s expiry
182
+ };
183
+ }
184
+ // ==========================================================================
185
+ // Step 3: Execute Swap
186
+ // ==========================================================================
187
+ /**
188
+ * Execute a swap using the Trading API's /swap endpoint.
189
+ *
190
+ * The quote response is spread directly into the swap request body.
191
+ * `permitData: null` is stripped (the API rejects it if present).
192
+ */
193
+ async executeSwap(quote) {
194
+ // Check quote hasn't expired
195
+ if (Date.now() > quote.expiresAt) {
196
+ throw new ClawnchDeployError(ClawnchErrorCode.DEPLOY_FAILED, 'Trading API quote has expired. Re-fetch a fresh quote.');
197
+ }
198
+ // Spread quote into swap request — key rule from Uniswap AI
199
+ const swapBody = { ...quote.raw };
200
+ // Strip null permitData — the API rejects it
201
+ if (swapBody.permitData === null || swapBody.permitData === undefined) {
202
+ delete swapBody.permitData;
203
+ }
204
+ const response = await this.apiPost('/swap', swapBody);
205
+ // The response contains the transaction to send
206
+ const swap = response.swap ?? response;
207
+ if (!swap.to || !swap.data) {
208
+ throw new ClawnchDeployError(ClawnchErrorCode.DEPLOY_FAILED, 'Trading API /swap did not return transaction data');
209
+ }
210
+ const txHash = await this.wallet.sendTransaction({
211
+ account: this.wallet.account,
212
+ chain: null, // let wallet decide
213
+ to: swap.to,
214
+ data: swap.data,
215
+ value: BigInt(swap.value ?? '0'),
216
+ gas: swap.gasLimit ? BigInt(swap.gasLimit) : undefined,
217
+ });
218
+ const receipt = await this.publicClient.waitForTransactionReceipt({ hash: txHash });
219
+ if (receipt.status === 'reverted') {
220
+ throw new ClawnchDeployError(ClawnchErrorCode.TX_REVERTED, `Uniswap Trading API swap reverted: ${txHash}`);
221
+ }
222
+ return {
223
+ txHash,
224
+ quoteAmount: quote.quoteAmount,
225
+ receipt,
226
+ gasUsed: receipt.gasUsed,
227
+ };
228
+ }
229
+ // ==========================================================================
230
+ // Full swap flow (approve + quote + swap)
231
+ // ==========================================================================
232
+ /**
233
+ * Execute a full swap: check approval → approve if needed → quote → swap.
234
+ *
235
+ * This is the primary high-level method.
236
+ *
237
+ * Approval flow:
238
+ * 1. If Trading API returns an approval tx, execute it directly
239
+ * 2. Otherwise, use Permit2Client for the full two-step flow:
240
+ * a. ERC20.approve(Permit2, MAX) — one-time per token
241
+ * b. Permit2.approve(token, UniversalRouter, amount, expiry) — grant router access
242
+ */
243
+ async swap(params) {
244
+ // 1. Check & execute approval if needed
245
+ const approval = await this.checkApproval(params.tokenIn, params.amount);
246
+ if (approval.approvalNeeded && approval.approvalTx) {
247
+ // Use the Trading API's suggested approval tx
248
+ const approveTx = await this.wallet.sendTransaction({
249
+ account: this.wallet.account,
250
+ chain: null,
251
+ to: approval.approvalTx.to,
252
+ data: approval.approvalTx.data,
253
+ value: BigInt(approval.approvalTx.value),
254
+ });
255
+ await this.publicClient.waitForTransactionReceipt({ hash: approveTx });
256
+ }
257
+ else if (approval.approvalNeeded && !approval.approvalTx) {
258
+ // Fallback: full Permit2 flow (ERC20→Permit2, then Permit2→UniversalRouter)
259
+ await this.ensureFullPermit2Approval(params.tokenIn, params.amount);
260
+ }
261
+ // 2. Get firm quote
262
+ const quote = await this.getQuote(params);
263
+ // 3. Execute swap
264
+ return this.executeSwap(quote);
265
+ }
266
+ // ==========================================================================
267
+ // Approval helpers
268
+ // ==========================================================================
269
+ /**
270
+ * Full Permit2 approval flow for swaps:
271
+ * 1. ERC20.approve(Permit2, MAX) — one-time per token
272
+ * 2. Permit2.approve(token, UniversalRouter, amount, expiry)
273
+ *
274
+ * Uses direct on-chain approve (not signature) since agent wallets
275
+ * control their own private key and don't benefit from gasless signing.
276
+ */
277
+ async ensureFullPermit2Approval(token, amount) {
278
+ if (this.isNative(token)) {
279
+ return { approvalTxHash: null, permitTxHash: null };
280
+ }
281
+ const universalRouter = this.chainConfig.v4UniversalRouter;
282
+ return this.permit2.ensurePermit2Allowance(token, universalRouter, amount);
283
+ }
284
+ /**
285
+ * Approve a token for Permit2 (ERC20→Permit2 only, step 1).
286
+ *
287
+ * For the full flow (ERC20→Permit2 + Permit2→Router), use
288
+ * `ensureFullPermit2Approval()` or the `permit2` client directly.
289
+ */
290
+ async approveTokenForPermit2(token) {
291
+ return this.permit2.ensureTokenApproval(token);
292
+ }
293
+ /**
294
+ * Check ERC20 allowance to the Permit2 contract.
295
+ */
296
+ async getErc20Permit2Allowance(token) {
297
+ if (this.isNative(token))
298
+ return maxUint256;
299
+ return this.publicClient.readContract({
300
+ address: token,
301
+ abi: erc20Abi,
302
+ functionName: 'allowance',
303
+ args: [this.taker, PERMIT2_ADDRESS],
304
+ });
305
+ }
306
+ /**
307
+ * Check Permit2 AllowanceTransfer state for a token → spender pair.
308
+ *
309
+ * Returns the Permit2 internal allowance (amount, expiration, nonce),
310
+ * NOT the ERC20 allowance to Permit2 itself.
311
+ */
312
+ async getPermit2Allowance(token, spender) {
313
+ if (this.isNative(token)) {
314
+ return { amount: maxUint256, expiration: 2 ** 48 - 1, nonce: 0 };
315
+ }
316
+ const target = spender ?? this.chainConfig.v4UniversalRouter;
317
+ return this.permit2.getAllowance(token, target);
318
+ }
319
+ // ==========================================================================
320
+ // Deep link generation
321
+ // ==========================================================================
322
+ /**
323
+ * Generate a Uniswap app deep link for a swap.
324
+ *
325
+ * Useful for sharing swap links or as a fallback UI for users.
326
+ *
327
+ * @example
328
+ * ```
329
+ * const link = trading.getSwapDeepLink({
330
+ * tokenIn: WETH,
331
+ * tokenOut: TOKEN,
332
+ * amount: parseEther('0.1'),
333
+ * });
334
+ * // => "https://app.uniswap.org/swap?chain=base&inputCurrency=0x...&outputCurrency=0x...&value=0.1&field=INPUT"
335
+ * ```
336
+ */
337
+ getSwapDeepLink(params) {
338
+ const chain = this.chainConfig.slug;
339
+ const input = this.isNative(params.tokenIn) ? 'NATIVE' : params.tokenIn;
340
+ const output = this.isNative(params.tokenOut) ? 'NATIVE' : params.tokenOut;
341
+ let url = `https://app.uniswap.org/swap?chain=${chain}&inputCurrency=${input}&outputCurrency=${output}`;
342
+ if (params.amount !== undefined) {
343
+ const decimals = params.decimals ?? 18;
344
+ const humanAmount = Number(params.amount) / 10 ** decimals;
345
+ url += `&value=${humanAmount}&field=INPUT`;
346
+ }
347
+ return url;
348
+ }
349
+ // ==========================================================================
350
+ // Utilities
351
+ // ==========================================================================
352
+ isNative(token) {
353
+ return (token.toLowerCase() === NATIVE_ADDRESS.toLowerCase() ||
354
+ token === '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE');
355
+ }
356
+ buildRouteDescription(raw) {
357
+ try {
358
+ const route = raw.route;
359
+ if (!route)
360
+ return 'Unknown route';
361
+ if (Array.isArray(route)) {
362
+ return route
363
+ .map((r) => {
364
+ const pools = r.route?.map((p) => `${p.protocol ?? 'V4'} ${p.fee ? `(${Number(p.fee) / 10000}%)` : ''}`);
365
+ return pools?.join(' → ') ?? 'Unknown';
366
+ })
367
+ .join(' | ');
368
+ }
369
+ return JSON.stringify(route).slice(0, 200);
370
+ }
371
+ catch {
372
+ return 'Route parsing failed';
373
+ }
374
+ }
375
+ /** Get chain config */
376
+ get chain() {
377
+ return this.chainConfig;
378
+ }
379
+ }
380
+ //# sourceMappingURL=uniswap-trading.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uniswap-trading.js","sourceRoot":"","sources":["../src/uniswap-trading.ts"],"names":[],"mappings":"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"}
package/dist/watcher.d.ts CHANGED
@@ -1,8 +1,9 @@
1
1
  /**
2
2
  * ClawnchWatcher - Live event watching for Clawncher tokens
3
3
  *
4
- * Watches for new token deployments and swap events in real-time
5
- * using viem's event subscription (WebSocket recommended).
4
+ * Watches for new token deployments, swaps, and transfers in real-time
5
+ * using viem's event subscription (WebSocket recommended) or historical
6
+ * log fetching (HTTP).
6
7
  *
7
8
  * Uses `publicClient.watchContractEvent()` which works with both
8
9
  * polling (HTTP) and subscription (WebSocket) transports.
@@ -36,6 +37,75 @@ export interface NewTokenEvent {
36
37
  /** Transaction hash */
37
38
  txHash: `0x${string}`;
38
39
  }
40
+ /**
41
+ * ERC-20 Transfer event (token movement)
42
+ */
43
+ export interface TokenTransferEvent {
44
+ /** Token contract address */
45
+ token: Address;
46
+ /** Sender */
47
+ from: Address;
48
+ /** Recipient */
49
+ to: Address;
50
+ /** Amount transferred (raw) */
51
+ amount: bigint;
52
+ /** Amount formatted (18 decimals assumed) */
53
+ amountFormatted: string;
54
+ /** Block number */
55
+ blockNumber: bigint;
56
+ /** Transaction hash */
57
+ txHash: `0x${string}`;
58
+ }
59
+ /**
60
+ * Swap event from Uniswap V4 PoolManager
61
+ */
62
+ export interface PoolSwapEvent {
63
+ /** Pool ID (bytes32) */
64
+ poolId: `0x${string}`;
65
+ /** Swapper address */
66
+ sender: Address;
67
+ /** Amount of currency0 swapped (negative = sold, positive = bought) */
68
+ amount0: bigint;
69
+ /** Amount of currency1 swapped (negative = sold, positive = bought) */
70
+ amount1: bigint;
71
+ /** New sqrtPriceX96 after swap */
72
+ sqrtPriceX96: bigint;
73
+ /** Pool liquidity after swap */
74
+ liquidity: bigint;
75
+ /** New tick after swap */
76
+ tick: number;
77
+ /** Fee paid */
78
+ fee: number;
79
+ /** Block number */
80
+ blockNumber: bigint;
81
+ /** Transaction hash */
82
+ txHash: `0x${string}`;
83
+ }
84
+ /**
85
+ * Recent activity summary for an agent's token
86
+ */
87
+ export interface TokenActivity {
88
+ /** Token address */
89
+ token: Address;
90
+ /** Recent transfers (sorted newest first) */
91
+ transfers: TokenTransferEvent[];
92
+ /** Recent swaps (sorted newest first) */
93
+ swaps: PoolSwapEvent[];
94
+ /** Block range scanned */
95
+ fromBlock: bigint;
96
+ toBlock: bigint;
97
+ /** Summary stats */
98
+ stats: {
99
+ transferCount: number;
100
+ swapCount: number;
101
+ uniqueAddresses: number;
102
+ /** Largest single transfer (raw amount) */
103
+ largestTransfer: bigint;
104
+ /** Total volume through swaps (absolute amount0 sum) */
105
+ totalVolume0: bigint;
106
+ totalVolume1: bigint;
107
+ };
108
+ }
39
109
  /**
40
110
  * Watcher configuration
41
111
  */
@@ -108,5 +178,50 @@ export declare class ClawnchWatcher {
108
178
  toBlock?: bigint;
109
179
  tokenAdmin?: Address;
110
180
  }): Promise<NewTokenEvent[]>;
181
+ /**
182
+ * Get recent ERC-20 Transfer events for a token.
183
+ *
184
+ * Useful for detecting whale movements, new holders, and distribution changes.
185
+ * Default block range: last 2,000 blocks (~1.1 hours on Base at 2s blocks).
186
+ */
187
+ getRecentTransfers(token: Address, options?: {
188
+ fromBlock?: bigint;
189
+ toBlock?: bigint;
190
+ /** Max results to return (default 50) */
191
+ limit?: number;
192
+ }): Promise<TokenTransferEvent[]>;
193
+ /**
194
+ * Get recent swap events from the Uniswap V4 PoolManager for a given poolId.
195
+ *
196
+ * The PoolManager emits `Swap(bytes32 indexed id, address indexed sender,
197
+ * int128 amount0, int128 amount1, uint160 sqrtPriceX96, uint128 liquidity,
198
+ * int24 tick, uint24 fee)`.
199
+ *
200
+ * Default range: last 2,000 blocks.
201
+ */
202
+ getRecentSwaps(poolId: `0x${string}`, options?: {
203
+ fromBlock?: bigint;
204
+ toBlock?: bigint;
205
+ limit?: number;
206
+ }): Promise<PoolSwapEvent[]>;
207
+ /**
208
+ * Get a combined activity summary for a Clawncher token.
209
+ *
210
+ * Fetches both ERC-20 transfers and V4 pool swaps, computes summary stats
211
+ * including unique addresses, largest transfer, and total volume.
212
+ *
213
+ * Requires the poolId (get it from `ClawnchReader.getTokenRewards(token).poolKey`
214
+ * and compute the hash, or pass it directly).
215
+ *
216
+ * @param token - Token contract address
217
+ * @param poolId - V4 pool ID (bytes32)
218
+ * @param options - Block range and limits
219
+ */
220
+ getTokenActivity(token: Address, poolId: `0x${string}`, options?: {
221
+ fromBlock?: bigint;
222
+ toBlock?: bigint;
223
+ transferLimit?: number;
224
+ swapLimit?: number;
225
+ }): Promise<TokenActivity>;
111
226
  }
112
227
  //# sourceMappingURL=watcher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../src/watcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,OAAO,EAIb,MAAM,MAAM,CAAC;AAEd,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAEhE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,6BAA6B;IAC7B,YAAY,EAAE,OAAO,CAAC;IACtB,6BAA6B;IAC7B,UAAU,EAAE,OAAO,CAAC;IACpB,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,sBAAsB;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,4BAA4B;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,wBAAwB;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,wBAAwB;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,wBAAwB;IACxB,MAAM,EAAE,KAAK,MAAM,EAAE,CAAC;IACtB,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,uBAAuB;IACvB,MAAM,EAAE,KAAK,MAAM,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,wFAAwF;IACxF,YAAY,EAAE,YAAY,CAAC;IAC3B,uBAAuB;IACvB,OAAO,EAAE,WAAW,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBAAa,cAAc;IACzB,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;gBAElB,MAAM,EAAE,aAAa;IAKjC;;OAEG;IACH,OAAO,CAAC,YAAY;IAIpB;;;;;;;;;OASG;IACH,gBAAgB,CACd,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,EACxC,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,GACjC,MAAM,IAAI;IAmDb;;;;;;;OAOG;IACG,wBAAwB,CAAC,OAAO,CAAC,EAAE;QACvC,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CAgC7B"}
1
+ {"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../src/watcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,OAAO,EAOb,MAAM,MAAM,CAAC;AAEd,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAEhE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,6BAA6B;IAC7B,YAAY,EAAE,OAAO,CAAC;IACtB,6BAA6B;IAC7B,UAAU,EAAE,OAAO,CAAC;IACpB,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,sBAAsB;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,4BAA4B;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,wBAAwB;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,wBAAwB;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,wBAAwB;IACxB,MAAM,EAAE,KAAK,MAAM,EAAE,CAAC;IACtB,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,uBAAuB;IACvB,MAAM,EAAE,KAAK,MAAM,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,6BAA6B;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,aAAa;IACb,IAAI,EAAE,OAAO,CAAC;IACd,gBAAgB;IAChB,EAAE,EAAE,OAAO,CAAC;IACZ,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,uBAAuB;IACvB,MAAM,EAAE,KAAK,MAAM,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,wBAAwB;IACxB,MAAM,EAAE,KAAK,MAAM,EAAE,CAAC;IACtB,sBAAsB;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,uEAAuE;IACvE,OAAO,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,OAAO,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,eAAe;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,uBAAuB;IACvB,MAAM,EAAE,KAAK,MAAM,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,oBAAoB;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,6CAA6C;IAC7C,SAAS,EAAE,kBAAkB,EAAE,CAAC;IAChC,yCAAyC;IACzC,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB;IACpB,KAAK,EAAE;QACL,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,EAAE,MAAM,CAAC;QACxB,2CAA2C;QAC3C,eAAe,EAAE,MAAM,CAAC;QACxB,wDAAwD;QACxD,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,wFAAwF;IACxF,YAAY,EAAE,YAAY,CAAC;IAC3B,uBAAuB;IACvB,OAAO,EAAE,WAAW,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBAAa,cAAc;IACzB,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;gBAElB,MAAM,EAAE,aAAa;IAKjC;;OAEG;IACH,OAAO,CAAC,YAAY;IAIpB;;;;;;;;;OASG;IACH,gBAAgB,CACd,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,EACxC,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,GACjC,MAAM,IAAI;IAmDb;;;;;;;OAOG;IACG,wBAAwB,CAAC,OAAO,CAAC,EAAE;QACvC,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAqC5B;;;;;OAKG;IACG,kBAAkB,CACtB,KAAK,EAAE,OAAO,EACd,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,yCAAyC;QACzC,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GACA,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAkChC;;;;;;;;OAQG;IACG,cAAc,CAClB,MAAM,EAAE,KAAK,MAAM,EAAE,EACrB,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GACA,OAAO,CAAC,aAAa,EAAE,CAAC;IAyC3B;;;;;;;;;;;;OAYG;IACG,gBAAgB,CACpB,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,KAAK,MAAM,EAAE,EACrB,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GACA,OAAO,CAAC,aAAa,CAAC;CA0D1B"}