
    iM<                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZmZ d dl	m
Z
mZ d dlZd dlZd dlmZ d dlmZ d dl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 d dl m!Z! d dl"T d dl#m$Z$m%Z% d dl&T d dl'T d dl(m)Z) d dl*m+Z+ 	  e j,                    Z-n*# e.$ r"  e j/                    Z- e j0        e-           Y nw xY wde)de1de1fdZ2de3de+fdZ4de3fdZ5d Z6d Z7d Z8d Z9 G d de:          Z;dS )    N)CallableOptional)urlparseparse_qs)InvalidHandshake)ExpiringCache)UTF_8FEISHU_DOMAIN
USER_AGENT)LogLevel)JSON)logger)Strings)build_user_agent)EventDispatcherHandler)*)	FrameTypeMessageType)RepeatedCompositeFieldContainer)Frameheaderskeyreturnc                 R    | D ]}|j         |k    r	|j        c S t          |          N)r   valueHeaderNotFoundException)r   r   headers      Z/home/piyush/.hermes/hermes-agent/venv/lib/python3.11/site-packages/lark_oapi/ws/client.py_get_by_keyr    %   sA        :<  "#
&
&&    
service_idc                     t                      }|j                                        }t          |_        t
          j        j        |_        | |_        t          j
        j        |_        d|_        d|_        |S )Nr   )r   r   addHEADER_TYPEr   r   PINGr   servicer   CONTROLmethodSeqIDLogID)r"   framer   s      r   _new_ping_framer-   -   sY    GGE]  FFJ#)FLEM$*ELEKEKLr!   nc                     dddd}d| cxk    rdk    rn nd}n|                     | dz  d          }t          |           |z   S )Nstndrd)         
      th)getstr)r.   suffixessuffixs      r   _ordinalr=   :   sX    DT**H	Q}}}}"}}}}}a"fd++q66F?r!   c                  >   K   	 t          j        d           d {V  )NTi  )asynciosleep r!   r   _selectrB   C   s2      "mD!!!!!!!!!"r!   c                  \    t          j        t          j                  j        } d| v rdd iS i S )Nproxy)inspect	signature
websocketsconnect
parameters)paramss    r   _ws_connect_kwargsrK   H   s4    z122=F& Ir!   c                 x    t          | dd           }||S t          | dd           }|d S t          |dd           S )Nr   response)getattr)er   rM   s      r   _get_ws_conn_exception_headersrP   R   sL    aD))Gq*d++Ht8Y---r!   c                    t          |           }|| |                    t                    }|                    t                    }||| t	          |          }|t
          k    rR|                    t                    }t	          |          t          k    rt          ||          t          ||          |t          k    rt          ||          t          ||          r   )rP   r9   HEADER_HANDSHAKE_STATUSHEADER_HANDSHAKE_MSGintAUTH_FAILEDHEADER_HANDSHAKE_AUTH_ERRCODEEXCEED_CONN_LIMITClientExceptionServerException	FORBIDDEN)rO   r   codemsg	auth_codes        r   _parse_ws_conn_exceptionr^   ]   s    ,Q//G;;.//D
++*
+
+C|s{t99D{KK =>>	y>>...!$,,,!$,,,			dC(((dC(((r!   c                   .   e Zd Zej        dedddfdededededede	e         d	e	e
         d
dfdZd&dZd Zd&dZd Zd
efdZded
dfdZdefdZdefdZd Zd&dZded
efdZd ZdefdZdededed ed
e	e         f
d!Zd"ed
dfd#Zd$ed
efd%ZdS )'ClientNTapp_id	log_levelevent_handlerdomainauto_reconnectsourceextra_ua_tagsr   c	                    || _         || _        || _        || _        || _        || _        t          ||          | _        d | _        d| _	        d| _
        d| _        d| _        d| _        d| _        d| _        t!          d          | _        t%          j                    | _        d | _        d | _        t/          j        |j                   d S )	N)rf   
extra_tags    x   )clear_intervalc                      d S r   rA   rA   r!   r   <lambda>z!Client.__init__.<locals>.<lambda>   s    4 r!   c                      d S r   rA   rA   r!   r   rp   z!Client.__init__.<locals>.<lambda>   s    $ r!   )_app_id_app_secret
_log_level_event_handler_auto_reconnect_domainr   _user_agent_conn	_conn_url_service_id_conn_id_reconnect_nonce_reconnect_count_reconnect_interval_ping_intervalr   _cacher?   Lock_lockon_reconnectingon_reconnectedr   setLevelr   )	selfra   
app_secretrb   rc   rd   re   rf   rg   s	            r   __init__zClient.__init__u   s     # *$-6C%3" !1= Y Y YCG
  "
 &(%'(+ #&%2"%E%E%E\^^
 4@<2>,	(((((r!   c                    	 t                               |                                            n# t          $ r/}t	          j        |                     d|                     |d }~wt          $ r}t	          j        |                     d|                     t                               |                                            | j	        r-t                               | 
                                           n|Y d }~nd }~ww xY wt                               |                                            t                               t                                 d S )Nconnect failed, err: {})looprun_until_complete_connectrX   r   error_fmt_log	Exception_disconnectrv   
_reconnectcreate_task
_ping_looprB   r   rO   s     r   startzClient.start   s>   	##DMMOO4444 	 	 	L'@!DDEEEG 	 	 	L'@!DDEEE##D$4$4$6$6777# ''(9(9:::: ;::::		 	**+++		*****s!   ,/ 
D*A##D0B
C??Dc                   K   	 	 | j         ut          t          | j                            }|                     |                                           d {V  t          j        |                     d                     n?# t          $ r2}t          j
        |                     d|                     Y d }~nd }~ww xY wt          j        | j                   d {V  n$# t          j        | j                   d {V  w xY w)NTzping successzping failed, err: {})ry   r-   rT   r{   _write_messageSerializeToStringr   debugr   r   warnr?   r@   r   )r   r,   rO   s      r   r   zClient._ping_loop   s*     		99:)+C0@,A,ABBE--e.E.E.G.GHHHHHHHHHL~!>!>??? F F FDMM*@!DDEEEEEEEEF mD$78888888888gmD$78888888888		9s0   A<B C! 
B>(B94C! 9B>>C! !!Dc                   K   | j                                          d {V  | j        d S 	 |                                 }t	          |          }t          |j                  }|t                   d         }|t                   d         }t          j
        |fi t                       d {V }|| _        || _        || _        || _        t          j        |                     d|                     t$                              |                                            n&# t*          $ r}t-          |           Y d }~nd }~ww xY w| j                                          d S # | j                                          w xY w)Nr   zconnected to {})r   acquirery   _get_conn_urlr   r   query	DEVICE_ID
SERVICE_IDrG   rH   rK   rz   r|   r{   r   infor   r   r   _receive_message_loopr   r^   release)r   conn_urluqconn_idr"   connrO   s           r   r   zClient._connect   s     j  """"""""":!F	!))++H""A!!A	l1oG:q)J#+HMM8J8L8LMMMMMMMMDDJ%DN#DM)DK&7BBCCCT7799:::: 	( 	( 	($Q''''''''	( J     DJ    s0   C1D E 
E(D<7E <EE E:c                   K   	 	 | j         t          d          | j                                          d {V }t                              |                     |                     c# t          $ rq}t          j        | 	                    d|                     | 
                                 d {V  | j        r|                                  d {V  n|Y d }~d S d }~ww xY w)NTzconnection is closedz"receive message loop exit, err: {})ry   ConnectionClosedExceptionrecvr   r   _handle_messager   r   r   r   r   rv   r   )r   r\   rO   s      r   r   zClient._receive_message_loop   s     	<:%34JKKK JOO--------  !5!5c!:!:;;;	<
  	 	 	L'KQOOPPP""$$$$$$$$$# oo'''''''''' ('''''		s   A$A( (
C#2A&CC#c                 "   t          j        | j                  st          j        | j                  rt	          t
          d          t          j        | j        t          z   ddt          | j        i| j        | j        d          }|j        t          j        j        k    rt!          |j        d          t#          j        t'          |j        t*                    t,                    }|j        t          k    rni|j        t0          k    rt!          |j        d          |j        t2          k    rt!          |j        |j                  t	          |j        |j                  |j        }|j        |                     |j                   |j        S )Nzapp_id or app_secret is nulllocalezh)AppID	AppSecret)r   jsonzsystem busy)r   is_emptyrr   rs   rX   NO_CREDENTIALrequestspostrw   GEN_ENDPOINT_URIr   rx   status_codehttp
HTTPStatusOKrY   r   	unmarshalr:   contentr	   EndpointRespr[   SYSTEM_BUSYINTERNAL_ERRORr\   dataClientConfig
_configureURL)r   rM   respr   s       r   r   zClient._get_conn_url   s]   DL)) 	QW-=d>N-O-O 	Q!-1OPPP=L++$D,
 !- 

 

 

 4?#555!("6FFF~c("2E::LII9??Y+%%!$)];;;Y.((!$)TX666!$)TX666y(OOD-...xr!   r\   c                   K   	 t                      }|                    |           t          |j                  }|t          j        k    r|                     |           d {V  d S |t          j        k    r|                     |           d {V  d S d S # t          $ r3}t          j
        |                     d|                     Y d }~d S d }~ww xY w)Nzhandle message failed, err: {})r   ParseFromStringr   r)   r(   _handle_control_frameDATA_handle_data_framer   r   r   r   )r   r\   r,   ftrO   s        r   r   zClient._handle_message  s     
	MGGE!!#&&&5<((BY&&&0077777777777y~%%--e44444444444 &% 	M 	M 	ML'GKKLLLLLLLLL	Ms   A"B (+B 
C!(CCr,   c                   K   |j         }t          |t                    }t          |          }|t          j        k    rd S |t          j        k    ryt          j        |                     d                     |j	        sd S t          j        t          |j	        t                    t                    }|                     |           d S d S )Nzreceive pong)r   r    r%   r   r&   PONGr   r   r   payloadr   r   r:   r	   r   r   )r   r,   hstype_message_typeconfs         r   r   zClient._handle_control_frame  s      ]B,,"5));+++F[---L~66777= >#emU";";\JJDOOD!!!!! .-r!   c                 8  K   |j         }t          |t                    }t          |t                    }t          |t                    }t          |t
                    }t          |t                    }|j        }t          |          dk    r6| 	                    |t          |          t          |          |          }|d S t          |          }	t          j        |                     d|	j        |||                    t                                          t#          t$          j        j                  }
	 t          t+          t-          j                    dz                      }|	t          j        k    r| j                            |          }n|	t          j        k    rd S d S t          t+          t-          j                    dz                      }|                                }t8          |_        t=          ||z
            |_        |Ct?          j         tC          j"        |          #                    t                               |
_$        nf# tJ          $ rY}t          j&        |                     d|	j        |||                     t#          t$          j        j'                  }
Y d }~nd }~ww xY wtC          j"        |
          #                    t                     |_        | (                    |)                                           d {V  d S )Nr3   zLreceive message, message_type: {}, message_id: {}, trace_id: {}, payload: {})r[   i  zNhandle message failed, message_type: {}, message_id: {}, trace_id: {}, err: {})*r   r    HEADER_MESSAGE_IDHEADER_TRACE_ID
HEADER_SUM
HEADER_SEQr%   r   rT   _combiner   r   r   r   r   decoder	   Responser   r   r   roundtimeEVENTru   _do_without_validationCARDr$   HEADER_BIZ_RTr   r:   base64	b64encoder   marshalencoder   r   r   INTERNAL_SERVER_ERRORr   r   )r   r,   r   msg_idtrace_idsum_seqr   plr   r   r   resultendr   rO   s                   r   r   zClient._handle_data_frame   s     ]R!233r?332z**"j))B,,]t99q==vs4yy#c((B??Bz"5))T]]#q#/#5vxSXIYIY[ [ 	\ 	\ 	\ T_/000	HdikkD01122E{000,CCBGG!111eDIKK$.//00CVVXXF&FJsU{++FL!",T\&-A-A-H-H-O-OPP	 	H 	H 	HLn*0&(AG GH H H !FGGGDDDDDD		H T**11%88!!%"9"9";";<<<<<<<<<<<s!   :A+I )B,I 
J9 AJ44J9c                   K   	 |                                   n?# t          $ r2}t          j        |                     d|                     Y d }~nd }~ww xY w| j        dk    r5t          j                    | j        z  }t          j        |           d {V  | j	        dk    rt          | j	                  D ]S}|                     |           d {V r|                                   d S t          j        | j                   d {V  Tt          d| j	         d          d}	 |                     |           d {V r|                                  d S t          j        | j                   d {V  |dz  }V)Nz#on_reconnecting callback raised: {}r   z-unable to connect to the server after trying z timesTr3   )r   r   r   warningr   r}   randomr?   r@   r~   range_try_connect_fire_on_reconnectedr   ServerUnreachableException)r   rO   nonceis       r   r   zClient._reconnectK  s     	T  """" 	T 	T 	TN4==)NPQRRSSSSSSSS	T  1$$MOOd&;;E-&&&&&&&&&  A%%4011 > >**1-------- --///FFmD$<==========,]@U]]]_ _ _ A**1-------- --///FmD$<=========Qs    
A(AAc                     	 |                                   d S # t          $ r3}t          j        |                     d|                     Y d }~d S d }~ww xY w)Nz"on_reconnected callback raised: {})r   r   r   r   r   r   s     r   r   zClient._fire_on_reconnectedj  st    	S!!!!! 	S 	S 	SN4==)MqQQRRRRRRRRR	Ss    
A(AAcntc           	        K   t          j        |                     dt          |dz                                  	 |                                  d {V  dS # t
          $ r/}t          j        |                     d|                     |d }~wt          $ r3}t          j        |                     d|                     Y d }~dS d }~ww xY w)Nz#trying to reconnect for the {} timer3   Tr   F)r   r   r   r=   r   rX   r   r   )r   r   rO   s      r   r   zClient._try_connectp  s      DMM"GRUXYRYIZIZ[[\\\	--//!!!!!!!4 	 	 	L'@!DDEEEG 	 	 	L'@!DDEEE55555	s#   A 
C"*BC(CCc                 >  K   	 | j                                          d {V  | j        8	 d | _        d| _        d| _        d| _        | j                                          d S | j                                         d {V  t          j	        | 
                    d| j                             d | _        d| _        d| _        d| _        | j                                          d S # d | _        d| _        d| _        d| _        | j                                          w xY w)Nrj   zdisconnected to {})r   r   ry   rz   r|   r{   r   closer   r   r   )r   s    r   r   zClient._disconnect|  s/     	!*$$&&&&&&&&&z! DJDNDM!DJ      *""$$$$$$$$$K&:DNKKLLLDJDNDM!DJ     	 DJDNDM!DJ    s   &C% "AC% %7Dr   c                    K   | j         4 d {V  | j        t          d          | j                            |           d {V  d d d           d {V  d S # 1 d {V swxY w Y   d S )Nz*connection is closed, write message failed)r   ry   r   send)r   r   s     r   r   zClient._write_message  s	     : 	( 	( 	( 	( 	( 	( 	( 	(z!/0\]]]*//$'''''''''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(s   7A
A$'A$r   r   r   bsc                     | j                             |          }|)dg|z  }|||<   | j                             ||d           d S |||<   d}|D ](}|s| j                             ||d            d S ||z  })|S )Nr!      )r   r9   set)	r   r   r   r   r   valbufr   vs	            r   r   zClient._combine  s    koof%%;%$,CCHKOOFC+++4C 	 	A Q///tt!GBB	r!   r   c                 f    |j         | _        |j        | _        |j        | _        |j        | _        d S r   )ReconnectCountr~   ReconnectIntervalr   ReconnectNoncer}   PingIntervalr   )r   r   s     r   r   zClient._configure  s4     $ 3#'#9  $ 3"/r!   fmtc                 L     |j         | }| j        dk    r|d| j         dz  }|S )Nrj   z
 [conn_id=])formatr|   )r   r  argslogs       r   r   zClient._fmt_log  s:    cj$=B00000C
r!   )r   N) __name__
__module____qualname__r   INFOr
   r:   r   boolr   listr   r   r   r   r   r   bytesr   r   r   r   r   r   rT   r   r   r   r   r   r   r   rA   r!   r   r`   r`   t   sN        (0}9=,(,)-15() ()() %() !7	()
 () "&() "#() !)() ;?() () () ()T+ + + +"
9 
9 
9! ! ! !0   s        DM M4 M M M M" " " " ")=e )= )= )= )=V  >S S S S
c 
d 
 
 
 
! ! !( ( ( ( (s # C U xPU    $0| 0 0 0 0 0C 3      r!   r`   )<r?   r   r   rE   r   r   typingr   r   urllib.parser   r   r   rG   websockets.exceptionsr   lark_oapi.core.cacher   lark_oapi.core.constr	   r
   r   lark_oapi.core.enumr   lark_oapi.core.jsonr   lark_oapi.core.logr   lark_oapi.core.utilsr   lark_oapi.core.utils.user_agentr   "lark_oapi.event.dispatcher_handlerr   lark_oapi.ws.constlark_oapi.ws.enumr   r   lark_oapi.ws.exceptionlark_oapi.ws.model3lark_oapi.ws.pb.google.protobuf.internal.containersr   lark_oapi.ws.pb.pbbp2_pb2r   get_event_loopr   RuntimeErrornew_event_loopset_event_loopr:   r    rT   r-   r=   rB   rK   rP   r^   objectr`   rA   r!   r   <module>r.     s         % % % % % % % % + + + + + + + +      2 2 2 2 2 2 . . . . . . A A A A A A A A A A ( ( ( ( ( ( $ $ $ $ $ $ % % % % % % ( ( ( ( ( ( < < < < < < E E E E E E         4 4 4 4 4 4 4 4 $ $ $ $         _ _ _ _ _ _ + + + + + +!!7!##DD ! ! !!7!##DG4     !
'8 's 's ' ' ' '
 
 
 
 
 
    " " "
  . . .) ) ).y y y y yV y y y y ys   B $CC