
    i                         d dl Zd dlmZmZmZ d dlmZmZm	Z	m
Z
mZmZmZmZmZ d dlmZ d dlmZ d dlmZ d dlmZ  G d d	ej        j                  ZdS )
    N)
ArrayCacheArrayCacheBySymbolByIdArrayCacheByTimestamp)	BalancesIntOrder	OrderBookStrStringsTickerTickersTrade)Client)List)ExchangeError)ArgumentsRequiredc            
           e Zd Z fdZi fdZi fdZd Zi dfdZi dfdZi fde	d	e
fd
Zdi fded	efdZdefdZdi fded	efdZdi fde	defdZdefdZd3dZdddi fde	deded	ee         fdZdefdZddi fde	deded	ee         fdZddi fdee	         deded	ee         fdZdefdZdi fde	ded	efdZdi fdee	         ded	efdZ defdZ!d Z"d  Z#d! Z$defd"Z%defd#Z&defd$Z'dddi fde(deded	ee)         fd%Z*d& Z+d3d'Z,defd(Z-dddi fde(deded	ee         fd)Z.defd*Z/d3d+Z0i fd	e1fd,Z2defd-Z3defd.Z4d/ Z5defd0Z6defd1Z7defd2Z8 xZ9S )4kucoinc           
         |                      t          t          |                                           i ddddddddddddd	dd
dddddddddddddddddddddddddidddddd| j        id          S )NwsTcreateOrderWsFeditOrderWsfetchOpenOrdersWsfetchOrderWscancelOrderWscancelOrdersWscancelAllOrdersWswatchBidsAskswatchOrderBookwatchOrderswatchMyTradeswatchTickerswatchTickerwatchTradeswatchTradesForSymbolswatchOrderBookForSymbols)watchBalance
watchOHLCV  namezmarket/snapshot      /market/level2)snapshotDelaysnapshotMaxRetriesmethod)tradesLimitr#   r   ping)hasoptions	streaming)deep_extendsuperr   describer2   )self	__class__s    U/var/www/html/crypto-bot/backend/venv/lib/python3.11/site-packages/ccxt/pro/kucoin.pyr8   zkucoin.describe   sa   fd 3 3 < < > >d u $U	
    !% $U   !$ t    t t  (!" +D#$ !%"'  ,  $-  &'*+.# #
 
 		C'A
 'A
 ' ' '	    c                    K   |rdnd}|                      | j        di           }|                      ||          }|| d {V S |                     | j        ||          ||<   || j        d<   ||         }| d {V S )Nprivatepublicurls)
safe_valuer4   spawnnegotiate_helper)r9   privateChannelparams	connectIdr@   spawanedfutures          r;   	negotiatezkucoin.negotiate;   s      !/=IIX	t|VR88??433!>>>>>>! **T%:NFSSY#Vi||||||r<   c                   K   d }|rdnd}	 |r|                      |           d {V }n|                     |           d {V }|                     |di           }|                     |dg           }|                     |d          }|                     |d          }|                     |d          }	|                     |d          }
|	d	z   |                     |
||d
          z   }|                     |          }||_        |S # t          $ rN}|                     | j	        d         |          }|
                    |           | j	        d         |= Y d }~nd }~ww xY wd S )Nr>   r?   datainstanceServersr   pingIntervalendpointtoken?)rO   rD   rF   r@   )privatePostBulletPrivatepublicPostBulletPublicrA   safe_integersafe_string	urlencodeclient	keepAlive	Exceptionr4   reject)r9   rD   rE   responserF   rK   rL   firstInstanceServerrM   rN   rO   resultrV   erH   s                  r;   rC   zkucoin.negotiate_helperI   s     !/=IIX	'	0 E!%!>!>v!F!FFFFFFF& "&!<!<V!D!DDDDDDD??8VR88D"ood4ErJJO"&///1"E"E,,-@.QQL''(;ZHHH$$T733E^dnn"0&6 6 ' ' F
 [[((F+FM 	0 	0 	0__T\&%99EEFMM!V$Y//////	0 ts   C;D 
E AEE c                 z    |                      |                     | j        dd          d          }|| j        d<   |S )N	requestIdr      )sumrS   r4   )r9   r_   s     r;   
request_idzkucoin.request_idv   s;    HHT..t|[!LLaPP	$-[!r<   Nc                   K   t          |                                           }|d|dd}|                     ||          }|                     |          }	||	j        vr
||	j        |<   |                     |||||           d {V S )N	subscribeTidtypetopicrZ   )strrb   extendrV   subscriptionswatch)
r9   urlmessageHashsubscriptionHashrE   subscriptionr_   requestmessagerV   s
             r;   rd   zkucoin.subscribe{   s      ))**	%	
 
 ++gv..S!! F$888.>F +ZZ[';K\ZZZZZZZZZr<   c                 `  K   t          |                                           }|d|dd}|                     ||          }	|                     |          }
t	          dt          |                    D ]}||         }||
j        vr
||
j        |<   |                     |||	||           d {V S )Nrd   Tre   r   )ri   rb   rj   rV   rangelenrk   watch_multiple)r9   rm   messageHashesrh   subscriptionHashesrE   rp   r_   rq   rr   rV   iro   s                r;   subscribe_multiplezkucoin.subscribe_multiple   s      ))**		
 
 ++gv..S!!q#01122 	C 	CA1!4$(<<<2B$Y/((mWFXZfgggggggggr<   symbolreturnc                 B  K   |                                   d{V  |                     |          }|d         }|                     d           d{V }|                     |ddd          \  }}|dz   |d         z   }d	|z   }|                     ||||           d{V S )
a  
        watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
        :param str symbol: unified symbol of the market to fetch the ticker for
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
        Nr{   Fr#   r0   z/market/snapshot:rf   ticker:)load_marketsmarketrI   handle_option_and_paramsrd   )	r9   r{   rE   r   rm   r0   queryrh   rn   s	            r;   watch_tickerzkucoin.watch_ticker   s       !!!!!!!!!V$$!NN5))))))))55fmXWijjvd|+&(^^CeUCCCCCCCCCr<   symbolsc                 4  K   |                                   d{V  |                     |          }d}d}|                     |ddd          \  }}g }g }|vt          dt	          |                    D ]X}||         }|                    d|z              |                     |          }	|                    |dz   |	d	         z              Y|                     d
           d{V }
d}|-|dz   }|                     |
|||           d{V }| j	        r|S ne| 
                    |          }|dz   d                    |          z   }|                     |
||||           d{V }| j	        ri }|||d         <   |S |                     | j        d|          S )af  
        :see: https://www.kucoin.com/docs/websocket/spot-trading/public-channels/ticker
        watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
        :param str[] symbols: unified symbol of the market to fetch the ticker for
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :param str [params.method]: either '/market/snapshot' or '/market/ticker' default is '/market/ticker'
        :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
        Ntickersr"   r0   z/market/tickerr   r   r~   rf   Fz:all,r{   )r   market_symbolsr   rt   ru   appendr   rI   rd   
newUpdates
market_idsjoinrz   filter_by_arrayr   )r9   r   rE   rn   r0   rw   topicsry   r{   r   rm   r   allTopic	marketIdssymbolsTopicnewDicts                   r;   watch_tickerszkucoin.watch_tickers   s      !!!!!!!!!%%g..66v~xYijj1c'll++ ; ; $$Y%7888V,,fslVD\9::::NN5))))))))?H NN3XvNNNNNNNNG  00I!C<#((9*=*==L 33CV\^deeeeeeeeG -4)*##DL(GDDDr<   rV   c                    |                      |d          }d }|c|                    d          }|                      |d          }d }|dk    r|                      |d          }n|}|                     ||d          }|                     |di           }|                     |d|          }	|                     |	|          }
|
d         }|
| j        |<   d	|z   }|                    |
|           i }|
||<   |                    |d
           d S )Nrh   r~   r`   allsubject-rK   r{   r   r   )rT   splitsafe_marketrA   parse_tickerr   resolve)r9   rV   rr   rh   r   partsfirstmarketIdrK   	rawTickertickerr{   rn   
allTickerss                 r;   handle_tickerzkucoin.handle_ticker   s(   n   '22KK$$E$$UA..EH~~++GY?? %%h<<Fw33OOD&$77	""9f55!%V&(v{+++
#
6z9-----r<   c                    K   |                      dd||           d{V }| j        ri }|||d         <   |S |                     | j        d|          S )a  
        :see: https://www.kucoin.com/docs/websocket/spot-trading/public-channels/level1-bbo-market-data
        watches best bid & ask for symbols
        :param str[] symbols: unified symbol of the market to fetch the ticker for
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
        r   z/spotMarket/level1:Nr{   )watch_multi_helperr   r   bidsasks)r9   r   rE   r   r   s        r;   watch_bids_askszkucoin.watch_bids_asks  ss       ..@UW^`fgggggggg? 	G(.GF8$%N##DM8WEEEr<   channelNamec                   K   |                                   d {V  |                     |d ddd          }t          |          }|dk    rt          | j        dz   |z   dz             g }t          dt          |                    D ]=}||         }|                     |          }	|                    d|	d         z              >|                     d           d {V }
| 	                    |          }d	
                    |          }t          |                                           }|d
||z   dd}|                     ||          }|                     |
|||           d {V S )NFTd    z#() accepts a maximum of 100 symbolsr   bidask@r{   r   rd   re   )r   r   ru   r   rf   rt   r   r   rI   r   r   ri   rb   rj   rv   )r9   
methodNamer   r   rE   lengthrw   ry   r{   r   rm   r   joinedr_   rq   rr   s                   r;   r   zkucoin.watch_multi_helper-  s     !!!!!!!!!%%gtUD%HHWC<<#DGcMJ$>Af$fgggq#g,,'' 	? 	?AQZF[[((F  VH-=!=>>>>NN5))))))))OOG,,	)$$))**	 6)	
 
 ++gv..((mWmTTTTTTTTTr<   c                     |                      |          }|d         }|| j        |<   d|z   }|                    ||           d S )Nr{   r   )parse_ws_bid_askr   r   )r9   rV   rr   parsedTickerr{   rn   s         r;   handle_bid_askzkucoin.handle_bid_askE  sQ     ,,W55h' ,f&(|[11111r<   c                 z   |                      |d          }|                    d          }|d         }|                     ||          }|                      |d          }|                     |di           }|                     |dg           }|                     |dg           }	|                     |d          }
|                     ||
|                     |
          |                     |d	          |                     |d          |                     |	d	          |                     |	d          |d
|          S )Nrh   r~   r`   r{   rK   asksbids	timestampr   )r{   r   datetimeask	askVolumebid	bidVolumeinfo)	rT   r   r   	safe_dict	safe_listrS   safe_tickeriso8601safe_number)r9   r   r   rh   r   r   r{   rK   r   r   r   s              r;   r   zkucoin.parse_ws_bid_askZ  s:     11C  8!!(F33!!&(33~~ffb11nnT62..nnT62..%%dK88	"Y//##C++))#q11##C++))#q11	!
 	!
 	 	 		r<   1msincelimitc                   K   |                                   d{V  |                     d           d{V }|                     |          }|d         }|                     | j        ||          }d|d         z   dz   |z   }	d|z   dz   |z   }
|                     ||
|	|           d{V }| j        r|                    ||          }|                     |||d	d
          S )aQ  
        watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
        :param str symbol: unified symbol of the market to fetch OHLCV data for
        :param str timeframe: the length of time each candle represents
        :param int [since]: timestamp in ms of the earliest candle to fetch
        :param int [limit]: the maximum amount of candles to fetch
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns int[][]: A list of candles ordered, open, high, low, close, volume
        NFr{   z/market/candles:rf   _candles:r~   r   T)	r   rI   r   rT   
timeframesrd   r   getLimitfilter_by_since_limit)r9   r{   	timeframer   r   rE   rm   r   periodrh   rn   ohlcvs               r;   watch_ohlcvzkucoin.watch_ohlcvo  s      !!!!!!!!!NN5))))))))V$$!!!$/9iHH"VD\1C7&@ 6)C/);nnS+ufEEEEEEEE? 	2NN6511E))%q$GGGr<   c                    |                      |di           }|                     |d          }|                      |dg           }|                     |d          }|                    d          }|                     |d          }|                     |          }	|                     |          }
|
d         }d|z   dz   |	z   }|                      | j        |i           | j        |<   |                      | j        |         |	          }|;|                     | j        d	d
          }t          |          }|| j        |         |	<   | 	                    ||
          }|
                    |           |                    ||           d S )NrK   r{   candlesrh   r   r`   r   r~   
OHLCVLimitr)   )rA   rT   r   find_timeframer   ohlcvsrS   r4   r   parse_ohlcvr   r   )r9   rV   rr   rK   r   r   rh   r   intervalr   r   r{   rn   storedr   r   s                   r;   handle_ohlcvzkucoin.handle_ohlcv  sw   * w33##D(33//$	266  '22C  ##E1--''11	!!(++! 6)C/);"oodk62FFFV!4i@@>%%dlL$GGE*511F-3DK	*  &11ev{+++++r<   c                 D   K   |                      |g|||           d{V S )  
        get the list of most recent trades for a particular symbol
        :param str symbol: unified symbol of the market to fetch trades for
        :param int [since]: timestamp in ms of the earliest trade to fetch
        :param int [limit]: the maximum amount of trades to fetch
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=public-trades>`
        N)watch_trades_for_symbols)r9   r{   r   r   rE   s        r;   watch_tradeszkucoin.watch_trades  s6       22F8UE6RRRRRRRRRr<   c                   K   t          |          }|dk    rt          | j        dz             |                                  d{V  |                     |          }|                     |          }|                     d           d{V }g }g }	dd                    |          z   }
t          dt          |                    D ]B}||         }|	                    d|z              ||         }|		                    d|z              C| 
                    |||
|	|           d{V }| j        rB|                     |d          }|                     |d          }|                    ||          }|                     |||d	d
          S )r   r   z> watchTradesForSymbols() requires a non-empty array of symbolsNFz/market/match:r   trades:r{   r   T)ru   r   rf   r   r   r   rI   r   rt   r   rz   r   rA   rT   r   r   )r9   r   r   r   rE   symbolsLengthr   rm   rw   rx   rh   ry   r{   r   tradesr   tradeSymbols                    r;   r   zkucoin.watch_trades_for_symbols  s      GA#DG.n$nooo!!!!!!!!!%%g..OOG,,	NN5)))))))) 388I#6#66q#g,,'' 	C 	CAQZF  V!3444 |H%%&6&ABBBB..sM5J\^deeeeeeee? 	8OOFA..E**5(;;KOOK77E))&%TRRRr<   c                 r   |                      |di           }|                     |          }|d         }d|z   }|                      | j        |          }|5|                     | j        dd          }t          |          }|| j        |<   |                    |           |                    ||           d S )NrK   r{   r   r1   r)   )rA   parse_trader   rS   r4   r   r   r   )	r9   rV   rr   rK   trader{   rn   r   r   s	            r;   handle_tradezkucoin.handle_trade  s    ( w33  &&x&(f55>%%dlM4HHE&&F"(DKev{+++++r<   c                 B   K   |                      |g||           d{V S )a1  
        :see: https://www.kucoin.com/docs/websocket/spot-trading/public-channels/level1-bbo-market-data
        :see: https://www.kucoin.com/docs/websocket/spot-trading/public-channels/level2-market-data
        :see: https://www.kucoin.com/docs/websocket/spot-trading/public-channels/level2-5-best-ask-bid-orders
        :see: https://www.kucoin.com/docs/websocket/spot-trading/public-channels/level2-50-best-ask-bid-orders
        watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
        :param str symbol: unified symbol of the market to fetch the order book for
        :param int [limit]: the maximum amount of order book entries to return
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :param str [params.method]: either '/market/level2' or '/spotMarket/level2Depth5' or '/spotMarket/level2Depth50' default is '/market/level2'
        :returns dict: A dictionary of `order book structures <https://docs.ccxt.com/#/?id=order-book-structure>` indexed by market symbols
        N)watch_order_book_for_symbols)r9   r{   r   rE   s       r;   watch_order_bookzkucoin.watch_order_book  s4      8 66xOOOOOOOOOr<   c                   K   t          |          }|dk    rt          | j        dz             |/|dk    r)|dk    r#|dk    r|dk    rt          | j        dz             |                                  d{V  |                     |          }|                     |          }|                     d	           d{V }d}|                     |d
dd          \  }}|dk    s|dk    rdt          |          z   }|dz   d
                    |          z   }g }	g }
t          dt          |                    D ]E}||         }|	                    d|z              ||         }|
                    |dz   |z              Fi }|dk    r| j        ||d}|                     ||	||
||           d{V }|                                S )a  
        :see: https://www.kucoin.com/docs/websocket/spot-trading/public-channels/level1-bbo-market-data
        :see: https://www.kucoin.com/docs/websocket/spot-trading/public-channels/level2-market-data
        :see: https://www.kucoin.com/docs/websocket/spot-trading/public-channels/level2-5-best-ask-bid-orders
        :see: https://www.kucoin.com/docs/websocket/spot-trading/public-channels/level2-50-best-ask-bid-orders
        watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
        :param str[] symbols: unified array of symbols
        :param int [limit]: the maximum amount of order book entries to return
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :param str [params.method]: either '/market/level2' or '/spotMarket/level2Depth5' or '/spotMarket/level2Depth50' default is '/market/level2'
        :returns dict: A dictionary of `order book structures <https://docs.ccxt.com/#/?id=order-book-structure>` indexed by market symbols
        r   zA watchOrderBookForSymbols() requires a non-empty array of symbolsN   r   2   r+   z? watchOrderBook 'limit' argument must be None, 5, 20, 50 or 100Fr   r0   r-   z/spotMarket/level2Depthr~   r   
orderbook:)r0   r   r   )ru   r   rf   r   r   r   r   rI   r   ri   r   rt   r   handle_order_book_subscriptionrz   r   )r9   r   r   rE   r   r   rm   r0   rh   rw   rx   ry   r{   r   rp   	orderbooks                   r;   r   z#kucoin.watch_order_book_for_symbols  s      GA#DG.q$qrrr%3,,Ub[[uPQzz#DG.o$oppp!!!!!!!!!%%g..OOG,,	NN5))))))))66v?OQY[kllQJJERKK.U;Fsxx	222q#g,,'' 	? 	?AQZF  !6777 |H%%fslX&=>>>>%%%=" L
 11#}eM_agiuvvvvvvvv	   r<   c                    |                      |d          }|                     |d          }|                     |d          }|                    d          }|                     |d          }|                     |d          }|                     |d|          }	|                     |	d d          }
d	|
z   }|d
k    rY|
| j        vr|                                 | j        |
<   n!| j        |
         }|                                 |
| j        |
         d<   n}|
| j        vr|                                 | j        |
<   | j        |
         }|                     |d          }|                     |dd          }|t          |j
                  }t          |j                                                  }d }t          dt          |                    D ]K}||         }|                    |          dk    r(|                    |          dk    r|j        |         } nL|                     |d          }|                     ddd          }||k    r|                     | j        |||
|i            |j
                            |           d S ||k    rd S |                     | j        |
         |           |                    | j        |
         |           d S )NrK   r   rh   r~   r`   r   r{   r   r   level2noncesequenceEndr   r   r   r.   r+   )rA   rT   r   safe_symbol
orderbooks
order_bookresetrS   safe_integer_2ru   cachelistrk   keysrt   findhandle_optionrB   load_order_bookr   handle_deltar   )r9   rV   rr   rK   r   rh   
topicPartstopicSymboltopicChannelr   r{   rn   r   r   deltaEndcacheLengthrk   rp   ry   keyr   r.   s                         r;   handle_order_bookzkucoin.handle_order_bookD  s   R w//""7I66  '22[[%%
&&z155''
A66##D(K@@!!(D#66"V+hdo--*.//*;*;'' OF3	!!!06DOF#H--do--*.//*;*;'/I%%i99E**4LLH}!)/22 $V%9%>%>%@%@ A A#q#m"4"455  A'*C--22,9O9OST9T9T'-';C'@)),@@ $ 2 23C_VW X X-//JJt3V[&RWY[\\\&&t,,,(""$/&14888tv.<<<<<r<   c                    |                      |d          }|                     |d          }|                     |d          }||dz
  k     rdS t          dt          |                    D ]I}||         }|                     |d          }|                     |d          }	||dz
  k    r
||	k     r|c S Jt          |          S )Nr   r   sequenceStartr`   r   )rA   rS   rt   ru   )
r9   r   r   
firstDeltar   firstDeltaStartry   delta
deltaStartr  s
             r;   get_cache_indexzkucoin.get_cache_index  s    __UA..
!!)W55++JHH?Q&&&2q#e**%% 	 	A!HE**5/BBJ((>>Ha''eh.>.>5zzr<   c                    |                      |dd          }|                     |d|          |d<   ||d<   |                     |          |d<   |                     |d|          }|                     |dg           }|                     |dg           }|d         }|d         }|                     ||           |                     ||           d S )	Ntimer   r   r   r   changesr   r   )r   rS   r   rA   handle_bid_asks)	r9   r   r  r   r  r   r   
storedBids
storedAskss	            r;   r   zkucoin.handle_delta  s    ''v{CC	!..umYOO	'!*	+ $Y 7 7	*//%E::w33w33v&
v&
Z...Z.....r<   c                     t          dt          |                    D ]2}|                     ||                   }|                    |           3d S )Nr   )rt   ru   parse_bid_ask
storeArray)r9   bookSidebidAsksry   bidAsks        r;   r  zkucoin.handle_bid_asks  sY    q#g,,'' 	( 	(A''
33F''''	( 	(r<   c                 Z   |                      |d          }|                     |d          }|6|                     |d          }|                     i |          | j        |<   d S t          dt          |                    D ](}||         }|                     i |          | j        |<   )d S )Nr   r   r{   r   )rS   rA   rT   r   r   rt   ru   )r9   rV   rr   rp   r   r   r{   ry   s           r;   r   z%kucoin.handle_order_book_subscription  s    !!,88//,	::?%%lH==F&*oob%&@&@DOF###1c'll++ E E *.//"e*D*D''E Er<   c                    |                      |d          }||j        vrd S |                      |j        |          }|                     |j        |          }|j        |= |                     |d          }| ||||           d S d S )Nrf   r0   )rT   rk   rA   )r9   rV   rr   rf   ro   rp   r0   s          r;   handle_subscription_statusz!kucoin.handle_subscription_status  s     gt,,f***F++F,@"EEv';=MNN $x88F67L11111 r<   c                     |S N r9   rV   rr   s      r;   handle_system_statuszkucoin.handle_system_status  s	     r<   c           	        K   |                                   d{V  |                     |dd          }|                     |ddg          }|                     d           d{V }|rdnd}ddi}d}	|%|                     |          }
|
d	         }|	d
z   |z   }	|                     ||	||                     ||                     d{V }| j        r|                    ||          }| 	                    ||||d          S )a5  
        watches information on multiple orders made by the user
        :param str symbol: unified market symbol of the market orders were made in
        :param int [since]: the earliest time in ms to fetch orders for
        :param int [limit]: the maximum number of order structures to retrieve
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :param boolean [params.stop]: trigger orders are watched if True
        :returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
        NstoptriggerTz/spotMarket/advancedOrdersz/spotMarket/tradeOrdersrD   ordersr{   r~   )
r   safe_value_2omitrI   r   rd   rj   r   r   filter_by_symbol_since_limit)r9   r{   r   r   rE   r#  rm   rh   rq   rn   r   r%  s               r;   watch_orderszkucoin.watch_orders  sC      !!!!!!!!!  ;;6FI#677NN4((((((((04S,,:Sd
 [[((FH%F%+f4K~~c;t{{7TZ?[?[\\\\\\\\? 	3OOFE22E00tTTTr<   c                 D    dddddddd}|                      |||          S )Nopenclosedcanceled	triggered)r+  filledmatchupdater-  cancel	TRIGGERED)rT   )r9   statusstatusess      r;   parse_ws_order_statuszkucoin.parse_ws_order_status  s=    " $
 
 &&999r<   c           	      H   |                      |d          }|                     |          }|                     |dd          }|                      |d          }|                     ||          }|                      |d          }|                     |d          }|duo|d u}	|dk    r|	rd	}|                     i d
|d|d         d|                      |d          d|                      |d          d|d|                     |          dd d|                     |d          dd dd d|                     |d          d|                     |dd          d|d|d|                      |d          dd dd |                      |d          d |d d d|          S )Nrg   	orderTime	createdAtr{   	stopPricetriggerSuccessTr.  r-  r   rf   orderIdclientOrderId	clientOidr   r   lastTradeTimestamp	orderTypetimeInForcepostOnlysideprice
orderPricetriggerPriceamountsizecostaverage
filledSize)r/  	remainingr4  feer   )	rT   r6  r   r   rA   
safe_orderr   safe_string_lowersafe_string_2)
r9   orderr   rawTyper4  r   r   rF  r;  triggerFails
             r;   parse_ws_orderzkucoin.parse_ws_order  sK   L ""5&11++G44''{KHH	##E844!!(F33''{;;0@AA%T1Sd8Rk!!{!F  
E 
fX& 
 $""5)44 
 T--e[AA	 

  
 Y// 
 !$ 
 D**5+>> 
 4 
  
 D**5&99 
 T''wEE 
  
 L 
 d&&uf55 
  D! 
" t# 
$ &&ul;;- 
  
  
. /  	r<   c                    d}|                      |d          }|                     |          }|                     |d          }|                     |d          }|                      |d          }|d u}	| j        D|                     | j        dd          }
t          |
          | _        t          |
          | _        |	r| j        n| j        }|                      |j        |i           }|                      ||          }||d         d	k    rd	|d<   |	                    |           |
                    ||           |d
z   |z   }|
                    ||           d S )Nr%  rK   r{   rf   rF  ordersLimitr)   r4  r,  r~   )rA   rT  rT   r%  rS   r4   r   triggerOrdershashmapr   r   )r9   rV   rr   rn   rK   parsedr{   r<  rF  isTriggerOrderr   cachedOrdersr%  rQ  symbolSpecificMessageHashs                  r;   handle_orderzkucoin.handle_orderV  sg   * w//$$T**!!&(33""6400v~>>&d2;%%dlM4HHE077DK!7!>!>D-;Lt))!5vrBB00X(**#+x F###|[111$/#$5$>!|%>?????r<   c           	        K   |                                   d{V  |                     d           d{V }d}ddi}d}|+|                     |          }	|	d         }|dz   |	d         z   }|                     ||||                     ||                     d{V }
| j        r|
                    ||          }|                     |
|||d          S )a  
        watches information on multiple trades made by the user
        :param str symbol: unified market symbol of the market trades were made in
        :param int [since]: the earliest time in ms to fetch trades for
        :param int [limit]: the maximum number of trade structures to retrieve
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict[]: a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure
        NT/spot/tradeFillsrD   myTradesr{   r~   )r   rI   r   rd   rj   r   r   r(  )r9   r{   r   r   rE   rm   rh   rq   rn   r   r   s              r;   watch_my_tradeszkucoin.watch_my_trades  s      !!!!!!!!!NN4(((((((("d
 ![[((FH%F%+fX.>>K~~c;t{{7TZ?[?[\\\\\\\\? 	3OOFE22E00tTTTr<   c                    | j         0|                     | j        dd          }t          |          | _         |                     |d          }|                     |          }| j                             |           d}|                    | j         |           |dz   |d         z   }|                    | j         |           d S )Nr1   r)   rK   r`  r~   r{   )r`  rS   r4   r   r   parse_ws_trader   r   )r9   rV   rr   r   rK   rY  rn   r\  s           r;   handle_my_tradezkucoin.handle_my_trade  s    = %%dlM4HHE2599DM~~gv..$$T**V$$$ t}k222$/#$5x8H$H!t}&?@@@@@r<   c                    |                      |d          }|                     ||d          }|d         }|                      |d          }|                      |d          }|                      |d          }|                      |d          }|                      |d          }	|                      |d          }
|                     |d	d
          }|d         }|                      |d          }|                      |d          }|||d}|                     |||                     |          |||
|d |||	d |d|          S )Nr{   r   r@  rC  tradeIdrD  rH  r<  r  gư>quotefeeRaterM  )rI  ratecurrency)r   r   r   r{   rf   rQ  rg   takerOrMakerrC  rD  rG  rI  rM  )rT   r   safe_integer_product
safe_trader   )r9   r   r   r   r{   rg   rC  rf  rD  rG  rQ  r   feeCurrencyrh  feeCostrM  s                   r;   rc  zkucoin.parse_ws_trade  sq     ##E844!!(FC88!{33v..""5)44  00!!%00  	22--eVXFF	Wo""5)44""5%00#
 

 "Y//  
  
   	r<   c           	         K   |                                   d{V  |                     d           d{V }d}ddi}d}|                     ||||                     ||                     d{V S )a  
        watch balance and get the amount of funds available for trading or funds locked in orders
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
        NTz/account/balancerD   balance)r   rI   rd   rj   )r9   rE   rm   rh   rq   rn   s         r;   watch_balancezkucoin.watch_balance  s       !!!!!!!!!NN4(((((((("d
  ^^CeT[[RX=Y=YZZZZZZZZZr<   c                    |                      |di           }d}|                     |d          }|                     |d          }d }|+|                    d          }|                     |d          }|                     | j        ddd	          }	|                      | j        d
          }
|                     |
|d	          }|| j        vr
i | j        |<   || j        |         d<   |                     |d          }|| j        |         d<   |                     |          | j        |         d<   |                     |          }| 	                                }|                     |d          |d<   |                     |d          |d<   |                     |d          |d<   || j        |         |<   | 
                    | j        |                   | j        |<   ||	k    r#|                    | j        |         |           d S d S )NrK   rq  rj  relationEvent.r   r'   defaultTyper   accountsByTyper   r  r   r   	availablefreeholdusedtotal)rA   rT   r   rP  r4   rq  rS   r   safe_currency_codeaccountsafe_balancer   )r9   rV   rr   rK   rn   
currencyIdrt  requestAccountTyperelationEventPartsselectedTyperw  uniformTyper   coder~  s                  r;   handle_balancezkucoin.handle_balance  s   0 w33%%dJ77
((??!$!.!4!4S!9!9!%!1!12Da!H!H))$,W^__7GHH&&~7I7SSt|++(*DL%,0[!&)%%dF33	1:[!+.04Y0G0G[!*-&&z22,,..**4==**488++D'::*1[!$'$($5$5dl;6O$P$P[!,&&NN4<4kBBBBB '&r<   c                 p   |                      |d          }|dk    r|                     ||           d S |                      |d          }| j        | j        | j        | j        | j        | j        | j        | j        | j        | j        | j        d}| 	                    ||          }| |||           d S d S )Nrh   z/market/ticker:allr   )level1r   ztrade.l2updateztrade.tickerztrade.snapshotztrade.l3matchztrade.candles.updatezaccount.balancer_  orderChange	stopOrder)
rT   r   r   r  r   r   r  rd  r]  rA   )r9   rV   rr   rh   r   methodsr0   s          r;   handle_subjectzkucoin.handle_subject  s    "   '22(((vw///F""7I66),"4 ."0!.$($5#2 $ 4,*
 
 '22F67##### r<   c                 N    t          |                                           }|ddS )Nr2   )rf   rg   )ri   rb   )r9   rV   rf   s      r;   r2   zkucoin.pingB  s0     ""##
 
 	
r<   c                 8    |                                  |_        d S r  )millisecondslastPongr   s      r;   handle_pongzkucoin.handle_pongL  s    ++--r<   c                     |                      |dd          }|dk    r2d}|j                            d          dk    rd}d | j        d         |<   |                     d d |j        d d ||d d 	  	         d S )	NrK    ztoken is expiredr?   zconnectId=privater   r>   r@   )rT   rm   r   r4   handle_errors)r9   rV   rr   rK   rg   s        r;   handle_error_messagezkucoin.handle_error_messageP  s     44%%%Dz233q88 )-DL &4vz4tWdTXYYYYYr<   c                     |                      |d          }| j        | j        | j        | j        | j        d}|                     ||          }| |||           d S d S )Nrg   )welcomeackrr   pongerror)rT   r!  r  r  r  r  rA   )r9   rV   rr   rg   r  r0   s         r;   handle_messagezkucoin.handle_messagea  s~    00 02*$.
 
 $//F67##### r<   r  ):__name__
__module____qualname__r8   rI   rC   rb   rd   rz   ri   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   r   r   r  r  r   r  r   r  r!  r
   r   r)  r6  rT  r]  ra  rd  rc  r   rr  r  r  r2   r  r  r  __classcell__)r:   s   @r;   r   r      s-       ( ( ( ( (T 68     =? + + + +Z  
 JLZ^ [ [ [ [ ^`nr h h h h  68 D D DF D D D D  6:" %E %E7 %E %E %E %E %ENL.F L. L. L. L.\ 8<B F FW F7 F F F F Y]eg U U Ug U U U U02V 2 2 2 2*   * 8<$]ajl H H HC HWZ Hquvzq{ H H H H,(,6 (, (, (, (,T <@d[] 	S 	S 	SS 	S 	Sbfglbm 	S 	S 	S 	S OSaenp S Sd3i S S[^ Suyz  vA S S S S>,6 , , , ,@ @DB P PS P PS\ P P P P< SW_a +! +!$s) +!C +!fo +! +! +! +!ZR= R= R= R= R=h  / / /( ( (
	EV 	E 	E 	E 	E2 2 2 2 2"6     04$UYbd U U UC Us Uimnsit U U U U8
: 
: 
:G G G GR*@6 *@ *@ *@ *@X 37TX\eg U UC Us URU Ulpqvlw U U U U2
Af 
A 
A 
A 
A0 0 0 0d *, [ [ [ [ [ [1CV 1C 1C 1C 1Cf%$V %$ %$ %$ %$N
 
 
.& . . . .Z6 Z Z Z Z"$V $ $ $ $ $ $ $ $r<   r   )ccxt.async_supportccxt ccxt.async_support.base.ws.cacher   r   r   ccxt.base.typesr   r   r   r	   r
   r   r   r   r   !ccxt.async_support.base.ws.clientr   typingr   ccxt.base.errorsr   r   async_supportr   r  r<   r;   <module>r     s        f f f f f f f f f f a a a a a a a a a a a a a a a a a a a a a a 4 4 4 4 4 4       * * * * * * . . . . . .^$ ^$ ^$ ^$ ^$T& ^$ ^$ ^$ ^$ ^$r<   