Ë
    @²Xj‰1  ã                  ó@  — d dl mZ d dlZd dlZd dlmZmZmZmZ d dl	m
Z
 d dlmZmZ d dlZddlmZmZmZ ddlmZ d	Zd
ZdZdddœZ G d„ de«      Z G d„ de«      Z	 d	 	 	 dd„Z	 ddddddddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Z	 d dddœ	 	 	 	 	 	 	 d!d„Z G d„ d«      Zy)"é    )ÚannotationsN)ÚAnyÚCallableÚ	TypedDictÚcast)ÚPath)ÚLiteralÚNotRequiredé   )Ú
OAuthErrorÚOpenAIErrorÚSubjectTokenProviderError)Ú	to_threadz/urn:ietf:params:oauth:grant-type:token-exchangez#https://auth.openai.com/oauth/tokeni°  z$urn:ietf:params:oauth:token-type:jwtz)urn:ietf:params:oauth:token-type:id_token)ÚjwtÚidc                  ó"   — e Zd ZU ded<   ded<   y)ÚSubjectTokenProviderzLiteral['jwt', 'id']Ú
token_typezCallable[[], str]Ú	get_tokenN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© ó    ú[/var/www/html/content_generation/venv/lib/python3.12/site-packages/openai/auth/_workload.pyr   r      s   … Ø$Ó$Ø Ô r   r   c                  ó@   — e Zd ZU dZded<   	 ded<   	 ded<   	 ded<   y	)
ÚWorkloadIdentityz(Identity provider resource id in WIFAPI.ÚstrÚidentity_provider_idÚservice_account_idr   ÚproviderzNotRequired[float]Úrefresh_buffer_secondsN)r   r   r   Ú__doc__r   r   r   r   r   r      s&   … Ù2àÓàGØÓàEØ"Ó"àØ.Ô.r   r   c                ó   ‡ — dˆ fd„}d|dœS )aK  
    Get a subject token provider for Kubernetes clusters with Workload Identity configured.

    Cloud providers typically mount the subject token as a file in the container.

    Args:
        token_file_path: path to the mounted service account token file. Defaults to `/var/run/secrets/kubernetes.io/serviceaccount/token`.
    c                 óò   •— 	 t        ‰d«      5 } | j                  «       j                  «       }|st        d‰› d�«      ‚|cd d d «       S # 1 sw Y   y xY w# t        $ r}t        d‰› d|› �«      |‚d }~ww xY w)NÚrzThe token file at z
 is empty.z!Failed to read the token file at z: )ÚopenÚreadÚstripr   Ú	Exception)ÚfÚtokenÚeÚtoken_file_paths      €r   r   z5k8s_service_account_token_provider.<locals>.get_token8   s„   ø€ ð	oÜ�o sÔ+¨qØŸ™›Ÿ™Ó(�ÙÜ3Ð6HÈÐHYÐYcÐ4dÓeÐeØ÷	 ,×+Ò+ûô
 ò 	oÜ+Ð.OÐP_ÐO`Ð`bÐcdÐbeÐ,fÓgÐmnÐnûð	oús4   ƒA �1A
Á 	A Á
AÁA ÁA Á	A6ÁA1Á1A6r   ©r   r   ©Úreturnr   r   )r/   r   s   ` r   Ú"k8s_service_account_token_providerr3   ,   s   ø€ õoð  ¨iÑ8Ð8r   z
2018-02-01ç      $@)Ú	object_idÚ	client_idÚ
msi_res_idÚapi_versionÚtimeoutÚhttp_clientc               ó2   ‡ ‡‡‡‡‡‡— dˆˆˆˆˆˆ ˆfd„}d|dœS )aŽ  
    Get a subject token provider for Azure Managed Identities.

    See: https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token#get-a-token-using-http

    Args:
        resource: the resource URI to request a token for. Defaults to `https://management.azure.com/` (Azure Resource Manager).
        object_id: the object ID of the managed identity to use, when multiple are assigned.
        client_id: the client ID of the managed identity to use, when multiple are assigned.
        msi_res_id: the ARM resource ID of the managed identity to use, when multiple are assigned.
        api_version: the Azure IMDS API version. Defaults to `2018-02-01`.
        timeout: the request timeout in seconds. Defaults to 10.0.
        http_client: optional httpx.Client instance to use for requests. If not provided, a new client will be created for each request.
    c                 óþ  •— 	 d} ‰‰dœ}‰�‰|d<   ‰�‰|d<   ‰
�‰
|d<   ‰	�‰	j                  | |ddi‰¬«      }n4t        j                  «       5 }|j                  | |ddi‰¬«      }d d d «       j                  rt	        d	|j
                  › �|¬
«      ‚|j                  «       }|j                  d«      }|st	        d|¬
«      ‚t        t        |«      S # 1 sw Y   ŒoxY w# t        $ r}t	        d|› �«      |‚d }~ww xY w)Nz5http://169.254.169.254/metadata/identity/oauth2/token)zapi-versionÚresourcer5   r6   r7   ÚMetadataÚtrue©ÚparamsÚheadersr9   z4Failed to fetch Azure subject token from IMDS: HTTP ©ÚresponseÚaccess_tokenz3Azure IMDS response did not include an access_tokenz/Failed to fetch Azure subject token from IMDS: )
ÚgetÚhttpxÚClientÚis_errorr   Ústatus_codeÚjsonr   r   r+   )ÚurlrA   rD   ÚclientÚdatar-   r.   r8   r6   r:   r7   r5   r=   r9   s          €€€€€€€r   r   z8azure_managed_identity_token_provider.<locals>.get_token^   s7  ø€ ð	jØIˆCØ5@ÈhÑ%WˆFØÐ$Ø&/��{Ñ#ØÐ$Ø&/��{Ñ#ØÐ%Ø'1��|Ñ$àÐ&Ø&Ÿ?™?¨3°vÈ
ÐTZÐG[Ðel˜?Óm‘ä—\‘\”^ vØ%Ÿz™z¨#°fÀzÐSYÐFZÐdk˜zÓl�H÷ $ð × Ò Ü/ØJÈ8×K_ÑK_ÐJ`ÐaØ%ôð ð —=‘=“?ˆDØ—H‘H˜^Ó,ˆEÙÜ/ØIÐT\ôð ô œ˜UÓ#Ð#÷ $�^ûô ò 	jÜ+Ð.]Ð^_Ð]`Ð,aÓbÐhiÐiûð	jús1   ƒA
C ÁCÁ%A-C ÃCÃC Ã	C<Ã(C7Ã7C<r   r0   r1   r   )r=   r5   r6   r7   r8   r9   r:   r   s   ``````` r   Ú%azure_managed_identity_token_providerrO   E   s   þ€ ÷2jó jð@  ¨iÑ8Ð8r   )r9   r:   c               ó"   ‡ ‡‡— dˆ ˆˆfd„}d|dœS )a5  
    Get a subject token provider for GCP VM instances using the instance metadata server.

    See: https://cloud.google.com/compute/docs/instances/verifying-instance-identity

    Args:
        audience: the unique URI agreed upon by both the instance and the system verifying
            the instance's identity. Defaults to `https://api.openai.com/v1`.
        timeout: the request timeout in seconds. Defaults to 10.0.
        http_client: optional httpx.Client instance to use for requests. If not provided, a new client will be created for each request.
    c                 ó¨  •— 	 d} d‰i}‰�‰j                  | |ddi‰¬«      }n4t        j                  «       5 }|j                  | |ddi‰¬«      }d d d «       j                  rt	        d|j
                  › �|¬«      ‚|j                  j                  «       }|st	        d|¬«      ‚|S # 1 sw Y   ŒZxY w# t        $ r}t	        d	|› �«      |‚d }~ww xY w)
Nz]http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identityÚaudiencezMetadata-FlavorÚGoogler@   z=Failed to fetch GCP subject token from metadata server: HTTP rC   z+GCP metadata server returned an empty tokenz8Failed to fetch GCP subject token from metadata server: )	rF   rG   rH   rI   r   rJ   Útextr*   r+   )	rL   rA   rD   rM   r-   r.   rR   r:   r9   s	         €€€r   r   z(gcp_id_token_provider.<locals>.get_token“   sõ   ø€ ð	sØqˆCØ  (Ð+ˆFàÐ&Ø&Ÿ?™?¨3°vÐHYÐ[cÐGdÐnu˜?Óv‘ä—\‘\”^ vØ%Ÿz™z¨#°fÐGXÐZbÐFcÐmt˜zÓu�H÷ $ð × Ò Ü/ØSÐT\×ThÑThÐSiÐjØ%ôð ð —M‘M×'Ñ'Ó)ˆEÙÜ/Ð0]ÐhpÔqÐqØˆL÷ $�^ûô ò 	sÜ+Ð.fÐghÐfiÐ,jÓkÐqrÐrûð	sús/   ƒ4B4 ·B(ÁAB4 Â(B1Â-B4 Â4	CÂ=CÃCr   r0   r1   r   )rR   r9   r:   r   s   ``` r   Úgcp_id_token_providerrU   �   s   ú€ ÷$sð. ¨YÑ7Ð7r   c                  óx   — e Zd Zedœ	 	 	 dd„Zdd„Zdd„Zdd„Zdd„Zdd„Z	dd„Z
dd	„Zdd
„Zdd„Zdd„Zdd„Zy)ÚWorkloadIdentityAuth)Útoken_exchange_urlc               óÒ   — || _         || _        d | _        d | _        d | _        d| _        t        j                  «       | _        t        j                  | j                  «      | _
        y ©NF)Úworkload_identityrX   Ú_cached_tokenÚ"_cached_token_expires_at_monotonicÚ"_cached_token_refresh_at_monotonicÚ_refreshingÚ	threadingÚLockÚ_lockÚ	ConditionÚ
_condition)Úselfr[   rX   s      r   Ú__init__zWorkloadIdentityAuth.__init__®   sX   € ð "3ˆÔØ"4ˆÔà)-ˆÔØ@DˆÔ/Ø@DˆÔ/Ø!&ˆÔÜ—^‘^Ó%ˆŒ
Ü#×-Ñ-¨d¯j©jÓ9ˆ�r   c                óæ  — | j                   5  | j                  rG| j                  «       r7| j                  j	                  «        | j                  r| j                  «       rŒ7| j                  «       s3| j                  «       s#t        t        | j                  «      cd d d «       S | j                  rs| j                  r'| j                  j	                  «        | j                  rŒ'| j                  }| j                  «       rt        d«      ‚t        t        |«      cd d d «       S d| _        d d d «       	 | j                  «        | j                   5  | j                  «       rt        d«      ‚t        t        | j                  «      cd d d «       | j                   5  d| _        | j                  j                  «        d d d «       S # 1 sw Y   Œ›xY w# 1 sw Y   S xY w# 1 sw Y   nxY w	 | j                   5  d| _        | j                  j                  «        d d d «       y # 1 sw Y   y xY w# | j                   5  d| _        | j                  j                  «        d d d «       w # 1 sw Y   w xY wxY w)Nz)Token is unusable after refresh completedTF)rb   r_   Ú_token_unusablerd   ÚwaitÚ_needs_refreshr   r   r\   ÚRuntimeErrorÚ_perform_refreshÚ
notify_all)re   r-   s     r   r   zWorkloadIdentityAuth.get_token¾   sÁ  € Ø�Z‹ZØ×"Ò" t×';Ñ';Ô'=Ø—‘×$Ñ$Ô&ð ×"Ò" t×';Ñ';Õ'=ð ×'Ñ'Ô)°$×2EÑ2EÔ2GÜœC ×!3Ñ!3Ó4÷ ‰Zð ×ÒØ×&Ò&Ø—O‘O×(Ñ(Ô*ð ×&Ó&à×*Ñ*�Ø×'Ñ'Ô)Ü&Ð'RÓSÐSÜœC Ó'÷ ‰Zð  $ˆDÔ÷ ð"		-Ø×!Ñ!Ô#Ø—“Ø×'Ñ'Ô)Ü&Ð'RÓSÐSÜœC ×!3Ñ!3Ó4÷ �ð
 —“Ø#(�Ô Ø—‘×*Ñ*Ô,÷ �÷1 ˆZú÷0 �ú÷ �ú�ð
 —“Ø#(�Ô Ø—‘×*Ñ*Ô,÷ —‘û�—“Ø#(�Ô Ø—‘×*Ñ*Ô,÷ —‘ýsx   �AGÁ!9GÂ$>GÃ#6GÄ#GÄ3H, Å5GÆ	H, Æ"GÇGÇG	ÇG%Ç!H, Ç5"H È H)È,I0È9"I$É	I0É$I-É)I0c              ƒ  óH   K  — t        | j                  «      ƒ d {  –—† S 7 Œ­w©N)r   r   ©re   s    r   Úget_token_asyncz$WorkloadIdentityAuth.get_token_asyncÛ   s   è ø€ Ü˜tŸ~™~Ó.×.Ð.Ð.ús   ‚"› œ"c                óp   — | j                   5  d | _        d | _        d | _        d d d «       y # 1 sw Y   y xY wro   )rb   r\   r]   r^   rp   s    r   Úinvalidate_tokenz%WorkloadIdentityAuth.invalidate_tokenÞ   s+   € Ø�Z‹ZØ!%ˆDÔØ6:ˆDÔ3Ø6:ˆDÔ3÷ �Z‰Zús   �,¬5c                óò   — | j                  «       }t        j                  «       }|d   }| j                  5  |d   | _        ||z   | _        || j                  |«      z   | _        d d d «       y # 1 sw Y   y xY w)NÚ
expires_inrE   )Ú_fetch_token_from_exchangeÚtimeÚ	monotonicrb   r\   r]   Ú_refresh_delay_secondsr^   )re   Ú
token_dataÚnowru   s       r   rl   z%WorkloadIdentityAuth._perform_refreshä   sj   € Ø×4Ñ4Ó6ˆ
Ü�n‰nÓˆØ Ñ-ˆ
à�Z‹ZØ!+¨NÑ!;ˆDÔØ69¸JÑ6FˆDÔ3Ø69¸D×<WÑ<WÐXbÓ<cÑ6cˆDÔ3÷ �Z‰Zús   ¶.A-Á-A6c           
     óÒ  — | j                  «       }| j                  d   d   }t        j                  |«      }|€2t	        d|›ddj                  t        j                  «       «      › �«      ‚t        j                  «       5 }|j                  | j                  t        ||| j                  d   | j                  d   dœd	¬
«      }| j                  |«      cd d d «       S # 1 sw Y   y xY w)Nr"   r   zUnsupported token type: z. Supported types: z, r    r!   )Ú
grant_typeÚsubject_tokenÚsubject_token_typer    r!   r4   )rK   r9   )Ú_get_subject_tokenr[   ÚSUBJECT_TOKEN_TYPESrF   r   ÚjoinÚkeysrG   rH   ÚpostrX   ÚTOKEN_EXCHANGE_GRANT_TYPEÚ_handle_token_response)re   r~   r   r   rM   rD   s         r   rv   z/WorkloadIdentityAuth._fetch_token_from_exchangeî   sâ   € Ø×/Ñ/Ó1ˆà×+Ñ+¨JÑ7¸ÑEˆ
Ü0×4Ñ4°ZÓ@ÐØÐ%ÜØ*¨:¨.Ð8KÈDÏIÉIÔVi×VnÑVnÓVpÓLqÐKrÐsóð ô �\‰\Œ^˜vØ—{‘{Ø×'Ñ'ä";Ø%2Ø*<Ø,0×,BÑ,BÐCYÑ,ZØ*.×*@Ñ*@ÐAUÑ*Vñð ð #ó 
ˆHð ×.Ñ.¨xÓ8÷ �^Š^ús   Â ACÃC&c                óÖ  — 	 |j                   r|j                  «       nd }|j                  dv rt	        ||¬«      ‚|j
                  r{|€t        d«      ‚|j                  d«      }|j                  d«      }t        |t        «      r|st        d«      ‚t        |t        t        f«      st        d«      ‚|t        |«      dœS t        d	|j                  › �«      ‚# t        $ r d }Y ŒÇw xY w)
N)i�  i‘  i“  )rD   Úbodyz4Token exchange succeeded but response body was emptyrE   ru   z<Token exchange response did not include a valid access_tokenz:Token exchange response did not include a valid expires_in)rE   ru   z"Token exchange failed with status )ÚcontentrK   Ú
ValueErrorrJ   r   Ú
is_successr   rF   Ú
isinstancer   ÚintÚfloat)re   rD   rˆ   rE   ru   s        r   r†   z+WorkloadIdentityAuth._handle_token_response  så   € ð	Ø&.×&6Ò&6�8—=‘=”?¸DˆDð ×Ñ ?Ñ2Ü h°TÔ:Ð:à×ÒØˆ|Ü!Ð"XÓYÐYØŸ8™8 NÓ3ˆLØŸ™ ,Ó/ˆJÜ˜l¬CÔ0¹Ü!Ð"`ÓaÐaÜ˜j¬3´¨,Ô7Ü!Ð"^Ó_Ð_Ø$0ÄÀjÓ@QÑRÐRäØ0°×1EÑ1EÐ0FÐGó
ð 	
øô# ò 	ØŠDð	ús   ‚C ÃC(Ã'C(c                óR   — | j                   d   } |d   «       }|st        d«      ‚|S )Nr"   r   z>The workload identity provider returned an empty subject token)r[   r   )re   r"   r~   s      r   r€   z'WorkloadIdentityAuth._get_subject_token  s6   € Ø×)Ñ)¨*Ñ5ˆØ-˜ Ñ-Ó/ˆÙÜÐ^Ó_Ð_ØÐr   c                óB   — | j                   d u xs | j                  «       S ro   )r\   Ú_token_expiredrp   s    r   rh   z$WorkloadIdentityAuth._token_unusable%  s!   € Ø×!Ñ! TÐ)ÒB¨T×-@Ñ-@Ó-BÐBr   c                ó^   — | j                   €yt        j                  «       | j                   k\  S )NT)r]   rw   rx   rp   s    r   r‘   z#WorkloadIdentityAuth._token_expired(  s)   € Ø×2Ñ2Ð:ØÜ�~‰~Ó 4×#JÑ#JÑJÐJr   c                ó^   — | j                   €yt        j                  «       | j                   k\  S rZ   )r^   rw   rx   rp   s    r   rj   z#WorkloadIdentityAuth._needs_refresh-  s)   € Ø×2Ñ2Ð:ØÜ�~‰~Ó 4×#JÑ#JÑJÐJr   c                ó~   — | j                   j                  dt        «      }t        ||dz  «      }t	        ||z
  d«      S )Nr#   r   g        )r[   rF   ÚDEFAULT_REFRESH_BUFFER_SECONDSÚminÚmax)re   ru   Úconfigured_bufferÚeffective_buffers       r   ry   z+WorkloadIdentityAuth._refresh_delay_seconds2  sB   € Ø ×2Ñ2×6Ñ6Ð7OÔQoÓpÐÜÐ0°*¸q±.ÓAÐÜ�:Ð 0Ñ0°#Ó6Ð6r   N)r[   r   rX   r   r1   )r2   ÚNone)r2   údict[str, Any])rD   zhttpx.Responser2   r›   )r2   Úbool)ru   rŽ   r2   rŽ   )r   r   r   ÚDEFAULT_TOKEN_EXCHANGE_URLrf   r   rq   rs   rl   rv   r†   r€   rh   r‘   rj   ry   r   r   r   rW   rW   ­   s[   „ ð
 #=ñ	:ð ,ð:ð  ó	:ó -ó:/ó;ódó9ó0
ó0óCóKó
Kô
7r   rW   )z3/var/run/secrets/kubernetes.io/serviceaccount/token)r/   z
str | Pathr2   r   )zhttps://management.azure.com/)r=   r   r5   ú
str | Noner6   rž   r7   rž   r8   r   r9   rŽ   r:   úhttpx.Client | Noner2   r   )zhttps://api.openai.com/v1)rR   r   r9   rŽ   r:   rŸ   r2   r   )Ú
__future__r   rw   r`   Útypingr   r   r   r   Úpathlibr   Útyping_extensionsr	   r
   rG   Ú_exceptionsr   r   r   Ú_utils._syncr   r…   r�   r•   r�   r   r   r3   rO   rU   rW   r   r   r   Ú<module>r¦      s7  ðÝ "ã Û ß 1Ó 1Ý ß 2ã ç LÑ LÝ $àMÐ ØBÐ Ø!%Ð ð 2Ø
5ñÐ ô!˜9ô !ô
/�yô /ð  #Xð9Øð9àó9ð4 4ð99ð !Ø Ø!Ø#ØØ'+ñ99Øð99ð ð99ð ð	99ð
 ð99ð ð99ð ð99ð %ð99ð ó99ðz 0ð)8ð Ø'+ñ	)8Øð)8ð ð)8ð %ð	)8ð
 ó)8÷XH7ò H7r   