
    'j61                         d Z ddl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
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mZ ddlmZ ddlmZ ddlm Z m!Z! ddl"m#Z#  G d de          Z$dS )zThe built-in Socket Mode client

* https://docs.slack.dev/apis/events-api/using-socket-mode/
* https://docs.slack.dev/tools/python-slack-sdk/socket-mode/

    N)ThreadPoolExecutor)Logger)Queue)Lock)UnionOptionalListCallableDict)BaseSocketModeClient)WebSocketMessageListenerSocketModeRequestListener)SocketModeRequest)	WebClient   )
ConnectionConnectionState   )IntervalRunner)debug_redacted_message_string   )SlackClientConfigurationErrorSlackClientNotConnectedError)load_http_proxy_from_envc            $          e Zd ZU eed<   eed<   eed<   ee         ed<   eed<   e	e
eedeee         gdf         f                  ed<   e	e
eedegdf         f                  ed	<   e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d<   eed<   eed<   e	eegdf                  ed<   e	eegdf                  ed<   e	eeee         gdf                  ed<   	 	 	 	 	 	 	 	 	 	 	 	 	 	 d5dedee         dee         dedededed eded!ed"ee         d#eeeef                  dee	eegdf                           dee	eegdf                           dee	eeee         gdf                           fd$Zd%ee         fd&Zd%efd'Zd6d(Zd6d)Zd*ed%dfd+Zd, Z d*efd-Z!d.efd/Z"d7d0ed1ee         fd2Z#d3 Z$d4 Z%dS )8SocketModeClientlogger
web_client	app_tokenwss_urimessage_queuer   Nmessage_listenerssocket_mode_request_listenerscurrent_sessioncurrent_session_statecurrent_session_runnercurrent_app_monitorcurrent_app_monitor_startedmessage_processormessage_workersauto_reconnect_enableddefault_auto_reconnect_enabledtrace_enabledreceive_buffer_sizeconnect_operation_lockon_message_listenerson_error_listenerson_close_listenersTF      
   all_message_trace_enabledping_pong_trace_enabledping_intervalconcurrencyproxyproxy_headersc                    || _         |pt          j        t                    | _        |pt                      | _        || _        | j        | _        || _	        || _
        || _        || _        |	| _        | j        dk     rt          d          d| _        t!                      | _        g | _        g | _        d| _        t+                      | _        t/          | j        d                                          | _        d| _        t/          | j        | j                  | _        d| _        t?                      | _         t/          | j!        d                                          | _"        tG          |
          | _$        || _%        | j%        *tM          | j%        '                                          dk    rtQ          | j                  }||| _%        || _)        |pg | _*        |pg | _+        |pg | _,        dS )	aV  Socket Mode client

        Args:
            app_token: App-level token
            logger: Custom logger
            web_client: Web API client
            auto_reconnect_enabled: True if automatic reconnection is enabled (default: True)
            trace_enabled: True if more detailed debug-logging is enabled (default: False)
            all_message_trace_enabled: True if all message dump in debug logs is enabled (default: False)
            ping_pong_trace_enabled: True if trace logging for all ping-pong communications is enabled (default: False)
            ping_interval: interval for ping-pong with Slack servers (seconds)
            receive_buffer_size: the chunk size of a single socket recv operation (default: 1024)
            concurrency: the size of thread pool (default: 10)
            proxy: the HTTP proxy URL
            proxy_headers: additional HTTP header for proxy connection
            on_message_listeners: listener functions for on_message
            on_error_listeners: listener functions for on_error
            on_close_listeners: listener functions for on_close
           z'Too small receive_buffer_size detected.Ng?FgMbP?)max_workersr   )-r   logging	getLogger__name__r   r   r   r,   r+   r-   r6   r7   r8   r.   r   r    r   r!   r"   r#   r$   r   r%   r   _run_current_sessionstartr&   r(   _monitor_current_sessionr'   closedr   r/   process_messagesr)   r   r*   r:   lenstripr   r;   r0   r1   r2   )selfr   r   r   r+   r-   r6   r7   r8   r.   r9   r:   r;   r0   r1   r2   env_variables                    e/usr/local/lib/hermes-agent/venv/lib/python3.11/site-packages/slack_sdk/socket_mode/builtin/client.py__init__zSocketModeClient.__init__E   s   J #; 1( ; ;$3	.D+&*&I#*)B&'>$*#6 #b((/0YZZZ"WW!#-/*#%4%6%6"&4T5NPS&T&T&Z&Z&\&\#+0(#1$2OQUQc#d#d &*ff#!/0Eu!M!M!S!S!U!U1kJJJ
:TZ%5%5%7%7!8!8A!=!=3DK@@L')
*$8$>B!"4":"4":    returnc                 ,    | j         | j         j        S d S N)r$   
session_idrI   s    rK   rQ   zSocketModeClient.session_id   s    +'22trM   c                 F    | j         d uo| j                                         S rP   )r$   	is_activerR   s    rK   is_connectedzSocketModeClient.is_connected   s$    #4/TD4H4R4R4T4TTrM   c                    | j         }| j        }| j        |                                 | _        t	          | j        | j        | j        | j        | j        | j	        | j
        | j        | j        | j        | j        | j        | j        j                  }|                                 |d|_        ||                                 || _         t+                      | _        | j        | _        | j        s d| _        | j                                         | j                            d|                                  d           d S )N)urlr   r8   r-   r6   r7   r.   r:   r;   on_message_listeneron_error_listeneron_close_listenerssl_contextTz0A new session has been established (session id: ))r$   r%   r    issue_new_wss_urlr   r   r8   r-   r6   r7   r.   r:   r;   _on_message	_on_error	_on_closer   sslconnect
terminatedcloser   r,   r+   r(   r'   rC   inforQ   )rI   old_sessionold_current_session_stater$   s       rK   rb   zSocketModeClient.connect   sC   ,0,@595O!<1133DL$;,,&*&D$($@ $ 8*, $ 0"n"n+
 
 
 	!!!$037%0".%4%6%6"&*&I#/ 	-/3D,$**,,,`DOOL]L]```aaaaarM   c                 J    | j         | j                                          d S d S rP   )r$   rd   rR   s    rK   
disconnectzSocketModeClient.disconnect   s.    + &&((((( ,+rM   messagec           
         | j         j        t          j        k    r3| j                             d|                                  d| d           	 | j                            |           d S # t          $ r}| j         j        t          j        k    r6| j                             d|                                  d| d| d           | j	        5  | 
                                r| j                            |           n2| j                             d|                                  d           |	 d d d            n# 1 swxY w Y   Y d }~d S Y d }~d S d }~ww xY w)	NzSending a message (session id: , message: r\   z&Failed to send a message (session id: 	, error: zW) as the underlying connection was replaced. Retrying the same request only one time...z!The current session (session id: z/) is no longer active. Failed to send a message)r   levelr?   DEBUGdebugrQ   r$   sendr   r/   rU   warning)rI   rj   es      rK   send_messagezSocketModeClient.send_message   s
   ;--Kh@Q@Qhh^ehhhiii	 %%g.....+ 	 	 	 { GM11!!mT__=N=N m mYZ m mgn m m m   ,  $$&& (--g6666K''3DOO<M<M 3 3 3   G 7                          	s>   A+ +
E5AEA"D;/E;D?	?ED?	EEc                 D   d| _         d| _        |                                  | j                                        r| j                                         | j                                        r| j                                         | j                                         d S )NTF)rE   r+   ri   r'   is_aliveshutdownr)   r*   rR   s    rK   rd   zSocketModeClient.close   s    &+##,,.. 	0$--///!**,, 	."++---%%'''''rM   c                     | j         j        t          j        k    r+| j                             dt          |           d           |                     |           | j        D ]} ||           d S )Nzon_message invoked: (message: r\   )r   rn   r?   ro   rp   r   enqueue_messager0   )rI   rj   listeners      rK   r^   zSocketModeClient._on_message   s    ;--Kh?\]d?e?ehhhiiiW%%%1 	 	HHW	 	rM   errorc                    d|                                   dt          |          j         d| d}| j        r| j                            |           n| j                            |           | j        D ]} ||           d S )Nzon_error invoked (session id: rm   rl   r\   )rQ   typerA   r-   r   	exceptionr{   r1   )rI   r{   error_messagerz   s       rK   r_   zSocketModeClient._on_error   s    vT__->->vvTRW[[Mavvnsvvv 	  	-K!!-0000Km,,,/ 	 	HHUOOOO	 	rM   codereasonc                 \   | j         j        t          j        k    r0| j                             d|                                  d           | j        rD| j                             d|                                  d           |                                  | j	        D ]} |||           d S )Nzon_close invoked (session id: r\   z3Received CLOSE event. Reconnecting... (session id: )
r   rn   r?   ro   rp   rQ   r+   re   connect_to_new_endpointr2   )rI   r   r   rz   s       rK   r`   zSocketModeClient._on_close   s    ;--KSt?P?PSSSTTT& 	+KjVZVeVeVgVgjjjkkk((***/ 	# 	#HHT6""""	# 	#rM   c                    | j         | j                                         r|                                 }	 | j                            d| d           d| j        _        | j                             | j                   | j                            d| d           d S # t          $ rV}d| d| d}| j	        r| j        
                    |           n | j                            |           Y d }~d S Y d }~d S d }~ww xY wd S d S )Nz@Starting to receive messages from a new connection (session id: r\   Fz:Stopped receiving messages from a connection (session id: z9Failed to start or stop the current session (session id: rm   )r$   rT   rQ   r   re   r%   rc   run_until_completion	Exceptionr-   r~   r{   )rI   rQ   rs   r   s       rK   rB   z%SocketModeClient._run_current_session  sK   +0D0N0N0P0P+**J
5  !tgq!t!t!tuuu8=*5$99$:TUUU  !nak!n!n!nooooo 5 5 5 x_i x xtu x x x% 5K))-8888K%%m444444444 9888885 ,+++s   A'B 
C?)AC::C?c           
         | j         r	 | j                                         | j        rf| j        | j                                        sH| j                            d|                                  d           |                                  d S d S d S # t          $ rS}| j        
                    d|                                  dt          |          j         d| d           Y d }~d S d }~ww xY wd S )NzEThe session seems to be already closed. Reconnecting... (session id: r\   zLFailed to check the current session or reconnect to the server (session id: rm   rl   )r(   r$   check_stater+   rT   r   re   rQ   r   r   r{   r}   rA   )rI   rs   s     rK   rD   z)SocketModeClient._monitor_current_session  s]   + 	$00222. 3D4H4PX\XlXvXvXxXx4PK$$wcgcrcrctctwww   0022222	3 34P4P
    !!b$(OO$5$5b b@DQ@Pb b]^b b b        	 	s   BB 
C0AC++C0)NNTFFFr3   r4   r5   NNNNN)rN   NrP   )&rA   
__module____qualname__r   __annotations__r   strr   r   r	   r   r   r
   dictr   r   r   r   r   boolr   intr   r   floatr   rL   rQ   rU   rb   ri   rt   rd   r^   r_   r`   rB   rD    rM   rK   r   r      s0        NNNNNNc]$,dHSMBDHIK	
    $(%,.?@$FGI	
$    j))))********''''!%%%%%%%%''''    $((((    xt45555Xyk4&789999XsHSM&:D&@ABBBB
 $(*.'+#*/(- #'#26FJJNSW!M; M;M;  M; Y'	M;
 !%M; M; $(M; "&M; M; !M; M; }M;  S#X/M; 'tHcUD[,A'BCM; %T(I;3D*E%FGM;  %T(C#3G3M*N%OP!M; M; M; M;^HSM    
Ud U U U U%b %b %b %bN) ) ) )C D    2( ( (3    
y 
 
 
 
# #c #8C= # # # #5 5 5    rM   r   )%__doc__r?   concurrent.futures.threadr   r   queuer   	threadingr   typingr   r   r	   r
   r   slack_sdk.socket_mode.clientr   slack_sdk.socket_mode.listenersr   r   slack_sdk.socket_mode.requestr   slack_sdk.webr   
connectionr   r   interval_runnerr   logger.messagesr   errorsr   r   proxy_env_variable_loaderr   r   r   rM   rK   <module>r      s     8 8 8 8 8 8                   8 8 8 8 8 8 8 8 8 8 8 8 8 8 = = = = = =        < ; ; ; ; ; # # # # # # 3 3 3 3 3 3 3 3 , , , , , , ; ; ; ; ; ; Q Q Q Q Q Q Q Q A A A A A AF F F F F+ F F F F FrM   