Ë
    tPêjÅ"  ã                   ó¨   — d Z ddlZddlmZmZ ddlmZ ddl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mZmZ ddlmZmZ dd	lmZ  G d
„ d«      Zy)z;
Hooks that are triggered when a litellm user event occurs
é    N)ÚdatetimeÚtimezone)ÚFinal)Úverbose_proxy_logger)Úuuid)	ÚAUDIT_ACTIONSÚCommonProxyErrorsÚLiteLLM_AuditLogsÚLitellm_EntityTypeÚLitellmTableNamesÚNewUserRequestÚNewUserResponseÚUserAPIKeyAuthÚWebhookEvent)Úcreate_audit_log_for_updateÚis_audit_logging_enabled)ÚUserRepositoryc                   óÚ   — e Zd Zedededefd„«       Zedededefd„«       Zede	de
dz  d	e
fd
„«       Zedededede	fd„«       Ze	 	 ddedededz  dededz  dedz  dedz  fd„«       Zy)ÚUserManagementEventHooksÚdataÚresponseÚuser_api_key_dictc              ƒ   óh  K  — ddl m}m} t        j	                  | ||¬«      ƒ d{  –—†  	 |€#t        t        j                  j                  «      ‚|j                  €t        d«      ‚t        |«      j                  |j                  «      ƒ d{  –—† }|€t        d|j                  › �«      ‚t        j                  t        j                  |j                  d|j                  ||d|j                  d¬	«      ¬
«      «       y7 ŒÛ7 Œt# t
        $ r }t!        j"                  d|«       Y d}~yd}~ww xY w­w)zÉ
        This hook is called when a new user is created on litellm

        Handles:
        - Creating an audit log for the user creation
        - Sending a user invitation email to the user
        r   )Úlitellm_proxy_admin_nameÚprisma_client)r   r   r   Nz.no user_id returned for the newly created userzno user row found for user_id=ÚcreatedT)Úexclude_none)Úuser_idÚactionÚlitellm_changed_byr   r   Úbefore_valueÚafter_valuez7Unable to create audit log for user on `/user/new` - %s)Úlitellm.proxy.proxy_serverr   r   r   Ú async_send_user_invitation_emailÚ	Exceptionr	   Údb_not_connected_errorÚvaluer   r   Ú
find_by_idÚasyncioÚcreate_taskÚcreate_internal_user_audit_logÚmodel_dump_jsonr   Úwarning)r   r   r   r   r   Úuser_rowÚes          út/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/proxy/hooks/user_management_event_hooks.pyÚasync_user_created_hookz0UserManagementEventHooks.async_user_created_hook   s4  è ø€ ÷ 	Wô
 '×GÑGØØØ/ð Hó 
÷ 	
ð 	
ð	gØÐ$ÜÔ 1× HÑ H× NÑ NÓOÐOØ×ÑÐ'ÜÐ PÓQÐQÜ$2°=Ó$A×$LÑ$LÈX×M]ÑM]Ó$^×^ˆHØÐÜÐ"@À×AQÑAQÐ@RÐ SÓTÐTÜ×ÑÜ(×GÑGØ$×,Ñ,Ø$Ø'8×'@Ñ'@Ø&7Ø-EØ!%Ø (× 8Ñ 8ÀdÐ 8Ó Kð Hó õ
ð#	
øð _ùô ò 	gÜ ×(Ñ(Ð)bÐde×fÑfûð	güsL   ‚$D2¦D§D2¬A#D ÂDÂA1D ÄD2ÄD Ä	D/ÄD*Ä%D2Ä*D/Ä/D2c              ƒ   ó¦  K  — t        dt        j                  d|j                  |j                  xs d|j
                  |j                  |j                  |j                  |j                  ¬«
      }t        j                  || j                  ¬«      ƒ d{  –—† }| j                  du r%|s"t        j                  | |||¬«      ƒ d{  –—†  yyy7 Œ87 Œ	­w)	ú:
        Send a user invitation email to the user
        Úinternal_user_createdzWelcome to LiteLLM Proxyg        )
ÚeventÚevent_groupÚevent_messageÚtokenÚspendÚ
max_budgetr   Ú
user_emailÚteam_idÚ	key_alias)r5   Úsend_invite_emailNT)r   r   r   r5   )r   r   ÚUSERr8   r9   r:   r   r;   r<   r=   r   Ú_send_v2_user_invitation_emailsr>   Ú$send_legacy_v1_user_invitation_email)r   r   r   r5   Úsent_via_v2s        r0   r$   z9UserManagementEventHooks.async_send_user_invitation_emailP   sØ   è ø€ ô $Ø)Ü*×/Ñ/Ø4Ø—.‘.Ø—.‘.Ò' CØ×*Ñ*Ø×$Ñ$Ø×*Ñ*Ø×$Ñ$Ø×(Ñ(ô
ˆô $<×#[Ñ#[Ø¨4×+AÑ+Að $\ó $
÷ 
ˆð ×!Ñ! TÑ)±+Ü*×OÑOØØ!Ø"3Øð	 Pó ÷ ñ ð 3>Ð)ð
øðús$   ‚BCÂCÂ0CÃCÃCÃCr5   r>   NÚreturnc              ƒ   ó  ‡ ‡K  — |dury	 ddl mŠ t        ˆfd„t        j                  j                  ‰¬«      D «       «      }t        |«      dk(  ryt        j                  ˆ fd„|D «       d	diŽƒ d
{  –—† }|D ]=  }t        |t         «      sŒt        j"                  d‰ j$                  t'        |«      «       Œ? t)        d„ |D «       «      S # t        $ r3 t        j                  dt
        j                  j                  z   «       Y yw xY w7 Œ—­w)aA  
        Send the modern (V2) invitation email via any registered enterprise email logger.

        Returns True if at least one logger delivered, so the caller only falls back to
        the legacy email when V2 did not send (enterprise package absent, no email logger
        configured, or every send raised).
        TFr   )ÚBaseEmailLoggerz'Defaulting to using Legacy Email Hooks.c              3   ó:   •K  — | ]  }t        |‰«      r|–— Œ y ­w©N)Ú
isinstance)Ú.0Úemail_loggerrE   s     €r0   ú	<genexpr>zKUserManagementEventHooks._send_v2_user_invitation_emails.<locals>.<genexpr>‹   s%   øè ø€ ò %
àô ˜,¨Ô8ô	 ñ%
ùs   ƒ)Úcallback_typec              3   óB   •K  — | ]  }|j                  ‰¬ «      –— Œ y­w))r5   N)Úsend_user_invitation_email)rI   rJ   r5   s     €r0   rK   zKUserManagementEventHooks._send_v2_user_invitation_emails.<locals>.<genexpr>–   s   øè ø€ ÒeÀ|ˆl×5Ñ5¸EÐ5×BÑeùs   ƒÚreturn_exceptionsNz9Error sending v2 user invitation email for user_id=%s: %sc              3   ó>   K  — | ]  }t        |t        «       –— Œ y ­wrG   )rH   ÚBaseException)rI   Úoutcomes     r0   rK   zKUserManagementEventHooks._send_v2_user_invitation_emails.<locals>.<genexpr>¡   s   è ø€ ÒW¸g”z '¬=Ó9Ô9ÑWùs   ‚)Ú>litellm_enterprise.enterprise_callbacks.send_emails.base_emailrE   ÚImportErrorr   r-   r	   Úmissing_enterprise_packager'   ÚtupleÚlitellmÚlogging_callback_managerÚget_custom_loggers_for_typeÚlenr)   ÚgatherrH   rQ   Úerrorr   ÚstrÚany)r5   r>   Úemail_loggersÚsend_outcomesrR   rE   s   `    @r0   r@   z8UserManagementEventHooks._send_v2_user_invitation_emailsu   s  ùè ø€ ð  DÑ(Øð	õô  %ó %
ä '× @Ñ @× \Ñ \Ø-ð !]ó !ô%
ó  
ˆô ˆ}Ó Ò"Øä%,§^¡^ÛeÐWdÔeð&
à"ñ&
÷  
ˆð %ò 	ˆGÜ˜'¤=Õ1Ü$×*Ñ*ØOØ—M‘MÜ˜“Lõð	ô ÑWÈÔWÓWÐWøô9 ò 	Ü ×(Ñ(Ø9Ô<M×<hÑ<h×<nÑ<nÑnôñ ð		úð  
ús:   „D‹C ‘A"DÁ3DÁ4DÂ>DÃ9DÄDÄDÄDc              ƒ   ó¸   K  — ddl m}m} d|j                  dg «      vrt	        d«      ‚t        j                  |j                  j                  |¬«      «       y­w)r3   r   )Úgeneral_settingsÚproxy_logging_objÚemailÚalertingzyEmail alerting not setup on config.yaml. Please set `alerting=['email']. 
Docs: https://docs.litellm.ai/docs/proxy/email`)Úwebhook_eventN)	r#   rb   rc   ÚgetÚ
ValueErrorr)   r*   Úslack_alerting_instanceÚ&send_key_created_or_user_invited_email)r   r   r   r5   rb   rc   s         r0   rA   z=UserManagementEventHooks.send_legacy_v1_user_invitation_email£   sd   è ø€ ÷ 	Sð Ð*×.Ñ.¨z¸2Ó>Ñ>Üð Móð ô
 	×ÑØ×5Ñ5×\Ñ\Ø#ð ]ó õ	
ùs   ‚AAr   r   r    r   r!   r"   c              ƒ   ó8  K  — t        «       syddlm} t        t	        t        t        j                  «       «      t        j                  t        j                  «       ||||¬«      |j                  t        j                  | |||¬«	      ¬«      ƒ d{  –—†  y7 Œ­w)a1  
        Create an audit log for an internal user.

        Parameters:
        - user_id: str - The id of the user to create the audit log for.
        - action: AUDIT_ACTIONS - The action to create the audit log for.
        - user_row: LiteLLM_UserTable - The user row to create the audit log for.
        - litellm_changed_by: Optional[str] - The user id of the user who is changing the user.
        - user_api_key_dict: UserAPIKeyAuth - The user api key dictionary.
        - litellm_proxy_admin_name: Optional[str] - The name of the proxy admin.
        Nr   )Úget_audit_log_changed_by)r    r   r   )	ÚidÚ
updated_atÚ
changed_byÚchanged_by_api_keyÚ
table_nameÚ	object_idr   Úupdated_valuesr!   )Úrequest_data)r   Ú+litellm.proxy.management_helpers.audit_logsrl   r   r
   r]   r   Úuuid4r   Únowr   ÚutcÚapi_keyr   ÚUSER_TABLE_NAME)r   r   r    r   r   r!   r"   rl   s           r0   r+   z7UserManagementEventHooks.create_internal_user_audit_log¼   s�   è ø€ ô* (Ô)Øõ	
ô *Ü*Ü”t—z‘z“|Ó$Ü#Ÿ<™<¬¯©Ó5Ù3Ø'9Ø&7Ø-Eôð
 $5×#<Ñ#<Ü,×<Ñ<Ø!ØØ*Ø)ôô
÷ 	
ò 	
ús   ‚BBÂBÂB)NN)Ú__name__Ú
__module__Ú__qualname__Ústaticmethodr   r   r   r1   r$   r   Úboolr@   rA   r]   r   r+   © ó    r0   r   r      s@  „ Øð.gØð.gà!ð.gð *ò.gó ð.gð` ð"Øð"à!ð"ð *ò"ó ð"ðH ð+X°\ð +XÐVZÐ]aÑVað +XÐfjò +Xó ð+XðZ ð
Øð
à!ð
ð *ð
ð ò	
ó ð
ð0 ð $(Ø"&ñ+
Øð+
àð+
ð   $™Jð+
ð *ð	+
ð
 #&¨¡*ð+
ð ˜D‘jð+
ð ˜4‘Zò+
ó ñ+
r�   r   )Ú__doc__r)   r   r   Útypingr   rW   Úlitellm._loggingr   Úlitellm._uuidr   Úlitellm.proxy._typesr   r	   r
   r   r   r   r   r   r   ru   r   r   Ú$litellm.repositories.user_repositoryr   r   r€   r�   r0   ú<module>rˆ      sD   ðñó ß 'Ý ã Ý 1Ý ÷
÷ 
õ 
÷õ @÷J
ò J
r�   