Ë
    tPêjk6  ã                   ó¸  — U d Z ddlmZmZ ddlmZmZmZmZm	Z	m
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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m Z   e«       Z!ee"d<    G d„ d«      Z#e!jI                  d ee«      gdg¬«       ee«      fde	de
dedefd„«       Z%e!jM                  d ee«      gdg¬«       ee«      fde	de
defd„«       Z'e!jM                  d ee«      gdge ¬«       edd¬«       ee«      fde	de
de(defd „«       Z)e!jM                  d! ee«      gdge ¬«       edd"¬«       ee«      fde	de
d#e(defd$„«       Z*e!jW                  d% ee«      gdg¬«       edd¬«       ee«      fde	de
de(defd&„«       Z,	 d-d'e d(e d)e(dz  d*e fd+„Z-e!j]                  d% ee«      gdg¬«       edd¬«       ee«      fde	de
de de(def
d,„«       Z/y).z2
CRUD endpoints for storing reusable credentials.
é    )ÚFinalÚcast)Ú	APIRouterÚDependsÚHTTPExceptionÚPathÚRequestÚResponseN)Úverbose_proxy_logger)ÚCredentialAccessor)Ú_get_masked_values)ÚCommonProxyErrorsÚUserAPIKeyAuth)Úuser_api_key_auth)Úencrypt_value_helper)Úhandle_exception_on_proxyÚjsonify_object)ÚCredentialsRepository)ÚCreateCredentialItemÚCredentialItemÚrouterc                   ó2   — e Zd Zeddededz  defd„«       Zy)ÚCredentialHelperUtilsNÚ
credentialÚnew_encryption_keyÚreturnc                 ó¼   — i }| j                   xs i j                  «       D ]  \  }}t        ||«      ||<   Œ t        | j                  || j
                  xs i ¬«      S )z<Encrypt values in credential.credential_values and add to DB©Úcredential_nameÚcredential_valuesÚcredential_info)r    Úitemsr   r   r   r!   )r   r   Úencrypted_credential_valuesÚkeyÚvalues        úq/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/proxy/credential_endpoints/endpoints.pyÚencrypt_credential_valuesz/CredentialHelperUtils.encrypt_credential_values   so   € ð .0Ð#Ø%×7Ñ7Ò=¸2×DÑDÓFò 	_‰JˆC�Ü/CÀEÐK]Ó/^Ð'¨Ò,ð	_ô
 Ø&×6Ñ6Ø9Ø&×6Ñ6Ò<¸"ô
ð 	
ó    ©N)Ú__name__Ú
__module__Ú__qualname__Ústaticmethodr   Ústrr'   © r(   r&   r   r      s1   „ Øñ
¨nð 
ÐRUÐX\ÑR\ð 
Ðhvò 
ó ñ
r(   r   z/credentialszcredential management)ÚdependenciesÚtagsÚrequestÚfastapi_responser   Úuser_api_key_dictc              ƒ   óp  K  — ddl m}m} 	 |€'t        ddt        j
                  j                  i¬«      ‚|j                  rj|€t        dd¬«      ‚|j                  |j                  «      }|€t        dd	¬«      ‚|j                  |j                  «      }|€t        dd	¬«      ‚||_
        |j                  €t        d
d¬«      ‚t        |j                  |j                  |j                  ¬«      }t        j                  |«      }	|	j!                  «       }
t#        dt%        |
«      «      }t'        |«      j)                  i |¥|j*                  |j*                  dœ¥¬«      ƒ d{  –—†  t-        j.                  |g«       dddœS 7 Œ# t0        $ r%}t3        j4                  |«       t7        |«      ‚d}~ww xY w­w)zz
    [BETA] endpoint. This might change unexpectedly.
    Stores credential in DB.
    Reloads credentials in memory.
    r   )Ú
llm_routerÚprisma_clientNéô  Úerror©Ústatus_codeÚdetailzELLM router not found. Please ensure you have a valid router instance.é”  úModel not foundi�  zPCredential values are required. Unable to infer credential values from model ID.r   údict[str, object])Ú
created_byÚ
updated_by©ÚdataTzCredential created successfully©ÚsuccessÚmessage)Úlitellm.proxy.proxy_serverr6   r7   r   r   Údb_not_connected_errorr%   Úmodel_idÚget_deploymentÚget_deployment_credentialsr    r   r   r!   r   r'   Ú
model_dumpr   r   r   ÚcreateÚuser_idr   Úupsert_credentialsÚ	Exceptionr   Ú	exceptionr   )r2   r3   r   r4   r6   r7   Úmodelr    Úprocessed_credentialÚencrypted_credentialÚcredentials_dictÚcredentials_dict_jsonifiedÚes                r&   Úcreate_credentialrX   +   sÕ  è ø€ ÷  Eð2+ØÐ ÜØØÔ!2×!IÑ!I×!OÑ!OÐPôð ð ×ÒØÐ!Ü#Ø #Øbôð ð
 &×4Ñ4°Z×5HÑ5HÓIˆEØˆ}Ü#°Ð<MÔNÐNØ'1×'LÑ'LÈZ×M`ÑM`Ó'aÐØ Ð(Ü#°Ð<MÔNÐNØ+<ˆJÔ(à×'Ñ'Ð/ÜØØiôð ô '5Ø&×6Ñ6Ø(×:Ñ:Ø&×6Ñ6ô'
Ðô
 '<×&UÑ&UÐVjÓ&kÐØ"6×"AÑ"AÓ"CÐÜ,0Ø¤Ð0@Ó!Aó-
Ð"ô $ MÓ2×9Ñ9ðØ,ðà/×7Ñ7Ø/×7Ñ7òð :ó 
÷ 	
ð 	
ô 	×-Ñ-Ð/CÐ.DÔEàÐ,MÑNÐNð	
ùô ò +Ü×&Ñ& qÔ)Ü'¨Ó*Ð*ûð+üs;   ‚	F6ŒEF Å#FÅ$F ÆF6ÆF Æ	F3Æ F.Æ.F3Æ3F6c              ƒ   óò   K  — 	 t         j                  D �cg c]/  }|j                  t        |j                  «      |j
                  dœ‘Œ1 }}d|dœS c c}w # t        $ r}t        |«      cY d}~S d}~ww xY w­w)ú:
    [BETA] endpoint. This might change unexpectedly.
    r   T)rE   ÚcredentialsN)ÚlitellmÚcredential_listr   r   r    r!   rP   r   )r2   r3   r4   r   Úmasked_credentialsrW   s         r&   Úget_credentialsr_   r   s„   è ø€ ð,ô &×5Ñ5ö%
ð ð	 $.×#=Ñ#=Ü%7¸
×8TÑ8TÓ%UØ#-×#=Ñ#=óð%
Ðð %
ð  Ð0BÑCÐCùò%
øô ò ,Ü(¨Ó+Õ+ûð,üsE   ‚A7„A –4AÁ
A ÁA7ÁA Á	A4Á
A/Á)A4Á*A7Á/A4Á4A7z+/credentials/by_name/{credential_name:path})r0   r1   Úresponse_model.z9The credential name, percent-decoded; may contain slashes)Údescriptionr   c           	   ƒ   óN  K  — 	 t         j                  D ]M  }|j                  |k(  sŒt        |j                  t	        |j
                  dd¬«      |j                  ¬«      }|c S  t        dd|z   ¬«      ‚# t        $ r%}t        j                  |«       t        |«      ‚d}~ww xY w­w)rZ   é   ©Úunmasked_lengthÚnumber_of_asterisksr   r=   z+Credential not found. Got credential name: r:   N)r\   r]   r   r   r   r    r!   r   rP   r   rQ   r   )r2   r3   r   r4   r   Úmasked_credentialrW   s          r&   Úget_credential_by_namerh   �   s°   è ø€ ð+Ü!×1Ñ1ò 	)ˆJØ×)Ñ)¨_Ó<Ü$2Ø$.×$>Ñ$>Ü&8Ø"×4Ñ4Ø()Ø,-ô'ð
 %/×$>Ñ$>ô%Ð!ð )Ò(ð	)ô ØØ@À?ÑRô
ð 	
øô ò +Ü×&Ñ& qÔ)Ü'¨Ó*Ð*ûð+üs3   ‚B%„"A4 §;A4 Á"B%Á#A4 Á4	B"Á= BÂB"Â"B%z /credentials/by_model/{model_id}z'The model ID to look up credentials forrI   c              ƒ   ór  K  — ddl m} 	 |€t        dd¬«      ‚|j                  |«      }|€t        dd¬«      ‚|j	                  |«      }|€t        dd¬«      ‚t        |d	d	¬
«      }t        |j                  › d|› �|i ¬«      }|S # t        $ r%}	t        j                  |	«       t        |	«      ‚d}	~	ww xY w­w)rZ   r   )r6   Nr8   zLLM router not foundr:   r=   r>   rc   rd   z-credential-r   )rG   r6   r   rJ   rK   r   r   Ú
model_namerP   r   rQ   r   )
r2   r3   rI   r4   r6   rR   r    Úmasked_credential_valuesr   rW   s
             r&   Úget_credential_by_modelrl   ²   s×   è ø€ õ 6ð+ØÐÜ¨CÐ8NÔOÐOØ!×0Ñ0°Ó:ˆØˆ=Ü¨CÐ8IÔJÐJØ#-×#HÑ#HÈÓ#RÐØÐ$Ü¨CÐ8IÔJÐJÜ*<ØØØ !ô+
Ð ô
 +Ø$×/Ñ/Ð0°¸X¸JÐGØ6Øô
ˆ
ð
 ÐøÜò +Ü×&Ñ& qÔ)Ü'¨Ó*Ð*ûð+üs)   ‚B7ŠA;B ÂB7Â	B4Â B/Â/B4Â4B7z#/credentials/{credential_name:path}c              ƒ   óv  K  — ddl m} 	 |€'t        ddt        j                  j
                  i¬«      ‚t        |«      j                  |«      ƒ d{  –—†  t        j                  D �cg c]  }|j                  |k7  sŒ|‘Œ c}t        _	        ddd	œS 7 Œ@c c}w # t        $ r}t        |«      cY d}~S d}~ww xY w­w)
rZ   r   ©r7   Nr8   r9   r:   TzCredential deleted successfullyrD   )rG   r7   r   r   rH   r%   r   Údelete_by_namer\   r]   r   rP   r   )r2   r3   r   r4   r7   ÚcredrW   s          r&   Údelete_credentialrq   Ü   s±   è ø€ õ 9ð,ØÐ ÜØØÔ!2×!IÑ!I×!OÑ!OÐPôð ô $ MÓ2×AÑAÀ/ÓR×RÐRô 5<×4KÑ4KÖ"w¨DÈt×OcÑOcÐgvÓOv¢4Ò"wŒÔØÐ,MÑNÐNð	 	Súò #xøäò ,Ü(¨Ó+Õ+ûð,üs_   ‚B9ŠAB ÁBÁB Á'BÁ<BÂ B ÂB9ÂB ÂB Â	B6Â!
B1Â+B6Â,B9Â1B6Â6B9Údb_credentialÚupdated_patchr   r   c                 ó  — t        | j                  | j                  | j                  ¬«      }t        j                  ||«      }|j                  r|j                  |_        |j                  rH|j                  j                  «       D ��ci c]  \  }}||“Œ
 }}}|j                  j                  |«       |j                  r;	 d|j                  vri |_        |j                  j                  |j                  «       |S c c}}w )z(
    Update a credential in the DB.
    )r   r!   r    r!   )r   r   r!   r    r   r'   r"   Úupdate)rr   rs   r   Úmerged_credentialrT   ÚkÚvÚencrypted_paramss           r&   Úupdate_db_credentialrz   û   sõ   € ô  .Ø%×5Ñ5Ø%×5Ñ5Ø'×9Ñ9ô Ðô #8×"QÑ"QØØó#Ðð
 ×+Ò+Ø,@×,PÑ,PÐÔ)ð ×-Ò-à4H×4ZÑ4Z×4`Ñ4`Ó4b×"c©D¨A¨q 1 a¡4Ð"cÐÑ"cà×+Ñ+×2Ñ2Ð3CÔDð ×+Ò+Ø$ØÐ$5×$EÑ$EÑEØ02ÐÔ-Ø×)Ñ)×0Ñ0Ð1E×1UÑ1UÔVàÐùó #ds   Â	C=c              ƒ   ó  K  — ddl m} 	 |€'t        ddt        j                  j
                  i¬«      ‚t        |«      }|j                  |«      ƒ d{  –—† }|€t        dd¬«      ‚t        ||«      }t        d	t        |j                  «       «      «      }	|j                  |i |	¥d
|j                  i¥¬«      ƒ d{  –—†  |j                  }
d}t        j                   D ]  }|j                  |k(  sŒ|} n |�àt#        |j$                  xs i «      }|j$                  r|j'                  |j$                  «       t#        |j(                  xs i «      }|j(                  r|j'                  |j(                  «       t+        |
||¬«      }|
|k7  r7t        j                   D �cg c]  }|j                  |k7  sŒ|‘Œ c}t        _        t-        j.                  |g«       dddœS 7 �Œ‹7 �Œ%c c}w # t0        $ r}t3        |«      ‚d}~ww xY w­w)rZ   r   rn   Nr8   r9   r:   r=   zCredential not found in DB.r?   rA   rB   r   TzCredential updated successfullyrD   )rG   r7   r   r   rH   r%   r   Úfind_by_namerz   r   r   rL   Úupdate_by_namerN   r   r\   r]   Údictr    ru   r!   r   r   rO   rP   r   )r2   r3   r   r   r4   r7   Úcredentials_repositoryrr   rv   Úcredential_object_jsonifiedÚnew_nameÚexisting_in_memoryrp   Úin_memory_valuesÚin_memory_infoÚupdated_in_memoryÚcrW   s                     r&   Úupdate_credentialr‡   "  s  è ø€ õ 9ð1+ØÐ ÜØØÔ!2×!IÑ!I×!OÑ!OÐPôð ô )>¸mÓ(LÐØ%;×%HÑ%HÈÓ%Y×YˆØÐ Ü¨CÐ8UÔVÐVÜ#7¸ÀzÓ#RÐÜ-1Ø¤Ð0A×0LÑ0LÓ0NÓ!Oó.
Ð#ð %×3Ñ3ØðØ-ðàÐ/×7Ñ7ñð 4ó 
÷ 	
ð 	
ð ,×;Ñ;ˆØ48ÐÜ×+Ñ+ò 	ˆDØ×#Ñ# Ó6Ø%)Ð"Ùð	ð
 Ð)Ü&*Ð+=×+OÑ+OÒ+UÐSUÓ&VÐØ×+Ò+Ø ×'Ñ'¨
×(DÑ(DÔEÜ$(Ð);×)KÑ)KÒ)QÈrÓ$RˆNØ×)Ò)Ø×%Ñ% j×&@Ñ&@ÔAÜ'5Ø (Ø"2Ø .ô(Ðð ˜?Ò*Ü6=×6MÑ6MÖ*v°ÐQR×QbÑQbÐfuÓQuª1Ò*v”Ô'Ü×1Ñ1Ð3DÐ2EÔFàÐ,MÑNÐNðQ  Zùð	
ûò< +wøô ò +Ü'¨Ó*Ð*ûð+üsm   ‚HŠAG( ÁGÁA(G( Â;G Â<4G( Ã1B,G( ÆG#Æ2G#Æ6&G( ÇHÇG( Ç G( Ç#G( Ç(	HÇ1G<Ç<HÈHr)   )0Ú__doc__Útypingr   r   Úfastapir   r   r   r   r	   r
   r\   Úlitellm._loggingr   Ú.litellm.litellm_core_utils.credential_accessorr   Ú*litellm.litellm_core_utils.litellm_loggingr   Úlitellm.proxy._typesr   r   Ú$litellm.proxy.auth.user_api_key_authr   Ú0litellm.proxy.common_utils.encrypt_decrypt_utilsr   Úlitellm.proxy.utilsr   r   Ú+litellm.repositories.credentials_repositoryr   Úlitellm.types.utilsr   r   r   Ú__annotations__r   ÚpostrX   Úgetr_   r.   rh   rl   Údeleterq   rz   Úpatchr‡   r/   r(   r&   ú<module>r™      s  ðò÷÷
 O× Nã Ý 1Ý MÝ Iß BÝ BÝ Qß IÝ Mß Dá“€ˆÓ ÷
ñ 
ð" ‡�ØÙÐ+Ó,Ð-Ø
!Ð	"ð ó ñ )0Ð0AÓ(Bñ	?+Øð?+àð?+ð %ð?+ð &ò	?+óð
?+ðD ‡�ØÙÐ+Ó,Ð-Ø
!Ð	"ð ó ñ )0Ð0AÓ(Bñ,Øð,àð,ð &ò,óð
,ð, ‡�Ø1ÙÐ+Ó,Ð-Ø
!Ð	"Ø!ð	 ó ñ   Ð1lÔmÙ(/Ð0AÓ(Bñ	+Øð+àð+ð ð+ð &ò	+óð+ð> ‡�Ø&ÙÐ+Ó,Ð-Ø
!Ð	"Ø!ð	 ó ñ ˜Ð*SÔTÙ(/Ð0AÓ(Bñ	!+Øð!+àð!+ð ð!+ð &ò	!+óð!+ðH ‡�Ø)ÙÐ+Ó,Ð-Ø
!Ð	"ð ó ñ   Ð1lÔmÙ(/Ð0AÓ(Bñ	,Øð,àð,ð ð,ð &ò	,óð
,ð: &*ñ$Ø!ð$à!ð$ð ˜d™
ð$ð ó	$ðN ‡�Ø)ÙÐ+Ó,Ð-Ø
!Ð	"ð ó ñ   Ð1lÔmÙ(/Ð0AÓ(Bñ=+Øð=+àð=+ð ð=+ð ð	=+ð
 &ò=+óñ
=+r(   