polyester-sdk 0.2.0__tar.gz → 0.3.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 (366) hide show
  1. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/CHANGELOG.md +111 -0
  2. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/PKG-INFO +97 -25
  3. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/README.md +93 -22
  4. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/pyproject.toml +4 -3
  5. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/__init__.py +6 -0
  6. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/_version.py +1 -1
  7. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/_wire.py +25 -5
  8. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/catalogs/__init__.py +28 -0
  9. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/bps.py +12 -2
  10. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/decode/orders.py +7 -0
  11. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/decode/transfers.py +1 -0
  12. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/decode/triggers.py +1 -0
  13. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/decode/vip.py +15 -1
  14. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/orders.py +15 -3
  15. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/realtime_decode.py +63 -3
  16. polyester_sdk-0.3.0/src/polyester/codecs/spot_config.py +78 -0
  17. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/triggers.py +43 -17
  18. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/errors.py +55 -6
  19. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/marketdata/v1/marketdata_pb2.py +14 -14
  20. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/marketdata/v1/marketdata_pb2.pyi +4 -2
  21. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/models/__init__.py +4 -0
  22. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/models/common.py +31 -0
  23. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/models/trading.py +25 -0
  24. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/models/vip.py +21 -1
  25. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/realtime/auth.py +10 -2
  26. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/realtime/client.py +48 -13
  27. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/services/_realtime_subscribe.py +15 -1
  28. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/services/market_data.py +2 -1
  29. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/services/market_overview.py +16 -3
  30. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/services/trades.py +7 -7
  31. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/services/transfers.py +4 -4
  32. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/services/triggers.py +34 -12
  33. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/transport.py +64 -1
  34. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/.env.example +0 -0
  35. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/.gitignore +0 -0
  36. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/LICENSE +0 -0
  37. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/SECURITY.md +0 -0
  38. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/examples/basic_bot.py +0 -0
  39. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/auth.py +0 -0
  40. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/auth_interceptor.py +0 -0
  41. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/catalogs/zipper.py +0 -0
  42. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/catalogs/zipper_supply.py +0 -0
  43. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/chain/__init__.py +0 -0
  44. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/chain/_deps.py +0 -0
  45. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/chain/calldata.py +0 -0
  46. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/chain/destination.py +0 -0
  47. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/chain/environment.py +0 -0
  48. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/chain/fees.py +0 -0
  49. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/chain/rpc.py +0 -0
  50. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/chain/safe.py +0 -0
  51. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/chain/userop.py +0 -0
  52. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/client.py +0 -0
  53. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/__init__.py +0 -0
  54. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/address_book.py +0 -0
  55. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/correlation_id.py +0 -0
  56. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/decode/__init__.py +0 -0
  57. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/decode/address_book.py +0 -0
  58. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/decode/api_keys.py +0 -0
  59. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/decode/auth.py +0 -0
  60. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/decode/balances.py +0 -0
  61. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/decode/common.py +0 -0
  62. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/decode/deposit.py +0 -0
  63. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/decode/fees.py +0 -0
  64. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/decode/guard_signer.py +0 -0
  65. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/decode/heatmap.py +0 -0
  66. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/decode/internal_transfers.py +0 -0
  67. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/decode/invariants.py +0 -0
  68. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/decode/lifecycle.py +0 -0
  69. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/decode/market_data.py +0 -0
  70. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/decode/market_overview.py +0 -0
  71. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/decode/orderbook.py +0 -0
  72. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/decode/policies.py +0 -0
  73. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/decode/private_orders.py +0 -0
  74. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/decode/ratelimit.py +0 -0
  75. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/decode/resolve.py +0 -0
  76. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/decode/sub_accounts.py +0 -0
  77. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/decode/trading_rate_limits.py +0 -0
  78. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/decode/withdraw.py +0 -0
  79. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/decode/zipper.py +0 -0
  80. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/enums.py +0 -0
  81. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/guard_signer.py +0 -0
  82. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/heatmap.py +0 -0
  83. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/ledger.py +0 -0
  84. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/ledger_amounts.py +0 -0
  85. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/orderbook.py +0 -0
  86. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/proto_build.py +0 -0
  87. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/proto_helpers.py +0 -0
  88. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/scalars.py +0 -0
  89. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/sub_accounts.py +0 -0
  90. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/wire_decode.py +0 -0
  91. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/codecs/withdraw.py +0 -0
  92. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/environment.py +0 -0
  93. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/__init__.py +0 -0
  94. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/auth/__init__.py +0 -0
  95. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/auth/v1/__init__.py +0 -0
  96. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/auth/v1/address_book_connect.py +0 -0
  97. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/auth/v1/address_book_pb2.py +0 -0
  98. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/auth/v1/address_book_pb2.pyi +0 -0
  99. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/auth/v1/api_keys_connect.py +0 -0
  100. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/auth/v1/api_keys_pb2.py +0 -0
  101. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/auth/v1/api_keys_pb2.pyi +0 -0
  102. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/auth/v1/auth_connect.py +0 -0
  103. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/auth/v1/auth_pb2.py +0 -0
  104. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/auth/v1/auth_pb2.pyi +0 -0
  105. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/auth/v1/mfa_connect.py +0 -0
  106. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/auth/v1/mfa_pb2.py +0 -0
  107. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/auth/v1/mfa_pb2.pyi +0 -0
  108. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/auth/v1/policies_connect.py +0 -0
  109. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/auth/v1/policies_pb2.py +0 -0
  110. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/auth/v1/policies_pb2.pyi +0 -0
  111. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/auth/v1/profile_connect.py +0 -0
  112. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/auth/v1/profile_pb2.py +0 -0
  113. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/auth/v1/profile_pb2.pyi +0 -0
  114. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/auth/v1/resolve_connect.py +0 -0
  115. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/auth/v1/resolve_pb2.py +0 -0
  116. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/auth/v1/resolve_pb2.pyi +0 -0
  117. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/auth/v1/social_verification_connect.py +0 -0
  118. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/auth/v1/social_verification_pb2.py +0 -0
  119. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/auth/v1/social_verification_pb2.pyi +0 -0
  120. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/auth/v1/subaccounts_connect.py +0 -0
  121. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/auth/v1/subaccounts_pb2.py +0 -0
  122. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/auth/v1/subaccounts_pb2.pyi +0 -0
  123. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/buf/__init__.py +0 -0
  124. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/buf/validate/__init__.py +0 -0
  125. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/buf/validate/validate_pb2.py +0 -0
  126. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/buf/validate/validate_pb2.pyi +0 -0
  127. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/chain/__init__.py +0 -0
  128. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/chain/analytics/__init__.py +0 -0
  129. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/chain/analytics/v1/__init__.py +0 -0
  130. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/chain/analytics/v1/analytics_read_connect.py +0 -0
  131. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/chain/analytics/v1/analytics_read_pb2.py +0 -0
  132. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/chain/analytics/v1/analytics_read_pb2.pyi +0 -0
  133. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/chain/deposit/__init__.py +0 -0
  134. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/chain/deposit/v1/__init__.py +0 -0
  135. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/chain/deposit/v1/deposit_connect.py +0 -0
  136. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/chain/deposit/v1/deposit_pb2.py +0 -0
  137. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/chain/deposit/v1/deposit_pb2.pyi +0 -0
  138. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/chain/guard/__init__.py +0 -0
  139. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/chain/guard/v1/__init__.py +0 -0
  140. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/chain/guard/v1/guard_signer_connect.py +0 -0
  141. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/chain/guard/v1/guard_signer_pb2.py +0 -0
  142. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/chain/guard/v1/guard_signer_pb2.pyi +0 -0
  143. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/chain/lifecycle/__init__.py +0 -0
  144. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/chain/lifecycle/v1/__init__.py +0 -0
  145. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/chain/lifecycle/v1/lifecycle_read_connect.py +0 -0
  146. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/chain/lifecycle/v1/lifecycle_read_pb2.py +0 -0
  147. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/chain/lifecycle/v1/lifecycle_read_pb2.pyi +0 -0
  148. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/chain/lifecycle/v1/types_pb2.py +0 -0
  149. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/chain/lifecycle/v1/types_pb2.pyi +0 -0
  150. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/chain/withdraw/__init__.py +0 -0
  151. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/chain/withdraw/v1/__init__.py +0 -0
  152. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/chain/withdraw/v1/auto_withdraw_connect.py +0 -0
  153. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/chain/withdraw/v1/auto_withdraw_pb2.py +0 -0
  154. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/chain/withdraw/v1/auto_withdraw_pb2.pyi +0 -0
  155. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/chain/withdraw/v1/withdraw_connect.py +0 -0
  156. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/chain/withdraw/v1/withdraw_pb2.py +0 -0
  157. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/chain/withdraw/v1/withdraw_pb2.pyi +0 -0
  158. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/chain/zipper/__init__.py +0 -0
  159. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/chain/zipper/v1/__init__.py +0 -0
  160. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/chain/zipper/v1/reason_pb2.py +0 -0
  161. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/chain/zipper/v1/reason_pb2.pyi +0 -0
  162. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/chain/zipper/v1/zipper_connect.py +0 -0
  163. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/chain/zipper/v1/zipper_pb2.py +0 -0
  164. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/chain/zipper/v1/zipper_pb2.pyi +0 -0
  165. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/checkpoints/__init__.py +0 -0
  166. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/checkpoints/v1/__init__.py +0 -0
  167. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/checkpoints/v1/checkpoints_connect.py +0 -0
  168. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/checkpoints/v1/checkpoints_pb2.py +0 -0
  169. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/checkpoints/v1/checkpoints_pb2.pyi +0 -0
  170. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/claims/__init__.py +0 -0
  171. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/claims/v1/__init__.py +0 -0
  172. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/claims/v1/claims_connect.py +0 -0
  173. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/claims/v1/claims_pb2.py +0 -0
  174. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/claims/v1/claims_pb2.pyi +0 -0
  175. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/collab/__init__.py +0 -0
  176. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/collab/v1/__init__.py +0 -0
  177. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/collab/v1/whiteboard_connect.py +0 -0
  178. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/collab/v1/whiteboard_pb2.py +0 -0
  179. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/collab/v1/whiteboard_pb2.pyi +0 -0
  180. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/fees/__init__.py +0 -0
  181. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/fees/v1/__init__.py +0 -0
  182. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/fees/v1/fees_connect.py +0 -0
  183. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/fees/v1/fees_pb2.py +0 -0
  184. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/fees/v1/fees_pb2.pyi +0 -0
  185. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/gnostic/__init__.py +0 -0
  186. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/gnostic/openapi/__init__.py +0 -0
  187. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/gnostic/openapi/v3/__init__.py +0 -0
  188. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/gnostic/openapi/v3/annotations_pb2.py +0 -0
  189. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/gnostic/openapi/v3/annotations_pb2.pyi +0 -0
  190. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/gnostic/openapi/v3/openapiv3_pb2.py +0 -0
  191. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/gnostic/openapi/v3/openapiv3_pb2.pyi +0 -0
  192. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/google/__init__.py +0 -0
  193. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/google/api/__init__.py +0 -0
  194. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/google/api/annotations_pb2.py +0 -0
  195. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/google/api/annotations_pb2.pyi +0 -0
  196. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/google/api/field_behavior_pb2.py +0 -0
  197. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/google/api/field_behavior_pb2.pyi +0 -0
  198. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/google/api/http_pb2.py +0 -0
  199. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/google/api/http_pb2.pyi +0 -0
  200. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/layout/__init__.py +0 -0
  201. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/layout/v1/__init__.py +0 -0
  202. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/layout/v1/layout_connect.py +0 -0
  203. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/layout/v1/layout_pb2.py +0 -0
  204. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/layout/v1/layout_pb2.pyi +0 -0
  205. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/ledger/__init__.py +0 -0
  206. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/ledger/read/__init__.py +0 -0
  207. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/ledger/read/v1/__init__.py +0 -0
  208. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/ledger/read/v1/ledger_read_connect.py +0 -0
  209. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/ledger/read/v1/ledger_read_pb2.py +0 -0
  210. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/ledger/read/v1/ledger_read_pb2.pyi +0 -0
  211. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/ledger/v1/__init__.py +0 -0
  212. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/ledger/v1/catalog_pb2.py +0 -0
  213. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/ledger/v1/catalog_pb2.pyi +0 -0
  214. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/marketdata/__init__.py +0 -0
  215. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/marketdata/v1/__init__.py +0 -0
  216. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/marketdata/v1/heatmap_connect.py +0 -0
  217. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/marketdata/v1/heatmap_pb2.py +0 -0
  218. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/marketdata/v1/heatmap_pb2.pyi +0 -0
  219. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/marketdata/v1/marketdata_connect.py +0 -0
  220. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/marketoverview/__init__.py +0 -0
  221. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/marketoverview/v1/__init__.py +0 -0
  222. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/marketoverview/v1/marketoverview_connect.py +0 -0
  223. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/marketoverview/v1/marketoverview_pb2.py +0 -0
  224. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/marketoverview/v1/marketoverview_pb2.pyi +0 -0
  225. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/orderbook/__init__.py +0 -0
  226. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/orderbook/v1/__init__.py +0 -0
  227. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/orderbook/v1/orderbook_connect.py +0 -0
  228. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/orderbook/v1/orderbook_pb2.py +0 -0
  229. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/orderbook/v1/orderbook_pb2.pyi +0 -0
  230. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/orders/__init__.py +0 -0
  231. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/orders/v1/__init__.py +0 -0
  232. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/orders/v1/orders_connect.py +0 -0
  233. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/orders/v1/orders_pb2.py +0 -0
  234. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/orders/v1/orders_pb2.pyi +0 -0
  235. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/orders/v1/orders_read_connect.py +0 -0
  236. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/orders/v1/orders_read_pb2.py +0 -0
  237. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/orders/v1/orders_read_pb2.pyi +0 -0
  238. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/polychart/__init__.py +0 -0
  239. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/polychart/events/__init__.py +0 -0
  240. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/polychart/events/v1/__init__.py +0 -0
  241. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/polychart/events/v1/polychart_events_pb2.py +0 -0
  242. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/polychart/events/v1/polychart_events_pb2.pyi +0 -0
  243. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/polychart/v1/__init__.py +0 -0
  244. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/polychart/v1/polychart_connect.py +0 -0
  245. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/polychart/v1/polychart_pb2.py +0 -0
  246. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/polychart/v1/polychart_pb2.pyi +0 -0
  247. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/polyester/__init__.py +0 -0
  248. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/polyester/api/__init__.py +0 -0
  249. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/polyester/api/options_pb2.py +0 -0
  250. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/polyester/api/options_pb2.pyi +0 -0
  251. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/polyester/api/validation/__init__.py +0 -0
  252. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/polyester/api/validation/v1/__init__.py +0 -0
  253. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/polyester/api/validation/v1/predefined_string_rules_pb2.py +0 -0
  254. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/polyester/api/validation/v1/predefined_string_rules_pb2.pyi +0 -0
  255. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/polyester/ratelimit/__init__.py +0 -0
  256. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/polyester/ratelimit/v1/__init__.py +0 -0
  257. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/polyester/ratelimit/v1/types_pb2.py +0 -0
  258. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/polyester/ratelimit/v1/types_pb2.pyi +0 -0
  259. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/polyester/type/__init__.py +0 -0
  260. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/polyester/type/v1/__init__.py +0 -0
  261. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/polyester/type/v1/u128_pb2.py +0 -0
  262. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/polyester/type/v1/u128_pb2.pyi +0 -0
  263. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/privatews/__init__.py +0 -0
  264. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/privatews/v1/__init__.py +0 -0
  265. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/privatews/v1/private_ws_pb2.py +0 -0
  266. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/privatews/v1/private_ws_pb2.pyi +0 -0
  267. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/ratelimit/__init__.py +0 -0
  268. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/ratelimit/v1/__init__.py +0 -0
  269. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/ratelimit/v1/ratelimit_connect.py +0 -0
  270. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/ratelimit/v1/ratelimit_pb2.py +0 -0
  271. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/ratelimit/v1/ratelimit_pb2.pyi +0 -0
  272. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/rewards/__init__.py +0 -0
  273. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/rewards/v1/__init__.py +0 -0
  274. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/rewards/v1/rewards_connect.py +0 -0
  275. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/rewards/v1/rewards_pb2.py +0 -0
  276. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/rewards/v1/rewards_pb2.pyi +0 -0
  277. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/swap/__init__.py +0 -0
  278. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/swap/quickswap/__init__.py +0 -0
  279. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/swap/quickswap/v1/__init__.py +0 -0
  280. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/swap/quickswap/v1/quickswap_broker_connect.py +0 -0
  281. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/swap/quickswap/v1/quickswap_broker_pb2.py +0 -0
  282. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/swap/quickswap/v1/quickswap_broker_pb2.pyi +0 -0
  283. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/swap/quickswap/v1/quickswap_connect.py +0 -0
  284. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/swap/quickswap/v1/quickswap_pb2.py +0 -0
  285. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/swap/quickswap/v1/quickswap_pb2.pyi +0 -0
  286. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/swap/v1/__init__.py +0 -0
  287. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/swap/v1/swap_connect.py +0 -0
  288. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/swap/v1/swap_pb2.py +0 -0
  289. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/swap/v1/swap_pb2.pyi +0 -0
  290. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/tradews/__init__.py +0 -0
  291. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/tradews/v1/__init__.py +0 -0
  292. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/tradews/v1/trade_ws_pb2.py +0 -0
  293. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/tradews/v1/trade_ws_pb2.pyi +0 -0
  294. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/transfer/__init__.py +0 -0
  295. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/transfer/v1/__init__.py +0 -0
  296. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/transfer/v1/internal_transfer_connect.py +0 -0
  297. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/transfer/v1/internal_transfer_pb2.py +0 -0
  298. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/transfer/v1/internal_transfer_pb2.pyi +0 -0
  299. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/triggers/__init__.py +0 -0
  300. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/triggers/v1/__init__.py +0 -0
  301. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/triggers/v1/triggers_connect.py +0 -0
  302. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/triggers/v1/triggers_pb2.py +0 -0
  303. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/triggers/v1/triggers_pb2.pyi +0 -0
  304. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/vip/__init__.py +0 -0
  305. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/vip/v1/__init__.py +0 -0
  306. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/vip/v1/vip_connect.py +0 -0
  307. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/vip/v1/vip_pb2.py +0 -0
  308. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/gen/vip/v1/vip_pb2.pyi +0 -0
  309. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/market_overview/__init__.py +0 -0
  310. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/market_overview/subscription.py +0 -0
  311. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/models/address_book.py +0 -0
  312. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/models/auth.py +0 -0
  313. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/models/fees.py +0 -0
  314. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/models/guard_signer.py +0 -0
  315. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/models/market.py +0 -0
  316. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/models/order_key.py +0 -0
  317. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/models/policies.py +0 -0
  318. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/models/private_orders.py +0 -0
  319. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/models/ratelimit.py +0 -0
  320. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/models/realtime.py +0 -0
  321. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/models/sub_accounts.py +0 -0
  322. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/models/trading_rate_limits.py +0 -0
  323. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/models/zipper.py +0 -0
  324. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/orderbook/__init__.py +0 -0
  325. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/orderbook/local_book.py +0 -0
  326. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/orderbook/subscription.py +0 -0
  327. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/patch.py +0 -0
  328. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/py.typed +0 -0
  329. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/realtime/__init__.py +0 -0
  330. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/realtime/private_orders.py +0 -0
  331. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/realtime/protocol.py +0 -0
  332. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/realtime/snapshot_then_stream.py +0 -0
  333. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/services/__init__.py +0 -0
  334. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/services/_base.py +0 -0
  335. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/services/_generated.py +0 -0
  336. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/services/_scope.py +0 -0
  337. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/services/_symbols.py +0 -0
  338. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/services/_validation.py +0 -0
  339. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/services/address_book.py +0 -0
  340. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/services/api_keys.py +0 -0
  341. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/services/auth.py +0 -0
  342. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/services/balances.py +0 -0
  343. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/services/chain_analytics.py +0 -0
  344. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/services/deposit.py +0 -0
  345. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/services/fees.py +0 -0
  346. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/services/guard_signer.py +0 -0
  347. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/services/heatmap.py +0 -0
  348. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/services/internal_transfers.py +0 -0
  349. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/services/layout.py +0 -0
  350. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/services/lifecycle.py +0 -0
  351. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/services/orderbook.py +0 -0
  352. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/services/orders.py +0 -0
  353. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/services/policies.py +0 -0
  354. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/services/polychart.py +0 -0
  355. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/services/profile.py +0 -0
  356. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/services/rate_limits.py +0 -0
  357. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/services/social_verification.py +0 -0
  358. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/services/sub_accounts.py +0 -0
  359. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/services/vip.py +0 -0
  360. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/services/whiteboard.py +0 -0
  361. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/services/withdraw.py +0 -0
  362. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/services/zipper.py +0 -0
  363. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/sync_subscribe.py +0 -0
  364. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/types/__init__.py +0 -0
  365. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/types/money.py +0 -0
  366. {polyester_sdk-0.2.0 → polyester_sdk-0.3.0}/src/polyester/user_agent.py +0 -0
@@ -1,5 +1,116 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.3.0
4
+
5
+ Git tag: `v0.3.0`. Released 2026-10-31.
6
+
7
+ **What a trading bot gains.** `trades.subscribe()`, `transfers.subscribe()`,
8
+ `triggers.subscribe_events()` and `market_data.subscribe_trades()` now yield
9
+ every event; before, the rest of each batch was dropped or garbled. Spot
10
+ config and the catalog expose each pair's order limits, including the new cap
11
+ on one market order's notional, so a bot can size orders before it sends
12
+ them. Rejections are easier to act on: a duplicate client order ID names the
13
+ order that already holds it, a clock-skew rejection is the retryable
14
+ `PolyesterTimestampSkewError`, and a bad key or signature is a non-retryable
15
+ `PolyesterAuthError` instead of a retryable server error. Replacement orders
16
+ report the quantity they inherited, and slippage caps and trigger inputs are
17
+ checked before sending the way the API checks them. The SDK now requires
18
+ `connectrpc` 0.10.
19
+
20
+ This release works on devnet today, and on testnet after testnet's next
21
+ upgrade, which brings the new private order stream.
22
+
23
+ **Breaking changes**
24
+ - `triggers.modify()` no longer takes `limit_price`.
25
+ - `max_slippage_bps` is at most 9999 for a market order that sells, a sell
26
+ stop-loss or take-profit market child, every trailing stop and
27
+ `triggers.modify()`.
28
+ - `trigger_price_source="mark"` raises `PolyesterValidationError`.
29
+ - A buy trailing stop's `limit_price` must be at least its `activation_price`.
30
+ - API-key rejections from the API gateway raise the retryable
31
+ `PolyesterTimestampSkewError` or the non-retryable `PolyesterAuthError`
32
+ instead of a retryable `PolyesterServerError`.
33
+
34
+ ### Breaking
35
+ - `triggers.modify()` no longer takes `limit_price`: the API rejects any
36
+ change to a child's limit price. Cancel the trigger and create a new one.
37
+ - Slippage caps match the API: `max_slippage_bps` is 1–9999 for a market
38
+ order that sells, a sell stop-loss or take-profit market child, every
39
+ trailing stop (standalone or attached, either side) and `triggers.modify()`.
40
+ Buy market orders, buy stop-loss or take-profit market children and TWAP
41
+ slices still accept 10000.
42
+ - `trigger_price_source="mark"` raises `PolyesterValidationError`: spot
43
+ markets have no mark price. Use `"last"` or `"index"`.
44
+ - A buy trailing stop's `limit_price` must be at least its `activation_price`.
45
+ - API-key rejections from the API gateway are classified by their code.
46
+ `TIMESTAMP_SKEW` raises the new retryable `PolyesterTimestampSkewError`;
47
+ retrying signs the request again with a fresh timestamp, and the request
48
+ never reached a service, so `mutation_outcome_unknown()` is false. Other
49
+ codes such as `SIGNATURE_INVALID`, `KEY_DISABLED` or `IP_NOT_ALLOWED`
50
+ raise a non-retryable `PolyesterAuthError` carrying the code. Earlier
51
+ versions reported all of them as a retryable `PolyesterServerError`
52
+ without details.
53
+
54
+ ### Added
55
+ - Spot config order limits: `SpotConfig.pair_order_limits` and
56
+ `client.catalogs.order_limits_for_symbol(...)` / `order_limits_for_symbol_id(...)`
57
+ return `PairOrderLimits` with `max_limit_qty_base`, `max_market_qty_base`
58
+ and `max_order_notional_quote` (decimal strings, `None` when the pair has
59
+ no maximum) and `max_open_orders_per_pair`. `SpotConfig.max_open_orders_total`
60
+ and `client.catalogs.max_open_orders_total` give the cross-pair limit. The
61
+ open-order counts are venue defaults; an account may have a lower limit.
62
+ - `PairOrderLimits.max_market_notional_quote`: the largest notional of one
63
+ market order in quote units, valued at a buy's protection price or a sell's
64
+ reference price. A larger market order is rejected with `MAX_NOTIONAL`.
65
+ `None` means the pair has no cap. Available on `SpotConfig.pair_order_limits`
66
+ and `client.catalogs.order_limits_for_symbol(...)`.
67
+ - `Order.inherited_cum_qty`: the filled quantity a replacement order carries
68
+ over from its predecessors.
69
+ - `action_taken` on batch replace admission and status items: `"replaced"`
70
+ when a successor was admitted, `"amended"` for a cancel-only outcome.
71
+ - `existing_order_id` on a `CONFLICT_DUPLICATE_CLIENT_ORDER_ID` rejection,
72
+ when the server knows the order: `PolyesterApiError.existing_order_id` on a
73
+ single create and `BatchCreateResultItem.existing_order_id` on a batch
74
+ create item.
75
+ - `triggers.modify()` and `triggers.resume()` no longer need `symbol` or
76
+ `symbol_id`; without one they target the trigger's own market. An API key
77
+ limited to specific markets must still pass it.
78
+ - `LedgerTransfer.transfer_id`, the unsigned 128-bit decimal shared by both
79
+ legs of a transfer.
80
+ - `VIPStatus.settled_volume_quality` and `average_aop_quality`
81
+ (`VIPMetricQuality`: `status` of `complete`, `price_unavailable` or
82
+ `incomplete_history`, plus `incomplete_hours`).
83
+ - `TriggerTrailingDetails.trigger_price`, the current trailing threshold.
84
+ - `AsyncRealtimeClient.subscribe_proto_batch(...)` for channels whose
85
+ publications batch several events.
86
+ - A Connect `deadline_exceeded` raises `PolyesterTimeoutError`, a subclass of
87
+ `PolyesterTransportError`, so existing handlers still catch it.
88
+ - HTTP 501 and Connect `unimplemented` raise `PolyesterNotImplementedError`,
89
+ a `PolyesterApiError` subclass that `PolyesterRouteNotFoundError` now
90
+ extends.
91
+
92
+ ### Fixed
93
+ - `trades.subscribe()`, `transfers.subscribe()`, `triggers.subscribe_events()`
94
+ and `market_data.subscribe_trades()` decode the batched publications these
95
+ channels now send and yield each event on its own, in order. Earlier
96
+ versions decoded a batch as one event, which dropped or garbled the rest of
97
+ it. An event that fails to decode is reported through `set_on_error(...)`
98
+ without dropping the rest of its batch.
99
+ - `market_overview.create_subscription(symbols=[...])` keeps only the
100
+ requested markets in live and buffered updates; earlier versions filtered
101
+ the initial snapshot only.
102
+ - `trades.list(after_match_id=...)` rejects a value beyond the uint64 range
103
+ before sending.
104
+
105
+ ### Changed
106
+ - `connectrpc` minimum raised from 0.9.0 to 0.10.0. 0.9.0 has no
107
+ `connectrpc.codec`, so the SDK failed to import with it.
108
+ - The package description now reads "Python SDK for the Polyester API with
109
+ generated protobuf types and ConnectRPC clients."
110
+
111
+ ### Internal
112
+ - `sdk-capabilities.json` no longer carries `publicDescriptorSha256` or `generatedAt`, so a proto publication that only changes `src/polyester/gen/` and `manifest.json` no longer makes it stale; `manifest.json` stays the single source of the descriptor hash.
113
+
3
114
  ## 0.2.0
4
115
 
5
116
  Git tag: `v0.2.0`.
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: polyester-sdk
3
- Version: 0.2.0
4
- Summary: Official Python SDK for Polyester APIs.
3
+ Version: 0.3.0
4
+ Summary: Python SDK for the Polyester API with generated protobuf types and ConnectRPC clients.
5
5
  Project-URL: Homepage, https://github.com/Fabric-Labs/polyester-sdk-python
6
6
  Project-URL: Documentation, https://polyester.com/docs/sdk/python/get-started/overview
7
7
  Project-URL: Repository, https://github.com/Fabric-Labs/polyester-sdk-python
@@ -19,7 +19,7 @@ Classifier: Programming Language :: Python :: 3.12
19
19
  Classifier: Typing :: Typed
20
20
  Requires-Python: >=3.11
21
21
  Requires-Dist: base58>=2.1.1
22
- Requires-Dist: connectrpc<0.11,>=0.9.0
22
+ Requires-Dist: connectrpc<0.11,>=0.10.0
23
23
  Requires-Dist: cryptography>=42
24
24
  Requires-Dist: eth-abi>=5.1
25
25
  Requires-Dist: eth-account>=0.13
@@ -28,6 +28,7 @@ Requires-Dist: eth-utils>=5.0
28
28
  Requires-Dist: httpx>=0.27
29
29
  Requires-Dist: msgspec>=0.18
30
30
  Requires-Dist: protobuf>=7.35.0
31
+ Requires-Dist: pyqwest>=0.5.1
31
32
  Requires-Dist: websockets>=15
32
33
  Provides-Extra: chain
33
34
  Provides-Extra: dev
@@ -48,7 +49,7 @@ Description-Content-Type: text/markdown
48
49
  Official Python SDK for Polyester APIs, built for trading bots, backend jobs,
49
50
  research notebooks, and automation.
50
51
 
51
- **Status:** `0.2.0`, pre-1.0: a minor release may include breaking changes (see
52
+ **Status:** `0.3.0`, pre-1.0: a minor release may include breaking changes (see
52
53
  [CHANGELOG.md](CHANGELOG.md)). Proprietary license (not open source).
53
54
  API-key only; no browser login or JWT flows.
54
55
 
@@ -115,7 +116,7 @@ API-key policy before retrying.
115
116
  PyPI: https://pypi.org/project/polyester-sdk/
116
117
 
117
118
  ```bash
118
- pip install "polyester-sdk==0.2.0"
119
+ pip install "polyester-sdk==0.3.0"
119
120
  ```
120
121
 
121
122
  Realtime (Centrifugo) and on-chain Funding helpers are included by default.
@@ -294,7 +295,10 @@ first attempt admitted the order. After an unknown outcome, look up that id
294
295
  (`get` / `list_open`) before creating again. A second create with the same id
295
296
  is rejected (`CONFLICT_DUPLICATE_CLIENT_ORDER_ID`) even when the payload
296
297
  matches. Only create again with that id if reconciliation shows the first
297
- attempt did not admit.
298
+ attempt did not admit. When the server knows the order that already holds the
299
+ id, the rejection carries it: `PolyesterApiError.existing_order_id` on a
300
+ single create, `BatchCreateResultItem.existing_order_id` on a batch create
301
+ item (empty otherwise).
298
302
  Client order ids accept 1 to 36 ASCII letters, digits, `.`, `_`, `:`, `/`, and
299
303
  `-`. Batch create, cancel, and replace accept at most 20 items. `batch_create`
300
304
  always sends `request_id` (caller value or a generated `batch-create-*` key);
@@ -362,9 +366,10 @@ prerequisite for order submission.
362
366
 
363
367
  Market orders are IOC and enforce a slippage-derived execution boundary. See
364
368
  [Market Order Price Protection](https://polyester.com/docs/developer-docs/shared-concepts/market-order-price-protection)
365
- before overriding pair defaults. Set at most one of `max_slippage_bps`
366
- (1–10000) or `max_slippage_ticks`. Omit both to keep the pair default. The
367
- fields are rejected on limit orders and if both are supplied.
369
+ before overriding pair defaults. Set at most one of `max_slippage_bps` or
370
+ `max_slippage_ticks`. `max_slippage_bps` is 1–10000 for a buy and 1–9999 for a
371
+ sell. Omit both to keep the pair default. The fields are rejected on limit
372
+ orders and if both are supplied.
368
373
 
369
374
  ```python
370
375
  result = await client.orders.create(
@@ -386,6 +391,23 @@ Do **not** pass floats. `ticks` on `Price` means Polyester protocol price units
386
391
  (fixed 1e9), not market tick-size alignment (server validates tick size).
387
392
  Catalog hydration resolves `symbol` → `symbol_id` and quantity scales for
388
393
  encoding; pair admission (tick/step/min qty/notional) stays on the API.
394
+
395
+ Order limits are read from the spot config. `client.catalogs.order_limits_for_symbol("BTC-USDT")`
396
+ (or `get_spot_config().pair_order_limits`) returns `PairOrderLimits` with
397
+ decimal strings `max_limit_qty_base`, `max_market_qty_base` and
398
+ `max_order_notional_quote` (`None` when the pair has no maximum), and
399
+ `max_open_orders_per_pair`. `max_market_notional_quote` caps the notional of
400
+ one market order, valued at a buy's protection price or a sell's reference
401
+ price (`None` means no cap). `client.catalogs.max_open_orders_total` (or
402
+ `SpotConfig.max_open_orders_total`) is the cross-pair resting-order limit.
403
+ The open-order counts are the venue defaults for a typical account, `0` when
404
+ unpublished; an account may have a lower limit of its own.
405
+
406
+ ```python
407
+ limits = client.catalogs.order_limits_for_symbol("BTC-USDT")
408
+ if limits is not None and limits.max_limit_qty_base is not None:
409
+ print("largest limit order:", limits.max_limit_qty_base, "BTC")
410
+ ```
389
411
  `orders.preview_order(...)` remains the authority for balances, reservations,
390
412
  liquidity, and other stateful rules.
391
413
 
@@ -417,7 +439,14 @@ The predecessor ID can be stale after admission; reconcile the successor IDs
417
439
  and per-item phases by polling `get_batch_replace_status`. Use
418
440
  `is_batch_replace_settled(status)` only to determine that all items have moved
419
441
  to `working`, `rejected`, or `terminal`, not as a finality signal. Retry an
420
- ambiguous batch request with the same `request_id`.
442
+ ambiguous batch request with the same `request_id`. Each admission and status
443
+ item carries `action_taken`: `"replaced"` when a successor order was admitted,
444
+ `"amended"` for a cancel-only outcome with no successor (keep tracking
445
+ `old_order_id` until it is terminal).
446
+
447
+ A replacement order's `cum_qty` includes the quantity filled by its
448
+ predecessors; `Order.inherited_cum_qty` is that carried-over part (zero for an
449
+ order never replaced).
421
450
 
422
451
  `cancel_all(...)` requests cancellation of every matching order. The result
423
452
  lists up to 200 of them, oldest first, in `cancelled_orders` (each with
@@ -457,7 +486,10 @@ Public catalog reads need no credentials. Authenticated VIP status, effective sp
457
486
  account trading limits require an API key. `GetVIPStatus` has no subaccount selector: JWT and
458
487
  API-key callers receive the owning root group only. USD amounts and fee percents are decimal
459
488
  strings. Optional qualification metrics, timestamps, and next-tier thresholds stay omitted
460
- when unset. `policy_class` uses full protobuf enum names
489
+ when unset. `VIPStatus.settled_volume_quality` and `average_aop_quality` say how complete
490
+ each 30-day metric is: `status` is `complete`, `price_unavailable` (the metric is a lower
491
+ bound) or `incomplete_history`, with `incomplete_hours` out of 720. Both are `None` when the
492
+ assignment carries no qualification evidence. `policy_class` uses full protobuf enum names
461
493
  (`TRADING_RATE_LIMIT_CLASS_PLACE` / `_CANCEL`). Rate-limit rules expose
462
494
  `vip_tier` (not `tier`).
463
495
 
@@ -526,8 +558,9 @@ fields remain unset. `Order` also exposes `post_only`. Create/modify accept the
526
558
  same policy shape as a dict or `AttachedRisk`.
527
559
 
528
560
  A stop-loss or take-profit with `order_type="market"` takes an optional
529
- slippage cap, `max_slippage_ticks` (Q9 ticks) or `max_slippage_bps`, at most
530
- one; without one the pair's default market slippage applies. A limit child
561
+ slippage cap, `max_slippage_ticks` (Q9 ticks) or `max_slippage_bps` (1–10000
562
+ for a buy, 1–9999 for a sell), at most one; without one the pair's default
563
+ market slippage applies. A limit child
531
564
  takes no cap (its limit price bounds it). Either side may use either child.
532
565
  Trigger reads show the cap as `max_slippage` (ticks, as a price delta) or
533
566
  `max_slippage_bps`; both unset means the pair default.
@@ -548,7 +581,9 @@ A standalone trailing stop may sell or buy. A buy trailing stop tracks the
548
581
  lowest price and fires when the price rises the trailing distance from it.
549
582
  It requires `limit_price`, its maximum price: the most its child pays per
550
583
  unit (a 9-decimal string or `Decimal`, or `Price.from_ticks` for ticks),
551
- fixed at create. A sell trailing stop takes no `limit_price`.
584
+ fixed at create, and at least `activation_price` when that is set. A sell
585
+ trailing stop takes no `limit_price`. Every trailing stop, standalone or
586
+ attached to an order, takes `max_slippage_bps` from 1 to 9999.
552
587
 
553
588
  ```python
554
589
  await client.triggers.create(
@@ -564,15 +599,16 @@ await client.triggers.create(
564
599
  Trigger reads show a buy trailing stop with `side="buy"`,
565
600
  `order_type="limit"`, `time_in_force="ioc"` and its maximum price as
566
601
  `limit_price`; `details.trailing.trough_price` is the lowest price tracked so
567
- far (`peak_price` for a sell).
602
+ far (`peak_price` for a sell), and `details.trailing.trigger_price` is the
603
+ current threshold.
568
604
 
569
605
  Stop-loss, take-profit and trailing-stop triggers, standalone or attached to
570
606
  an order, watch the last trade price unless `trigger_price_source` names
571
- another: `"last"`, `"index"` or `"mark"`. Reads report the same label
607
+ another: `"last"` or `"index"`. Spot markets have no mark price, so `"mark"`
608
+ raises `PolyesterValidationError`. Reads report the same label
572
609
  (`Trigger.trigger_price_source`, `RiskLeg.trigger_price_source`,
573
610
  `TrailingStop.trigger_price_source`), so a leg read from an order can be
574
- passed back to create or modify unchanged. The API rejects a source the pair
575
- does not support.
611
+ passed back to create unchanged.
576
612
 
577
613
  ```python
578
614
  await client.triggers.create(
@@ -588,9 +624,20 @@ await client.triggers.create(
588
624
  When modifying a trigger, omit `activation_price` / `max_slippage_ticks` /
589
625
  `max_slippage_bps` to preserve the current values. Send an explicit zero
590
626
  (`Price.from_ticks(0)` or `0`) to clear an existing activation price or
591
- maximum-slippage cap. Create/modify `max_slippage_bps` must be 1–10000;
592
- modify still accepts `0` to clear. Trailing distance in bps uses the same
593
- 1–10000 range; trigger modify accepts `0` to clear.
627
+ maximum-slippage cap. Modify `max_slippage_bps` is 1–9999 (the patch does not
628
+ say what it modifies, so it takes the cap shared by trailing stops and
629
+ sells); `0` clears it. Trailing distance in bps is 1–10000; trigger modify
630
+ accepts `0` to clear. A child's limit price is fixed at create, so `modify`
631
+ takes no `limit_price`: cancel the trigger and create a new one instead.
632
+
633
+ `triggers.modify(...)` and `triggers.resume(...)` do not need a symbol: without
634
+ `symbol` / `symbol_id` they target the trigger's own market. When given, it
635
+ must be that market, and an API key limited to specific markets must give it.
636
+
637
+ ```python
638
+ await client.triggers.modify(trigger_id=trigger_id, trigger_price="82500")
639
+ await client.triggers.resume(trigger_id=trigger_id)
640
+ ```
594
641
 
595
642
  `orders.list_open(trigger_id=...)` / `orders.list_history(trigger_id=...)`
596
643
  return only child orders created by that trigger (TWAP/ladder slices).
@@ -731,7 +778,8 @@ column response oldest-first. Sort explicitly by `ts_sec` before feeding a
731
778
  chronological indicator.
732
779
 
733
780
  Merged market overview stream (snapshot + live updates). The create call waits
734
- for the WebSocket handshake and initial snapshot:
781
+ for the WebSocket handshake and initial snapshot. With `symbols=[...]`, the
782
+ snapshot and every live or buffered update keep only those markets:
735
783
 
736
784
  ```python
737
785
  sub = await client.market_overview.create_subscription(
@@ -750,6 +798,15 @@ async with sub:
750
798
  channels; live orders use the private WebSocket (see Live orders below).
751
799
  ConnectRPC's optional JSON wire mode does not apply to realtime.
752
800
  Inbound WebSocket messages are capped at 4 MiB.
801
+ - Market trade, user fill (`trades.subscribe`), ledger transfer
802
+ (`transfers.subscribe`) and trigger event (`triggers.subscribe_events`)
803
+ channels publish batches. Each event of a batch is yielded on its own, in
804
+ order. An event that fails to decode is reported through `set_on_error(...)`
805
+ without dropping the rest of its batch. Both legs of a ledger transfer share
806
+ `LedgerTransfer.transfer_id`; with `account_code` it identifies a leg, and
807
+ a repeated leg replaces the earlier copy. A trigger event is identified by
808
+ `(trigger_id, event_type, child_seq, ts_ns)`. For your own batched channel,
809
+ use `realtime.subscribe_proto_batch(channel, decode_batch=...)`.
753
810
  - Subscription queues are bounded. If the consumer falls behind, the SDK raises
754
811
  `PolyesterRealtimeOverflowError` and faults the subscription; it does **not**
755
812
  silently drop updates.
@@ -919,8 +976,9 @@ account; those tests may cancel every open order in their selected symbol.
919
976
 
920
977
  CI requires every public Connect RPC in gen to be wrapped or listed in
921
978
  `sdk-coverage.toml`. Contributors: `python scripts/check_sdk_coverage.py`.
922
- CI refreshes `sdk-capabilities.json` and the README capability table on the
923
- same branch when they drift (same-repo PRs / pushes to `main`).
979
+ CI fails when `sdk-capabilities.json` or the README capability table is stale;
980
+ refresh both with `python scripts/check_sdk_coverage.py --write-capabilities`
981
+ and commit the result.
924
982
 
925
983
  **Pre-release checklist (realtime changes):**
926
984
 
@@ -971,4 +1029,18 @@ Connect RPC over HTTP via generated clients in `src/polyester/gen/`. Wire format
971
1029
  defaults to **binary protobuf**; pass `wire_format="json"` for debugging.
972
1030
 
973
1031
  Some RPCs may return HTTP 404 on devnet. The SDK raises `PolyesterRouteNotFoundError`
974
- with a clearer message than `[unimplemented]: Not Found`.
1032
+ with a clearer message than `[unimplemented]: Not Found`. HTTP 501 and Connect
1033
+ `unimplemented` raise `PolyesterNotImplementedError`, the parent class of
1034
+ `PolyesterRouteNotFoundError`; neither is retryable.
1035
+
1036
+ API-key rejections from the gateway carry a code. A request whose signed
1037
+ timestamp falls outside the server's skew window raises
1038
+ `PolyesterTimestampSkewError` (`code == "TIMESTAMP_SKEW"`). It is
1039
+ retryable, and the gateway rejected it before any service saw it: a retry
1040
+ signs again with a fresh timestamp. If it persists, fix the local clock. For
1041
+ large bursts, bound concurrency so requests do not wait locally past the skew
1042
+ window. Other gateway codes (`SIGNATURE_INVALID`, `KEY_DISABLED`,
1043
+ `IP_NOT_ALLOWED`, ...) raise a non-retryable `PolyesterAuthError` whose
1044
+ message is the code. A request whose deadline expires raises `PolyesterTimeoutError`, a
1045
+ `PolyesterTransportError`: retryable, but a mutation may still have been
1046
+ applied, so reconcile first (`mutation_outcome_unknown(error)` is true).
@@ -3,7 +3,7 @@
3
3
  Official Python SDK for Polyester APIs, built for trading bots, backend jobs,
4
4
  research notebooks, and automation.
5
5
 
6
- **Status:** `0.2.0`, pre-1.0: a minor release may include breaking changes (see
6
+ **Status:** `0.3.0`, pre-1.0: a minor release may include breaking changes (see
7
7
  [CHANGELOG.md](CHANGELOG.md)). Proprietary license (not open source).
8
8
  API-key only; no browser login or JWT flows.
9
9
 
@@ -70,7 +70,7 @@ API-key policy before retrying.
70
70
  PyPI: https://pypi.org/project/polyester-sdk/
71
71
 
72
72
  ```bash
73
- pip install "polyester-sdk==0.2.0"
73
+ pip install "polyester-sdk==0.3.0"
74
74
  ```
75
75
 
76
76
  Realtime (Centrifugo) and on-chain Funding helpers are included by default.
@@ -249,7 +249,10 @@ first attempt admitted the order. After an unknown outcome, look up that id
249
249
  (`get` / `list_open`) before creating again. A second create with the same id
250
250
  is rejected (`CONFLICT_DUPLICATE_CLIENT_ORDER_ID`) even when the payload
251
251
  matches. Only create again with that id if reconciliation shows the first
252
- attempt did not admit.
252
+ attempt did not admit. When the server knows the order that already holds the
253
+ id, the rejection carries it: `PolyesterApiError.existing_order_id` on a
254
+ single create, `BatchCreateResultItem.existing_order_id` on a batch create
255
+ item (empty otherwise).
253
256
  Client order ids accept 1 to 36 ASCII letters, digits, `.`, `_`, `:`, `/`, and
254
257
  `-`. Batch create, cancel, and replace accept at most 20 items. `batch_create`
255
258
  always sends `request_id` (caller value or a generated `batch-create-*` key);
@@ -317,9 +320,10 @@ prerequisite for order submission.
317
320
 
318
321
  Market orders are IOC and enforce a slippage-derived execution boundary. See
319
322
  [Market Order Price Protection](https://polyester.com/docs/developer-docs/shared-concepts/market-order-price-protection)
320
- before overriding pair defaults. Set at most one of `max_slippage_bps`
321
- (1–10000) or `max_slippage_ticks`. Omit both to keep the pair default. The
322
- fields are rejected on limit orders and if both are supplied.
323
+ before overriding pair defaults. Set at most one of `max_slippage_bps` or
324
+ `max_slippage_ticks`. `max_slippage_bps` is 1–10000 for a buy and 1–9999 for a
325
+ sell. Omit both to keep the pair default. The fields are rejected on limit
326
+ orders and if both are supplied.
323
327
 
324
328
  ```python
325
329
  result = await client.orders.create(
@@ -341,6 +345,23 @@ Do **not** pass floats. `ticks` on `Price` means Polyester protocol price units
341
345
  (fixed 1e9), not market tick-size alignment (server validates tick size).
342
346
  Catalog hydration resolves `symbol` → `symbol_id` and quantity scales for
343
347
  encoding; pair admission (tick/step/min qty/notional) stays on the API.
348
+
349
+ Order limits are read from the spot config. `client.catalogs.order_limits_for_symbol("BTC-USDT")`
350
+ (or `get_spot_config().pair_order_limits`) returns `PairOrderLimits` with
351
+ decimal strings `max_limit_qty_base`, `max_market_qty_base` and
352
+ `max_order_notional_quote` (`None` when the pair has no maximum), and
353
+ `max_open_orders_per_pair`. `max_market_notional_quote` caps the notional of
354
+ one market order, valued at a buy's protection price or a sell's reference
355
+ price (`None` means no cap). `client.catalogs.max_open_orders_total` (or
356
+ `SpotConfig.max_open_orders_total`) is the cross-pair resting-order limit.
357
+ The open-order counts are the venue defaults for a typical account, `0` when
358
+ unpublished; an account may have a lower limit of its own.
359
+
360
+ ```python
361
+ limits = client.catalogs.order_limits_for_symbol("BTC-USDT")
362
+ if limits is not None and limits.max_limit_qty_base is not None:
363
+ print("largest limit order:", limits.max_limit_qty_base, "BTC")
364
+ ```
344
365
  `orders.preview_order(...)` remains the authority for balances, reservations,
345
366
  liquidity, and other stateful rules.
346
367
 
@@ -372,7 +393,14 @@ The predecessor ID can be stale after admission; reconcile the successor IDs
372
393
  and per-item phases by polling `get_batch_replace_status`. Use
373
394
  `is_batch_replace_settled(status)` only to determine that all items have moved
374
395
  to `working`, `rejected`, or `terminal`, not as a finality signal. Retry an
375
- ambiguous batch request with the same `request_id`.
396
+ ambiguous batch request with the same `request_id`. Each admission and status
397
+ item carries `action_taken`: `"replaced"` when a successor order was admitted,
398
+ `"amended"` for a cancel-only outcome with no successor (keep tracking
399
+ `old_order_id` until it is terminal).
400
+
401
+ A replacement order's `cum_qty` includes the quantity filled by its
402
+ predecessors; `Order.inherited_cum_qty` is that carried-over part (zero for an
403
+ order never replaced).
376
404
 
377
405
  `cancel_all(...)` requests cancellation of every matching order. The result
378
406
  lists up to 200 of them, oldest first, in `cancelled_orders` (each with
@@ -412,7 +440,10 @@ Public catalog reads need no credentials. Authenticated VIP status, effective sp
412
440
  account trading limits require an API key. `GetVIPStatus` has no subaccount selector: JWT and
413
441
  API-key callers receive the owning root group only. USD amounts and fee percents are decimal
414
442
  strings. Optional qualification metrics, timestamps, and next-tier thresholds stay omitted
415
- when unset. `policy_class` uses full protobuf enum names
443
+ when unset. `VIPStatus.settled_volume_quality` and `average_aop_quality` say how complete
444
+ each 30-day metric is: `status` is `complete`, `price_unavailable` (the metric is a lower
445
+ bound) or `incomplete_history`, with `incomplete_hours` out of 720. Both are `None` when the
446
+ assignment carries no qualification evidence. `policy_class` uses full protobuf enum names
416
447
  (`TRADING_RATE_LIMIT_CLASS_PLACE` / `_CANCEL`). Rate-limit rules expose
417
448
  `vip_tier` (not `tier`).
418
449
 
@@ -481,8 +512,9 @@ fields remain unset. `Order` also exposes `post_only`. Create/modify accept the
481
512
  same policy shape as a dict or `AttachedRisk`.
482
513
 
483
514
  A stop-loss or take-profit with `order_type="market"` takes an optional
484
- slippage cap, `max_slippage_ticks` (Q9 ticks) or `max_slippage_bps`, at most
485
- one; without one the pair's default market slippage applies. A limit child
515
+ slippage cap, `max_slippage_ticks` (Q9 ticks) or `max_slippage_bps` (1–10000
516
+ for a buy, 1–9999 for a sell), at most one; without one the pair's default
517
+ market slippage applies. A limit child
486
518
  takes no cap (its limit price bounds it). Either side may use either child.
487
519
  Trigger reads show the cap as `max_slippage` (ticks, as a price delta) or
488
520
  `max_slippage_bps`; both unset means the pair default.
@@ -503,7 +535,9 @@ A standalone trailing stop may sell or buy. A buy trailing stop tracks the
503
535
  lowest price and fires when the price rises the trailing distance from it.
504
536
  It requires `limit_price`, its maximum price: the most its child pays per
505
537
  unit (a 9-decimal string or `Decimal`, or `Price.from_ticks` for ticks),
506
- fixed at create. A sell trailing stop takes no `limit_price`.
538
+ fixed at create, and at least `activation_price` when that is set. A sell
539
+ trailing stop takes no `limit_price`. Every trailing stop, standalone or
540
+ attached to an order, takes `max_slippage_bps` from 1 to 9999.
507
541
 
508
542
  ```python
509
543
  await client.triggers.create(
@@ -519,15 +553,16 @@ await client.triggers.create(
519
553
  Trigger reads show a buy trailing stop with `side="buy"`,
520
554
  `order_type="limit"`, `time_in_force="ioc"` and its maximum price as
521
555
  `limit_price`; `details.trailing.trough_price` is the lowest price tracked so
522
- far (`peak_price` for a sell).
556
+ far (`peak_price` for a sell), and `details.trailing.trigger_price` is the
557
+ current threshold.
523
558
 
524
559
  Stop-loss, take-profit and trailing-stop triggers, standalone or attached to
525
560
  an order, watch the last trade price unless `trigger_price_source` names
526
- another: `"last"`, `"index"` or `"mark"`. Reads report the same label
561
+ another: `"last"` or `"index"`. Spot markets have no mark price, so `"mark"`
562
+ raises `PolyesterValidationError`. Reads report the same label
527
563
  (`Trigger.trigger_price_source`, `RiskLeg.trigger_price_source`,
528
564
  `TrailingStop.trigger_price_source`), so a leg read from an order can be
529
- passed back to create or modify unchanged. The API rejects a source the pair
530
- does not support.
565
+ passed back to create unchanged.
531
566
 
532
567
  ```python
533
568
  await client.triggers.create(
@@ -543,9 +578,20 @@ await client.triggers.create(
543
578
  When modifying a trigger, omit `activation_price` / `max_slippage_ticks` /
544
579
  `max_slippage_bps` to preserve the current values. Send an explicit zero
545
580
  (`Price.from_ticks(0)` or `0`) to clear an existing activation price or
546
- maximum-slippage cap. Create/modify `max_slippage_bps` must be 1–10000;
547
- modify still accepts `0` to clear. Trailing distance in bps uses the same
548
- 1–10000 range; trigger modify accepts `0` to clear.
581
+ maximum-slippage cap. Modify `max_slippage_bps` is 1–9999 (the patch does not
582
+ say what it modifies, so it takes the cap shared by trailing stops and
583
+ sells); `0` clears it. Trailing distance in bps is 1–10000; trigger modify
584
+ accepts `0` to clear. A child's limit price is fixed at create, so `modify`
585
+ takes no `limit_price`: cancel the trigger and create a new one instead.
586
+
587
+ `triggers.modify(...)` and `triggers.resume(...)` do not need a symbol: without
588
+ `symbol` / `symbol_id` they target the trigger's own market. When given, it
589
+ must be that market, and an API key limited to specific markets must give it.
590
+
591
+ ```python
592
+ await client.triggers.modify(trigger_id=trigger_id, trigger_price="82500")
593
+ await client.triggers.resume(trigger_id=trigger_id)
594
+ ```
549
595
 
550
596
  `orders.list_open(trigger_id=...)` / `orders.list_history(trigger_id=...)`
551
597
  return only child orders created by that trigger (TWAP/ladder slices).
@@ -686,7 +732,8 @@ column response oldest-first. Sort explicitly by `ts_sec` before feeding a
686
732
  chronological indicator.
687
733
 
688
734
  Merged market overview stream (snapshot + live updates). The create call waits
689
- for the WebSocket handshake and initial snapshot:
735
+ for the WebSocket handshake and initial snapshot. With `symbols=[...]`, the
736
+ snapshot and every live or buffered update keep only those markets:
690
737
 
691
738
  ```python
692
739
  sub = await client.market_overview.create_subscription(
@@ -705,6 +752,15 @@ async with sub:
705
752
  channels; live orders use the private WebSocket (see Live orders below).
706
753
  ConnectRPC's optional JSON wire mode does not apply to realtime.
707
754
  Inbound WebSocket messages are capped at 4 MiB.
755
+ - Market trade, user fill (`trades.subscribe`), ledger transfer
756
+ (`transfers.subscribe`) and trigger event (`triggers.subscribe_events`)
757
+ channels publish batches. Each event of a batch is yielded on its own, in
758
+ order. An event that fails to decode is reported through `set_on_error(...)`
759
+ without dropping the rest of its batch. Both legs of a ledger transfer share
760
+ `LedgerTransfer.transfer_id`; with `account_code` it identifies a leg, and
761
+ a repeated leg replaces the earlier copy. A trigger event is identified by
762
+ `(trigger_id, event_type, child_seq, ts_ns)`. For your own batched channel,
763
+ use `realtime.subscribe_proto_batch(channel, decode_batch=...)`.
708
764
  - Subscription queues are bounded. If the consumer falls behind, the SDK raises
709
765
  `PolyesterRealtimeOverflowError` and faults the subscription; it does **not**
710
766
  silently drop updates.
@@ -874,8 +930,9 @@ account; those tests may cancel every open order in their selected symbol.
874
930
 
875
931
  CI requires every public Connect RPC in gen to be wrapped or listed in
876
932
  `sdk-coverage.toml`. Contributors: `python scripts/check_sdk_coverage.py`.
877
- CI refreshes `sdk-capabilities.json` and the README capability table on the
878
- same branch when they drift (same-repo PRs / pushes to `main`).
933
+ CI fails when `sdk-capabilities.json` or the README capability table is stale;
934
+ refresh both with `python scripts/check_sdk_coverage.py --write-capabilities`
935
+ and commit the result.
879
936
 
880
937
  **Pre-release checklist (realtime changes):**
881
938
 
@@ -926,4 +983,18 @@ Connect RPC over HTTP via generated clients in `src/polyester/gen/`. Wire format
926
983
  defaults to **binary protobuf**; pass `wire_format="json"` for debugging.
927
984
 
928
985
  Some RPCs may return HTTP 404 on devnet. The SDK raises `PolyesterRouteNotFoundError`
929
- with a clearer message than `[unimplemented]: Not Found`.
986
+ with a clearer message than `[unimplemented]: Not Found`. HTTP 501 and Connect
987
+ `unimplemented` raise `PolyesterNotImplementedError`, the parent class of
988
+ `PolyesterRouteNotFoundError`; neither is retryable.
989
+
990
+ API-key rejections from the gateway carry a code. A request whose signed
991
+ timestamp falls outside the server's skew window raises
992
+ `PolyesterTimestampSkewError` (`code == "TIMESTAMP_SKEW"`). It is
993
+ retryable, and the gateway rejected it before any service saw it: a retry
994
+ signs again with a fresh timestamp. If it persists, fix the local clock. For
995
+ large bursts, bound concurrency so requests do not wait locally past the skew
996
+ window. Other gateway codes (`SIGNATURE_INVALID`, `KEY_DISABLED`,
997
+ `IP_NOT_ALLOWED`, ...) raise a non-retryable `PolyesterAuthError` whose
998
+ message is the code. A request whose deadline expires raises `PolyesterTimeoutError`, a
999
+ `PolyesterTransportError`: retryable, but a mutation may still have been
1000
+ applied, so reconcile first (`mutation_outcome_unknown(error)` is true).
@@ -4,8 +4,8 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "polyester-sdk"
7
- version = "0.2.0"
8
- description = "Official Python SDK for Polyester APIs."
7
+ version = "0.3.0"
8
+ description = "Python SDK for the Polyester API with generated protobuf types and ConnectRPC clients."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
11
11
  license = { text = "Proprietary" }
@@ -22,7 +22,7 @@ classifiers = [
22
22
  ]
23
23
  dependencies = [
24
24
  "base58>=2.1.1",
25
- "connectrpc>=0.9.0,<0.11",
25
+ "connectrpc>=0.10.0,<0.11",
26
26
  "cryptography>=42",
27
27
  "eth-abi>=5.1",
28
28
  "eth-account>=0.13",
@@ -31,6 +31,7 @@ dependencies = [
31
31
  "httpx>=0.27",
32
32
  "msgspec>=0.18",
33
33
  "protobuf>=7.35.0",
34
+ "pyqwest>=0.5.1",
34
35
  "websockets>=15",
35
36
  ]
36
37
 
@@ -27,12 +27,15 @@ from polyester.errors import (
27
27
  PolyesterApiError,
28
28
  PolyesterAuthError,
29
29
  PolyesterError,
30
+ PolyesterNotImplementedError,
30
31
  PolyesterRateLimitError,
31
32
  PolyesterRealtimeError,
32
33
  PolyesterRealtimeOverflowError,
33
34
  PolyesterResponseContractError,
34
35
  PolyesterRouteNotFoundError,
35
36
  PolyesterServerError,
37
+ PolyesterTimeoutError,
38
+ PolyesterTimestampSkewError,
36
39
  PolyesterTransportError,
37
40
  PolyesterValidationError,
38
41
  auth_error_code,
@@ -73,6 +76,7 @@ __all__ = [
73
76
  "environment_from_name",
74
77
  "PolyesterAuthError",
75
78
  "PolyesterError",
79
+ "PolyesterNotImplementedError",
76
80
  "PreparedTradingWithdraw",
77
81
  "PolyesterRateLimitError",
78
82
  "PolyesterRealtimeError",
@@ -80,6 +84,8 @@ __all__ = [
80
84
  "PolyesterResponseContractError",
81
85
  "PolyesterRouteNotFoundError",
82
86
  "PolyesterServerError",
87
+ "PolyesterTimeoutError",
88
+ "PolyesterTimestampSkewError",
83
89
  "PolyesterTransportError",
84
90
  "PolyesterValidationError",
85
91
  "is_retryable_error",
@@ -1,3 +1,3 @@
1
1
  """Single source for the SDK version string used by packaging and User-Agent."""
2
2
 
3
- __version__ = "0.2.0"
3
+ __version__ = "0.3.0"