synpath 0.1.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.
Files changed (77) hide show
  1. synpath/__init__.py +183 -0
  2. synpath/__main__.py +66 -0
  3. synpath/base.py +723 -0
  4. synpath/bucket.py +154 -0
  5. synpath/client.py +356 -0
  6. synpath/engine/__init__.py +37 -0
  7. synpath/engine/__main__.py +354 -0
  8. synpath/engine/alerts.py +170 -0
  9. synpath/engine/engine.py +888 -0
  10. synpath/engine/eod.py +154 -0
  11. synpath/engine/events.py +140 -0
  12. synpath/engine/fair_values.py +117 -0
  13. synpath/engine/feeds.py +220 -0
  14. synpath/engine/journal.py +907 -0
  15. synpath/engine/ledger.py +353 -0
  16. synpath/engine/orders/__init__.py +42 -0
  17. synpath/engine/orders/base.py +441 -0
  18. synpath/engine/orders/day.py +72 -0
  19. synpath/engine/orders/iceberg.py +121 -0
  20. synpath/engine/orders/manager.py +223 -0
  21. synpath/engine/orders/oco.py +255 -0
  22. synpath/engine/orders/peg.py +168 -0
  23. synpath/engine/orders/routed.py +496 -0
  24. synpath/engine/orders/stop.py +240 -0
  25. synpath/engine/orders/taker.py +187 -0
  26. synpath/engine/orders/twap.py +190 -0
  27. synpath/engine/paper.py +532 -0
  28. synpath/engine/reconcile.py +279 -0
  29. synpath/engine/risk.py +403 -0
  30. synpath/engine/router.py +261 -0
  31. synpath/errors.py +98 -0
  32. synpath/history.py +71 -0
  33. synpath/hosted.py +86 -0
  34. synpath/hosted_auth.py +201 -0
  35. synpath/ids.py +61 -0
  36. synpath/kalshi.py +1378 -0
  37. synpath/matching.py +86 -0
  38. synpath/polymarket.py +1004 -0
  39. synpath/polymarket_us.py +989 -0
  40. synpath/remote.py +195 -0
  41. synpath/server/__init__.py +98 -0
  42. synpath/server/__main__.py +118 -0
  43. synpath/server/api.py +439 -0
  44. synpath/server/errors.py +87 -0
  45. synpath/server/local.py +96 -0
  46. synpath/server/models.py +75 -0
  47. synpath/server/serve.py +236 -0
  48. synpath/server/store.py +363 -0
  49. synpath/server/trading.py +764 -0
  50. synpath/trading/__init__.py +79 -0
  51. synpath/trading/__main__.py +69 -0
  52. synpath/trading/base.py +126 -0
  53. synpath/trading/credentials.py +400 -0
  54. synpath/trading/errors.py +94 -0
  55. synpath/trading/init.py +233 -0
  56. synpath/trading/instruments.py +162 -0
  57. synpath/trading/kalshi.py +957 -0
  58. synpath/trading/limiter.py +177 -0
  59. synpath/trading/money.py +172 -0
  60. synpath/trading/polymarket.py +1362 -0
  61. synpath/trading/polymarket_signing.py +478 -0
  62. synpath/trading/polymarket_us.py +705 -0
  63. synpath/trading/polymarket_us_exchange.py +825 -0
  64. synpath/trading/types.py +414 -0
  65. synpath/types.py +608 -0
  66. synpath/ws/__init__.py +55 -0
  67. synpath/ws/base.py +544 -0
  68. synpath/ws/grpc.py +578 -0
  69. synpath/ws/kalshi.py +418 -0
  70. synpath/ws/polymarket.py +430 -0
  71. synpath/ws/polymarket_us.py +299 -0
  72. synpath/ws/polymarket_us_exchange.py +754 -0
  73. synpath-0.1.0.dist-info/METADATA +224 -0
  74. synpath-0.1.0.dist-info/RECORD +77 -0
  75. synpath-0.1.0.dist-info/WHEEL +4 -0
  76. synpath-0.1.0.dist-info/entry_points.txt +2 -0
  77. synpath-0.1.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,224 @@
1
+ Metadata-Version: 2.5
2
+ Name: synpath
3
+ Version: 0.1.0
4
+ Summary: One API for prediction markets. Kalshi and Polymarket, normalized, with every price labelled by source and time.
5
+ Project-URL: Homepage, https://synpath.dev
6
+ Project-URL: Documentation, https://synpath.dev/docs
7
+ Project-URL: Repository, https://github.com/Synpath-ai/synpath
8
+ Project-URL: Issues, https://github.com/Synpath-ai/synpath/issues
9
+ Project-URL: Discord, https://discord.gg/QZzsHTpGA3
10
+ Author: Synpath
11
+ License: MIT
12
+ License-File: LICENSE
13
+ Keywords: kalshi,market-data,polymarket,prediction-markets,trading,unified-api
14
+ Classifier: Development Status :: 3 - Alpha
15
+ Classifier: Intended Audience :: Financial and Insurance Industry
16
+ Classifier: License :: OSI Approved :: MIT License
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Topic :: Office/Business :: Financial
19
+ Requires-Python: >=3.10
20
+ Requires-Dist: aiosqlite>=0.20
21
+ Requires-Dist: cryptography>=42
22
+ Requires-Dist: eth-account>=0.13
23
+ Requires-Dist: fastapi>=0.110
24
+ Requires-Dist: httpx>=0.27
25
+ Requires-Dist: pydantic>=2.6
26
+ Requires-Dist: pyjwt[crypto]>=2.8
27
+ Requires-Dist: tomli>=2.0; python_version < '3.11'
28
+ Requires-Dist: uvicorn[standard]>=0.27
29
+ Requires-Dist: websockets>=13
30
+ Provides-Extra: dev
31
+ Requires-Dist: anyio>=4; extra == 'dev'
32
+ Requires-Dist: cryptography>=42; extra == 'dev'
33
+ Requires-Dist: grpcio-tools>=1.60; extra == 'dev'
34
+ Requires-Dist: grpcio>=1.60; extra == 'dev'
35
+ Requires-Dist: protobuf>=5.26; extra == 'dev'
36
+ Requires-Dist: pyjwt[crypto]>=2.8; extra == 'dev'
37
+ Requires-Dist: pytest>=8; extra == 'dev'
38
+ Requires-Dist: respx>=0.21; extra == 'dev'
39
+ Provides-Extra: engine
40
+ Provides-Extra: grpc
41
+ Requires-Dist: cryptography>=42; extra == 'grpc'
42
+ Requires-Dist: grpcio-tools>=1.60; extra == 'grpc'
43
+ Requires-Dist: grpcio>=1.60; extra == 'grpc'
44
+ Requires-Dist: protobuf>=5.26; extra == 'grpc'
45
+ Requires-Dist: pyjwt[crypto]>=2.8; extra == 'grpc'
46
+ Provides-Extra: server
47
+ Provides-Extra: trading
48
+ Provides-Extra: ws
49
+ Description-Content-Type: text/markdown
50
+
51
+ <div align="center">
52
+
53
+ <img src="https://raw.githubusercontent.com/Synpath-ai/synpath/main/assets/synpath-banner.png" alt="Synpath: one API for every prediction market" width="100%">
54
+
55
+ # Synpath – One API for prediction markets
56
+
57
+ **Build on prediction markets without building against each one.**<br/>
58
+ One open-source API across Kalshi, Polymarket and Polymarket US: market data, order entry, live streams, and an execution engine that remembers what it sent. In-process from Python, over REST and WebSocket from anywhere.
59
+
60
+ <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="License: MIT"></a>
61
+ <a href="https://www.python.org/downloads/"><img src="https://img.shields.io/badge/python-3.10%2B-blue.svg" alt="Python 3.10+"></a>
62
+ <a href="https://discord.gg/QZzsHTpGA3"><img src="https://img.shields.io/badge/Discord-join-5865F2?logo=discord&logoColor=white" alt="Discord"></a>
63
+
64
+ </div>
65
+
66
+ **🆕 New: Every Kalshi order book, every tick.**<br/>
67
+ Full-depth books and trades for every past Kalshi trade. Query any moment in under a minute. **[Get the data →](https://synpath.dev/tick-data)**
68
+
69
+ ---
70
+
71
+ ## Supported Exchanges
72
+
73
+ | | Exchange | id | Market data | Order entry | Streams | Order books |
74
+ |:-:|---|---|:-:|:-:|:-:|---|
75
+ | <img src="assets/kalshi.png" width="20" height="20" alt="Kalshi"> | [Kalshi](https://kalshi.com) | `kalshi` | ✓ | ✓ | WebSocket | one book per market, both sides read it |
76
+ | <img src="assets/polymarket.png" width="20" height="20" alt="Polymarket"> | [Polymarket](https://polymarket.com) | `polymarket` | ✓ | ✓ | WebSocket | one book per outcome token |
77
+ | <img src="assets/polymarket.png" width="20" height="20" alt="Polymarket US"> | [Polymarket US](https://polymarket.us) | `polymarket_us` | ✓ | ✓ retail and exchange APIs | WebSocket and gRPC | one book per market, both sides read it |
78
+
79
+ ## Why Synpath
80
+
81
+ - **Liquidity is fragmented. Your time shouldn't be.** The same market trades on Kalshi, Polymarket and Polymarket US, each with its own API, units and quirks. Synpath gives you one interface for all of them, and smart order routing buys from whichever book is cheapest. Spend your time on alpha, not plumbing.
82
+
83
+ - **Traders deserve advanced order types.** Stops, trailing stops, icebergs, OCO, brackets, TWAP and pegs, on every venue, even where the exchange has none. Orders are journaled before they're sent, so a crash never places one twice.
84
+
85
+ - **A home after Dome and pmxt.** Dome's API shut down in April 2026, and pmxt hasn't shipped since July 2026. Synpath is MIT-licensed, actively maintained, and follows ccxt conventions.
86
+
87
+ ## Installation
88
+
89
+ ```bash
90
+ pip install synpath # market data, order entry, streams, the engine and the server
91
+ pip install "synpath[grpc]" # + Polymarket US exchange gRPC streams
92
+ ```
93
+
94
+ Python 3.10 or newer.
95
+
96
+ **Hosted API.** Run `synpath login`, then `synpath keys create`. It serves tick-level Kalshi order book and trade history, and cross-venue market matching. Trading stays on your machine: Synpath never holds your keys or funds.
97
+
98
+ ## Quick Start
99
+
100
+ **Markets and quotes**
101
+
102
+ ```python
103
+ import synpath
104
+
105
+ kalshi = synpath.Kalshi()
106
+ market = kalshi.fetch_markets(limit=1)[0]
107
+
108
+ print(market.title) # Will Elon Musk visit Mars before Aug 1, 2099?
109
+ print(market.yes.quote.bid, market.yes.quote.ask) # 0.1 0.12
110
+ ```
111
+
112
+ **Order books and search**
113
+
114
+ ```python
115
+ book = kalshi.fetch_order_book(market.id, depth=5)
116
+ book.best_bid, book.best_ask # best first on both sides
117
+ kalshi.fetch_order_book(market.id, side="no") # what NO costs
118
+
119
+ markets = kalshi.fetch_markets(query="trump", limit=10)
120
+ fee = kalshi.fetch_fee_schedule(markets[0].id)
121
+ fee.estimate(price=0.50, contracts=100) # 1.75
122
+ ```
123
+
124
+ **Same code, every venue**
125
+
126
+ ```python
127
+ for venue_id in synpath.exchanges: # ['kalshi', 'polymarket', 'polymarket_us']
128
+ with synpath.exchange(venue_id) as venue:
129
+ page = venue.fetch_markets(limit=5)
130
+
131
+ client = synpath.Client() # or one client, routed by the id
132
+ client.fetch_market("polymarket:2252244") # every id starts with its venue
133
+ ```
134
+
135
+ **Order entry**
136
+
137
+ ```python
138
+ from decimal import Decimal
139
+ from synpath import KalshiTrading, OrderRequest, Side, load_credentials, require
140
+
141
+ async with KalshiTrading(require("kalshi", load_credentials())) as kalshi:
142
+ order = await kalshi.create_order(OrderRequest(
143
+ market_id=market.id, side=Side.BUY, # buy takes YES, sell takes NO
144
+ amount=Decimal("10"), price=Decimal("0.42"), # always the YES price
145
+ ))
146
+ ```
147
+
148
+ **Live streams**
149
+
150
+ ```python
151
+ from synpath import PolymarketMarketStream, BookEvent
152
+
153
+ async with PolymarketMarketStream() as stream:
154
+ await stream.watch_order_book(["polymarket:2252244"]) # both sides of the market
155
+ async for event in stream:
156
+ if isinstance(event, BookEvent):
157
+ print(event.market_id, event.side, event.best_bid, event.best_ask)
158
+ ```
159
+
160
+ **The engine, and the orders the venues do not hold**
161
+
162
+ ```python
163
+ from synpath.engine import Engine, EngineConfig, RiskConfig
164
+ from synpath import OrderType
165
+
166
+ async with Engine({"kalshi": kalshi}, EngineConfig(journal_path="trading.db"),
167
+ risk=RiskConfig(max_order_contracts=Decimal("100"))) as engine:
168
+ await engine.submit(OrderRequest(
169
+ market_id=market.id, side=Side.SELL, amount=Decimal("20"),
170
+ type=OrderType.TRAILING_STOP, stop_price=Decimal("0.40"),
171
+ params={"trail": "0.03"}, book="alpha",
172
+ ))
173
+ ```
174
+
175
+ **REST server**
176
+
177
+ ```bash
178
+ python -m synpath.server # http://127.0.0.1:8000/docs
179
+ curl "localhost:8000/venues/kalshi/markets?limit=1"
180
+ ```
181
+
182
+ Trading has its own app, with per-account keys and an append-only audit log:
183
+
184
+ ```bash
185
+ python -m synpath.server bootstrap --control control.db # the first key
186
+ python -m synpath.server schema --trading --out openapi.json
187
+ npx openapi-typescript openapi.json --default-non-nullable false -o src/synpath.d.ts
188
+ ```
189
+
190
+ ## Documentation
191
+
192
+ - [CLI](https://synpath.dev/docs/quickstart): hosted data API sign-in and keys versus local venue trading server setup
193
+ - [Unified API](https://synpath.dev/docs/sdks/python): methods, data structures, identifiers, paging, status, errors
194
+ - [Capabilities](https://synpath.dev/docs/concepts/exchanges): what each venue can and cannot answer
195
+ - [HTTP server](https://synpath.dev/docs/api-reference): routes, envelopes, typed client generation, trading routes with per-account keys, mounting behind your own auth
196
+ - [Trading](https://synpath.dev/docs/concepts/orders): credentials, `Decimal` money, order entry on Kalshi, Polymarket and Polymarket US
197
+ - [Streaming](https://synpath.dev/docs/ws-api-reference): WebSocket and gRPC books, trades, orders and fills as self-healing event streams
198
+ - [Engine](docs/engine.md): a journal written before anything is sent, pre-trade risk, a ledger, reconciliation, a kill switch, the order types the venues do not hold, buckets that route one order across venues, paper trading
199
+ - [TypeScript client](https://synpath.dev/docs/sdks/typescript): generate a typed client from the OpenAPI document, place through cancel without Python
200
+
201
+ ## Development
202
+
203
+ ```bash
204
+ git clone https://github.com/Synpath-ai/synpath
205
+ cd synpath
206
+ pip install -e ".[dev]"
207
+
208
+ pytest # offline, against recorded venue payloads
209
+ pytest -m live # market data against the real venues
210
+ pytest -m demo # order entry on a venue's demo environment
211
+ ```
212
+
213
+ The `demo` tests place and cancel real orders on a demo exchange with the
214
+ credentials in your environment, and leave the account flat. `python -m
215
+ synpath.trading doctor` says which venues are configured without printing a
216
+ secret.
217
+
218
+ ## Prior Art
219
+
220
+ [ccxt](https://github.com/ccxt/ccxt) set the conventions this library follows. [pmxt](https://github.com/pmxt-dev/pmxt) got to prediction markets first.
221
+
222
+ ## License
223
+
224
+ MIT
@@ -0,0 +1,77 @@
1
+ synpath/__init__.py,sha256=dZzuqbg_2YxLNeErA0se0yV5IOjg5gvwKl27psgYLOU,7087
2
+ synpath/__main__.py,sha256=et04tmgvRIYu_P55DbBfdyXyfpbpWs0UAWd6ttjUYeU,2521
3
+ synpath/base.py,sha256=4YMwVwGMjMIt6reAYuyIM8T-Ef8SjnKjaNFCN6SQlc8,27805
4
+ synpath/bucket.py,sha256=nQyRW9mQl8PhWGYO7YJO5StQU1ax4PqrOzu_g-1409Y,5764
5
+ synpath/client.py,sha256=usVv49ec3hjkzwTtXPnLpsOdPV7Vb9EAoI4MU6cbhv0,17312
6
+ synpath/errors.py,sha256=MSIG2TNp1Mccy5EjnasXAtQuKTNsCBMUFxlbMIZHMMk,3273
7
+ synpath/history.py,sha256=vOpY6ieq3Fu2idRStbu7TYQxhw09IeVNgbeon8SgD7w,3492
8
+ synpath/hosted.py,sha256=ROE-crwfM8e1Fdw9Fo6q7qpo7LPVOH9abTTItpqGy2c,3836
9
+ synpath/hosted_auth.py,sha256=yOd1CdOPyxYkBwe8-f1N_KI_CHJIcEeRKmIL5FMNRXw,8236
10
+ synpath/ids.py,sha256=evrMDMqTkBf9MQutLb1GYRI1J273OHlqyNo8d8FWLbE,2631
11
+ synpath/kalshi.py,sha256=yQJr8aqUIXlE49LRLznI08bZ8-jrw7B5MI2SKvc0FXc,62334
12
+ synpath/matching.py,sha256=z19MzFCH6ezp6vapw9l7qZFoD1GCGB0yZFy1Kv56pSM,4533
13
+ synpath/polymarket.py,sha256=MtRDGstIl6JJgOsaS5dC837NiwcC3Uuc7uzHnue1vig,45478
14
+ synpath/polymarket_us.py,sha256=JQb5eqZkpIuK9i9aXw8BT82D3a_V8NaKogZfBZyWG58,43511
15
+ synpath/remote.py,sha256=cXTT1i40m22_xNftavIZOdZgitrPT2wUxzYqR7NQkwI,10164
16
+ synpath/types.py,sha256=cRr27ewlVFyKi_16AsGOC7QiHgx3dbpsNREyxNxzGsw,24525
17
+ synpath/engine/__init__.py,sha256=qB9a4ENpHm7LphO4foleUXvAMTr3ReNZ-SWmm_3tKYk,1541
18
+ synpath/engine/__main__.py,sha256=-JKoxBREqsbr99tF5d89XcpoXiYfbrSIYhLqSw9Gwt0,16085
19
+ synpath/engine/alerts.py,sha256=Fgk4rODl1_8aHyHJNRc-A_wfAgswZqbR6kL_v0qM04s,7779
20
+ synpath/engine/engine.py,sha256=yO4-yHEytINodmItDKR2eYVwtl6HsObzA7cpLeE-vm0,45407
21
+ synpath/engine/eod.py,sha256=7ZJV6S-wuhO36vwmLuOLJwZ0_gS2XXUBHooMY8YLsM4,6768
22
+ synpath/engine/events.py,sha256=fvoGdo8p_19elAAKxQ3-oW8Gw5azPlxC3fwXVoY5ehc,5536
23
+ synpath/engine/fair_values.py,sha256=UOCvYqx-J_B8t5_aGHF5XxH0k0y3o5Bug4A7uT5MKGM,4909
24
+ synpath/engine/feeds.py,sha256=5H4YHBky_ZCs9LGVRsbGdhbon7DeAmd5hi384WgZ2u4,10171
25
+ synpath/engine/journal.py,sha256=_3ShqI6t3Qrj4u-SNgz1d3oq1ShZVZdLMTlCuz8eXb0,40430
26
+ synpath/engine/ledger.py,sha256=nUjIACS5APsxTSNbYO9cuJ5h3uc7lsPoGV430S9DMbY,15387
27
+ synpath/engine/paper.py,sha256=l81kp6EL3LWCWZvd91hjmOWcwwiqxGVf6Gcky5SKVZc,24118
28
+ synpath/engine/reconcile.py,sha256=hPyMbxrecKChQNgCOUmdl324Y8YUjyxjdWDrys9W9S8,12589
29
+ synpath/engine/risk.py,sha256=nL-wAroQzCY6S0gBnLauEWVu80BQY5KntX-SMi8q1tw,18125
30
+ synpath/engine/router.py,sha256=Joiw0jfhnrHPWYbf9jKpsgcND2Tmidtjvu_U551B15I,10087
31
+ synpath/engine/orders/__init__.py,sha256=5pMpY_BOM8VFxu0zrghPDMCS76oSPL5l2GNqZ1lGvQI,1691
32
+ synpath/engine/orders/base.py,sha256=15-Y-2CiGEtSWpQhxWMq0IQTFchloyTA-cEpyHurDFM,19043
33
+ synpath/engine/orders/day.py,sha256=ZbIzRfKuTSVmtsQi2l4ldu_3TJ5ae-QtUA3_uzF61_A,3152
34
+ synpath/engine/orders/iceberg.py,sha256=i8O041vcsVWBUJQXAwtDhoRsE5A_4F0L8ZFv-kWEIDU,5165
35
+ synpath/engine/orders/manager.py,sha256=yYotN_JdRUvKWmJsl9zzcO2FW37LiRILbergjIZneLQ,10103
36
+ synpath/engine/orders/oco.py,sha256=Pw0akdT_ju52YeK-C8h0LdFjcTkNi7Bf9tyljV64UDw,11238
37
+ synpath/engine/orders/peg.py,sha256=VNTlQcbBrpVZFxyPCV2hOMa-fkl1PJ5w5lfV7s2O3_k,7270
38
+ synpath/engine/orders/routed.py,sha256=IHDT7y262rzIFNtqp96usP8HtqiVNITYD_Nt_HyVW5Y,23719
39
+ synpath/engine/orders/stop.py,sha256=Mea9SerrdAnb3TR1eEB82FBxMko9Rjqo-v2EnTIKd-8,10660
40
+ synpath/engine/orders/taker.py,sha256=YU8nguy_unr2ckYkuFWE0h_G1e8HDAARQ5xWfynKrIo,7952
41
+ synpath/engine/orders/twap.py,sha256=1Gtya_jJxXQI_wf8T4dXh2OWq2dVMG9kVCNKkv3wXM0,8412
42
+ synpath/server/__init__.py,sha256=akEK_hgT47khkWjmjXvThW8i6TjA79ATVuMn3mZhaco,3472
43
+ synpath/server/__main__.py,sha256=cFU57EdADslRNfaHhvMp_Fc4SMi4JX1961ilXTqTkbM,4333
44
+ synpath/server/api.py,sha256=M9JTZCkW7QVqcgNrUIX_Qd0v913_ckXxXnCt29MkV_U,17969
45
+ synpath/server/errors.py,sha256=paLAFg29zkQhAGSHWJt0l2nJC3vvwT88u5nHUVrIiDY,4176
46
+ synpath/server/local.py,sha256=an9ZluPYd5crhH9K6iRuiYmKhScraTvYZ--g3Vl413s,3887
47
+ synpath/server/models.py,sha256=W39Puc7N5u-PL-c1ZeCPaCKQVNP04K1H1lUSfNJMO24,2639
48
+ synpath/server/serve.py,sha256=Bsa3jlRzY8stALictPSMqerNyvPkar4Eo_IOCBsSJKo,10665
49
+ synpath/server/store.py,sha256=seztt2Bx75bkAm8YpBjaClXKwE9uipbaXMic7ewF77I,14732
50
+ synpath/server/trading.py,sha256=lR7JJtEbiPwiEZaOm2enxAo3Ubm42yM5f0bflpgKZK4,34918
51
+ synpath/trading/__init__.py,sha256=jzFJSmFKW2rXV6thjAtzAtDD4LTFaW5PUO9LDsHEiIs,2547
52
+ synpath/trading/__main__.py,sha256=gHeGYp0lgLuYFyO4Zsme1OF8wgsS0YHsifmth8W7X-s,2790
53
+ synpath/trading/base.py,sha256=BHbE7pF17N8fXyQpLxNjr63ISaSpQzXMqpTWIGn1JFg,5371
54
+ synpath/trading/credentials.py,sha256=iI2oXV5-Ia9o50786JKNK0M_886QBFa4P7BdD59trXg,16376
55
+ synpath/trading/errors.py,sha256=hxGH5Ag_ANP12E95d4i5mq5gc3828_bnINcoC8IbYBo,3393
56
+ synpath/trading/init.py,sha256=LDAzQIaoMCqKKAiIrgFKjl9GqNt4L47ii3fQOpqRnFA,9890
57
+ synpath/trading/instruments.py,sha256=URb0IO6LO9530f7rLikYqZPWEAo3O5pUmsclUhTEO6Y,6473
58
+ synpath/trading/kalshi.py,sha256=5VRrJfYztgwjqIRbjWB_jehD4qPntyOqbk6JQUww_Nc,46271
59
+ synpath/trading/limiter.py,sha256=4KKnIK-x0K65fxmIKxhJWJitoqXG9gwB3306TodOyhQ,6996
60
+ synpath/trading/money.py,sha256=KnwroqFHe3UTz0IHi0T96DjOnVOUmqa583ub9TnggYU,6312
61
+ synpath/trading/polymarket.py,sha256=9uLAVMI8a0Sxvrpm459upM1k11el5Udd4LN6s5PL-EA,67282
62
+ synpath/trading/polymarket_signing.py,sha256=myw6La6vrozkwuIxdIVE1wxj2LR-dgb48TOgyFUKNBw,19179
63
+ synpath/trading/polymarket_us.py,sha256=eaVEvBHCBmwZlu13QB1YIiXv4_fMCNlFiiD6WrZntio,33650
64
+ synpath/trading/polymarket_us_exchange.py,sha256=B_Qj2kLMNkccG9ZIZJT9Yy5fc26Q99QF70dCdzNRHWs,40857
65
+ synpath/trading/types.py,sha256=3ciF-V_Q6Kd0Vp5AS0zorEqoXyT8z7us_gri7aek5-4,14491
66
+ synpath/ws/__init__.py,sha256=ImJr-XIT9Qb2Dj1mnfhA0M4_hhfy-VhZfT2Yx9rMWuo,2366
67
+ synpath/ws/base.py,sha256=xS8_EFLgOj-gL0vsp-Z4m9gH4nA8u4JT-758PKWVPKY,19911
68
+ synpath/ws/grpc.py,sha256=ROZxmdD4yt8ITUyr5N2N6tGmSoxL7aT7TnMj25xnIII,23492
69
+ synpath/ws/kalshi.py,sha256=fdOmI-1lVGKbfSj2pmrGd6qGYC8odWZ2njvJegPD1oE,18638
70
+ synpath/ws/polymarket.py,sha256=tP3UF59zV5evWFiqCySHmp8KWdZPohoS0qPOj-glgII,19567
71
+ synpath/ws/polymarket_us.py,sha256=hGCUAdr2r7EzK_-cbCpHCUseoRjfGYctVKPmlrp6b2E,13626
72
+ synpath/ws/polymarket_us_exchange.py,sha256=7Oky6DtvIDmEr9CPlJe5Os6tUWed1EIP0lo8wmNaFHg,34934
73
+ synpath-0.1.0.dist-info/METADATA,sha256=j_exr6Rs18v0EcefMQ30bcHCQB1H8-TQQ16mqSD4VUw,9882
74
+ synpath-0.1.0.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
75
+ synpath-0.1.0.dist-info/entry_points.txt,sha256=rS62NycIylxByFigG1w8fHxFL1XEE3f3sHpLdv-8ce0,50
76
+ synpath-0.1.0.dist-info/licenses/LICENSE,sha256=w3MGsHcA4yLQygEzyUCfJkSqG5iuFKH3TeaYm0Fr-00,1064
77
+ synpath-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.32.4
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ synpath = synpath.__main__:main
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Synpath
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.