
    yj                         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 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  ej        e          Zded	ed
dfdZded	ed
ee         fdZded
efdZdS )    N)AsyncSession)settings)list_webhook_endpoints)
tracked_db)utc_now_iso)WebhookPayloadpayloadworkspace_namereturnc           
        	
K   	 t          d          4 d{V }t          ||           d{V }ddd          d{V  n# 1 d{V swxY w Y   |s t                              d| d           dS | j        | j        t                      d}t          j        |dd          
	 t          
          n+# t          $ r t                              d	           Y dS w xY wt          j        d
          4 d{V 		
fd|D             }t          j        |ddi d{V }t!          ||d          D ]\  }}t#          |t          j                  rid|j        cxk    rdk     r)n n&t                              d| j         d|            Zt                              d| j         d| d|j                    t                              d| j         d| d|            	 ddd          d{V  dS # 1 d{V swxY w Y   dS # t          j        $ r" t                              d| d           Y dS t,          $ r t                              d           Y dS w xY w)zE
    Deliver a single webhook event to its configured endpoints.
    zwebhook.deliverNz#No webhook endpoints for workspace z, skipping.)typedata	timestamp),:T)
separators	sort_keysz$Failed to generate webhook signatureg      >@)timeoutc           	      F    g | ]}                     |d d          S )zapplication/json)zContent-TypezX-Honcho-Signature)urlcontentheaders)post).0r   client
event_json	signatures     E/DATA/AppData/hermes/projects/honcho/src/webhooks/webhook_delivery.py
<listcomp>z#deliver_webhook.<locals>.<listcomp>/   sT     
 
 
  &(:.7    
 
 
    return_exceptionsF)strict   i,  zSuccessfully delivered webhook z to zFailed delivery for z
. Status: z. Exception: zError sending webhook for .z$Unexpected error delivering webhook.)r   _get_webhook_urlsloggerdebug
event_typer   r   jsondumps_generate_webhook_signature
ValueError	exceptionhttpxAsyncClientasynciogatherzip
isinstanceResponsestatus_codeerrorRequestError	Exception)r	   r
   dbwebhook_urlsevent_payloadtasksresultsr   resultr   r   r   s            @@@r   deliver_webhookr?      s     7A/00 	G 	G 	G 	G 	G 	G 	GB!22~!F!FFFFFFFL	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G  	LLQnQQQ   F &L$
 

 Z*PTUUU
	3J??II 	 	 	CDDDFF	 $T222 	 	 	 	 	 	 	f
 
 
 
 
 
 (
 
 
E $NEJTJJJJJJJJG"<GGG  Vfen55 f06666366666[g>P[[VY[[    n73Enn3nnZ`Zlnn    LLaw/AaasaaY_aa   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	:  I I IGnGGGHHHHHH A A A?@@@@@@As   H AH 
AH A#H 83H ,B< ;H <$C$ H #C$$H C+H.H 
HH HH -I+#I+*I+r9   c                 &  K   	 t          |           d{V }|                     |           d{V }d |                                                                D             S # t          $ r" t
                              d|            g cY S w xY w)z8
    Get all webhook endpoint URLs for a workspace.
    Nc                     g | ]	}|j         
S  )r   )r   endpoints     r   r   z%_get_webhook_urls.<locals>.<listcomp>X   s    DDDDDDr    zError fetching endpoints for )r   executescalarsallr8   r&   r-   )r9   r
   	endpointsr>   s       r   r%   r%   Q   s      0@@@@@@@@	zz),,,,,,,,DDV^^-=-=-A-A-C-CDDDD   IIIJJJ			s   AA$ $)BBc                     t           j        j        }|st          d          t	          j        |                    d          |                     d          t          j                  	                                S )zR
    Generate HMAC-SHA256 signature for webhook payload using WEBHOOK_SECRET.
    z.WEBHOOK_SECRET not found - cannot sign webhookzutf-8)
r   WEBHOOKSECRETr,   hmacnewencodehashlibsha256	hexdigest)r	   webhook_secrets     r   r+   r+   ^   sg     %,N KIJJJ8g&&w(?(? ikkr    )r0   rN   rK   r)   loggingr.   sqlalchemy.ext.asyncior   
src.configr   src.crud.webhookr   src.dependenciesr   src.utils.formattingr   src.utils.queue_payloadr   	getLogger__name__r&   strr?   listr%   r+   rB   r    r   <module>r]      sC         / / / / / /       3 3 3 3 3 3 ' ' ' ' ' ' , , , , , , 2 2 2 2 2 2		8	$	$;A> ;A3 ;A4 ;A ;A ;A ;A|
 
c 
d3i 
 
 
 

 
 
 
 
 
 
 
r    