Ë
    uPêjÑ@  ã                   ó¢  — U d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	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mZ d dlZd dlmZ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Z#ee$d<   e#› d�Z%ee$d<   dZ&ee$d<   dZ'ee$d<   dZ(ee$d<   dZ)ee$d<   dZ*ee$d<   dZ+ee$d<   dZ,ee$d<    ejZ                  «       Z.ee$d<    G d„ de«      Z/ G d „ d!e«      Z0 G d"„ d#e«      Z1 G d$„ d%e«      Z2 G d&„ d'e«      Z3 G d(„ d)e«      Z4 G d*„ d+e5«      Z6 G d,„ d-e6«      Z7 G d.„ d/e«      Z8 G d0„ d1e«      Z9 G d2„ d3«      Z:d4ee;e<f   dz  d5e=fd6„Z>y)7é    N)ÚMapping)ÚBaseHTTPRequestHandlerÚ
HTTPServer)ÚFinal)Úparse_qsÚ	urlencodeÚurlparse)ÚNotRequiredÚReadOnlyÚ	TypedDict)Úverbose_logger)ÚXAI_API_BASE)ÚHTTPHandlerÚ_get_httpx_client)Úget_secret_strzhttps://auth.x.aiÚXAI_OAUTH_ISSUERz!/.well-known/openid-configurationÚXAI_OAUTH_DISCOVERY_URLz$b1a00492-073a-47ea-816f-4c329264a828ÚXAI_OAUTH_CLIENT_IDz>openid profile email offline_access grok-cli:access api:accessÚXAI_OAUTH_SCOPEz	127.0.0.1ÚXAI_OAUTH_REDIRECT_HOSTi9Û  ÚXAI_OAUTH_REDIRECT_PORTz	/callbackÚXAI_OAUTH_REDIRECT_PATHéx   ÚXAI_OAUTH_EXPIRY_SKEW_SECONDSé´   Ú"XAI_OAUTH_CALLBACK_TIMEOUT_SECONDSÚ_XAI_OAUTH_REFRESH_LOCKc                   óz   — e Zd ZU ee   ed<   ee   ed<   eedz     ed<   ee   ed<   ee   ed<   eedz     ed<   y)ÚXAIOAuthRecordÚaccess_tokenÚrefresh_tokenNÚid_tokenÚ
token_typeÚtoken_endpointÚ
expires_at)Ú__name__Ú
__module__Ú__qualname__r   ÚstrÚ__annotations__Úfloat© ó    ú[/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/xai/oauth.pyr   r   $   sH   … Ø˜3‘-ÓØ˜C‘=Ó Ø�s˜T‘zÑ"Ó"Ø˜‘ÓØ˜S‘MÓ!Ø˜ ™Ñ&Ô&r-   r   c                   ó‚   — e Zd ZU eee      ed<   eee      ed<   eeedz        ed<   eee      ed<   eee      ed<   y)Ú_TokenPayloadr    r!   Nr"   r#   Ú
expires_in)r&   r'   r(   r
   r   r)   r*   r+   r,   r-   r.   r0   r0   -   sR   … Ø˜h s™mÑ,Ó,Ø˜x¨™}Ñ-Ó-Ø˜( 3¨¡:Ñ.Ñ/Ó/Ø˜H S™MÑ*Ó*Ø˜H U™OÑ,Ô,r-   r0   c                   ó:   — e Zd ZU eee      ed<   eee      ed<   y)Ú_DiscoveryDocumentÚauthorization_endpointr$   N)r&   r'   r(   r
   r   r)   r*   r,   r-   r.   r3   r3   5   s    … Ø'¨°©Ñ6Ó6Ø ¨¡Ñ.Ô.r-   r3   c                   ó$   — e Zd ZU eedz     ed<   y)Ú_AuthFileViewNÚrecord)r&   r'   r(   r   r   r*   r,   r-   r.   r6   r6   :   s   … Ø�^ dÑ*Ñ+Ô+r-   r6   c                   ó$   — e Zd ZU eedz     ed<   y)Ú_TokenPayloadViewNÚpayload)r&   r'   r(   r   r0   r*   r,   r-   r.   r9   r9   >   s   … Ø�m dÑ*Ñ+Ô+r-   r9   c                   ó   — e Zd ZU ee   ed<   y)Ú_DiscoveryViewÚdocumentN)r&   r'   r(   r   r3   r*   r,   r-   r.   r<   r<   B   s   … ØÐ)Ñ*Ô*r-   r<   c                   ó   — e Zd Zy)ÚXAIOAuthErrorN©r&   r'   r(   r,   r-   r.   r?   r?   F   ó   „ Ør-   r?   c                   ó   — e Zd Zy)ÚXAIOAuthLoginRequiredErrorNr@   r,   r-   r.   rC   rC   J   rA   r-   rC   c                   ó4   — e Zd ZU ded<   d	d„Zdededdfd„Zy)
Ú_CallbackHandlerÚ_CallbackServerÚserverÚreturnNc                 ó  — t        | j                  «      }|j                  t        k7  r"| j                  d«       | j	                  «        y t        |j                  «      }|j                  dd g«      d   |j                  dd g«      d   |j                  dd g«      d   |j                  dd g«      d   dœ}|| j                  _	        |d   | j                  j                  k7  rO| j                  d«       | j                  d	d
«       | j	                  «        | j                  j                  d«       y | j                  d«       | j                  d	d
«       | j	                  «        |d   rdnd}| j                  j                  |«       y )Ni”  Úcoder   ÚstateÚerrorÚerror_description)rJ   rK   rL   rM   i�  úContent-Typeztext/html; charset=utf-8sD   <html><body><h1>xAI authorization state mismatch.</h1></body></html>éÈ   sS   <html><body><h1>xAI authorization failed.</h1>You can close this tab.</body></html>sU   <html><body><h1>xAI authorization received.</h1>You can close this tab.</body></html>)r	   Úpathr   Úsend_responseÚend_headersr   ÚqueryÚgetrG   Úcallback_resultÚexpected_stateÚsend_headerÚwfileÚwrite)ÚselfÚparsedÚparamsÚresultÚbodys        r.   Údo_GETz_CallbackHandler.do_GETQ   s_  € Ü  §¡Ó+ˆØ�;‰;Ô1Ò1Ø×Ñ˜sÔ#Ø×ÑÔØä  §¡Ó.ˆà—J‘J˜v¨ vÓ.¨qÑ1Ø—Z‘Z ¨$¨Ó0°Ñ3Ø—Z‘Z ¨$¨Ó0°Ñ3Ø!'§¡Ð,?À$ÀÓ!HÈÑ!Kñ	
ˆð '-ˆ�‰Ô#à�'‰?˜dŸk™k×8Ñ8Ò8Ø×Ñ˜sÔ#Ø×Ñ˜^Ð-GÔHØ×ÑÔØ�J‰J×ÑÐdÔeØà×Ñ˜3ÔØ×Ñ˜Ð)CÔDØ×ÑÔð �gŠñ càið 	ð
 	�
‰
×Ñ˜Õr-   ÚformatÚargsc                  ó   — y ©Nr,   )rZ   r`   ra   s      r.   Úlog_messagez_CallbackHandler.log_messager   s   € Ør-   ©rH   N)r&   r'   r(   r*   r_   r)   Úobjectrd   r,   r-   r.   rE   rE   N   s(   … ØÓóðB #ð ¨fð ¸ô r-   rE   c                   ó8   — e Zd ZU eed<   eeedz  f   dz  ed<   y)rF   rV   NrU   )r&   r'   r(   r)   r*   Údictr,   r-   r.   rF   rF   v   s    … ØÓØ˜#˜s T™z˜/Ñ*¨TÑ1Ô1r-   rF   c                   ó²  — e Zd Zd$dej                  ez  dz  ddfd„Zdefd„Zdefd„Z	d%de
de
defd	„Zdej                  ez  fd
„Zd&d„Zdedz  fd„Zdeddfd„Zdede
fd„Zdeeef   fd„Zdedefd„Zdeeef   fd„Zdedeeef   fd„Zdedededededefd„Zdedeeedz  f   fd„Zdedeeef   defd„Z	 d$d eded!edz  defd"„Zdedefd#„Zy)'ÚXAIOAuthAuthenticatorNÚhttp_clientrH   c                 óì   — t        d«      xs t        j                  j                  d«      | _        t        j                  j                  | j                  t        d«      xs d«      | _        || _        y )NÚXAI_OAUTH_TOKEN_DIRz~/.config/litellm/xai_oauthÚXAI_OAUTH_AUTH_FILEz	auth.json)r   ÚosrP   Ú
expanduserÚ	token_dirÚjoinÚ	auth_filerk   )rZ   rk   s     r.   Ú__init__zXAIOAuthAuthenticator.__init__|   sR   € Ü'Ð(=Ó>ÒsÄ"Ç'Á'×BTÑBTÐUrÓBsˆŒÜŸ™Ÿ™ d§n¡n´nÐEZÓ6[Ò6jÐ_jÓkˆŒØ&ˆÕr-   c                 óB   — t        d«      xs t        d«      xs t        S )NÚXAI_OAUTH_API_BASEr   )r   r   ©rZ   s    r.   Úget_api_basez"XAIOAuthAuthenticator.get_api_base�   s   € ÜÐ2Ó3Òe´~ÀnÓ7UÒeÔYeÐer-   c                 ó®  — | j                  «       }|st        d«      ‚|j                  d«      }|r| j                  |«      s|S |j                  d«      }|st        d«      ‚t        5  | j                  «       xs |}|j                  d«      }|r| j                  |«      s|cd d d «       S | j                  |«      }|d   cd d d «       S # 1 sw Y   y xY w)Nz8xAI OAuth login required. Run `litellm xai-oauth login`.r    r!   ú?xAI OAuth refresh token missing. Run `litellm xai-oauth login`.)Ú_read_auth_filerC   rT   Ú_is_expiredr   Ú_refresh_tokens)rZ   Ú	auth_datar    r!   Úlocked_auth_dataÚ	refresheds         r.   Úget_access_tokenz&XAIOAuthAuthenticator.get_access_token„   sÕ   € Ø×/Ñ/Ó1ˆ	ÙÜ,Ð-gÓhÐhà —}‘} ^Ó4ˆÙ × 0Ñ 0°Ô ;ØÐà(Ÿ}™}¨_Ó=ˆÙÜ,Ð-nÓoÐoä$ñ 	-Ø&*×&:Ñ&:Ó&<Ò&IÀ	ÐØ+×/Ñ/°Ó?ˆLÙ D×$4Ñ$4Ð5EÔ$FØ#÷		-ñ 	-ð  $×3Ñ3Ð4DÓEˆIØ˜^Ñ,÷	-÷ 	-ò 	-ús   Á(:CÂ,CÃCÚforceÚ
no_browserc           	      ó8  — | j                  «       }|rI|sG|j                  d«      r6| j                  |«      s|S |j                  d«      r	 | j                  |«      S | j                  «       }| j                  «       \  }}t        j                  «       j                  }t        j                  «       j                  }| j                  |«      \  }	}
| j                  |d   |
|||¬«      }|st        j                  |«      sAt        j                  j!                  d|› d�«       t        j                  j#                  «        | j%                  |	«      }|j                  d«      |k7  rt	        d«      ‚|j                  d	«      r&|j                  d
«      xs |d	   }t	        d|› �«      ‚|j                  d«      }|st	        d«      ‚| j'                  |d   d||
t(        |dœ«      }| j+                  ||d   «      }| j-                  |«       |S # t        $ r Y �Œ¼w xY w)Nr    r!   r4   )r4   Úredirect_uriÚ	challengerK   Únoncez(Open this URL to authenticate with xAI:
ú
rK   zxAI OAuth state mismatchrL   rM   zxAI authorization failed: rJ   z*xAI authorization failed: no code returnedr$   Úauthorization_code)Ú
grant_typerJ   r…   Ú	client_idÚcode_verifier)r{   rT   r|   r}   r?   Ú	_discoverÚ
_pkce_pairÚuuidÚuuid4ÚhexÚ_start_callback_serverÚ_build_authorize_urlÚ
webbrowserÚopenÚsysÚstdoutrY   ÚflushÚ_wait_for_callbackÚ_exchange_tokenr   Ú_build_auth_recordÚ_write_auth_file)rZ   r‚   rƒ   ÚexistingÚ	discoveryÚverifierr†   rK   r‡   rG   r…   Úauthorize_urlr]   ÚdescriptionrJ   Útoken_payloadr~   s                    r.   ÚloginzXAIOAuthAuthenticator.loginš   s  € Ø×.Ñ.Ó0ˆÙ™E h§l¡l°>Ô&BØ×#Ñ# HÔ-Ø�Ø�|‰|˜OÔ,ðØ×/Ñ/°Ó9Ð9ð  Ÿ>™>Ó+ˆ	Ø"Ÿo™oÓ/Ñˆ�)Ü—z‘z“|×'Ñ'ˆÜ—z‘z“|×'Ñ'ˆØ#×:Ñ:¸5ÓAÑˆ�Ø#×8Ñ8Ø#,Ð-EÑ#FØ%ØØØð  9ó  
ˆñ œZŸ_™_¨]Ô;Ü�J‰J×ÑÐHÈÈÐWYÐZÔ[Ü�J‰J×ÑÔà×/Ñ/°Ó7ˆØ�:‰:�gÓ %Ò'ÜÐ :Ó;Ð;Ø�:‰:�gÔØ!'§¡Ð,?Ó!@Ò!SÀFÈ7ÁOˆKÜÐ"<¸[¸MÐ JÓKÐKØ—j‘j Ó(ˆÙÜÐ LÓMÐMà#×3Ñ3ØÐ&Ñ'à2ØØ ,Ü0Ø!)ñó	 
ˆð  ×2Ñ2°=À)ÐL\ÑB]Ó^ˆ	Ø×Ñ˜iÔ(ØÐøôU %ò Úðús   ÁH È	HÈHc                 ó2   — | j                   xs
 t        «       S rc   )rk   r   rw   s    r.   Ú_clientzXAIOAuthAuthenticator._clientÎ   s   € Ø×ÑÒ6Ô#4Ó#6Ð6r-   c                 óÒ   — t        j                  | j                  dd¬«       	 t        j                  | j                  d«       y # t        $ r t        j                  d«       Y y w xY w)NiÀ  T)ÚmodeÚexist_okz)Could not chmod xAI OAuth token directory)ro   Úmakedirsrq   ÚchmodÚOSErrorr   Údebugrw   s    r.   Ú_ensure_token_dirz'XAIOAuthAuthenticator._ensure_token_dirÑ   sN   € Ü
�‰�D—N‘N¨¸Õ>ð	NÜ�H‰H�T—^‘^ UÕ+øÜò 	NÜ× Ñ Ð!LÖMð	Nús   ¤ A ÁA&Á%A&c                 óø   — 	 t        | j                  d«      5 }dt        j                  |«      i}d d d «       d   }t	        |t
        «      r|S d S # 1 sw Y   Œ"xY w# t        t        j                  f$ r Y y w xY w)NÚrr7   )r•   rs   ÚjsonÚloadÚ
isinstancerh   r«   ÚJSONDecodeError)rZ   ÚfÚloadedÚdatas       r.   r{   z%XAIOAuthAuthenticator._read_auth_fileØ   s~   € ð	Ü�d—n‘n cÓ*ð H¨aØ08¼$¿)¹)ÀA»,Ð/G�÷Hà  Ñ*ˆDÜ% d¬DÔ1�4Ð;°tÐ;÷Hð Hûô œ×-Ñ-Ð.ò 	Ùð	ús-   ‚A ˜A°A ÁA ÁAÁA ÁA9Á8A9r¶   c                 óJ  — | j                  «        t        j                  j                  | j                  dt        j                  j                  | j                  «      › dt        j                  «       j                  › d�«      }t        j                  t        j                  z  t        j                  z  }t        t        d«      r|t        j                  z  }t        j                  ||d«      }	 t        j                   |d«      5 }t#        j$                  ||«       |j'                  «        t        j(                  |j+                  «       «       d d d «       t        j,                  || j                  «       	 t        j.                  | j                  d«       y # 1 sw Y   ŒKxY w# t0        $ r t3        j4                  d«       Y y w xY w# t6        $ rM 	 t        j8                  |«       n# t0        $ r Y nw xY w	 t        j:                  |«       ‚ # t0        $ r Y ‚ w xY ww xY w)Nú.z.tmpÚ
O_NOFOLLOWi€  Úwz#Could not chmod xAI OAuth auth file)r­   ro   rP   rr   rq   Úbasenamers   r�   r�   r‘   ÚO_WRONLYÚO_CREATÚO_EXCLÚhasattrr¹   r•   Úfdopenr°   Údumpr˜   ÚfsyncÚfilenoÚreplacerª   r«   r   r¬   Ú	ExceptionÚcloseÚunlink)rZ   r¶   Útmp_fileÚflagsÚfdr´   s         r.   rœ   z&XAIOAuthAuthenticator._write_auth_fileá   sž  € Ø×ÑÔ ÜŸ'™'Ÿ,™,Ø�N‰NØ”—‘× Ñ  §¡Ó0Ð1°´4·:±:³<×3CÑ3CÐ2DÀDÐIó
ˆô —‘œbŸj™jÑ(¬2¯9©9Ñ4ˆÜ”2�|Ô$Ø”R—]‘]Ñ"ˆEÜ—G‘G˜H e¨UÓ3ˆð	Ü—‘˜2˜sÓ#ð % qÜ—	‘	˜$ Ô"Ø—‘”	Ü—‘˜Ÿ™›Ô$÷%ô �J‰J�x §¡Ô0ðLÜ—‘˜Ÿ™¨Õ/÷%ð %ûô ò LÜ×$Ñ$Ð%JÖKðLûäò 		ðÜ—‘˜•øÜò ÙðúðÜ—	‘	˜(Ô#ð øô ò ØØðúð		ús‹   Ã2G ÄA
FÅ(G Å; F( ÆF%Æ!G Æ(G	ÇG ÇG	Ç	G Ç	H"ÇG,Ç+H"Ç,	G8Ç5H"Ç7G8Ç8H"Ç<HÈH"È	HÈH"ÈHÈH"r~   c                 ó¤   — |j                  d«      }|€y	 t        j                  «       t        |«      t        z
  k\  S # t        t
        f$ r Y yw xY w)Nr%   T)rT   Útimer+   r   Ú	TypeErrorÚ
ValueError)rZ   r~   r%   s      r.   r|   z!XAIOAuthAuthenticator._is_expired   sQ   € Ø%ŸM™M¨,Ó7ˆ
ØÐØð	Ü—9‘9“;¤%¨
Ó"3Ô6SÑ"SÑSÐSøÜœ:Ð&ò 	Ùð	ús   –&= ½AÁAc                 ó.  — 	 | j                  «       j                  t        ddi¬«      }|j                  «        	 d|j                  «       i}|d   }|j                  d«      }|j                  d	«      }|r|st        d
«      ‚| j                  |«      | j                  |«      dœS # t        j
                  $ r?}t        d|j                  j                  › d|j                  j                  › �«      |‚d }~ww xY w# t        $ r}t        d«      |‚d }~ww xY w)NÚAcceptúapplication/json)Úheadersz$xAI OAuth discovery request failed: ú r=   z/xAI OAuth discovery response was not valid JSONr4   r$   z%xAI OAuth discovery missing endpoints)r4   r$   )r¥   rT   r   Úraise_for_statusÚhttpxÚHTTPStatusErrorr?   ÚresponseÚstatus_codeÚtextr°   rÎ   Ú_validate_xai_endpoint)rZ   r×   ÚexcÚ
discoveredr¶   r4   r$   s          r.   r�   zXAIOAuthAuthenticator._discover	  s#  € ð	Ø"Ÿl™l›n×0Ñ0Ô1HÐS[Ð]oÐRpÐ0ÓqˆHØ×%Ñ%Ô'ð
	\Ø1;¸X¿]¹]»_Ð0MˆJð ! Ñ,ˆØ(,¯©Ð1IÓ(JÐØ $§¡Ð)9Ó :ˆÙ%©^ÜÐ GÓHÐHà&*×&AÑ&AÐBXÓ&YØ"×9Ñ9¸.ÓIñ
ð 	
øô ×$Ñ$ò 	ÜØ6°s·|±|×7OÑ7OÐ6PÐPQÐRU×R^ÑR^×RcÑRcÐQdÐeóàðûð	ûô ò 	\ÜÐ QÓRÐX[Ð[ûð	\ús.   ‚7B% ºC: Â%C7Â8:C2Ã2C7Ã:	DÄDÄDÚurlc                 ó¾   — t        |«      }|j                  xs dj                  «       }|j                  dk7  s|dk7  r|j	                  d«      st        d|› �«      ‚|S )NÚ Úhttpszx.aiz.x.aiz2xAI OAuth discovery returned unexpected endpoint: )r	   ÚhostnameÚlowerÚschemeÚendswithr?   )rZ   rÝ   r[   Úhosts       r.   rÚ   z,XAIOAuthAuthenticator._validate_xai_endpoint  sY   € Ü  ›ˆØ—‘Ò,¨"×3Ñ3Ó5ˆØ�=‰=˜GÒ#¨°ª¸t¿}¹}ÈWÔ?UÜÐ"TÐUXÐTYÐ ZÓ[Ð[Øˆ
r-   c                 óV  — t        j                  t        j                  d«      «      j	                  d«      j                  «       }t        j                  t        j                  |j                  «       «      j                  «       «      j	                  d«      j                  «       }||fS )Né    ó   =)
Úbase64Úurlsafe_b64encodeÚsecretsÚtoken_bytesÚrstripÚdecodeÚhashlibÚsha256ÚencodeÚdigest)rZ   rŸ   r†   s      r.   rŽ   z XAIOAuthAuthenticator._pkce_pair&  s{   € Ü ×2Ñ2´7×3FÑ3FÀrÓ3JÓK×RÑRÐSWÓX×_Ñ_ÓaˆÜ!×3Ñ3´G·N±NÀ8Ç?Á?ÓCTÓ4U×4\Ñ4\Ó4^Ó_×fÑfÐgkÓl×sÑsÓuˆ	Ø˜Ð"Ð"r-   rK   c                 ó  — d }t         dfD ]M  }	 t        t        |ft        «      }||_        d |_        |j                  d   }dt        › d|› t        › �}||fc S  t        d|› �«      ‚# t        $ r}|}Y d }~Œnd }~ww xY w)Nr   é   zhttp://ú:z+Could not start xAI OAuth callback server: )
r   rF   r   rE   rV   rU   Úserver_addressr   r«   r?   )rZ   rK   Ú
last_errorÚportrG   Úactual_portr…   rÛ   s           r.   r’   z,XAIOAuthAuthenticator._start_callback_server+  s¤   € Ø%)ˆ
Ü,¨aÐ0ò 		!ˆDð!Ü(Ô*AÀ4Ð)HÔJZÓ[�Ø(-�Ô%Ø)-�Ô&Ø$×3Ñ3°AÑ6�Ø!(Ô)@Ð(AÀÀ;À-ÔPgÐOhÐi�Ø˜|Ð+Ò+ð		!ô ÐIÈ*ÈÐVÓWÐWøô ò !Ø •
ûð!ús   �AA)Á)	A>Á2A9Á9A>r4   r…   r†   r‡   c           	      óH   — dt         |t        |d||dœ}|› dt        |«      › �S )NrJ   ÚS256)Úresponse_typer‹   r…   ÚscopeÚcode_challengeÚcode_challenge_methodrK   r‡   ú?)r   r   r   )rZ   r4   r…   r†   rK   r‡   r\   s          r.   r“   z*XAIOAuthAuthenticator._build_authorize_url9  s=   € ð $Ü,Ø(Ü$Ø'Ø%+ØØñ	
ˆð )Ð)¨¬9°VÓ+<Ð*=Ð>Ð>r-   rG   c                 óv  — d|_         t        j                  «       t        z   }	 t        j                  «       |k  rP|j                  «        |j                  �|j                  |j                  «        S t        j                  «       |k  rŒP|j                  «        t        d«      ‚# |j                  «        w xY w)Nrô   z(Timed out waiting for xAI OAuth callback)ÚtimeoutrÌ   r   Úhandle_requestrU   Úserver_closer?   )rZ   rG   Údeadlines      r.   r™   z(XAIOAuthAuthenticator._wait_for_callbackM  s”   € ØˆŒÜŸ)™)›+Ô(JÑJˆð	"Ü—)‘)“+ Ò(Ø×%Ñ%Ô'Ø×)Ñ)Ð5Ø!×1Ñ1à×ÑÕ!ô —)‘)“+ Ó(ð
 ×ÑÔ!ÜÐFÓGÐGøð ×ÑÕ!ús   ¤>B& Á3B& Â&B8r$   c                 ó¼  — 	 | j                  «       j                  |dddœ|¬«      }|j                  «        	 d|j                  «       i}|d   }t        |t        «      st        d	«      ‚|S # t        j                  $ r?}t        d|j                  j                  › d|j                  j                  › �«      |‚d }~ww xY w# t        $ r}t        d«      |‚d }~ww xY w)
NrÑ   z!application/x-www-form-urlencoded)rÐ   rN   )rÒ   r¶   z xAI OAuth token request failed: rÓ   r:   z+xAI OAuth token response was not valid JSONz*xAI OAuth token response was not an object)r¥   ÚpostrÔ   rÕ   rÖ   r?   r×   rØ   rÙ   r°   rÎ   r²   rh   )rZ   r$   r¶   r×   rÛ   Ú	exchangedr^   s          r.   rš   z%XAIOAuthAuthenticator._exchange_tokenY  sð   € ð	Ø"Ÿl™l›n×1Ñ1Øà0Ø$Gñð ð 2ó ˆHð ×%Ñ%Ô'ð
	XØ3<¸h¿m¹m»oÐ2NˆIð   	Ñ*ˆÜ˜$¤Ô%ÜÐ LÓMÐMØˆøô ×$Ñ$ò 	ÜØ2°3·<±<×3KÑ3KÐ2LÈAÈcÏlÉl×N_ÑN_ÐM`Ðaóàðûð	ûô ò 	XÜÐ MÓNÐTWÐWûð	Xús.   ‚5A, ¸C Á,B>Á?:B9Â9B>Ã	CÃ
CÃCr¢   Úfallback_refresh_tokenc                 óÀ  — |j                  d«      }|j                  d«      xs |}|st        d«      ‚|st        d«      ‚|j                  d«      xs d}	 t        t        j                  «       t        |«      z   «      }|||j                  d«      |j                  d«      xs d	||d
œS # t        t
        f$ r# t        t        j                  «       dz   «      }Y Œ\w xY w)Nr    r!   z-xAI OAuth token response missing access_tokenz.xAI OAuth token response missing refresh_tokenr1   i  r"   r#   ÚBearer)r    r!   r"   r#   r$   r%   )rT   r?   ÚintrÌ   rÍ   rÎ   )rZ   r¢   r$   r	  r    r!   r1   r%   s           r.   r›   z(XAIOAuthAuthenticator._build_auth_recordq  sß   € ð ,×/Ñ/°Ó?ˆØ,×0Ñ0°ÓAÒ[ÐE[ˆÙÜÐ OÓPÐPÙÜÐ PÓQÐQØ)×-Ñ-¨lÓ;ÒC¸tˆ
ð	1ÜœTŸY™Y›[¬3¨z«?Ñ:Ó;ˆJð )Ø*Ø%×)Ñ)¨*Ó5Ø'×+Ñ+¨LÓ9ÒE¸XØ,Ø$ñ
ð 	
øô œ:Ð&ò 	1ÜœTŸY™Y›[¨4Ñ/Ó0ŠJð	1ús   Á)B+ Â+/CÃCc                 ó.  — |j                  d«      }|s| j                  «       d   }| j                  |«      }|j                  d«      }|st        d«      ‚| j	                  |d|t
        dœ«      }| j                  |||¬«      }| j                  |«       |S )Nr$   r!   rz   )rŠ   r!   r‹   )r	  )rT   r�   rÚ   rC   rš   r   r›   rœ   )rZ   r~   r$   r!   r¢   r€   s         r.   r}   z%XAIOAuthAuthenticator._refresh_tokens‹  sª   € Ø"Ÿ™Ð'7Ó8ˆÙØ!Ÿ^™^Ó-Ð.>Ñ?ˆNØ×4Ñ4°^ÓDˆØ(Ÿ}™}¨_Ó=ˆÙÜ,Ð-nÓoÐoà#×3Ñ3Øà-Ø!.Ü0ñó 
ˆð  ×2Ñ2ØØØ#0ð 3ó 
ˆ	ð
 	×Ñ˜iÔ(ØÐr-   rc   )FFre   )r&   r'   r(   rÕ   ÚClientr   rt   r)   rx   r�   Úboolr   r£   r¥   r­   r{   rœ   r|   rh   r�   rÚ   ÚtuplerŽ   rF   r’   r“   r™   r0   rš   r›   r}   r,   r-   r.   rj   rj   {   sÑ  „ ñ' E§L¡L°;Ñ$>ÀÑ$Eð 'ÐQUó 'ð
f˜có fð- #ó -ñ,2˜4ð 2°Tð 2Ànó 2ðh7˜Ÿ™¨Ñ3ó 7óNð °$Ñ!6ó ð ^ð ¸ó ð> ^ð ¸ó ð
˜4  S ™>ó 
ð,¨#ð °#ó ð#˜E # s (™Oó #ð
X¨Cð X°E¸/È3Ð:NÑ4Oó Xð?à #ð?ð ð?ð ð	?ð
 ð?ð ð?ð 
ó?ð(
H¨ð 
H¸TÀ#ÀsÈTÁzÀ/Ñ=Ró 
Hð¨cð ¸¸cÀ3¸h¹ð ÈMó ð8 .2ñ	
à$ð
ð ð
ð !$ d¡
ð	
ð
 
ó
ð4¨ð ¸Nô r-   rj   Úlitellm_paramsrH   c                 ó>   — t        | xs i j                  d«      «      S )NÚuse_xai_oauth)r  rT   )r  s    r.   Úshould_use_xai_oauthr  ¥  s   € Ü�Ò% 2×*Ñ*¨?Ó;Ó<Ð<r-   )?ré   rï   r°   ro   rë   r–   Ú	threadingrÌ   r�   r”   Úcollections.abcr   Úhttp.serverr   r   Útypingr   Úurllib.parser   r   r	   rÕ   Útyping_extensionsr
   r   r   Úlitellm._loggingr   Úlitellm.constantsr   Ú&litellm.llms.custom_httpx.http_handlerr   r   Úlitellm.secret_managers.mainr   r   r*   r   r   r   r   r   r   r   r   ÚLockr   r   r0   r3   r6   r9   r<   rÅ   r?   rC   rE   rF   rj   r)   rf   r  r  r,   r-   r.   ú<module>r      sn  ðÜ Û Û Û 	Û Û 
Û Û Û Û Ý #ß :Ý ß 6Ñ 6ã ß >Ñ >å +Ý *ß QÝ 7à-Ð �%Ó -Ø$4Ð#5Ð5VÐ!WÐ ˜Ó WØCÐ �UÓ CØY€�Ó YØ!,Ð ˜Ó ,Ø!&Ð ˜Ó &Ø!,Ð ˜Ó ,Ø'*Ð ˜uÓ *Ø,/Ð " EÓ /Ø!/ §¡Ó!1Ð ˜Ó 1ô'�Yô 'ô-�Iô -ô/˜ô /ô
,�Iô ,ô,˜	ô ,ô+�Yô +ô	�Iô 	ô	 ô 	ô%Ð-ô %ôP2�jô 2÷
gñ gðT	=¨°°f°Ñ)=ÀÑ)Dð =Èô =r-   