Ë
    uPêjåY  ã                   óÀ   — d Z ddlZddlZddlmZm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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  G d„ dee«      Zy)ao  
This is a file for the AWS Secret Manager Integration

Handles Async Operations for:
- Read Secret
- Write Secret (CreateSecret)
- Update Secret (PutSecretValue) - for in-place rotation when alias is preserved
- Delete Secret

Relevant issue: https://github.com/BerriAI/litellm/issues/1883

Requires:
* `os.environ["AWS_REGION_NAME"],
* `pip install boto3>=1.28.57`
é    N)ÚAnyÚFinal)Úverbose_logger)Úget_aws_dns_suffix)Ú
BaseAWSLLM)Ú_get_httpx_clientÚget_async_httpx_client)ÚKeyManagementSystem)Úget_secret_str)ÚhttpxSpecialProvider)ÚKeyManagementSettingsé   )ÚBaseSecretManagerc                   óª  ‡ — e Zd Z	 	 	 	 	 	 	 	 d)dedz  dedz  dedz  dedz  dedz  dedz  dedz  d	ee   dz  fd
„Zed„ «       Ze	 d*dedz  de	dz  fd„«       Z
	 	 	 d+dededz  deej                  z  dz  dedz  dedz  f
d„Z	 	 	 d+dededz  deej                  z  dz  dedz  dedz  f
d„Zdedz  defd„Zdedededz  fd„Zdedededz  fd„Z	 	 	 	 d,dedededz  dedz  deej                  z  dz  deez  dz  defd„Z	 	 d-ded	ee   deeef   dz  deej                  z  dz  deeef   f
d„Z	 	 d-dedededz  deej                  z  dz  def
d„Z	 	 d-d ed!ed"ededz  deej                  z  dz  defˆ fd#„Z	 	 	 d.ded$edz  dedz  deej                  z  dz  def
d%„Z	 	 	 d+d&edededz  dedz  d'edz  deeeef   fd(„Zˆ xZS )/ÚAWSSecretsManagerV2NÚaws_region_nameÚaws_role_nameÚaws_session_nameÚaws_external_idÚaws_profile_nameÚaws_web_identity_tokenÚaws_sts_endpointÚreplica_regionsc	                 óÔ   — t        j                  | fi |	¤Ž t        j                  | fi |	¤Ž || _        || _        || _        || _        || _        || _        || _	        |xs g | _
        y ©N)r   Ú__init__r   r   r   r   r   r   r   r   r   )
Úselfr   r   r   r   r   r   r   r   Úkwargss
             úr/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/secret_managers/aws_secret_manager_v2.pyr   zAWSSecretsManagerV2.__init__(   sq   € ô 	×"Ñ" 4Ñ2¨6Ò2Ü×Ñ˜DÑ+ FÒ+ð  /ˆÔØ*ˆÔØ 0ˆÔØ.ˆÔØ 0ˆÔØ&<ˆÔ#Ø 0ˆÔØ*9Ò*?¸RˆÕó    c                 ó    — dt         j                  vr<dt         j                  vr)dt         j                  vrt        j                  d«       y y y y )NÚAWS_REGION_NAMEÚ
AWS_REGIONÚAWS_DEFAULT_REGIONz¤No AWS region found in environment. Ensure aws_region_name is set in key_management_settings or AWS_REGION_NAME/AWS_REGION/AWS_DEFAULT_REGION is set in environment.)ÚosÚenvironr   Úwarning)Úclss    r   Úvalidate_environmentz(AWSSecretsManagerV2.validate_environmentA   sK   € ð
 ¤R§Z¡ZÑ/Ø¤B§J¡JÑ.Ø$¬B¯J©JÑ6ä×"Ñ"ðZõð 7ð /ð 0r    Úuse_aws_secret_managerÚkey_management_settingsc                 óÒ  — |�|du ry	 | j                  «        i }|�ˆt        |dd«      t        |dd«      t        |dd«      t        |dd«      t        |dd«      t        |dd«      t        |d	d«      |j                  d
œ}|j                  «       D ��ci c]  \  }}|€Œ	||“Œ }}} | di |¤Žt        _        t        j                  t        _        yc c}}w # t        $ r}|‚d}~ww xY w)z[
        Initialize AWSSecretsManagerV2 with settings from key_management_settings
        NFr   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   © )
r)   Úgetattrr   ÚitemsÚlitellmÚsecret_manager_clientr
   ÚAWS_SECRET_MANAGERÚ_key_management_systemÚ	Exception)r(   r*   r+   Ú
aws_kwargsÚkÚvÚes          r   Úload_aws_secret_managerz+AWSSecretsManagerV2.load_aws_secret_managerO   s  € ð "Ð)Ð-CÀuÑ-LØð	Ø×$Ñ$Ô&ð ˆJØ&Ð2ä'.Ð/FÐHYÐ[_Ó'`Ü%,Ð-DÀoÐW[Ó%\Ü(/Ð0GÐI[Ð]aÓ(bÜ'.Ð/FÐHYÐ[_Ó'`Ü(/Ð0GÐI[Ð]aÓ(bÜ.5Ð6MÐOgÐimÓ.nÜ(/Ð0GÐI[Ð]aÓ(bØ'>×'NÑ'Nñ	�
ð 0:×/?Ñ/?Ó/A×S¡t q¨!ÀQÁ]˜a ™dÐS�
ÑSá,/Ñ,=°*Ñ,=ŒGÔ)Ü-@×-SÑ-SŒGÕ*ùó Tøô
 ò 	ØˆGûð	ús0   ‰B	C Â
CÂCÂ"-C ÃC Ã	C&ÃC!Ã!C&Úsecret_nameÚoptional_paramsÚtimeoutÚprimary_secret_nameÚreturnc              ƒ   óú  K  — |r| j                  ||¬«      ƒ d{  –—† S | j                  d||¬«      \  }}}t        t        j                  d|i¬«      }	 |j                  |||j                  d«      ¬«      ƒ d{  –—† }	|	j                  «        |	j                  «       d	   S 7 Œˆ7 Œ)# t        j                  $ r t        d
«      ‚t        $ r*}
t        j                  d|t        |
«      «       Y d}
~
yd}
~
ww xY w­w)zÕ
        Async function to read a secret from AWS Secrets Manager

        Returns:
            str: Secret value
        Raises:
            ValueError: If the secret is not found or an HTTP error occurs
        ©r:   r=   NÚGetSecretValue©Úactionr:   r;   r<   ©Úllm_providerÚparamsúutf-8©ÚurlÚheadersÚdataÚSecretStringúTimeout error occurredú6Error reading secret='%s' from AWS Secrets Manager: %s)Ú%async_read_secret_from_primary_secretÚ_prepare_requestr	   r   ÚSecretManagerÚpostÚdecodeÚraise_for_statusÚjsonÚhttpxÚTimeoutExceptionÚ
ValueErrorr4   r   Ú	exceptionÚstr)r   r:   r;   r<   r=   Úendpoint_urlrJ   ÚbodyÚasync_clientÚresponser8   s              r   Úasync_read_secretz%AWSSecretsManagerV2.async_read_secrets   s  è ø€ ñ Ø×CÑCØ'Ð=Pð Dó ÷ ð ð '+×&;Ñ&;Ø#Ø#Ø+ð '<ó '
Ñ#ˆ�g˜tô 5Ü-×;Ñ;Ø˜wÐ'ô
ˆð
	Ø$0×$5Ñ$5¸,ÐPWÐ^b×^iÑ^iÐjqÓ^rÐ$5Ó$s×sˆHØ×%Ñ%Ô'Ø—=‘=“? >Ñ2Ð2ð%øð  tùô ×%Ñ%ò 	7ÜÐ5Ó6Ð6Üò 	Ü×$Ñ$ØHØÜ�A“÷ð ð
 ûð	üsK   ‚C;›B$œ9C;Á&B( Á<B&Á=&B( Â#C;Â&B( Â(&C8Ã C3Ã.C;Ã3C8Ã8C;c           	      ó˜  — |dv rt        j                  |«      S |r| j                  ||¬«      S | j                  d||¬«      \  }}}t	        d|i¬«      }	 |j                  |||j                  d«      ¬«      }	|	j                  «       d	   S # t        j                  $ r t        d
«      ‚t        j                  $ r\}
t        j                  d|t        |
j                  j                   «      t        |
j                  j"                  «      «       Y d}
~
yd}
~
wt$        $ r*}
t        j                  d|t        |
«      «       Y d}
~
yd}
~
ww xY w)z¯
        Sync function to read a secret from AWS Secrets Manager

        Done for backwards compatibility with existing codebase, since get_secret is a sync function
        )ÚAWS_ACCESS_KEY_IDÚAWS_SECRET_ACCESS_KEYr"   r#   ÚAWS_BEDROCK_RUNTIME_ENDPOINTr@   rA   rB   r<   )rF   rG   rH   rL   rM   z:Error reading secret='%s' from AWS Secrets Manager: %s, %sNrN   )r%   ÚgetenvÚ$sync_read_secret_from_primary_secretrP   r   rR   rS   rU   rV   rW   rX   ÚHTTPStatusErrorr   rY   rZ   r^   ÚtextÚstatus_coder4   )r   r:   r;   r<   r=   r[   rJ   r\   Úsync_clientr^   r8   s              r   Úsync_read_secretz$AWSSecretsManagerV2.sync_read_secret    sX  € ð ð 
ñ 
ô —9‘9˜[Ó)Ð)áØ×<Ñ<Ø'Ð=Pð =ó ð ð '+×&;Ñ&;Ø#Ø#Ø+ð '<ó '
Ñ#ˆ�g˜tô /Ø˜wÐ'ô
ˆð	Ø)×.Ñ.°<ÈÐW[×WbÑWbÐcjÓWkÐ.ÓlˆHØ—=‘=“? >Ñ2Ð2øÜ×%Ñ%ò 	7ÜÐ5Ó6Ð6Ü×$Ñ$ò 	Ü×$Ñ$ØLØÜ�A—J‘J—O‘OÓ$Ü�A—J‘J×*Ñ*Ó+÷	ð ð ûô ò 	Ü×$Ñ$ØHØÜ�A“÷ð ð
 ûð	ús%   Á5B Â0E	Â<ADÄE	Ä EÅE	Úprimary_secret_json_strc                 ó4   — t        j                  |xs d«      S )z÷
        Parse the primary secret JSON string into a dictionary

        Args:
            primary_secret_json_str: JSON string containing key-value pairs

        Returns:
            Dictionary of key-value pairs from the primary secret
        z{})rU   Úloads)r   rk   s     r   Ú_parse_primary_secretz)AWSSecretsManagerV2._parse_primary_secretÙ   s   € ô �z‰zÐ1Ò9°TÓ:Ð:r    c                 ój   — | j                  |¬«      }| j                  |«      }|j                  |«      S )ú7
        Read a secret from the primary secret
        ©r:   )rj   rn   Úget©r   r:   r=   rk   Úprimary_secret_kv_pairss        r   re   z8AWSSecretsManagerV2.sync_read_secret_from_primary_secretå   s<   € ð *.×)>Ñ)>ÐK^Ð)>Ó)_ÐØ)-×)CÑ)CÐD[Ó)\ÐØ&×*Ñ*¨;Ó7Ð7r    c              ƒ   ó†   K  — | j                  |¬«      ƒ d{  –—† }| j                  |«      }|j                  |«      S 7 Œ&­w)rp   rq   N)r_   rn   rr   rs   s        r   rO   z9AWSSecretsManagerV2.async_read_secret_from_primary_secretí   sI   è ø€ ð 04×/EÑ/EÐReÐ/EÓ/f×)fÐØ)-×)CÑ)CÐD[Ó)\ÐØ&×*Ñ*¨;Ó7Ð7ð *gús   ‚A˜?™'AÚsecret_valueÚdescriptionÚtagsc           	   ƒ   ó*  K  — ddl m} ||t        |j                  «       «      dœ}|r||d<   |rbt	        |t
        «      r/|j                  «       D �	�
cg c]  \  }	}
|	t        |
«      dœ‘Œ }}	}
nt	        |t        «      r|}nt        d«      ‚||d<   | j                  d||||¬	«      \  }}}t        t        j                  d
|i¬«      }	 |j                  |||j                  d«      ¬«      ƒ d{  –—† }|j                  «        |j!                  «       }| j,                  rK	 | j/                  || j,                  ||¬«      ƒ d{  –—†  t1        j2                  d|| j,                  «       |S |S c c}
}	w 7 Œƒ# t"        j$                  $ r'}t        d|j&                  j(                  › �«      ‚d}~wt"        j*                  $ r t        d«      ‚w xY w7 Œ‹# t4        $ r6}t1        j6                  d|| j,                  t        |«      «       Y d}~|S d}~ww xY w­w)a  
        Async function to write a secret to AWS Secrets Manager

        Args:
            secret_name: Name of the secret
            secret_value: Value to store (can be a JSON string)
            description: Optional description for the secret
            optional_params: Additional AWS parameters
            timeout: Request timeout
            tags: Optional dict or list of tags to apply, e.g.
                  {"Environment": "Prod", "Owner": "AI-Platform"} or
                  [{"Key": "Environment", "Value": "Prod"}]
        r   ©Úuuid)ÚNamerL   ÚClientRequestTokenÚDescription)ÚKeyÚValuez1Tags must be a dict or list of {Key, Value} pairsÚTagsÚCreateSecret©rC   r:   rv   r;   Úrequest_datar<   rD   rG   rH   NúHTTP error occurred: rM   )r:   r   r;   r<   z%Replicated secret '%s' to regions: %suS   Failed to replicate secret '%s' to regions %s: %s â€” key was created successfully.)Úlitellm._uuidr{   rZ   Úuuid4Ú
isinstanceÚdictr/   ÚlistrX   rP   r	   r   rQ   rR   rS   rT   rU   rV   rf   r^   rg   rW   r   Úasync_replicate_secretr   Údebugr4   r'   )r   r:   rv   rw   r;   r<   rx   r{   rK   r6   r7   Ú	tags_listr[   rJ   r\   r]   r^   Úcreate_responseÚerrÚreplication_errs                       r   Úasync_write_secretz&AWSSecretsManagerV2.async_write_secretõ   s2  è ø€ õ, 	'ð  Ø(Ü"% d§j¡j£lÓ"3ñ'
ˆñ Ø"-ˆD�Ññ Ü˜$¤Ô%ØEIÇZÁZÃ\×R¹T¸QÀ Q´°Q³Ó8ÐR�	ÒRÜ˜D¤$Ô'Ø ‘	ä Ð!TÓUÐUØ$ˆD�‰Là&*×&;Ñ&;Ø!Ø#Ø%Ø+Øð '<ó '
Ñ#ˆ�g˜tô 5Ü-×;Ñ;Ø˜wÐ'ô
ˆð
	7Ø$0×$5Ñ$5Ø ØØ—[‘[ Ó)ð %6ó %÷ ˆHð
 ×%Ñ%Ô'Ø%-§]¡]£_ˆOð ×ÒðØ×1Ñ1Ø +Ø$(×$8Ñ$8Ø$3Ø#ð	 2ó ÷ ð ô ×$Ñ$Ø;ØØ×(Ñ(ôð ÐˆÐùóm Sð*ùô ×$Ñ$ò 	JÜÐ4°S·\±\×5FÑ5FÐ4GÐHÓIÐIûÜ×%Ñ%ò 	7ÜÐ5Ó6Ð6ð	7úð
ùô ò Ü×&Ñ&ØiØØ×(Ñ(Ü˜Ó(÷	ð ð Ðûðüs…   ‚AHÁE-Á*AHÃ	&E5 Ã/E3Ã0$E5 ÄHÄ!"G ÅGÅ%G Å)
HÅ3E5 Å5GÆ"F*Æ*"GÇHÇG Ç	HÇ+HÈHÈHÈHc              ƒ   ó0  K  — |si S t        j                  d||«       ||D �cg c]  }d|i‘Œ c}dœ}| j                  d|||¬«      \  }}}	t        t        j
                  d|i¬«      }
	 |
j                  |||	j                  d«      ¬	«      ƒ d
{  –—† }|j                  «        |j                  «       S c c}w 7 Œ)# t        j                  $ r'}t        d|j                  j                  › �«      ‚d
}~wt        j                  $ r t        d«      ‚w xY w­w)u\  
        Replicate a secret to additional AWS regions using ReplicateSecretToRegions.

        Called after a successful CreateSecret when replica_regions is configured.
        Replication is best-effort â€” callers should not depend on this for correctness.

        Args:
            secret_name: Name or ARN of the secret to replicate
            replica_regions: List of target AWS region names, e.g. ["us-west-2"]
            optional_params: Additional AWS parameters
            timeout: Request timeout

        Returns:
            dict: AWS response, or {} if replica_regions is empty
        z=ReplicateSecretToRegions called for secret '%s' in regions %sÚRegion)ÚSecretIdÚAddReplicaRegionsÚReplicateSecretToRegions©rC   r:   r;   r„   r<   rD   rG   rH   Nr…   rM   )r   ÚinforP   r	   r   rQ   rR   rS   rT   rU   rV   rf   rX   r^   rg   rW   )r   r:   r   r;   r<   ÚrrK   r[   rJ   r\   r]   r^   r�   s                r   r‹   z*AWSSecretsManagerV2.async_replicate_secretQ  s-  è ø€ ñ, ØˆIä×ÑØKØØô	
ð $Ø9HÖ!I°A 8¨Q¢-Ò!Iñ*
ˆð
 '+×&;Ñ&;Ø-Ø#Ø+Øð	 '<ó '
Ñ#ˆ�g˜tô 5Ü-×;Ñ;Ø˜wÐ'ô
ˆð
	7Ø$0×$5Ñ$5¸,ÐPWÐ^b×^iÑ^iÐjqÓ^rÐ$5Ó$s×sˆHØ×%Ñ%Ô'Ø—=‘=“?Ð"ùò% "Jð  tùô ×$Ñ$ò 	JÜÐ4°S·\±\×5FÑ5FÐ4GÐHÓIÐIûÜ×%Ñ%ò 	7ÜÐ5Ó6Ð6ð	7üsE   ‚!D£B5®;DÁ*&B< ÂB:Â#B< Â4DÂ:B< Â<DÃ"C1Ã1"DÄDc              ƒ   ó  K  — ddl m} ||t        |j                  «       «      dœ}| j	                  d||||¬«      \  }}}	t        t        j                  d|i¬«      }
	 |
j                  |||	j                  d«      ¬	«      ƒ d
{  –—† }|j                  «        |j                  «       S 7 Œ$# t        j                  $ r'}t        d|j                  j                   › �«      ‚d
}~wt        j"                  $ r t        d«      ‚w xY w­w)a0  
        Async function to update an existing secret's value in AWS Secrets Manager.

        Uses PutSecretValue to update in place. Use this when rotating a secret
        that keeps the same name (current_secret_name == new_secret_name).

        Args:
            secret_name: Name of the existing secret to update
            secret_value: New value to store
            optional_params: Additional AWS parameters
            timeout: Request timeout

        Returns:
            dict: Response from AWS Secrets Manager containing update details
        r   rz   )r”   rL   r}   ÚPutSecretValuerƒ   r<   rD   rG   rH   Nr…   rM   )r†   r{   rZ   r‡   rP   r	   r   rQ   rR   rS   rT   rU   rV   rf   rX   r^   rg   rW   )r   r:   rv   r;   r<   r{   rK   r[   rJ   r\   r]   r^   r�   s                r   Úasync_put_secret_valuez*AWSSecretsManagerV2.async_put_secret_valueŠ  s  è ø€ õ, 	'ð $Ø(Ü"% d§j¡j£lÓ"3ñ'
ˆð '+×&;Ñ&;Ø#Ø#Ø%Ø+Øð '<ó '
Ñ#ˆ�g˜tô 5Ü-×;Ñ;Ø˜wÐ'ô
ˆð
	7Ø$0×$5Ñ$5¸,ÐPWÐ^b×^iÑ^iÐjqÓ^rÐ$5Ó$s×sˆHØ×%Ñ%Ô'Ø—=‘=“?Ð"ð tùô ×$Ñ$ò 	JÜÐ4°S·\±\×5FÑ5FÐ4GÐHÓIÐIûÜ×%Ñ%ò 	7ÜÐ5Ó6Ð6ð	7üs<   ‚ADÁ&B+ ÂB)Â#B+ Â(DÂ)B+ Â+DÂ>"C Ã "DÄDÚcurrent_secret_nameÚnew_secret_nameÚnew_secret_valuec              ƒ   ó¼   •K  — ||k(  r3t        j                  d|«       | j                  ||||¬«      ƒ d{  –—† S t        ‰| �  |||||¬«      ƒ d{  –—† S 7 Œ 7 Œ­w)zÀ
        Rotate a secret. When current_secret_name == new_secret_name (in-place
        update), uses PutSecretValue instead of create+delete to avoid
        ResourceExistsException.
        z8Secret rotated in-place (PutSecretValue): secret_name=%s)r:   rv   r;   r<   N)r�   rž   rŸ   r;   r<   )r   r˜   rœ   ÚsuperÚasync_rotate_secret)r   r�   rž   rŸ   r;   r<   Ú	__class__s         €r   r¢   z'AWSSecretsManagerV2.async_rotate_secret¾  sˆ   øè ø€ ð  /Ò1ä×ÑØJØ#ôð ×4Ñ4Ø/Ø-Ø /Øð	 5ó ÷ ð ô ‘WÑ0Ø 3Ø+Ø-Ø+Øð 1ó 
÷ 
ð 	
ðøð
ús!   ƒ4A·A¸AÁAÁAÁAÚrecovery_window_in_daysc              ƒ   óÐ  K  — ||dœ}| j                  d|||¬«      \  }}}t        t        j                  d|i¬«      }		 |	j	                  |||j                  d«      ¬«      ƒ d{  –—† }
|
j                  «        |
j                  «       S 7 Œ$# t        j                  $ r'}t        d	|j                  j                  › �«      ‚d}~wt        j                  $ r t        d
«      ‚w xY w­w)aª  
        Async function to delete a secret from AWS Secrets Manager

        Args:
            secret_name: Name of the secret to delete
            recovery_window_in_days: Number of days before permanent deletion (default: 7)
            optional_params: Additional AWS parameters
            timeout: Request timeout

        Returns:
            dict: Response from AWS Secrets Manager containing deletion details
        )r”   ÚRecoveryWindowInDaysÚDeleteSecretr—   r<   rD   rG   rH   Nr…   rM   )rP   r	   r   rQ   rR   rS   rT   rU   rV   rf   rX   r^   rg   rW   )r   r:   r¤   r;   r<   rK   r[   rJ   r\   r]   r^   r�   s               r   Úasync_delete_secretz'AWSSecretsManagerV2.async_delete_secretà  s÷   è ø€ ð* $Ø$;ñ
ˆð
 '+×&;Ñ&;Ø!Ø#Ø+Øð	 '<ó '
Ñ#ˆ�g˜tô 5Ü-×;Ñ;Ø˜wÐ'ô
ˆð
	7Ø$0×$5Ñ$5¸,ÐPWÐ^b×^iÑ^iÐjqÓ^rÐ$5Ó$s×sˆHØ×%Ñ%Ô'Ø—=‘=“?Ð"ð tùô ×$Ñ$ò 	JÜÐ4°S·\±\×5FÑ5FÐ4GÐHÓIÐIûÜ×%Ñ%ò 	7ÜÐ5Ó6Ð6ð	7üs:   ‚<C&¿&B Á%B
Á&#B Â	C&Â
B ÂC#Â"CÃ"C#Ã#C&rC   r„   c                 ó¨  — 	 ddl m} ddlm} |xs i }|j                  d«      s| j                  r| j                  |d<   |j                  d«      s| j                  r| j                  |d<   |j                  d«      s| j                  r| j                  |d<   |j                  d«      s| j                  r| j                  |d<   |j                  d	«      s| j                  r| j                  |d	<   |j                  d
«      s| j                  r| j                  |d
<   |j                  d«      s| j                  r| j                  |d<   | j                  |«      }|j                  }	|j                  xs t        d«      }
|
r|
j!                  dd«      nd|	› dt#        |	«      › �}|r|}nd|i}|r
|dk(  r||d<   t%        j&                  |«      j)                  d«      }dd|› �dœ} |d|||¬«      } ||j*                  d|j                  «      j-                  |«       |j/                  «       }||j0                  |fS # t        $ r t	        d«      ‚w xY w)z'Prepare the AWS Secrets Manager requestr   )Ú	SigV4Auth)Ú
AWSRequestz7Missing boto3 to call bedrock. Run 'pip install boto3'.r   r   r   r   r   r   r   rc   zbedrock-runtimeÚsecretsmanagerzhttps://secretsmanager.ú.r”   r›   rL   rG   zapplication/x-amz-json-1.1zsecretsmanager.)zContent-TypezX-Amz-TargetÚPOST)ÚmethodrI   rK   rJ   )Úbotocore.authrª   Úbotocore.awsrequestr«   ÚImportErrorrr   r   r   r   r   r   r   r   Ú*_get_boto_credentials_from_optional_paramsÚaws_bedrock_runtime_endpointr   Úreplacer   rU   ÚdumpsÚencodeÚcredentialsÚadd_authÚpreparerJ   )r   rC   r:   rv   r;   r„   rª   r«   Úboto3_credentials_infoÚregion_nameÚexplicit_runtime_endpointr[   rK   r\   rJ   ÚrequestÚpreppeds                    r   rP   z$AWSSecretsManagerV2._prepare_request  sp  € ð	YÝ/Ý6ð *Ò/¨Rˆð ×"Ñ" ?Ô3¸×8JÒ8JØ/3×/AÑ/AˆO˜OÑ,Ø×"Ñ"Ð#5Ô6¸4×;PÒ;PØ26×2GÑ2GˆOÐ.Ñ/Ø×"Ñ"Ð#4Ô5¸$×:NÒ:NØ15×1EÑ1EˆOÐ-Ñ.Ø×"Ñ"Ð#4Ô5¸$×:NÒ:NØ15×1EÑ1EˆOÐ-Ñ.Ø×"Ñ"Ð#5Ô6¸4×;PÒ;PØ26×2GÑ2GˆOÐ.Ñ/Ø×"Ñ"Ð#;Ô<À×A\ÒA\Ø8<×8SÑ8SˆOÐ4Ñ5Ø×"Ñ"Ð#5Ô6¸4×;PÒ;PØ26×2GÑ2GˆOÐ.Ñ/à(,×(WÑ(WÐXgÓ(hÐà3×CÑCˆØ+A×+^Ñ+^ò ,
ÔbpØ*óc
Ð!ñ
 )ð &×-Ñ-Ð.?ÐAQÔRà*¨;¨-°qÔ9KÈKÓ9XÐ8YÐZð 	ñ Ø‰Dà Ð,ˆDÙ Ð*:Ò :Ø'3��^Ñ$ä—j‘j Ó&×-Ñ-¨gÓ6ˆà8Ø-¨f¨XÐ6ñ
ˆñ $¨6°|È$ÐX_Ô`ˆÙØ"×.Ñ.ØØ"×2Ñ2ó	
÷ ‰(�7Ô
Ø Ÿ™Ó*ˆà˜WŸ_™_¨dÐ2Ð2øôq ò 	YÜÐWÓXÐXð	Yús   ‚H< È<I)NNNNNNNNr   )NNN)NNNN)NN)é   NN) Ú__name__Ú
__module__Ú__qualname__rZ   rŠ   r   Úclassmethodr)   Úboolr   r9   r‰   ÚfloatrV   ÚTimeoutr_   rj   rn   re   rO   r‘   Úobjectr‹   rœ   r¢   Úintr¨   Útupler   ÚbytesrP   Ú__classcell__)r£   s   @r   r   r   '   sI  ø„ ð '+Ø$(Ø'+Ø&*Ø'+Ø-1Ø'+Ø,0ñ@à˜t™ð@ð ˜T‘zð@ð  ™*ð	@ð
 ˜t™ð@ð  ™*ð@ð !$ d¡
ð@ð  ™*ð@ð ˜c™ TÑ)ó@ð2 ñó ðð ð AEñ!à $ t¡ð!ð "7¸Ñ!=ò!ó ð!ðL (,Ø04Ø*.ñ+àð+ð  ™ð+ð ˜Ÿ™Ñ&¨Ñ-ð	+ð
 ! 4™Zð+ð 
ˆt‰ó+ð` (,Ø04Ø*.ñ7àð7ð  ™ð7ð ˜Ÿ™Ñ&¨Ñ-ð	7ð
 ! 4™Zð7ð 
ˆt‰ó7ðr
;¸SÀ4¹Zð 
;ÈDó 
;ð8Àð 8ÐZ]ð 8ÐbeÐhlÑbló 8ð8Àsð 8Ðadð 8ÐilÐosÑisó 8ð #'Ø'+Ø04Ø#'ñZàðZð ðZð ˜4‘Zð	Zð
  ™ðZð ˜Ÿ™Ñ&¨Ñ-ðZð �T‰k˜DÑ ðZð 
óZð@ 59Ø04ñ77àð77ð ˜c™ð77ð ˜c 6˜kÑ*¨TÑ1ð	77ð
 ˜Ÿ™Ñ&¨Ñ-ð77ð 
ˆc�6ˆkÑ	ó77ðz (,Ø04ñ27àð27ð ð27ð  ™ð	27ð
 ˜Ÿ™Ñ&¨Ñ-ð27ð 
ó27ðr (,Ø04ñ 
à ð 
ð ð 
ð ð	 
ð
  ™ð 
ð ˜Ÿ™Ñ&¨Ñ-ð 
ð 
õ 
ðJ /0Ø'+Ø04ñ,7àð,7ð "% t¡ð,7ð  ™ð	,7ð
 ˜Ÿ™Ñ&¨Ñ-ð,7ð 
ó,7ðd $(Ø'+Ø$(ñD3àðD3ð ðD3ð ˜D‘jð	D3ð
  ™ðD3ð ˜T‘kðD3ð 
ˆs�C˜ˆÑ	÷D3r    r   )Ú__doc__rU   r%   Útypingr   r   rV   r0   Úlitellm._loggingr   Ú(litellm.litellm_core_utils.aws_partitionr   Ú!litellm.llms.bedrock.base_aws_llmr   Ú&litellm.llms.custom_httpx.http_handlerr   r	   Úlitellm.proxy._typesr
   Úlitellm.secret_managers.mainr   Úlitellm.types.llms.custom_httpr   Ú"litellm.types.secret_managers.mainr   Úbase_secret_managerr   r   r-   r    r   ú<module>rØ      sK   ðñó  Û 	ß ã ã Ý +Ý GÝ 8÷õ 5Ý 7Ý ?Ý Då 2ôk3˜*Ð&7õ k3r    