Ë
    sPêjl2  ã                  óL  — 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 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é   )ÚDefaultHttpx2Client)Ú
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__© ó    úZ/home/oem/CyberBrain26-unified/.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_token9   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   )r0   r   s   ` r   Ú"k8s_service_account_token_providerr4   -   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Úresourcer6   r7   r8   ÚMetadataÚtrue©ÚparamsÚheadersr:   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,   )ÚurlrB   rE   ÚclientÚdatar.   r/   r9   r7   r;   r8   r6   r>   r:   s          €€€€€€€r   r   z8azure_managed_identity_token_provider.<locals>.get_token_   sC  ø€ ð	jØIˆCØ5@ÈhÑ%WˆFØÐ$Ø&/��{Ñ#ØÐ$Ø&/��{Ñ#ØÐ%Ø'1��|Ñ$àÐ&Ø&Ÿ?™?¨3°vÈ
ÐTZÐG[Ðel˜?Óm‘ä—\‘\“^ð m vØ%Ÿz™z¨#°fÀzÐSYÐFZÐdk˜zÓl�H÷mð × Ò Ü/ØJÈ8×K_ÑK_ÐJ`ÐaØ%ôð ð —=‘=“?ˆDØ—H‘H˜^Ó,ˆEÙÜ/ØIÐT\ôð ô œ˜UÓ#Ð#÷mð mûô ò 	jÜ+Ð.]Ð^_Ð]`Ð,aÓbÐhiÐiûð	jús1   ƒA
C ÁCÁ%A-C ÃCÃC Ã	C<Ã(C7Ã7C<r   r1   r2   r   )r>   r6   r7   r8   r9   r:   r;   r   s   ``````` r   Ú%azure_managed_identity_token_providerrP   F   s   þ€ ÷2jó jð@  ¨iÑ8Ð8r   )r:   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ÚGooglerA   z=Failed to fetch GCP subject token from metadata server: HTTP rD   z+GCP metadata server returned an empty tokenz8Failed to fetch GCP subject token from metadata server: )	rG   rH   rI   rJ   r   rK   Útextr+   r,   )	rM   rB   rE   rN   r.   r/   rS   r;   r:   s	         €€€r   r   z(gcp_id_token_provider.<locals>.get_token”   s  ø€ ð	sØqˆCØ  (Ð+ˆFàÐ&Ø&Ÿ?™?¨3°vÐHYÐ[cÐGdÐnu˜?Óv‘ä—\‘\“^ð v vØ%Ÿz™z¨#°fÐGXÐZbÐFcÐmt˜zÓu�H÷vð × Ò Ü/ØSÐT\×ThÑThÐSiÐjØ%ôð ð —M‘M×'Ñ'Ó)ˆEÙÜ/Ð0]ÐhpÔqÐqØˆL÷vð vûô ò 	sÜ+Ð.fÐghÐfiÐ,jÓkÐqrÐrûð	sús/   ƒ4B4 ·B(ÁAB4 Â(B1Â-B4 Â4	CÂ=CÃCr   r1   r2   r   )rS   r:   r;   r   s   ``` r   Úgcp_id_token_providerrV   ‚   s   ú€ ÷$sð. ¨YÑ7Ð7r   c                  ó~   — e Zd Zed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)ÚWorkloadIdentityAuthF)Útoken_exchange_urlÚ_use_httpx2c               óà   — || _         || _        || _        d | _        d | _        d | _        d| _        t        j                  «       | _	        t        j                  | j                  «      | _        y ©NF)Úworkload_identityrY   rZ   Ú_cached_tokenÚ"_cached_token_expires_at_monotonicÚ"_cached_token_refresh_at_monotonicÚ_refreshingÚ	threadingÚLockÚ_lockÚ	ConditionÚ
_condition)Úselfr]   rY   rZ   s       r   Ú__init__zWorkloadIdentityAuth.__init__¯   s`   € ð "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)rd   ra   Ú_token_unusablerf   ÚwaitÚ_needs_refreshr   r    r^   ÚRuntimeErrorÚ_perform_refreshÚ
notify_all)rg   r.   s     r   r   zWorkloadIdentityAuth.get_tokenÁ   sþ  € Ø�Z‰Zñ 	$Ø×"Ò" t×';Ñ';Ô'=Ø—‘×$Ñ$Ô&ð ×"Ò" t×';Ñ';Õ'=ð ×'Ñ'Ô)°$×2EÑ2EÔ2GÜœC ×!3Ñ!3Ó4÷	$ñ 	$ð ×ÒØ×&Ò&Ø—O‘O×(Ñ(Ô*ð ×&Ó&à×*Ñ*�Ø×'Ñ'Ô)Ü&Ð'RÓSÐSÜœC Ó'÷	$ñ 	$ð  $ˆDÔ÷	$ð"		-Ø×!Ñ!Ô#Ø—‘ñ 5Ø×'Ñ'Ô)Ü&Ð'RÓSÐSÜœC ×!3Ñ!3Ó4÷5ð 5ð
 —‘ñ -Ø#(�Ô Ø—‘×*Ñ*Ô,÷-ð -÷1	$ð 	$ú÷0-ð -ú÷5ð 5úð 5ð
 —‘ñ -Ø#(�Ô Ø—‘×*Ñ*Ô,÷-÷ -ñ -û�—‘ñ -Ø#(�Ô Ø—‘×*Ñ*Ô,÷-÷ -ñ -ý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   ©rg   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rq   )rd   r^   r_   r`   rr   s    r   Úinvalidate_tokenz%WorkloadIdentityAuth.invalidate_tokená   s6   € Ø�Z‰Zñ 	;Ø!%ˆDÔØ6:ˆDÔ3Ø6:ˆDÔ3÷	;÷ 	;ñ 	;ú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_inrF   )Ú_fetch_token_from_exchangeÚtimeÚ	monotonicrd   r^   r_   Ú_refresh_delay_secondsr`   )rg   Ú
token_dataÚnowrw   s       r   rn   z%WorkloadIdentityAuth._perform_refreshç   sy   € Ø×4Ñ4Ó6ˆ
Ü�n‰nÓˆØ Ñ-ˆ
à�Z‰Zñ 	dØ!+¨NÑ!;ˆDÔØ69¸JÑ6FˆDÔ3Ø69¸D×<WÑ<WÐXbÓ<cÑ6cˆDÔ3÷	d÷ 	dñ 	dús   ¶.A-Á-A6c           
     ó  — | j                  «       }| j                  d   d   }t        j                  |«      }|€2t	        d|›ddj                  t        j                  «       «      › �«      ‚| j                  rt        d¬«      n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, F)Úfollow_redirectsr!   r"   )Ú
grant_typeÚsubject_tokenÚsubject_token_typer!   r"   r5   )rL   r:   )Ú_get_subject_tokenr]   ÚSUBJECT_TOKEN_TYPESrG   r   ÚjoinÚkeysrZ   r   rH   rI   ÚpostrY   ÚTOKEN_EXCHANGE_GRANT_TYPEÚ_handle_token_response)rg   r�   r   r‚   Úexchange_clientrN   rE   s          r   rx   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óð ð JN×IYÒIYÔ-¸uÕEÔ_d×_kÑ_kÓ_mˆØð 	9 Ø—{‘{Ø×'Ñ'ä";Ø%2Ø*<Ø,0×,BÑ,BÐCYÑ,ZØ*.×*@Ñ*@ÐAUÑ*Vñð ð #ó 
ˆHð ×.Ñ.¨xÓ8÷	9÷ 	9ò 	9ús   ÂAC7Ã7D 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“  )rE   Úbodyz4Token exchange succeeded but response body was emptyrF   rw   z<Token exchange response did not include a valid access_tokenz:Token exchange response did not include a valid expires_in)rF   rw   z"Token exchange failed with status )ÚcontentrL   Ú
ValueErrorrK   r   Ú
is_successr   rG   Ú
isinstancer    ÚintÚfloat)rg   rE   rŒ   rF   rw   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   )rg   r#   r�   s      r   rƒ   z'WorkloadIdentityAuth._get_subject_token"  s6   € Ø×)Ñ)¨*Ñ5ˆØ-˜ Ñ-Ó/ˆÙÜÐ^Ó_Ð_ØÐr   c                óB   — | j                   d u xs | j                  «       S rq   )r^   Ú_token_expiredrr   s    r   rj   z$WorkloadIdentityAuth._token_unusable)  s!   € Ø×!Ñ! TÐ)ÒB¨T×-@Ñ-@Ó-BÐBr   c                ó^   — | j                   €yt        j                  «       | j                   k\  S )NT)r_   ry   rz   rr   s    r   r•   z#WorkloadIdentityAuth._token_expired,  s)   € Ø×2Ñ2Ð:ØÜ�~‰~Ó 4×#JÑ#JÑJÐJr   c                ó^   — | j                   €yt        j                  «       | j                   k\  S r\   )r`   ry   rz   rr   s    r   rl   z#WorkloadIdentityAuth._needs_refresh1  s)   € Ø×2Ñ2Ð:ØÜ�~‰~Ó 4×#JÑ#JÑJÐJr   c                ó~   — | j                   j                  dt        «      }t        ||dz  «      }t	        ||z
  d«      S )Nr$   r   g        )r]   rG   ÚDEFAULT_REFRESH_BUFFER_SECONDSÚminÚmax)rg   rw   Úconfigured_bufferÚeffective_buffers       r   r{   z+WorkloadIdentityAuth._refresh_delay_seconds6  sB   € Ø ×2Ñ2×6Ñ6Ð7OÔQoÓpÐÜÐ0°*¸q±.ÓAÐÜ�:Ð 0Ñ0°#Ó6Ð6r   N)r]   r   rY   r    rZ   Úboolr2   )r3   ÚNone)r3   údict[str, Any])rE   zhttpx.Responser3   r    )r3   rž   )rw   r’   r3   r’   )r   r   r   ÚDEFAULT_TOKEN_EXCHANGE_URLrh   r   rs   ru   rn   rx   r‰   rƒ   rj   r•   rl   r{   r   r   r   rX   rX   ®   sh   „ ð
 #=Ø!ñ:ð ,ð:ð  ð	:ð
 ó:ó$-ó:/ó;ódó9ó2
ó0óCóKó
Kô
7r   rX   )z3/var/run/secrets/kubernetes.io/serviceaccount/token)r0   z
str | Pathr3   r   )zhttps://management.azure.com/)r>   r    r6   ú
str | Noner7   r¢   r8   r¢   r9   r    r:   r’   r;   úhttpx.Client | Noner3   r   )zhttps://api.openai.com/v1)rS   r    r:   r’   r;   r£   r3   r   )!Ú
__future__r   ry   rb   Útypingr   r   r   r   Úpathlibr   Útyping_extensionsr	   r
   rH   Ú_httpx2r   Ú_exceptionsr   r   r   Ú_utils._syncr   rˆ   r¡   r™   r„   r   r   r4   rP   rV   rX   r   r   r   ú<module>r«      s:  ðÝ "ã Û ß 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K7ò K7r   