defistream 1.0.0__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,364 @@
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: Optional token symbol (USDT, USDC, WETH, etc.)
25
+
26
+ Returns:
27
+ QueryBuilder for chaining filters
28
+
29
+ Example:
30
+ query = client.erc20.transfers("USDT").network("ETH").start_block(24000000).end_block(24100000)
31
+ df = query.as_pandas()
32
+ """
33
+ params = {"token": token} if token else {}
34
+ return QueryBuilder(self._client, "/erc20/events/transfer", params)
35
+
36
+ def approvals(self, token: str | None = None) -> QueryBuilder:
37
+ """
38
+ Start a query for ERC20 approval events.
39
+
40
+ Args:
41
+ token: Optional token symbol
42
+
43
+ Returns:
44
+ QueryBuilder for chaining filters
45
+ """
46
+ params = {"token": token} if token else {}
47
+ return QueryBuilder(self._client, "/erc20/events/approval", params)
48
+
49
+
50
+ class NativeTokenProtocol:
51
+ """Native token (ETH, MATIC, BNB, etc.) events with builder pattern."""
52
+
53
+ def __init__(self, client: "BaseClient"):
54
+ self._client = client
55
+
56
+ def transfers(self) -> QueryBuilder:
57
+ """
58
+ Start a query for native token transfer events.
59
+
60
+ Returns:
61
+ QueryBuilder for chaining filters
62
+
63
+ Example:
64
+ query = client.native_token.transfers().network("ETH").start_block(24000000).end_block(24100000)
65
+ transfers = query.min_amount(1.0).as_dict()
66
+ """
67
+ return QueryBuilder(self._client, "/native_token/events/transfer")
68
+
69
+
70
+ class AAVEProtocol:
71
+ """AAVE V3 lending protocol events with builder pattern."""
72
+
73
+ def __init__(self, client: "BaseClient"):
74
+ self._client = client
75
+
76
+ def deposits(self) -> QueryBuilder:
77
+ """Start a query for AAVE deposit/supply events."""
78
+ return QueryBuilder(self._client, "/aave/events/deposit")
79
+
80
+ def withdrawals(self) -> QueryBuilder:
81
+ """Start a query for AAVE withdrawal events."""
82
+ return QueryBuilder(self._client, "/aave/events/withdraw")
83
+
84
+ def borrows(self) -> QueryBuilder:
85
+ """Start a query for AAVE borrow events."""
86
+ return QueryBuilder(self._client, "/aave/events/borrow")
87
+
88
+ def repays(self) -> QueryBuilder:
89
+ """Start a query for AAVE repay events."""
90
+ return QueryBuilder(self._client, "/aave/events/repay")
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: Optional first token symbol (e.g., WETH)
114
+ symbol1: Optional second token symbol (e.g., USDC)
115
+ fee: Optional fee tier (100, 500, 3000, 10000)
116
+
117
+ Returns:
118
+ QueryBuilder for chaining filters
119
+
120
+ Example:
121
+ query = client.uniswap.swaps("WETH", "USDC", 500).network("ETH").start_block(24000000).end_block(24100000)
122
+ df = query.as_pandas()
123
+ """
124
+ params: dict[str, Any] = {}
125
+ if symbol0:
126
+ params["symbol0"] = symbol0
127
+ if symbol1:
128
+ params["symbol1"] = symbol1
129
+ if fee:
130
+ params["fee"] = fee
131
+ return QueryBuilder(self._client, "/uniswap/events/swap", params)
132
+
133
+ def mints(
134
+ self,
135
+ symbol0: str | None = None,
136
+ symbol1: str | None = None,
137
+ fee: int | None = None,
138
+ ) -> QueryBuilder:
139
+ """Start a query for Uniswap V3 mint (add liquidity) events."""
140
+ params: dict[str, Any] = {}
141
+ if symbol0:
142
+ params["symbol0"] = symbol0
143
+ if symbol1:
144
+ params["symbol1"] = symbol1
145
+ if fee:
146
+ params["fee"] = fee
147
+ return QueryBuilder(self._client, "/uniswap/events/mint", params)
148
+
149
+ def burns(
150
+ self,
151
+ symbol0: str | None = None,
152
+ symbol1: str | None = None,
153
+ fee: int | None = None,
154
+ ) -> QueryBuilder:
155
+ """Start a query for Uniswap V3 burn (remove liquidity) events."""
156
+ params: dict[str, Any] = {}
157
+ if symbol0:
158
+ params["symbol0"] = symbol0
159
+ if symbol1:
160
+ params["symbol1"] = symbol1
161
+ if fee:
162
+ params["fee"] = fee
163
+ return QueryBuilder(self._client, "/uniswap/events/burn", params)
164
+
165
+
166
+ class LidoProtocol:
167
+ """Lido liquid staking events with builder pattern."""
168
+
169
+ def __init__(self, client: "BaseClient"):
170
+ self._client = client
171
+
172
+ def deposits(self) -> QueryBuilder:
173
+ """Start a query for Lido stETH deposit events."""
174
+ return QueryBuilder(self._client, "/lido/events/deposit")
175
+
176
+ def withdrawals(self) -> QueryBuilder:
177
+ """Start a query for Lido withdrawal events."""
178
+ return QueryBuilder(self._client, "/lido/events/withdraw")
179
+
180
+
181
+ class StaderProtocol:
182
+ """Stader EthX staking events with builder pattern."""
183
+
184
+ def __init__(self, client: "BaseClient"):
185
+ self._client = client
186
+
187
+ def deposits(self) -> QueryBuilder:
188
+ """Start a query for Stader deposit events."""
189
+ return QueryBuilder(self._client, "/stader/events/deposit")
190
+
191
+ def withdrawals(self) -> QueryBuilder:
192
+ """Start a query for Stader withdrawal events."""
193
+ return QueryBuilder(self._client, "/stader/events/withdraw")
194
+
195
+
196
+ class ThresholdProtocol:
197
+ """Threshold tBTC events with builder pattern."""
198
+
199
+ def __init__(self, client: "BaseClient"):
200
+ self._client = client
201
+
202
+ def mints(self) -> QueryBuilder:
203
+ """Start a query for tBTC mint events."""
204
+ return QueryBuilder(self._client, "/threshold/events/mint")
205
+
206
+ def burns(self) -> QueryBuilder:
207
+ """Start a query for tBTC burn/redeem events."""
208
+ return QueryBuilder(self._client, "/threshold/events/burn")
209
+
210
+
211
+ # Async protocol implementations
212
+ class AsyncERC20Protocol:
213
+ """Async ERC20 token events with builder pattern."""
214
+
215
+ def __init__(self, client: "BaseClient"):
216
+ self._client = client
217
+
218
+ def transfers(self, token: str | None = None) -> AsyncQueryBuilder:
219
+ """Start a query for ERC20 transfer events."""
220
+ params = {"token": token} if token else {}
221
+ return AsyncQueryBuilder(self._client, "/erc20/events/transfer", params)
222
+
223
+ def approvals(self, token: str | None = None) -> AsyncQueryBuilder:
224
+ """Start a query for ERC20 approval events."""
225
+ params = {"token": token} if token else {}
226
+ return AsyncQueryBuilder(self._client, "/erc20/events/approval", params)
227
+
228
+
229
+ class AsyncNativeTokenProtocol:
230
+ """Async native token events with builder pattern."""
231
+
232
+ def __init__(self, client: "BaseClient"):
233
+ self._client = client
234
+
235
+ def transfers(self) -> AsyncQueryBuilder:
236
+ """Start a query for native token transfer events."""
237
+ return AsyncQueryBuilder(self._client, "/native_token/events/transfer")
238
+
239
+
240
+ class AsyncAAVEProtocol:
241
+ """Async AAVE V3 events with builder pattern."""
242
+
243
+ def __init__(self, client: "BaseClient"):
244
+ self._client = client
245
+
246
+ def deposits(self) -> AsyncQueryBuilder:
247
+ """Start a query for AAVE deposit/supply events."""
248
+ return AsyncQueryBuilder(self._client, "/aave/events/deposit")
249
+
250
+ def withdrawals(self) -> AsyncQueryBuilder:
251
+ """Start a query for AAVE withdrawal events."""
252
+ return AsyncQueryBuilder(self._client, "/aave/events/withdraw")
253
+
254
+ def borrows(self) -> AsyncQueryBuilder:
255
+ """Start a query for AAVE borrow events."""
256
+ return AsyncQueryBuilder(self._client, "/aave/events/borrow")
257
+
258
+ def repays(self) -> AsyncQueryBuilder:
259
+ """Start a query for AAVE repay events."""
260
+ return AsyncQueryBuilder(self._client, "/aave/events/repay")
261
+
262
+ def liquidations(self) -> AsyncQueryBuilder:
263
+ """Start a query for AAVE liquidation events."""
264
+ return AsyncQueryBuilder(self._client, "/aave/events/liquidation")
265
+
266
+
267
+ class AsyncUniswapProtocol:
268
+ """Async Uniswap V3 events with builder pattern."""
269
+
270
+ def __init__(self, client: "BaseClient"):
271
+ self._client = client
272
+
273
+ def swaps(
274
+ self,
275
+ symbol0: str | None = None,
276
+ symbol1: str | None = None,
277
+ fee: int | None = None,
278
+ ) -> AsyncQueryBuilder:
279
+ """Start a query for Uniswap V3 swap events."""
280
+ params: dict[str, Any] = {}
281
+ if symbol0:
282
+ params["symbol0"] = symbol0
283
+ if symbol1:
284
+ params["symbol1"] = symbol1
285
+ if fee:
286
+ params["fee"] = fee
287
+ return AsyncQueryBuilder(self._client, "/uniswap/events/swap", params)
288
+
289
+ def mints(
290
+ self,
291
+ symbol0: str | None = None,
292
+ symbol1: str | None = None,
293
+ fee: int | None = None,
294
+ ) -> AsyncQueryBuilder:
295
+ """Start a query for Uniswap V3 mint events."""
296
+ params: dict[str, Any] = {}
297
+ if symbol0:
298
+ params["symbol0"] = symbol0
299
+ if symbol1:
300
+ params["symbol1"] = symbol1
301
+ if fee:
302
+ params["fee"] = fee
303
+ return AsyncQueryBuilder(self._client, "/uniswap/events/mint", params)
304
+
305
+ def burns(
306
+ self,
307
+ symbol0: str | None = None,
308
+ symbol1: str | None = None,
309
+ fee: int | None = None,
310
+ ) -> AsyncQueryBuilder:
311
+ """Start a query for Uniswap V3 burn events."""
312
+ params: dict[str, Any] = {}
313
+ if symbol0:
314
+ params["symbol0"] = symbol0
315
+ if symbol1:
316
+ params["symbol1"] = symbol1
317
+ if fee:
318
+ params["fee"] = fee
319
+ return AsyncQueryBuilder(self._client, "/uniswap/events/burn", params)
320
+
321
+
322
+ class AsyncLidoProtocol:
323
+ """Async Lido events with builder pattern."""
324
+
325
+ def __init__(self, client: "BaseClient"):
326
+ self._client = client
327
+
328
+ def deposits(self) -> AsyncQueryBuilder:
329
+ """Start a query for Lido deposit events."""
330
+ return AsyncQueryBuilder(self._client, "/lido/events/deposit")
331
+
332
+ def withdrawals(self) -> AsyncQueryBuilder:
333
+ """Start a query for Lido withdrawal events."""
334
+ return AsyncQueryBuilder(self._client, "/lido/events/withdraw")
335
+
336
+
337
+ class AsyncStaderProtocol:
338
+ """Async Stader events with builder pattern."""
339
+
340
+ def __init__(self, client: "BaseClient"):
341
+ self._client = client
342
+
343
+ def deposits(self) -> AsyncQueryBuilder:
344
+ """Start a query for Stader deposit events."""
345
+ return AsyncQueryBuilder(self._client, "/stader/events/deposit")
346
+
347
+ def withdrawals(self) -> AsyncQueryBuilder:
348
+ """Start a query for Stader withdrawal events."""
349
+ return AsyncQueryBuilder(self._client, "/stader/events/withdraw")
350
+
351
+
352
+ class AsyncThresholdProtocol:
353
+ """Async Threshold events with builder pattern."""
354
+
355
+ def __init__(self, client: "BaseClient"):
356
+ self._client = client
357
+
358
+ def mints(self) -> AsyncQueryBuilder:
359
+ """Start a query for tBTC mint events."""
360
+ return AsyncQueryBuilder(self._client, "/threshold/events/mint")
361
+
362
+ def burns(self) -> AsyncQueryBuilder:
363
+ """Start a query for tBTC burn events."""
364
+ return AsyncQueryBuilder(self._client, "/threshold/events/burn")
defistream/py.typed ADDED
File without changes