defistream 1.0.6__py3-none-any.whl

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.
@@ -0,0 +1,449 @@
1
+ """Protocol-specific API clients with builder pattern."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING, Any
6
+
7
+ from .query import QueryBuilder, AsyncQueryBuilder
8
+
9
+ if TYPE_CHECKING:
10
+ from .client import BaseClient
11
+
12
+
13
+ class ERC20Protocol:
14
+ """ERC20 token events with builder pattern."""
15
+
16
+ def __init__(self, client: "BaseClient"):
17
+ self._client = client
18
+
19
+ def transfers(self, token: str | None = None) -> QueryBuilder:
20
+ """
21
+ Start a query for ERC20 transfer events.
22
+
23
+ Args:
24
+ token: Token symbol (USDT, USDC, WETH, etc.) or contract address
25
+
26
+ Returns:
27
+ QueryBuilder for chaining filters
28
+
29
+ Example:
30
+ df = (
31
+ client.erc20.transfers("USDT")
32
+ .network("ETH")
33
+ .block_range(21000000, 21010000)
34
+ .as_df()
35
+ )
36
+ """
37
+ params = {"token": token} if token else {}
38
+ return QueryBuilder(self._client, "/erc20/events/transfer", params)
39
+
40
+
41
+ class NativeTokenProtocol:
42
+ """Native token (ETH, MATIC, etc.) events with builder pattern."""
43
+
44
+ def __init__(self, client: "BaseClient"):
45
+ self._client = client
46
+
47
+ def transfers(self) -> QueryBuilder:
48
+ """
49
+ Start a query for native token transfer events.
50
+
51
+ Returns:
52
+ QueryBuilder for chaining filters
53
+
54
+ Example:
55
+ df = (
56
+ client.native_token.transfers()
57
+ .network("ETH")
58
+ .block_range(21000000, 21010000)
59
+ .min_amount(1.0)
60
+ .as_df()
61
+ )
62
+ """
63
+ return QueryBuilder(self._client, "/native_token/events/transfer")
64
+
65
+
66
+ class AAVEProtocol:
67
+ """AAVE V3 lending protocol events with builder pattern."""
68
+
69
+ def __init__(self, client: "BaseClient"):
70
+ self._client = client
71
+
72
+ def deposits(self) -> QueryBuilder:
73
+ """Start a query for AAVE deposit/supply events."""
74
+ return QueryBuilder(self._client, "/aave/events/deposit")
75
+
76
+ def withdrawals(self) -> QueryBuilder:
77
+ """Start a query for AAVE withdrawal events."""
78
+ return QueryBuilder(self._client, "/aave/events/withdraw")
79
+
80
+ def borrows(self) -> QueryBuilder:
81
+ """Start a query for AAVE borrow events."""
82
+ return QueryBuilder(self._client, "/aave/events/borrow")
83
+
84
+ def repays(self) -> QueryBuilder:
85
+ """Start a query for AAVE repay events."""
86
+ return QueryBuilder(self._client, "/aave/events/repay")
87
+
88
+ def flashloans(self) -> QueryBuilder:
89
+ """Start a query for AAVE flash loan events."""
90
+ return QueryBuilder(self._client, "/aave/events/flashloan")
91
+
92
+ def liquidations(self) -> QueryBuilder:
93
+ """Start a query for AAVE liquidation events."""
94
+ return QueryBuilder(self._client, "/aave/events/liquidation")
95
+
96
+
97
+ class UniswapProtocol:
98
+ """Uniswap V3 DEX events with builder pattern."""
99
+
100
+ def __init__(self, client: "BaseClient"):
101
+ self._client = client
102
+
103
+ def swaps(
104
+ self,
105
+ symbol0: str | None = None,
106
+ symbol1: str | None = None,
107
+ fee: int | None = None,
108
+ ) -> QueryBuilder:
109
+ """
110
+ Start a query for Uniswap V3 swap events.
111
+
112
+ Args:
113
+ symbol0: First token symbol (e.g., WETH)
114
+ symbol1: Second token symbol (e.g., USDC)
115
+ fee: Fee tier (100, 500, 3000, 10000)
116
+
117
+ Returns:
118
+ QueryBuilder for chaining filters
119
+
120
+ Example:
121
+ df = (
122
+ client.uniswap.swaps("WETH", "USDC", 500)
123
+ .network("ETH")
124
+ .block_range(21000000, 21010000)
125
+ .as_df()
126
+ )
127
+ """
128
+ params: dict[str, Any] = {}
129
+ if symbol0:
130
+ params["symbol0"] = symbol0
131
+ if symbol1:
132
+ params["symbol1"] = symbol1
133
+ if fee:
134
+ params["fee"] = fee
135
+ return QueryBuilder(self._client, "/uniswap/events/swap", params)
136
+
137
+ def deposits(
138
+ self,
139
+ symbol0: str | None = None,
140
+ symbol1: str | None = None,
141
+ fee: int | None = None,
142
+ ) -> QueryBuilder:
143
+ """Start a query for Uniswap V3 deposit (add liquidity) events."""
144
+ params: dict[str, Any] = {}
145
+ if symbol0:
146
+ params["symbol0"] = symbol0
147
+ if symbol1:
148
+ params["symbol1"] = symbol1
149
+ if fee:
150
+ params["fee"] = fee
151
+ return QueryBuilder(self._client, "/uniswap/events/deposit", params)
152
+
153
+ def withdrawals(
154
+ self,
155
+ symbol0: str | None = None,
156
+ symbol1: str | None = None,
157
+ fee: int | None = None,
158
+ ) -> QueryBuilder:
159
+ """Start a query for Uniswap V3 withdrawal (remove liquidity) events."""
160
+ params: dict[str, Any] = {}
161
+ if symbol0:
162
+ params["symbol0"] = symbol0
163
+ if symbol1:
164
+ params["symbol1"] = symbol1
165
+ if fee:
166
+ params["fee"] = fee
167
+ return QueryBuilder(self._client, "/uniswap/events/withdraw", params)
168
+
169
+ def collects(
170
+ self,
171
+ symbol0: str | None = None,
172
+ symbol1: str | None = None,
173
+ fee: int | None = None,
174
+ ) -> QueryBuilder:
175
+ """Start a query for Uniswap V3 collect (fee collection) events."""
176
+ params: dict[str, Any] = {}
177
+ if symbol0:
178
+ params["symbol0"] = symbol0
179
+ if symbol1:
180
+ params["symbol1"] = symbol1
181
+ if fee:
182
+ params["fee"] = fee
183
+ return QueryBuilder(self._client, "/uniswap/events/collect", params)
184
+
185
+
186
+ class LidoProtocol:
187
+ """Lido liquid staking events with builder pattern."""
188
+
189
+ def __init__(self, client: "BaseClient"):
190
+ self._client = client
191
+
192
+ # L1 ETH events
193
+ def deposits(self) -> QueryBuilder:
194
+ """Start a query for Lido stETH deposit events (ETH L1 only)."""
195
+ return QueryBuilder(self._client, "/lido/events/deposit")
196
+
197
+ def withdrawal_requests(self) -> QueryBuilder:
198
+ """Start a query for Lido withdrawal request events (ETH L1 only)."""
199
+ return QueryBuilder(self._client, "/lido/events/withdrawal_request")
200
+
201
+ def withdrawals_claimed(self) -> QueryBuilder:
202
+ """Start a query for Lido claimed withdrawal events (ETH L1 only)."""
203
+ return QueryBuilder(self._client, "/lido/events/withdrawal_claimed")
204
+
205
+ # L2 events
206
+ def l2_deposits(self) -> QueryBuilder:
207
+ """Start a query for Lido L2 deposit events (L2 networks only)."""
208
+ return QueryBuilder(self._client, "/lido/events/l2_deposit")
209
+
210
+ def l2_withdrawal_requests(self) -> QueryBuilder:
211
+ """Start a query for Lido L2 withdrawal request events (L2 networks only)."""
212
+ return QueryBuilder(self._client, "/lido/events/l2_withdrawal_request")
213
+
214
+
215
+ class StaderProtocol:
216
+ """Stader ETHx staking events with builder pattern (ETH only)."""
217
+
218
+ def __init__(self, client: "BaseClient"):
219
+ self._client = client
220
+
221
+ def deposits(self) -> QueryBuilder:
222
+ """Start a query for Stader deposit events."""
223
+ return QueryBuilder(self._client, "/stader/events/deposit")
224
+
225
+ def withdrawal_requests(self) -> QueryBuilder:
226
+ """Start a query for Stader withdrawal request events."""
227
+ return QueryBuilder(self._client, "/stader/events/withdrawal_request")
228
+
229
+ def withdrawals(self) -> QueryBuilder:
230
+ """Start a query for Stader withdrawal events."""
231
+ return QueryBuilder(self._client, "/stader/events/withdrawal")
232
+
233
+
234
+ class ThresholdProtocol:
235
+ """Threshold tBTC events with builder pattern (ETH only)."""
236
+
237
+ def __init__(self, client: "BaseClient"):
238
+ self._client = client
239
+
240
+ def deposit_requests(self) -> QueryBuilder:
241
+ """Start a query for tBTC deposit request (reveal) events."""
242
+ return QueryBuilder(self._client, "/threshold/events/deposit_request")
243
+
244
+ def deposits(self) -> QueryBuilder:
245
+ """Start a query for tBTC deposit (mint) events."""
246
+ return QueryBuilder(self._client, "/threshold/events/deposit")
247
+
248
+ def withdrawal_requests(self) -> QueryBuilder:
249
+ """Start a query for tBTC withdrawal request events."""
250
+ return QueryBuilder(self._client, "/threshold/events/withdrawal_request")
251
+
252
+ def withdrawals(self) -> QueryBuilder:
253
+ """Start a query for tBTC withdrawal (unmint) events."""
254
+ return QueryBuilder(self._client, "/threshold/events/withdrawal")
255
+
256
+
257
+ # Async protocol implementations
258
+ class AsyncERC20Protocol:
259
+ """Async ERC20 token events with builder pattern."""
260
+
261
+ def __init__(self, client: "BaseClient"):
262
+ self._client = client
263
+
264
+ def transfers(self, token: str | None = None) -> AsyncQueryBuilder:
265
+ """Start a query for ERC20 transfer events."""
266
+ params = {"token": token} if token else {}
267
+ return AsyncQueryBuilder(self._client, "/erc20/events/transfer", params)
268
+
269
+
270
+ class AsyncNativeTokenProtocol:
271
+ """Async native token events with builder pattern."""
272
+
273
+ def __init__(self, client: "BaseClient"):
274
+ self._client = client
275
+
276
+ def transfers(self) -> AsyncQueryBuilder:
277
+ """Start a query for native token transfer events."""
278
+ return AsyncQueryBuilder(self._client, "/native_token/events/transfer")
279
+
280
+
281
+ class AsyncAAVEProtocol:
282
+ """Async AAVE V3 events with builder pattern."""
283
+
284
+ def __init__(self, client: "BaseClient"):
285
+ self._client = client
286
+
287
+ def deposits(self) -> AsyncQueryBuilder:
288
+ """Start a query for AAVE deposit/supply events."""
289
+ return AsyncQueryBuilder(self._client, "/aave/events/deposit")
290
+
291
+ def withdrawals(self) -> AsyncQueryBuilder:
292
+ """Start a query for AAVE withdrawal events."""
293
+ return AsyncQueryBuilder(self._client, "/aave/events/withdraw")
294
+
295
+ def borrows(self) -> AsyncQueryBuilder:
296
+ """Start a query for AAVE borrow events."""
297
+ return AsyncQueryBuilder(self._client, "/aave/events/borrow")
298
+
299
+ def repays(self) -> AsyncQueryBuilder:
300
+ """Start a query for AAVE repay events."""
301
+ return AsyncQueryBuilder(self._client, "/aave/events/repay")
302
+
303
+ def flashloans(self) -> AsyncQueryBuilder:
304
+ """Start a query for AAVE flash loan events."""
305
+ return AsyncQueryBuilder(self._client, "/aave/events/flashloan")
306
+
307
+ def liquidations(self) -> AsyncQueryBuilder:
308
+ """Start a query for AAVE liquidation events."""
309
+ return AsyncQueryBuilder(self._client, "/aave/events/liquidation")
310
+
311
+
312
+ class AsyncUniswapProtocol:
313
+ """Async Uniswap V3 events with builder pattern."""
314
+
315
+ def __init__(self, client: "BaseClient"):
316
+ self._client = client
317
+
318
+ def swaps(
319
+ self,
320
+ symbol0: str | None = None,
321
+ symbol1: str | None = None,
322
+ fee: int | None = None,
323
+ ) -> AsyncQueryBuilder:
324
+ """Start a query for Uniswap V3 swap events."""
325
+ params: dict[str, Any] = {}
326
+ if symbol0:
327
+ params["symbol0"] = symbol0
328
+ if symbol1:
329
+ params["symbol1"] = symbol1
330
+ if fee:
331
+ params["fee"] = fee
332
+ return AsyncQueryBuilder(self._client, "/uniswap/events/swap", params)
333
+
334
+ def deposits(
335
+ self,
336
+ symbol0: str | None = None,
337
+ symbol1: str | None = None,
338
+ fee: int | None = None,
339
+ ) -> AsyncQueryBuilder:
340
+ """Start a query for Uniswap V3 deposit events."""
341
+ params: dict[str, Any] = {}
342
+ if symbol0:
343
+ params["symbol0"] = symbol0
344
+ if symbol1:
345
+ params["symbol1"] = symbol1
346
+ if fee:
347
+ params["fee"] = fee
348
+ return AsyncQueryBuilder(self._client, "/uniswap/events/deposit", params)
349
+
350
+ def withdrawals(
351
+ self,
352
+ symbol0: str | None = None,
353
+ symbol1: str | None = None,
354
+ fee: int | None = None,
355
+ ) -> AsyncQueryBuilder:
356
+ """Start a query for Uniswap V3 withdrawal events."""
357
+ params: dict[str, Any] = {}
358
+ if symbol0:
359
+ params["symbol0"] = symbol0
360
+ if symbol1:
361
+ params["symbol1"] = symbol1
362
+ if fee:
363
+ params["fee"] = fee
364
+ return AsyncQueryBuilder(self._client, "/uniswap/events/withdraw", params)
365
+
366
+ def collects(
367
+ self,
368
+ symbol0: str | None = None,
369
+ symbol1: str | None = None,
370
+ fee: int | None = None,
371
+ ) -> AsyncQueryBuilder:
372
+ """Start a query for Uniswap V3 collect events."""
373
+ params: dict[str, Any] = {}
374
+ if symbol0:
375
+ params["symbol0"] = symbol0
376
+ if symbol1:
377
+ params["symbol1"] = symbol1
378
+ if fee:
379
+ params["fee"] = fee
380
+ return AsyncQueryBuilder(self._client, "/uniswap/events/collect", params)
381
+
382
+
383
+ class AsyncLidoProtocol:
384
+ """Async Lido events with builder pattern."""
385
+
386
+ def __init__(self, client: "BaseClient"):
387
+ self._client = client
388
+
389
+ def deposits(self) -> AsyncQueryBuilder:
390
+ """Start a query for Lido deposit events (ETH L1 only)."""
391
+ return AsyncQueryBuilder(self._client, "/lido/events/deposit")
392
+
393
+ def withdrawal_requests(self) -> AsyncQueryBuilder:
394
+ """Start a query for Lido withdrawal request events (ETH L1 only)."""
395
+ return AsyncQueryBuilder(self._client, "/lido/events/withdrawal_request")
396
+
397
+ def withdrawals_claimed(self) -> AsyncQueryBuilder:
398
+ """Start a query for Lido claimed withdrawal events (ETH L1 only)."""
399
+ return AsyncQueryBuilder(self._client, "/lido/events/withdrawal_claimed")
400
+
401
+ def l2_deposits(self) -> AsyncQueryBuilder:
402
+ """Start a query for Lido L2 deposit events."""
403
+ return AsyncQueryBuilder(self._client, "/lido/events/l2_deposit")
404
+
405
+ def l2_withdrawal_requests(self) -> AsyncQueryBuilder:
406
+ """Start a query for Lido L2 withdrawal request events."""
407
+ return AsyncQueryBuilder(self._client, "/lido/events/l2_withdrawal_request")
408
+
409
+
410
+ class AsyncStaderProtocol:
411
+ """Async Stader events with builder pattern."""
412
+
413
+ def __init__(self, client: "BaseClient"):
414
+ self._client = client
415
+
416
+ def deposits(self) -> AsyncQueryBuilder:
417
+ """Start a query for Stader deposit events."""
418
+ return AsyncQueryBuilder(self._client, "/stader/events/deposit")
419
+
420
+ def withdrawal_requests(self) -> AsyncQueryBuilder:
421
+ """Start a query for Stader withdrawal request events."""
422
+ return AsyncQueryBuilder(self._client, "/stader/events/withdrawal_request")
423
+
424
+ def withdrawals(self) -> AsyncQueryBuilder:
425
+ """Start a query for Stader withdrawal events."""
426
+ return AsyncQueryBuilder(self._client, "/stader/events/withdrawal")
427
+
428
+
429
+ class AsyncThresholdProtocol:
430
+ """Async Threshold events with builder pattern."""
431
+
432
+ def __init__(self, client: "BaseClient"):
433
+ self._client = client
434
+
435
+ def deposit_requests(self) -> AsyncQueryBuilder:
436
+ """Start a query for tBTC deposit request events."""
437
+ return AsyncQueryBuilder(self._client, "/threshold/events/deposit_request")
438
+
439
+ def deposits(self) -> AsyncQueryBuilder:
440
+ """Start a query for tBTC deposit events."""
441
+ return AsyncQueryBuilder(self._client, "/threshold/events/deposit")
442
+
443
+ def withdrawal_requests(self) -> AsyncQueryBuilder:
444
+ """Start a query for tBTC withdrawal request events."""
445
+ return AsyncQueryBuilder(self._client, "/threshold/events/withdrawal_request")
446
+
447
+ def withdrawals(self) -> AsyncQueryBuilder:
448
+ """Start a query for tBTC withdrawal events."""
449
+ return AsyncQueryBuilder(self._client, "/threshold/events/withdrawal")
defistream/py.typed ADDED
File without changes