
    'j                          d dl Z d dlZd dlZd dl mZmZ d dlmZ d dlmZ d dlm	Z	m
Z
mZmZmZmZmZ d dlmZ d dlmZmZ d dlmZ d d	lmZ d d
lmZ  G d d          ZdS )    N)QueueLock)Future)Logger)DictUnionAnyOptionalListCallable	Awaitable)SlackApiError)AsyncWebSocketMessageListenerAsyncSocketModeRequestListener)SocketModeRequest)SocketModeResponse)AsyncWebClientc                      e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   eed<   eed<   e	ed	<   e
eeed eee         ged
         f         f                  ed<   e
eeed eged
         f         f                  ed<   defdZdefdZdefdZd Zd Zd defdZd ZdefdZdeeeef         ef         fdZdefdZd Z d Z!dededd
fdZ"d
S )!AsyncBaseSocketModeClientlogger
web_client	app_tokenwss_uriauto_reconnect_enabledtrace_enabledclosedconnect_operation_lockmessage_queueNmessage_listenerssocket_mode_request_listenersreturnc                   K   	 | j                             | j                   d {V }|d         S # t          $ r}|j        d         dk    rt          |j        j                            dd                    }| j        	                    d| d           t          j        |           d {V  |                                  d {V cY d }~S | j                            d	|            |d }~ww xY w)
N)r   urlerrorratelimitedzRetry-After30zRate limited. Retrying in z seconds...zFailed to retrieve WSS URL: )r   apps_connections_openr   r   responseintheadersgetr   infoasynciosleepissue_new_wss_urlr$   )selfr(   edelays       c/usr/local/lib/hermes-agent/venv/lib/python3.11/site-packages/slack_sdk/socket_mode/async_client.pyr/   z+AsyncBaseSocketModeClient.issue_new_wss_url+   s1     	!_BBT^B\\\\\\\\HE?" 	 	 	z'"m33AJ.22=$GGHH  !Pe!P!P!PQQQmE*********!3355555555555555 !!"D"D"DEEE	s!   -2 
C5BC0C5C00C5c                 
   K   dS )NF r0   s    r3   is_connectedz&AsyncBaseSocketModeClient.is_connected<   s      u    c                 
   K   dS )N r5   r6   s    r3   
session_idz$AsyncBaseSocketModeClient.session_id?   s      rr8   c                 "   K   t                      NNotImplementedErrorr6   s    r3   connectz!AsyncBaseSocketModeClient.connectB         !###r8   c                 "   K   t                      r=   r>   r6   s    r3   
disconnectz$AsyncBaseSocketModeClient.disconnectE   rA   r8   Fforcec                   K   |                                   d {V }	 | j                                         d {V  | j        r| j                            d| d           |s|                                  d {V s9|                                  d {V | _        | 	                                 d {V  | j        
                                du r@| j                                         | j        r"| j                            d| d           d S d S d S # | j        
                                du r?| j                                         | j        r | j                            d| d           w w w xY w)NzDFor reconnection, the connect_operation_lock was acquired (session: )TzCThe connect_operation_lock for reconnection was released (session: )r;   r   acquirer   r   debugr7   r/   r   r@   lockedrelease)r0   rD   r;   s      r3   connect_to_new_endpointz1AsyncBaseSocketModeClient.connect_to_new_endpointH   s     ??,,,,,,,,
	{-55777777777! x!!"vis"v"v"vwww %$"3"3"5"5555555 %%)%;%;%=%=======llnn$$$$$$$*1133t;;+33555% {K%%&ylv&y&y&yzzzzz <;{ { *1133t;;+33555% {K%%&ylv&y&y&yzzzz <{s   BD AE3c                 L   K   d| _         |                                  d {V  d S )NT)r   rC   r6   s    r3   closezAsyncBaseSocketModeClient.closeW   s5      oor8   messagec                 "   K   t                      r=   r>   )r0   rN   s     r3   send_messagez&AsyncBaseSocketModeClient.send_message[   rA   r8   r(   c                   K   t          |t                    rA|                     t          j        |                                                     d {V  d S |                     t          j        |                     d {V  d S r=   )
isinstancer   rP   jsondumpsto_dict)r0   r(   s     r3   send_socket_mode_responsez3AsyncBaseSocketModeClient.send_socket_mode_response^   s      h 233 	:##DJx/?/?/A/A$B$BCCCCCCCCCCC##DJx$8$899999999999r8   c                 *  K   | j                             |           d {V  | j        j        t          j        k    rV| j                                         }|                                  d {V }| j                            d| d| d           d S d S )Nz,A new message enqueued (current queue size: , session: rF   )	r   putr   levelloggingDEBUGqsizer;   rH   )r0   rN   
queue_sizer;   s       r3   enqueue_messagez)AsyncBaseSocketModeClient.enqueue_messaged   s       $$W---------;--+1133J#00000000JKqZqqdnqqqrrrrr .-r8   c                   K   |                                   d {V }	 | j        st	 |                                  d {V  nO# t          j        $ r | j        s Y n6t
          $ r*}| j                            d| d|            Y d }~nd }~ww xY w| j        rd S d S # t          j        $ r' | j        r| j        	                    d| d            w xY w)NzFailed to process a message: rX   z&The running process_messages task for z is now cancelled)
r;   r   process_messager-   CancelledError	Exceptionr   	exceptionr   rH   )r0   r;   r1   s      r3   process_messagesz*AsyncBaseSocketModeClient.process_messagesk   sb     ??,,,,,,,,
	k 	ff..0000000000-     ;    f f fK))*d!*d*dXb*d*deeeeeeeef k 	f 	f 	f 	f 	f % 	 	 	! j!!"h:"h"h"hiii	s@   B A  B BB 	B# BB B
B 6Cc                    K   | j                                          d {V }|Ui }|                    d          rt          j        |          }t          j        |                     ||                    }d S d S )N{)r   r+   
startswithrS   loadsr-   ensure_futurerun_message_listeners)r0   raw_messagerN   _s       r3   ra   z)AsyncBaseSocketModeClient.process_message}   s       .2244444444"G%%c** 2*[11%3D4N4NwXc4d4deeAAA	 #"r8   rl   c                 &  K   |                                   d {V }|                    d          |                    d          }}| j        j        t          j        k    r$| j                            d| d| d| d           	 |                    d          dk    r_|                     d	           d {V  	 | j        j        t          j        k    r&| j                            d
| d| d| d           d S d S | j        D ]M}	  || ||           d {V  # t          $ r*}| j        
                    d| d|            Y d }~Fd }~ww xY wt          | j                  dk    rjt          j        |          }|T| j        D ]L}	  || |           d {V  # t          $ r*}| j        
                    d| d|            Y d }~Ed }~ww xY wn7# t          $ r*}| j        
                    d| d|            Y d }~nd }~ww xY w| j        j        t          j        k    r&| j                            d
| d| d| d           d S d S # | j        j        t          j        k    r%| j                            d
| d| d| d           w w xY w)Ntypeenvelope_idz"Message processing started (type: z, envelope_id: rX   rF   rC   T)rD   z$Message processing completed (type: z"Failed to run a message listener: r   z"Failed to run a request listener: z!Failed to run message listeners: )r;   r+   r   rZ   r[   r\   rH   rK   r   rc   rd   lenr    r   	from_dict)	r0   rN   rl   r;   ro   rp   listenerr1   requests	            r3   rk   z/AsyncBaseSocketModeClient.run_message_listeners   s     ??,,,,,,,,
#KK//]1K1Kk;--KoToo+ooblooo  	{{6""l22222>>>>>>>>>& { GM11!!.!. .$/. . !+. . .     21# !2 k kk"(4+>>>>>>>>>>  k k kK))*iq*i*i]g*i*ijjjjjjjjk 4566::+5g>>&$($F s ss"*(4"9"999999999( s s s K112qWX2q2qeo2q2qrrrrrrrrs 	b 	b 	bK!!"`a"`"`T^"`"`aaaaaaaa	b { GM11!!.!. .$/. . !+. . .     21t{ GM11!!.!. .$/. . !+. . .    2s   5G >	G DG 
E& EG E:G FG 
G( GG GG I 
H
  H I H

I AJ)F)#__name__
__module____qualname__r   __annotations__r   strboolr   r   r   r   r   r   dictr
   r   r   r   r/   r7   r;   r@   rC   rK   rM   rP   r   r	   r   rV   r_   re   ra   rk   r5   r8   r3   r   r      sV        NNNNNNLLL    LLL    )14#GSWXY[	
    $(*13DEyQUVWY	
$       "D    #    $ $ $$ $ ${ {4 { { { {     $# $ $ $ $:d38nN`>`8a : : : :sS s s s s  $f f f#4 #c #d # # # # # #r8   r   )r-   rS   r[   r   r   asyncio.futuresr   r   typingr   r   r	   r
   r   r   r   slack_sdk.errorsr   %slack_sdk.socket_mode.async_listenersr   r   slack_sdk.socket_mode.requestr   slack_sdk.socket_mode.responser   slack_sdk.web.async_clientr   r   r5   r8   r3   <module>r      s@              " " " " " "       H H H H H H H H H H H H H H H H H H * * * * * *        < ; ; ; ; ; = = = = = = 5 5 5 5 5 5U U U U U U U U U Ur8   