
    E#i?                         S SK rS SKJr  S SKJrJrJrJrJ	r	J
r
  S SKJr  S SKJr   " S S\R                  R                   5      rg)    N)ArrayCacheBySymbolById)AnyBalancesIntOrder	OrderBookStr)Client)Listc            
         ^  \ rS rSrS\4U 4S jjr0 4S\4S jjrS\4S jr	S r
SSS0 4S	\S
\S\S\\   4S jjrS\4S jrSS jrS0 4S	\S\S\4S jjrS\4S jrS rS rS\4S jrS rS\4S jr0 4S jr0 4S jrSrU =r$ )bitrue   returnc                    > U R                  [        [        U ]  5       SSSSSSSSSS.	SSSSS.S	.0S
SSSS0SS0SS0S.000SSS0S.S.5      $ )NTF)	wswatchBalancewatchTickerwatchTickerswatchTradeswatchMyTradeswatchOrderswatchOrderBook
watchOHLCVapizhttps://open.bitrue.comzwss://ws.bitrue.com/market/wszwss://wsapi.bitrue.com)publicprivate)openr   r   v1r   zposeidon/api/v1/listenKey   z%poseidon/api/v1/listenKey/{listenKey})postputdelete@w gunzip)listenKeyRefreshRater   )hasurlsr   options)deep_extendsuperr   describe)self	__class__s    I/home/james-whalen/.local/lib/python3.13/site-packages/ccxt/pro/bitrue.pyr+   bitrue.describe   s    fd < > $$ %$!&#"&#
 5"A#; ! ;Q% !H$ !H'
$$ )0dM,A
 , ,	    c                    #    U R                  5       I Sh  vN nSnSSS0S.nU R                  XA5      nU R                  X#XS5      I Sh  vN $  N8 N7f)aH  
watch balance and get the amount of funds available for trading or funds locked in orders

https://github.com/Bitrue-exchange/Spot-official-api-docs#balance-update

:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
Nbalancesubchanneluser_balance_updateeventparams)authenticater)   watch)r,   r8   urlmessageHashmessagerequests         r.   watch_balancebitrue.watch_balance>   sc      %%''0
 ""73ZZ'GGG ( Hs!   AA3A
AAAclientc                     U R                  US/ 5      nU R                  U5        SnUR                  U R                  U5        g )NBr2   )
safe_valueparse_ws_balancesresolver2   )r,   rA   r=   balancesr<   s        r.   handle_balancebitrue.handle_balanceR   s<    \ ??7C4x(t||[1r0   c                    XR                   S'   [        S[        U5      5       H  nX   nU R                  US5      nU R	                  U5      nU R                  5       nU R                  US5      nU R                  US5      nU R                  USS5      n	U R                  USS5      n
U	S:g  nU
S:g  nU(       d	  U(       d  M  U(       a  XvS'   U(       a  XS	'   X`R                   U'   M     U R                  U R                   5      U l         g )
Ninfor   aFLTtfreeused)r2   rangelensafe_stringsafe_currency_codeaccountsafe_integersafe_balance)r,   rG   ir2   
currencyIdcoderW   rQ   rR   balanceUpdateTimelockBalanceUpdateTime
updateFree
updateUseds                r.   rE   bitrue.parse_ws_balances   s    "  (Vq#h-(AkG))'37J**:6DllnG##GS1D##GS1D $ 1 1'3 B$($5$5gsA$F!*a/J.!3JZZ&*FO&*FO%,T"! )" ((6r0   Nsymbolsincelimitc                 z  #    U R                  5       I Sh  vN   Ub  U R                  U5      nUS   nU R                  5       I Sh  vN nSnSSS0S.nU R                  X5      n	U R	                  XgX5      I Sh  vN n
U R
                  (       a  U
R                  X5      nU R                  XX#S5      $  N No N=7f)	a  
watches information on user orders

https://github.com/Bitrue-exchange/Spot-official-api-docs#order-update

:param str symbol:
:param int [since]: timestamp in ms of the earliest order
:param int [limit]: the maximum amount of orders to return
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: A dictionary of `order structure <https://docs.ccxt.com/#/?id=order-structure>` indexed by market symbols
Nrb   ordersr3   r4   user_order_updater6   T)load_marketsmarketr9   r)   r:   
newUpdatesgetLimitfilter_by_symbol_since_limit)r,   rb   rc   rd   r8   ri   r;   r<   r=   r>   rf   s              r.   watch_ordersbitrue.watch_orders   s      !!![[(FH%F%%''.
 ""73zz#GII??OOF2E00tTT! 	" ( Js3   B;B50B;B73B;;B9<:B;7B;9B;c                    U R                  U5      nU R                  c-  U R                  U R                  SS5      n[	        U5      U l        U R                  nUR                  U5        SnUR                  U R                  U5        g )NordersLimiti  rf   )parse_ws_orderrf   rX   r(   r   appendrF   )r,   rA   r=   parsedrd   rf   r<   s          r.   handle_orderbitrue.handle_order   sn    0 $$W-;;%%dllM4HE07DKft{{K0r0   c           
          U R                  US5      nU R                  US5      nU R                  US5      nU R                  US5      nUS:X  a  SOSnU R                  US5      nU R                  US	5      n	U R                  0 S
U_SU R                  US5      _SU R                  US5      _SU_SU R	                  U5      _SU R                  US5      _SU R                  XB5      _SU R                  U5      _SS _SS _SU_SU R                  US5      _SS _SU R                  US5      _SU R                  US5      _SS _S U R                  US!5      _S U R                  U5      U R                  U	5      U R                  US"5      S#.S$.EU5      $ )%NEsoSr   buysellXNrK   idrZ   clientOrderIdc	timestampdatetimelastTradeTimestamprO   rb   typetimeInForcepostOnlysidepriceptriggerPriceamountqcostYaveragefilledzn)currencyr   )	remainingstatusfee)
rX   safe_string_upperrU   
safe_orderiso8601safe_symbolparse_ws_order_typeparse_ws_order_statusrV   safe_number)
r,   orderri   r   marketIdtypeIdsideIdr   statusIdfeeCurrencyIds
             r.   rq   bitrue.parse_ws_order   s   0 %%eS1	))%5!!%-""5#.  1u6##E3/((4  
E 
$""5#. 
 T--eS9 
 	 

 Y/ 
 !$"3"3E3"? 
 d&&x8 
 D,,V4 
 4 
  
 D 
 T%%eS1 
 D 
 d&&uc2 
 D$$UC0 
  t! 
" d&&uc2# 
$ 00: 33MB((4) 
0 1 	r0   c                 >  #    U R                  5       I S h  vN   U R                  U5      nUS   nSU-   nUS   R                  5       nSU-   S-   nU R                  S   S   S   nS	UUS
.S.n	U R	                  X5      n
U R                  XX5      I S h  vN $  N N7f)Nrb   
orderbook:r   market__simple_depth_step0r   r   r   r3   )cb_idr4   r6   )rh   ri   lowerr'   r)   r:   )r,   rb   rd   r8   ri   r<   marketIdLowercaser4   r;   r=   r>   s              r.   watch_order_bookbitrue.watch_order_book$  s     !!!V$!"V+"4L..0//2GGiit$X.*"
 ""73ZZ'GGG 	" Hs"   BBA=BBBBc                    U R                  US5      nUR                  S5      nU R                  US5      nU R                  U5      nUS   nU R	                  US5      nU R                  US0 5      n	XpR                  ;  a  U R                  5       U R                  U'   U R                  U   n
U R                  XUSS5      nU
R                  U5        S	U-   nUR                  X5        g )
Nr4   _r   rb   tstickbuysasksr   )rU   splitr   safe_marketrX   rD   
orderbooks
order_bookparse_order_bookresetrF   )r,   rA   r=   r4   partsr   ri   rb   r   r   	orderbooksnapshotr<   s                r.   handle_order_bookbitrue.handle_order_book6  s    B ""7I6c"))%3!!(+!%%gt4	w3//)&*oo&7DOOF#OOF+	((y&&Q!"V+y.r0   c                 2    SSSS.nU R                  X!U5      $ )Nrd   ri   )123rU   )r,   r   typess      r.   r   bitrue.parse_ws_order_typef  s'    

 v66r0   c                 8    SSSSSSS.nU R                  X!U5      $ )Nr   closedcanceled)0r   r   r   47r   )r,   r   statusess      r.   r   bitrue.parse_ws_order_statusn  s0    
 &99r0   c                 <    U R                  U R                  X5        g N)spawnpong)r,   rA   r=   s      r.   handle_pingbitrue.handle_pingy  s    

499f.r0   c                 n   #    U R                  US5      nSU0nUR                  U5      I S h  vN   g  N7f)Npingr   )rX   send)r,   rA   r=   timer   s        r.   r   bitrue.pong|  s9        &1D
 kk$s   +535c                     SU;   a  U R                  X5        g SU;   a  U R                  X5        g U R                  US5      nU R                  U R                  S.nU R                  XC5      nUb	  U" X5        g g )Nr4   r   e)BALANCEORDER)r   r   rU   rH   rt   rD   )r,   rA   r=   r7   handlershandlers         r.   handle_messagebitrue.handle_message  s|    ""63wV-$$Wc2E..**H ooh6G"( #r0   c                   #    U R                  U R                  S5      nUc  U R                  U5      I S h  vN nU R                  US0 5      nU R                  US5      nXPR                  S'   U R                  S   S   S   S-   U-   U R                  S'   U R                  U R                  SS	5      nU R                  X`R                  5        U R                  S   $  N7f)
N	listenKeydatar   r   r   z/stream?listenKey=listenKeyUrlr%   r#   )rD   r(   'openV1PrivatePostPoseidonApiV1ListenKeyrU   r'   rX   delaykeep_alive_listen_key)r,   r8   r   responser   keyrefreshTimeouts          r.   r9   bitrue.authenticate  s     OODLL+>	!II&QQH ??8VR8D""45C(+LL%+/99U+;D+A)+LOc+cfi+iDLL(!..t||=SU\]NJJ~'A'AB||N++! Rs   4CCB'Cc                 |  #    U R                  U R                  S5      nSU0n U R                  U R                  X15      5      I S h  vN   U R                  U R                  SS5      nU R                  XPR                  5        g  N=! [         a(  nS U R                  S'   S U R                  S'    S nAg S nAff = f7f)Nr   r   r%   r#   )rU   r(   /openV1PrivatePutPoseidonApiV1ListenKeyListenKeyextend	ExceptionrX   r   r   )r,   r8   r   r>   errorr   s         r.   r   bitrue.keep_alive_listen_key  s     $$T\\;?	
	FFt{{SZGcddd **4<<9OQXY

>#=#=> e  	(,DLL%+/DLL(	s@   !B<#B BB 9B<B 
B9B4/B<4B99B<)r2   rf   r   )__name__
__module____qualname____firstlineno__r   r+   r   r?   r
   rH   rE   r	   r   r   r   rm   rt   rq   strr   r   r   r   r   r   r   r   r9   r   __static_attributes____classcell__)r-   s   @r.   r   r      s    -# -^ *, H H(12V 12f#7J 04$UYbd U UC Us Uimnsit U<16 1B9v @DB HS H HS\ H$./ ./`7	:/& /
 )V ) )+ ,* 24 ? ?r0   r   )ccxt.async_supportccxt ccxt.async_support.base.ws.cacher   ccxt.base.typesr   r   r   r   r   r	   !ccxt.async_support.base.ws.clientr
   typingr   async_supportr    r0   r.   <module>r     s3     C E E 4 r?T&& r?r0   