x10-python-trading-starknet 2.0.0__tar.gz → 2.1.0__tar.gz

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 (71) hide show
  1. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/PKG-INFO +1 -1
  2. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/pyproject.toml +1 -1
  3. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/clients/rest/modules/account_module.py +10 -2
  4. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/clients/rest/modules/base_module.py +4 -1
  5. x10_python_trading_starknet-2.1.0/x10/clients/rest/modules/builder_module.py +22 -0
  6. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/clients/rest/modules/order_management_module.py +3 -0
  7. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/clients/rest/rest_api_client.py +8 -0
  8. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/config.py +3 -0
  9. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/models/order.py +6 -0
  10. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/models/trade.py +20 -0
  11. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/LICENSE +0 -0
  12. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/README.md +0 -0
  13. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/__init__.py +0 -0
  14. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/clients/__init__.py +0 -0
  15. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/clients/blocking/__init__.py +0 -0
  16. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/clients/blocking/blocking_trading_client.py +0 -0
  17. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/clients/onboarding/__init__.py +0 -0
  18. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/clients/onboarding/modules/__init__.py +0 -0
  19. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/clients/onboarding/modules/account_module.py +0 -0
  20. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/clients/onboarding/modules/auth_module.py +0 -0
  21. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/clients/onboarding/modules/base_module.py +0 -0
  22. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/clients/onboarding/onboarding_client.py +0 -0
  23. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/clients/rest/__init__.py +0 -0
  24. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/clients/rest/modules/__init__.py +0 -0
  25. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/clients/rest/modules/info_module.py +0 -0
  26. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/clients/rest/modules/testnet_module.py +0 -0
  27. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/clients/rest/modules/vault_module.py +0 -0
  28. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/clients/stream/__init__.py +0 -0
  29. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/clients/stream/stream_client.py +0 -0
  30. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/clients/stream/stream_connection.py +0 -0
  31. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/core/__init__.py +0 -0
  32. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/core/amount.py +0 -0
  33. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/core/stark_account.py +0 -0
  34. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/errors.py +0 -0
  35. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/models/__init__.py +0 -0
  36. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/models/account.py +0 -0
  37. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/models/asset.py +0 -0
  38. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/models/balance.py +0 -0
  39. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/models/base.py +0 -0
  40. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/models/bridge.py +0 -0
  41. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/models/candle.py +0 -0
  42. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/models/client.py +0 -0
  43. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/models/fee.py +0 -0
  44. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/models/funding_rate.py +0 -0
  45. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/models/http.py +0 -0
  46. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/models/market.py +0 -0
  47. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/models/orderbook.py +0 -0
  48. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/models/position.py +0 -0
  49. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/models/settings.py +0 -0
  50. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/models/testnet.py +0 -0
  51. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/models/transfer.py +0 -0
  52. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/models/vault.py +0 -0
  53. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/models/withdrawal.py +0 -0
  54. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/py.typed +0 -0
  55. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/signing/__init__.py +0 -0
  56. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/signing/limit_order_object_settlement.py +0 -0
  57. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/signing/onboarding.py +0 -0
  58. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/signing/order_object.py +0 -0
  59. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/signing/order_object_settlement.py +0 -0
  60. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/signing/transfer_object.py +0 -0
  61. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/signing/withdrawal_object.py +0 -0
  62. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/tools/__init__.py +0 -0
  63. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/tools/orderbook.py +0 -0
  64. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/utils/__init__.py +0 -0
  65. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/utils/date.py +0 -0
  66. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/utils/http.py +0 -0
  67. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/utils/log.py +0 -0
  68. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/utils/nonce.py +0 -0
  69. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/utils/order.py +0 -0
  70. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/utils/string.py +0 -0
  71. {x10_python_trading_starknet-2.0.0 → x10_python_trading_starknet-2.1.0}/x10/version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: x10-python-trading-starknet
3
- Version: 2.0.0
3
+ Version: 2.1.0
4
4
  Summary: Python client for X10 API
5
5
  Home-page: https://github.com/x10xchange/python_sdk
6
6
  Author: X10
@@ -5,7 +5,7 @@ build-backend = "poetry.core.masonry.api"
5
5
 
6
6
  [tool.poetry]
7
7
  name = "x10-python-trading-starknet"
8
- version = "2.0.0"
8
+ version = "2.1.0"
9
9
  description = "Python client for X10 API"
10
10
  authors = ["X10 <tech@ex10.org>"]
11
11
  repository = "https://github.com/x10xchange/python_sdk"
@@ -14,7 +14,7 @@ from x10.models.base import EmptyModel
14
14
  from x10.models.bridge import BridgesConfigModel, QuoteModel
15
15
  from x10.models.client import ClientModel
16
16
  from x10.models.fee import TradingFeeModel
17
- from x10.models.order import OpenOrderModel, OrderSide, OrderType
17
+ from x10.models.order import OpenOrderModel, OrderSide, OrderType, Sort
18
18
  from x10.models.position import PositionHistoryModel, PositionModel, PositionSide
19
19
  from x10.models.trade import AccountTradeModel, TradeType
20
20
  from x10.models.transfer import TransferResponseModel
@@ -97,6 +97,7 @@ class AccountModule(BaseModule):
97
97
  order_side: Optional[OrderSide] = None,
98
98
  cursor: Optional[int] = None,
99
99
  limit: Optional[int] = None,
100
+ sort: Optional[Sort] = None,
100
101
  ) -> WrappedApiResponseModel[List[OpenOrderModel]]:
101
102
  """
102
103
  https://api.docs.extended.exchange/#get-orders-history
@@ -104,7 +105,14 @@ class AccountModule(BaseModule):
104
105
 
105
106
  url = self._get_url(
106
107
  "/user/orders/history",
107
- query={"market": market_names, "type": order_type, "side": order_side, "cursor": cursor, "limit": limit},
108
+ query={
109
+ "market": market_names,
110
+ "type": order_type,
111
+ "side": order_side,
112
+ "cursor": cursor,
113
+ "limit": limit,
114
+ "sort": sort,
115
+ },
108
116
  )
109
117
  return await send_get_request(await self._get_session(), url, List[OpenOrderModel], api_key=self._get_api_key())
110
118
 
@@ -30,7 +30,10 @@ class BaseModule:
30
30
  self.__session = None
31
31
 
32
32
  def _get_url(self, path: str, *, query: Optional[Dict] = None, **path_params) -> str:
33
- return get_url(f"{self.__config.endpoints.api_base_url}{path}", query=query, **path_params)
33
+ return get_url(f"{self._get_base_url()}{path}", query=query, **path_params)
34
+
35
+ def _get_base_url(self) -> str:
36
+ return self.__config.endpoints.api_base_url
34
37
 
35
38
  def _get_config(self) -> Config:
36
39
  return self.__config
@@ -0,0 +1,22 @@
1
+ from typing import List, Optional
2
+
3
+ from x10.clients.rest.modules.base_module import BaseModule
4
+ from x10.models.trade import BuilderTradeModel
5
+ from x10.utils.http import WrappedApiResponseModel, send_get_request
6
+
7
+
8
+ class BuilderModule(BaseModule):
9
+ async def get_trades(
10
+ self,
11
+ cursor: Optional[int] = None,
12
+ limit: Optional[int] = None,
13
+ ) -> WrappedApiResponseModel[List[BuilderTradeModel]]:
14
+ """
15
+ Returns the trades attributed to the authenticated builder, newest first.
16
+ The response is paginated by trade id via the `cursor`.
17
+ """
18
+
19
+ url = self._get_url("/builder/trades", query={"cursor": cursor, "limit": limit})
20
+ return await send_get_request(
21
+ await self._get_session(), url, List[BuilderTradeModel], api_key=self._get_api_key()
22
+ )
@@ -72,3 +72,6 @@ class OrderManagementModule(BaseModule):
72
72
  json=request_model.to_api_request_json(exclude_none=True),
73
73
  api_key=self._get_api_key(),
74
74
  )
75
+
76
+ def _get_base_url(self) -> str:
77
+ return self._get_config().endpoints.api_base_order_management_url
@@ -3,6 +3,7 @@ from decimal import Decimal
3
3
  from typing import Dict, Optional
4
4
 
5
5
  from x10.clients.rest.modules.account_module import AccountModule
6
+ from x10.clients.rest.modules.builder_module import BuilderModule
6
7
  from x10.clients.rest.modules.info_module import InfoModule
7
8
  from x10.clients.rest.modules.order_management_module import OrderManagementModule
8
9
  from x10.clients.rest.modules.testnet_module import TestnetModule
@@ -41,6 +42,7 @@ class RestApiClient:
41
42
  __order_management_module: OrderManagementModule
42
43
  __vault_module: VaultModule
43
44
  __testnet_module: TestnetModule
45
+ __builder_module: BuilderModule
44
46
 
45
47
  async def place_order(
46
48
  self,
@@ -106,6 +108,7 @@ class RestApiClient:
106
108
  await self.__order_management_module.close_session()
107
109
  await self.__vault_module.close_session()
108
110
  await self.__testnet_module.close_session()
111
+ await self.__builder_module.close_session()
109
112
 
110
113
  async def __aenter__(self):
111
114
  return self
@@ -131,6 +134,7 @@ class RestApiClient:
131
134
  api_key=api_key,
132
135
  )
133
136
  self.__testnet_module = TestnetModule(config, api_key=api_key, account_module=self.__account_module)
137
+ self.__builder_module = BuilderModule(config, api_key=api_key)
134
138
 
135
139
  @property
136
140
  def config(self):
@@ -159,3 +163,7 @@ class RestApiClient:
159
163
  @property
160
164
  def vault(self):
161
165
  return self.__vault_module
166
+
167
+ @property
168
+ def builder(self):
169
+ return self.__builder_module
@@ -36,6 +36,7 @@ class EndpointsConfig:
36
36
 
37
37
  chain_rpc_url: str
38
38
  api_base_url: str
39
+ api_base_order_management_url: str
39
40
  stream_url: str
40
41
  onboarding_url: str
41
42
 
@@ -66,6 +67,7 @@ TESTNET_CONFIG = Config(
66
67
  endpoints=EndpointsConfig(
67
68
  chain_rpc_url="https://rpc.sepolia.org",
68
69
  api_base_url="https://api.starknet.sepolia.extended.exchange/api/v1",
70
+ api_base_order_management_url="https://api.starknet.sepolia.extended.exchange/api/v1",
69
71
  stream_url="wss://api.starknet.sepolia.extended.exchange/stream.extended.exchange/v1",
70
72
  onboarding_url="https://api.starknet.sepolia.extended.exchange",
71
73
  asset_operations_contract="",
@@ -87,6 +89,7 @@ MAINNET_CONFIG = Config(
87
89
  endpoints=EndpointsConfig(
88
90
  chain_rpc_url="",
89
91
  api_base_url="https://api.starknet.extended.exchange/api/v1",
92
+ api_base_order_management_url="https://api.starknet.extended.exchange/api/v1",
90
93
  stream_url="wss://api.starknet.extended.exchange/stream.extended.exchange/v1",
91
94
  onboarding_url="https://api.starknet.extended.exchange",
92
95
  asset_operations_contract="",
@@ -17,11 +17,17 @@ class OrderSide(StrEnum):
17
17
  SELL = "SELL"
18
18
 
19
19
 
20
+ class Sort(StrEnum):
21
+ ID = "ID"
22
+ UPDATED_AT = "UPDATED_AT"
23
+
24
+
20
25
  class OrderType(StrEnum):
21
26
  LIMIT = "LIMIT"
22
27
  CONDITIONAL = "CONDITIONAL"
23
28
  MARKET = "MARKET"
24
29
  TPSL = "TPSL"
30
+ TWAP = "TWAP"
25
31
 
26
32
 
27
33
  class OrderTpslType(StrEnum):
@@ -1,4 +1,5 @@
1
1
  from decimal import Decimal
2
+ from typing import Optional
2
3
 
3
4
  from pydantic import AliasChoices, Field
4
5
  from strenum import StrEnum
@@ -36,3 +37,22 @@ class AccountTradeModel(X10BaseModel):
36
37
  is_taker: bool
37
38
  trade_type: TradeType
38
39
  created_time: int
40
+
41
+
42
+ class BuilderTradeModel(X10BaseModel):
43
+ """
44
+ A trade as seen by a builder. Only the side (maker/taker) that belongs to the
45
+ requesting builder is populated; the counterparty side is masked with `None`.
46
+ """
47
+
48
+ id: int
49
+ time: int
50
+ volume: Decimal
51
+ maker_id: Optional[int] = None
52
+ taker_id: Optional[int] = None
53
+ maker_builder_id: Optional[int] = None
54
+ taker_builder_id: Optional[int] = None
55
+ maker_fee: Optional[Decimal] = None
56
+ taker_fee: Optional[Decimal] = None
57
+ maker_builder_fee: Optional[Decimal] = None
58
+ taker_builder_fee: Optional[Decimal] = None