polynode 0.5.5__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,51 @@
1
+ """Enum types for the PolyNode SDK."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Literal
6
+
7
+ EventStatus = Literal["pending", "confirmed"]
8
+ TradeSide = Literal["BUY", "SELL"]
9
+ Exchange = Literal["ctf_exchange", "neg_risk_ctf_exchange"]
10
+ TransferType = Literal["single", "batch"]
11
+ DepositDirection = Literal["deposit", "withdrawal"]
12
+ OracleEventType = Literal[
13
+ "initialization",
14
+ "proposal",
15
+ "dispute",
16
+ "resolution",
17
+ "settled",
18
+ "flag",
19
+ "unflag",
20
+ "pause",
21
+ "unpause",
22
+ "manual_resolution",
23
+ "reset",
24
+ "condition_resolution",
25
+ ]
26
+ CandleResolution = Literal["1m", "5m", "15m", "1h", "4h", "1d"]
27
+ EventType = Literal[
28
+ "settlement",
29
+ "trade",
30
+ "status_update",
31
+ "block",
32
+ "position_change",
33
+ "deposit",
34
+ "position_split",
35
+ "position_merge",
36
+ "oracle",
37
+ "price_feed",
38
+ ]
39
+ SubscriptionType = Literal[
40
+ "settlements",
41
+ "trades",
42
+ "prices",
43
+ "blocks",
44
+ "wallets",
45
+ "markets",
46
+ "large_trades",
47
+ "global",
48
+ "oracle",
49
+ "chainlink",
50
+ ]
51
+ MarketSortField = Literal["volume", "price", "updated"]
@@ -0,0 +1,270 @@
1
+ """Event type models for the PolyNode SDK."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Annotated, Literal, Union
6
+
7
+ from pydantic import BaseModel, Field
8
+
9
+ from .enums import (
10
+ DepositDirection,
11
+ EventStatus,
12
+ Exchange,
13
+ OracleEventType,
14
+ TradeSide,
15
+ TransferType,
16
+ )
17
+
18
+
19
+ class DecodedTrade(BaseModel):
20
+ maker: str
21
+ signer: str
22
+ taker: str
23
+ token_id: str
24
+ side: TradeSide
25
+ price: float
26
+ size: float
27
+ maker_amount: str
28
+ taker_amount: str
29
+ outcome: str | None = None
30
+
31
+
32
+ class SettlementEvent(BaseModel):
33
+ event_type: Literal["settlement"]
34
+ tx_hash: str
35
+ status: EventStatus
36
+ detected_at: float
37
+ block_number: int | None = None
38
+ taker_wallet: str
39
+ taker_token: str
40
+ taker_side: str
41
+ taker_price: float
42
+ taker_size: float
43
+ trades: list[DecodedTrade]
44
+ # Enrichment fields
45
+ market_title: str | None = None
46
+ outcome: str | None = None
47
+ market_slug: str | None = None
48
+ event_title: str | None = None
49
+ market_image: str | None = None
50
+ condition_id: str | None = None
51
+ tokens: dict[str, str] | None = None
52
+ token_ids: list[str] | None = None
53
+ outcomes: list[str] | None = None
54
+ tick_size: float | None = None
55
+ neg_risk: bool | None = None
56
+ event_slug: str | None = None
57
+ taker_base_fee: float | None = None
58
+
59
+
60
+ class TradeEvent(BaseModel):
61
+ event_type: Literal["trade"]
62
+ tx_hash: str
63
+ block_number: int
64
+ log_index: int
65
+ timestamp: float
66
+ exchange: Exchange
67
+ maker: str
68
+ taker: str
69
+ token_id: str
70
+ side: TradeSide
71
+ price: float
72
+ size: float
73
+ maker_amount: str
74
+ taker_amount: str
75
+ fee: float | None = None
76
+ # Enrichment fields
77
+ market_title: str | None = None
78
+ outcome: str | None = None
79
+ market_slug: str | None = None
80
+ event_title: str | None = None
81
+ market_image: str | None = None
82
+ condition_id: str | None = None
83
+ tokens: dict[str, str] | None = None
84
+ token_ids: list[str] | None = None
85
+ outcomes: list[str] | None = None
86
+ tick_size: float | None = None
87
+ neg_risk: bool | None = None
88
+ event_slug: str | None = None
89
+ taker_base_fee: float | None = None
90
+
91
+
92
+ class StatusUpdateEvent(BaseModel):
93
+ event_type: Literal["status_update"]
94
+ tx_hash: str
95
+ token_id: str
96
+ block_number: int
97
+ confirmed_at: float
98
+ pending_detected_at: float
99
+ latency_ms: float
100
+ taker_wallet: str | None = None
101
+ maker_wallets: list[str] | None = None
102
+ # Enrichment fields
103
+ market_title: str | None = None
104
+ outcome: str | None = None
105
+ market_slug: str | None = None
106
+ event_title: str | None = None
107
+ market_image: str | None = None
108
+ condition_id: str | None = None
109
+ tokens: dict[str, str] | None = None
110
+ token_ids: list[str] | None = None
111
+ outcomes: list[str] | None = None
112
+ tick_size: float | None = None
113
+ neg_risk: bool | None = None
114
+ event_slug: str | None = None
115
+ taker_base_fee: float | None = None
116
+
117
+
118
+ class BlockEvent(BaseModel):
119
+ event_type: Literal["block"]
120
+ block_number: int
121
+ block_hash: str
122
+ timestamp: float
123
+ parent_hash: str
124
+ tx_count: int
125
+ polymarket_tx_count: int
126
+ settlement_count: int
127
+ trade_volume_usd: float
128
+
129
+
130
+ class PositionChangeEvent(BaseModel):
131
+ event_type: Literal["position_change"]
132
+ tx_hash: str
133
+ block_number: int
134
+ log_index: int
135
+ timestamp: float
136
+ from_address: str = Field(alias="from")
137
+ to: str
138
+ token_id: str
139
+ amount: float
140
+ transfer_type: TransferType
141
+ # Enrichment fields
142
+ market_title: str | None = None
143
+ outcome: str | None = None
144
+ market_slug: str | None = None
145
+ event_title: str | None = None
146
+ market_image: str | None = None
147
+ condition_id: str | None = None
148
+ tokens: dict[str, str] | None = None
149
+ token_ids: list[str] | None = None
150
+ outcomes: list[str] | None = None
151
+ tick_size: float | None = None
152
+ neg_risk: bool | None = None
153
+ event_slug: str | None = None
154
+ taker_base_fee: float | None = None
155
+
156
+ model_config = {"populate_by_name": True}
157
+
158
+
159
+ class DepositEvent(BaseModel):
160
+ event_type: Literal["deposit"]
161
+ tx_hash: str
162
+ block_number: int
163
+ log_index: int
164
+ timestamp: float
165
+ from_address: str = Field(alias="from")
166
+ to: str
167
+ amount: float
168
+ direction: DepositDirection
169
+
170
+ model_config = {"populate_by_name": True}
171
+
172
+
173
+ class PositionSplitEvent(BaseModel):
174
+ event_type: Literal["position_split"]
175
+ tx_hash: str
176
+ block_number: int
177
+ log_index: int
178
+ timestamp: float
179
+ stakeholder: str
180
+ collateral_token: str
181
+ condition_id: str
182
+ amount: float
183
+ market_title: str | None = None
184
+ market_slug: str | None = None
185
+ event_title: str | None = None
186
+ market_image: str | None = None
187
+ tokens: dict[str, str] | None = None
188
+ tick_size: float | None = None
189
+ neg_risk: bool | None = None
190
+ taker_base_fee: float | None = None
191
+
192
+
193
+ class PositionMergeEvent(BaseModel):
194
+ event_type: Literal["position_merge"]
195
+ tx_hash: str
196
+ block_number: int
197
+ log_index: int
198
+ timestamp: float
199
+ stakeholder: str
200
+ collateral_token: str
201
+ condition_id: str
202
+ amount: float
203
+ market_title: str | None = None
204
+ market_slug: str | None = None
205
+ event_title: str | None = None
206
+ market_image: str | None = None
207
+ tokens: dict[str, str] | None = None
208
+ tick_size: float | None = None
209
+ neg_risk: bool | None = None
210
+ taker_base_fee: float | None = None
211
+
212
+
213
+ class OracleEvent(BaseModel):
214
+ event_type: Literal["oracle"]
215
+ tx_hash: str
216
+ block_number: int
217
+ log_index: int
218
+ timestamp: float
219
+ question_id: str
220
+ oracle_type: OracleEventType
221
+ adapter_address: str
222
+ # Resolution fields
223
+ resolved_price: float | None = None
224
+ resolved_outcome: str | None = None
225
+ payouts: list[float] | None = None
226
+ # Proposal fields
227
+ proposer: str | None = None
228
+ bond_amount: float | None = None
229
+ proposed_price: float | None = None
230
+ expiration_timestamp: float | None = None
231
+ # Dispute fields
232
+ disputer: str | None = None
233
+ # Enrichment
234
+ market_title: str | None = None
235
+ market_slug: str | None = None
236
+ condition_id: str | None = None
237
+ event_title: str | None = None
238
+ market_image: str | None = None
239
+ tokens: dict[str, str] | None = None
240
+ token_ids: list[str] | None = None
241
+ outcomes: list[str] | None = None
242
+ neg_risk: bool | None = None
243
+
244
+
245
+ class PriceFeedEvent(BaseModel):
246
+ event_type: Literal["price_feed"]
247
+ feed: str
248
+ feed_id: str
249
+ price: float
250
+ bid: float
251
+ ask: float
252
+ timestamp: float
253
+ source: str
254
+
255
+
256
+ PolyNodeEvent = Annotated[
257
+ Union[
258
+ SettlementEvent,
259
+ TradeEvent,
260
+ StatusUpdateEvent,
261
+ BlockEvent,
262
+ PositionChangeEvent,
263
+ DepositEvent,
264
+ PositionSplitEvent,
265
+ PositionMergeEvent,
266
+ OracleEvent,
267
+ PriceFeedEvent,
268
+ ],
269
+ Field(discriminator="event_type"),
270
+ ]
@@ -0,0 +1,66 @@
1
+ """Orderbook types for the PolyNode SDK."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from pydantic import BaseModel
6
+
7
+
8
+ class OrderbookLevel(BaseModel):
9
+ price: str
10
+ size: str
11
+
12
+
13
+ class BookSnapshot(BaseModel):
14
+ type: str = "book_snapshot"
15
+ asset_id: str
16
+ market: str
17
+ event_title: str | None = None
18
+ question: str | None = None
19
+ outcome: str | None = None
20
+ slug: str | None = None
21
+ bids: list[OrderbookLevel]
22
+ asks: list[OrderbookLevel]
23
+
24
+
25
+ class BookUpdate(BaseModel):
26
+ type: str = "book_update"
27
+ asset_id: str
28
+ market: str
29
+ event_title: str | None = None
30
+ question: str | None = None
31
+ outcome: str | None = None
32
+ slug: str | None = None
33
+ bids: list[OrderbookLevel]
34
+ asks: list[OrderbookLevel]
35
+
36
+
37
+ class PriceChangeAsset(BaseModel):
38
+ asset_id: str
39
+ price: str
40
+ outcome: str
41
+
42
+
43
+ class PriceChange(BaseModel):
44
+ type: str = "price_change"
45
+ market: str
46
+ event_title: str | None = None
47
+ question: str | None = None
48
+ slug: str | None = None
49
+ assets: list[PriceChangeAsset]
50
+
51
+
52
+ class SubscribedMessage(BaseModel):
53
+ type: str = "subscribed"
54
+ markets: int
55
+
56
+
57
+ class SnapshotsDoneMessage(BaseModel):
58
+ type: str = "snapshots_done"
59
+ total: int
60
+
61
+
62
+ class ObErrorMessage(BaseModel):
63
+ error: str
64
+ message: str
65
+ max: int | None = None
66
+ requested: int | None = None