
    iTc                         d dl Zd dlmZ d dlZd dl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 d dlmZ  G d	 d
ej        j                  ZdS )    N)
ArrayCache)IntMarket	OrderBookStringsTickerTrade)Client)List)ExchangeError)AuthenticationError)NotSupportedc            
           e Zd Z fdZdi fdedefdZdi fdedefdZi fdedi fd	Zi fde	e         di fd
Z
i fdedefdZdefdZd"defdZdefdZd"dede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 Zd"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 Zd Zd Z d Z!defdZ"defd Z#d! Z$ xZ%S )#coinbaseinternationalc                 *   |                      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	dddiddidddiddddddt          iid          S )NwsTwatchTradeswatchTradesForSymbolswatchOrderBookwatchOrderBookForSymbolswatchTickerwatchBalanceFwatchMyTrades
watchOHLCVwatchOHLCVForSymbolswatchOrderswatchOrdersForSymbolswatchPositionswatchTickerscreateOrderWseditOrderWscancelOrderWs)cancelOrdersWscancelAllOrdersWsfetchOrderWsfetchOrdersWsfetchBalanceWsfetchMyTradesWsz&wss://ws-md.international.coinbase.comzwss://ws-md.n5e2.coinbase.com)apitestchannelLEVEL1  )r   tradesLimitordersLimitmyTradesLimitexactzUnable to authenticate)hasurlsoptions
exceptions)deep_extendsuperr   describer   )self	__class__s    d/var/www/html/crypto-bot/backend/venv/lib/python3.11/site-packages/ccxt/pro/coinbaseinternational.pyr8   zcoinbaseinternational.describe   s   &;T B B K K M Mdt ( !$	
 +D t    e ' u ( !%     u!"  #$ #(%* %!&"'#(/  6 B 9	  x   $#!%  ,.AU/P
 /P
 / / /	    Nnamesymbolsc                 b  K   |                                   d}|}g }|| j        }t          |          }|dk    rH|                     |          }|                     |          }	|	}|dz   d                    |          z   }n8|dk    r2|                     |d                   }|dz   |d         z   }|d         g}| j        d         d	         }
|
t          | j	        d
z             t          |                                           }|| j        z   dz   | j        z   }|                     |                     |          |                     | j                  t$          j        d          }d||g|| j        | j        |d}|                     |
||                     ||          |           d{V S )a  
         * @ignore
        subscribes to a websocket channel
        :see: https://docs.cloud.coinbase.com/intx/docs/websocket-overview#subscribe
        :param str name: the name of the channel
        :param str[] [symbols]: unified market symbol
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: subscription to a websocket channel
        N   ::,r   symbolidr)   r   ( is not supported in sandbox environmentCBINTLMDbase64	SUBSCRIBE)typeproduct_idschannelstimekey
passphrase	signature)check_required_credentialsr>   lenmarket_symbols
market_idsjoinmarketr3   r   rD   strnonceapiKeypasswordhmacencodebase64_to_binarysecrethashlibsha256watchextend)r9   r=   r>   paramsrU   messageHash
productIdssymbolsLengthparsedSymbols	marketIdsurl	timestampauthrO   	subscribes                  r;   rk   zcoinbaseinternational.subscribeE   s      	'')))
?lGG1 //88M66I"J%,sxx/F/FFKKa[[,,F+x(88K ,Jit$;tw)SSTTT

%%	4;&3dmCIIdkk$//1F1Ft{1S1SU\Ucemnn	%;-"
 
	 ZZ[$++i2P2PR]^^^^^^^^^r<   c                   K   |                                   |                     |          r| j        }n|                     |          }g }g }t	          dt          |                    D ]b}|                     ||                   }|                     |          }|                    |           |                    |dz   |z              c| j	        d         d         }	|	t          | j        dz             |                     |                                           }
|
| j        z   dz   | j        z   }|                     |                     |          |                     | j                  t(          j        d          }d	|
||g| j        | j        |d
}|                     |	||                     ||          |           d{V S )a  
         * @ignore
        subscribes to a websocket channel using watchMultiple
        :see: https://docs.cloud.coinbase.com/intx/docs/websocket-overview#subscribe
        :param str name: the name of the channel
        :param string|str[] [symbol]: unified market symbol
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: subscription to a websocket channel
        r   rA   r)   r   NrE   rF   rG   rH   )rI   rL   rJ   rK   rM   rN   rO   )rP   is_emptyr>   rR   rangerQ   	market_idrC   appendr3   r   rD   number_to_stringsecondsrX   rY   rZ   r[   r\   r]   r^   r_   watch_multiplera   )r9   r=   r>   rb   messageHashesrd   imarketIdrC   rh   ri   rj   rO   rk   s                 r;   subscribe_multiplez(coinbaseinternational.subscribe_multiplep   s      	'')))==!! 	3lGG))'22G
q#g,,'' 	7 	7A~~gaj11H[[**Fh'''  v!56666it$;tw)SSTTT))$,,..99	4;&3dmCIIdkk$//1F1Ft{1S1SU\Ucemnn	%;-"
 
	 ((mT[[TZ=[=[]jkkkkkkkkkr<   rC   returnc                 B   K   |                      d|g|           d{V S )ax  
        watch the current funding rate
        :see: https://docs.cloud.coinbase.com/intx/docs/websocket-channels#funding-channel
        :param str symbol: unified market symbol
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: a `funding rate structure <https://docs.ccxt.com/#/?id=funding-rate-structure>`
        RISKN)rk   )r9   rC   rb   s      r;   watch_funding_ratez(coinbaseinternational.watch_funding_rate   s2       ^^FVHf=========r<   c                 @   K   |                      d||           d{V S )a  
        watch the funding rate for multiple markets
        :see: https://docs.cloud.coinbase.com/intx/docs/websocket-channels#funding-channel
        :param str[]|None symbols: list of unified market symbols
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: a dictionary of `funding rates structures <https://docs.ccxt.com/#/?id=funding-rates-structure>`, indexe by market symbols
        rz   N)rw   )r9   r>   rb   s      r;   watch_funding_ratesz)coinbaseinternational.watch_funding_rates   s2       ,,VWfEEEEEEEEEr<   c                 |   K   d}|                      |ddd          \  }}|                     ||g|           d{V S )a  
        watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
        :see: https://docs.cloud.coinbase.com/intx/docs/websocket-channels#instruments-channel
        :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   r+   r,   )handle_option_and_paramsrk   )r9   rC   rb   r+   s       r;   watch_tickerz"coinbaseinternational.watch_ticker   sU       77yZbcc^^GfXv>>>>>>>>>r<   clientc                     |                      |          }|                     |d          }|                    ||           |                    ||dz   |d         z              d S Nr+   rA   rC   )parse_ws_instrumentsafe_stringresolver9   r   messagetickerr+   s        r;   handle_instrumentz'coinbaseinternational.handle_instrument   sh    4 ))'22""7I66vw'''vw~x0@@AAAAAr<   r   c           	         |                      |d          }|                      |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 )N
product_idrL   inforC   -ri   datetimehighlowbid	bidVolumeask	askVolumevwapopencloselastpreviousClosechange
percentagetotal_24_hour_quantitytotal_24_hour_volume)average
baseVolumequoteVolume)r   safe_tickersafe_symbol	parse8601)r9   r   rU   rv   r   s        r;   r   z)coinbaseinternational.parse_ws_instrument   sm   6 ##FL99##FF33 !
F!
d&&x==!
 11!
 	!

 D!
 4!
 4!
 !
 4!
 !
 D!
 D!
 T!
 D!
 T!
  d!!
" $#!
$ **63KLL++F4JKK)!
 !
 !
   	r<   c                     |                      |          }|                     |d          }|                    ||           |                    ||dz   |d         z              d S r   )parse_ws_tickerr   r   r   s        r;   handle_tickerz#coinbaseinternational.handle_ticker
  sh    2 %%g..""7I66vw'''vw~x0@@AAAAAr<   rU   c                    |                      |d          }|                      |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          S )NrL   r   r   rC   ri   r   r   	bid_pricer   bid_qtyr   	ask_pricer   ask_qtyr   r   r   r   r   r   r   r   r   )r   r   r   )r   r   r   r   safe_number)r9   r   rU   r   rv   s        r;   r   z%coinbaseinternational.parse_ws_ticker(  s    ##FF33##FL99 !
F!
d&&x88!
 11!
 	!

 4##FK88!
 ))&)<<!
 4##FK88!
 ))&)<<!
 D!
 4!
 D!
 T!
 D!
 d!
 $!
  t!!
" D#!
$ !)!
 !
 !
   	r<   sincelimitc                 D   K   |                      |g|||           d{V S )a5  
        get the list of most recent trades for a particular symbol
        :see: https://docs.cloud.coinbase.com/intx/docs/websocket-channels#match-channel
        :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   rC   r   r   rb   s        r;   watch_tradesz"coinbaseinternational.watch_tradesO  s6       22F8UE6RRRRRRRRRr<   c                 j  K   |                                   d{V  |                     |dddd          }|                     d||           d{V }| j        rB|                     |d          }|                     |d          }|                    ||          }|                     |||dd          S )a  
        get the list of most recent trades for a list of symbols
        :param str[] symbols: 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>`
        NFTMATCHr   rC   ri   )load_marketsrR   rw   
newUpdates	safe_dictr   getLimitfilter_by_since_limit)r9   r>   r   r   rb   tradesfirsttradeSymbols           r;   r   z.coinbaseinternational.watch_trades_for_symbols[  s       !!!!!!!!!%%gtUD$GG..wHHHHHHHH? 	8NN61--E**5(;;KOOK77E))&%TRRRr<   c                    |                      |          }|d         }|                     |d          }|| j        vr5|                     | j        dd          }t          |          }|| j        |<   | j        |         }|                    |           || j        |<   |                    ||           |                    ||dz   |d         z              |S )NrC   r+   r.   r-   rA   )parse_ws_trader   r   safe_integerr4   r   rp   r   )	r9   r   r   traderC   r+   r   tradesArrayCachetradesArrays	            r;   handle_tradez"coinbaseinternational.handle_tradem  s     ##G,,x""7I66$+%%%%dlM4HHE)%00"2DKk&)5!!!)F{G,,,{GdNU8_$DEEEr<   c                    |                      |dd          }|                     |d          }|                     ||                     |d          d |                     |          ||                     ||          d |                     |d          d |                     |d          |                     |d          d d d          S )	NrC   r   rL   match_idagressor_sidetrade_price	trade_qty)r   rD   orderri   r   rC   rI   sidetakerOrMakerpriceamountcostfee)safe_string_2r   
safe_trader   r   safe_string_lower)r9   r   rU   rv   r   s        r;   r   z$coinbaseinternational.parse_ws_trade  s     %%eX|DD##E622""5*5511 &&x88**5/BB %%e];;&&uk:: 
  
   	r<   c                 B   K   |                      |g||           d{V S )M  
        watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
        :see: https://docs.cloud.coinbase.com/intx/docs/websocket-channels#level2-channel
        :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
        :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   rC   r   rb   s       r;   watch_order_bookz&coinbaseinternational.watch_order_book  s4       66xOOOOOOOOOr<   c                 t   K   |                                   d{V  |                     d||           d{V S )r   NLEVEL2)r   rw   )r9   r>   r   rb   s       r;   r   z2coinbaseinternational.watch_order_book_for_symbols  sV       !!!!!!!!!,,XwGGGGGGGGGr<   c                    |                      |d          }|                      |d          }|                     |          }|                      |d          }|                      |d          }|| j        vr:|                     | j        dd          }|                     i |          | j        |<   | j        |         }	|dk    r4|                     ||d dd	          }
|	                    |
           ||	d
<   n-|                     |dg           }| 	                    |	|           |                     |d          |	d<   ||	d<   | 
                    |          |	d<   |	| j        |<   |                    |	|dz   |z              d S )NrI   r   rL   r+   watchOrderBookLimitr-   SNAPSHOTbidsasksrC   changessequencerW   r   ri   rA   )r   r   
orderbooksr   r4   
order_bookparse_order_bookreset	safe_listhandle_deltasr   r   )r9   r   r   rI   rv   rC   r   r+   r   	orderbookparsedSnapshotr   s               r;   handle_order_bookz'coinbaseinternational.handle_order_book  s   H 00##G\::!!(++##GV44""7I66$/))%%dl4I4PPE&*oob%&@&@DOF#OF+	:!227FD&RXYYNOON+++"(IhnnWi<<Gy'222!..w
CC	' (	*!%!9!9	+"+y'D.6"9:::::r<   c                     |                      |d          }|dk    rdnd}|                     |d          }|                     |d          }||         }|                    ||           d S )Nr   buyr   r   r@      )r   
safe_floatstore)r9   r   deltarawSider   r   r   booksides           r;   handle_deltaz"coinbaseinternational.handle_delta  ss    ((22!U**vvq))**T?uf%%%%%r<   c                 ~    t          dt          |                    D ]}|                     |||                    d S )Nr   )rn   rQ   r   )r9   r   deltasru   s       r;   r   z#coinbaseinternational.handle_deltas  sH    q#f++&& 	4 	4Ai3333	4 	4r<   c                     |S N )r9   r   r   s      r;   handle_subscription_statusz0coinbaseinternational.handle_subscription_status  s	    2 r<   c                     |                      |d          }|                     |          }|                    ||dz   |d         z              d S r   )r   parse_funding_rater   )r9   r   r   r+   fundingRates        r;   handle_funding_ratez)coinbaseinternational.handle_funding_rate   sT    . ""7I66--g66{GdN[5J$JKKKKKr<   c                    |                      |d          }|dk    rdS |                      |d          }|                      |d          }	 | j        dz   |z   |z   }|                     | j        d         ||           |                     | j        d         ||           t          |          # t          $ r}|                    |           Y d }~nd }~ww xY wd	S )
NrI   REJECTFreasonr    r1   broadT)r   rD   throw_exactly_matched_exceptionr5   throw_broadly_matched_exceptionr   	Exceptionreject)r9   r   r   rI   r   errMsgfeedbackes           r;   handle_error_messagez*coinbaseinternational.handle_error_message;  s     0085!!'844!!'955	w}v-6H001I6S[\\\001I6S[\\\))) 	 	 	MM!	ts   A#B/ /
C9CCc                    |                      ||          rd S |                     |d          }| j        | j        | j        | j        | j        | j        | j        d}|                     |d          }|dk    r%|                     |d          }t          |          | 	                    ||          }| |||           d S d S )Nr+   )SUBSCRIPTIONSINSTRUMENTSr,   r   r   FUNDINGrz   rI   errorr   )
r  r   r   r   r   r   r   r   r   
safe_value)r9   r   r   r+   methodsrI   errorMessagemethods           r;   handle_messagez$coinbaseinternational.handle_messageR  s    $$VW55 	F""7I66!<1(&,/&
 
 007??++GY??L---'22F67##### r<   r   )&__name__
__module____qualname__r8   rV   r   rk   rw   r{   r   r}   r   r   r
   r   dictr   r   objectr   r   r   r	   r   r   r   r   r   r   r   r   r   r   r   r   r  r  __classcell__)r:   s   @r;   r   r      s       0 0 0 0 0d =A )_ )_C )_' )_ )_ )_ )_V FJRT %l %lS %l7 %l %l %l %lN <> > >s >" > > > > DF F Fc F" F F F F 68 
? 
? 
?F 
? 
? 
? 
?B B B B B>2 2$ 2 2 2 2hBF B B B B<% %f %f % % % % %N <@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$  8   > @DB 	P 	PS 	P 	PS\ 	P 	P 	P 	P SW_a 
H 
H$s) 
HC 
Hfo 
H 
H 
H 
H8; 8; 8;t& & &4 4 4  6L& L L L L66    .$ $ $ $ $ $ $r<   r   )ccxt.async_supportccxt ccxt.async_support.base.ws.cacher   r^   ccxt.base.typesr   r   r   r   r   r	   !ccxt.async_support.base.ws.clientr
   typingr   ccxt.base.errorsr   r   r   async_supportr   r   r<   r;   <module>r!     s        7 7 7 7 7 7  J J J J J J J J J J J J J J J J 4 4 4 4 4 4       * * * * * * 0 0 0 0 0 0 ) ) ) ) ) )T	$ T	$ T	$ T	$ T	$D.D T	$ T	$ T	$ T	$ T	$r<   