ó
    à“,j˜  ã            	       ó�  • S SK r S SKrS SKJr  S SKrS SKrS SKJrJr  S SK	J
r
JrJrJrJrJrJr  S SKrS r\" 5       rS\S\4S jrS	\S
\\   S\4S jrSS\4S jjr\" 5       S	\S\\   4S j5       rS	\S\4S jr " S S\R:                  5      r  SS\S
\\   S-  S\R>                  \S   -  S-  S\R@                  4S jjr!g)é    N)ÚPath)Ú	lru_cacheÚwraps)ÚAnyÚ	AwaitableÚCallableÚ	CoroutineÚLiteralÚTÚTuplec                  óÄ   • [        [        5      R                  S-  n [        U S5       nUR	                  5       R                  5       sS S S 5        $ ! , (       d  f       g = f)Nzversion.txtÚr)r   Ú__file__ÚparentÚopenÚreadÚstrip)Úversion_fileÚfs     Ú C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\safehttpx/__init__.pyÚget_versionr      s>   € Üœ“>×(Ñ(¨=Ñ8€LÜ	ˆl˜CÔ	  AØ�v‰v‹x�~‰~Ó÷ 
!×	 ×	 ús   ©AÁ
AÚipÚreturnc                 ó
  •  [         R                  " U 5      nUR                  =(       dE    UR                  =(       d2    UR                  =(       d    UR
                  =(       d    UR                  (       + $ ! [         a     gf = f)NF)Ú	ipaddressÚ
ip_addressÚ
is_privateÚis_loopbackÚis_link_localÚis_multicastÚis_reservedÚ
ValueError)r   Úip_objs     r   Úis_public_ipr$      sz   € ð
Ü×%Ò% bÓ)ˆà×Ñ÷ "Ø×!Ñ!÷"à×#Ñ#÷"ð ×"Ñ"÷"ð ×!Ñ!ô
ð 	
øô ó Ùðús   ‚A2A5 Á5
BÂBÚhostnameÚdomain_whitelistc                 ó  • U (       a  U(       d  gU R                  5       n U H`  nU(       d  M  UR                  5       nUR                  S5      (       a'  USS  nX:X  d  U R                  SU-   5      (       a    gMY  X:X  d  M`    g   g)NFz*.é   Ú.T)ÚlowerÚ
startswithÚendswith)r%   r&   ÚdomainÚsuffixs       r   Úmatches_domain_whitelistr/       s   € ÞÖ+ØØ�~‰~Ó€HÛ"ˆÞÙØ—‘“ˆØ×Ñ˜T×"Ñ"Ø˜A˜B�ZˆFØÓ! X×%6Ñ%6°s¸V±|×%DÑ%DÙñ &EàÕÙñ #ð ó    Úmaxsizec                 ó†   ^ • S[         S[        [        [        [        4   4   S[         S[        [           4   4U 4S jjnU$ )NÚ
async_func.r   c           	      ó€   >^ • [        TS9[        T 5      S[        S[        S[        [           4U 4S jj5       5       nU$ )N)r1   ÚargsÚkwargsr   c                  ó<   >• [         R                  " T" U 0 UD65      $ ©N)ÚasyncioÚcreate_task)r5   r6   r3   s     €r   ÚwrapperÚ3lru_cache_async.<locals>.decorator.<locals>.wrapper5   s    ø€ ô ×&Ò&¡z°4Ð'B¸6Ñ'BÓCÐCr0   )r   r   r   r   r   )r3   r;   r1   s   ` €r   Ú	decoratorÚ"lru_cache_async.<locals>.decorator2   sN   ù€ ô 
˜7Ñ	#Ü	ˆzÓ	ð	Dœ3ð 	D¬#ð 	D´)¼A±,ö 	Dó 
ó 
$ð	Dð ˆr0   )r   r	   r   r   r   )r1   r=   s   ` r   Úlru_cache_asyncr?   1   sC   ø€ ðÜ˜S¤)¬C´´a¨KÑ"8Ð8Ñ9ðä	�#”y¤‘|Ð#Ñ	$÷ð Ðr0   c           	   ƒ   ó2  #   • [         R                  " 5        IS h  v•N n UR                  SU  S35      I S h  v•N nUR                  SU  S35      I S h  v•N n/ nUR                  5       UR                  5       4 H7  nUR	                  UR                  S/ 5       Vs/ s H  ofS   PM	     sn5        M9     UsS S S 5      IS h  v•N   $  N¯ N“ Nxs  snf  N! [
         a    / s sS S S 5      IS h  v•N    $ f = f! , IS h  v•N  (       d  f       g = f7f)Nz https://dns.google/resolve?name=z&type=Az
&type=AAAAÚAnswerÚdata)ÚhttpxÚAsyncClientÚgetÚjsonÚextendÚ	Exception)r%   ÚclientÚresponse_v4Úresponse_v6ÚipsÚresponseÚanswers          r   Úasync_resolve_hostname_googlerO   ?   sþ   é € ä× Ò ×"Ô" fð	Ø &§
¡
Ø2°8°*¸GÐDó!÷ ˆKð !'§
¡
Ø2°8°*¸JÐGó!÷ ˆKð ˆCØ(×-Ñ-Ó/°×1AÑ1AÓ1CÓD�Ø—
‘
¸¿¹ÀhÐPRÔ9SÓTÒ9S¨v 6œNÑ9SÑTÖUñ Eà÷ #×"Ó"ññùò Uñ #øô ó 	Ø‰I÷ #×"Ò"ð	ú÷ #×"Ö"üs¨   ‚DœC�D C=¢CºC»CÁCÁACÂ CÂ.CÂ:DÃCÃDÃCÃCÃCÃDÃC:Ã%C=Ã&DÃ2C5Ã3DÃ9C:Ã:C=Ã=DÄDÄDÄDc              ƒ   óâ  #   •  [         R                  " 5       nUR                  U S 5      I S h  v•N nU HG  u  n    pVUS   nU[        R                  [        R                  4;   d  M3  [        U5      (       d  ME  Us  $    [        U 5      I S h  v•N  H  n[        U5      (       d  M  Us  $    [        SU  S35      e NŽ! [        R                   a  n[        SU  SU 35      UeS nAff = f N^7f)NzUnable to resolve hostname z: r   z	Hostname z failed validation)
r9   Úget_event_loopÚgetaddrinfoÚsocketÚgaierrorr"   ÚAF_INETÚAF_INET6r$   rO   )r%   ÚloopÚaddrinfoÚeÚfamilyÚ_Úsockaddrr   s           r   Úasync_validate_urlr]   R   sí   é € ðOÜ×%Ò%Ó'ˆØ×)Ñ)¨(°DÓ9×9ˆó &.Ñ!ˆ��1�aØ˜a‘[ˆ
Ø”f—n‘n¤f§o¡oÐ6Õ6¼<È
×;SÓ;SØÒñ &.ô
 :¸(ÓC×CÒCˆ
Ü˜
×#Ó#ØÒñ Dô �y  
Ð*<Ð=Ó
>Ð>ñ :øÜ�?‰?ó OÜÐ6°x°jÀÀ1À#ÐFÓGÈQÐNûðOúñ DùsU   ‚C/„*B? ®B=¯B? ³1C/Á(C/Á:C/ÂC-ÂC/Â(C/Â=B? Â?C*ÃC%Ã%C*Ã*C/c                   ó~   ^ • \ rS rSrS\4U 4S jjrS\R                  S\\	\
\
\R                  4   4U 4S jjrSrU =r$ )ÚAsyncSecureTransportée   Úverified_ipc                 ó.   >• Xl         [        TU ]	  5         g r8   )ra   ÚsuperÚ__init__)Úselfra   Ú	__class__s     €r   rd   ÚAsyncSecureTransport.__init__f   s   ø€ Ø&ÔÜ‰ÑÕr0   Úrequestr   c              ƒ   óÚ   >#   • UR                   nUR                  nUR                  U R                  S9nXAl         X1R                  S'   SU0Ul        [        TU ]  U5      I S h  v•N $  N7f)N)ÚhostÚHostÚsni_hostname)Úurlrj   Ú	copy_withra   ÚheadersÚ
extensionsrc   Úhandle_async_request)re   rh   Úoriginal_urlÚoriginal_hostÚnew_urlrf   s        €r   rq   Ú)AsyncSecureTransport.handle_async_requestj   si   øé € ð —{‘{ˆØ$×)Ñ)ˆØ×(Ñ(¨d×.>Ñ.>Ð(Ð?ˆØŒØ"/�‰˜ÑØ,¨mÐ<ˆÔÜ‘WÑ1°'Ó:×:Ð:Ñ:ùs   ƒA!A+Á$A)Á%A+)ra   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ústrrd   rC   ÚRequestr   ÚintÚbytesÚHeadersrq   Ú__static_attributes__Ú__classcell__)rf   s   @r   r_   r_   e   sA   ø† ð C÷ ð
;à—‘ð
;ð 
ˆs�E˜5 %§-¡-Ð/Ñ	0÷
;õ 
;r0   r_   rm   Ú
_transportFc              ‹   óÞ  #   • [         R                  " U 5      nUR                  nU(       d  [        SU  S35      eUc  / nU(       a  UnO6USL d  [	        XQ5      (       a  SnO[        U5      I Sh  v•N n[        U5      n[         R                  " US9 ISh  v•N nUR                  " U 4SS0UD6I Sh  v•N sSSS5      ISh  v•N   $  NZ N4 N N! , ISh  v•N  (       d  f       g= f7f)a  
This is the main function that should be used to make async HTTP GET requests.
It will automatically use a secure transport for non-whitelisted domains, unless
a proxy is set in the environment variables (HTTP_PROXY, HTTPS_PROXY, http_proxy, https_proxy).

Parameters:
- url (str): The URL to make a GET request to.
- domain_whitelist (list[str] | None): A list of domains to whitelist, which will not use a secure transport. Supports wildcard subdomains with "*.domain.com" format (asterisk must be at the beginning).
- _transport (httpx.AsyncBaseTransport | Literal[False] | None): A custom transport to use for the request. Takes precedence over domain_whitelist. Set to False to use no transport.
- **kwargs: Additional keyword arguments to pass to the httpx.AsyncClient.get() function.
zURL z does not have a valid hostnameNF)Ú	transportÚfollow_redirects)	rC   ÚURLrj   r"   r/   r]   r_   rD   rE   )	rm   r&   r�   r6   Ú
parsed_urlr%   rƒ   ra   rI   s	            r   rE   rE   v   sÊ   é € ô" —’˜3“€JØ�‰€HÞÜ˜4 ˜uÐ$CÐDÓEÐEØÑØÐæØ‰	Ø	�uÒ	Ô 8¸× TÑ TØ‰	ä.¨xÓ8×8ˆÜ(¨Ó5ˆ	ä× Ò ¨9×5Ò5¸Ø—Z’Z ÑF°eÐF¸vÑF×F÷ 6×5Ñ5ñ 9ñ 6ÙF÷ 6×5×5Ð5üsl   ‚A.C-Á0CÁ1'C-ÂCÂC-ÂCÂ5CÂ6CÂ9C-ÃCÃC-ÃC-ÃCÃC-ÃC*ÃCÃC*Ã&C-)é   )NN)"r9   r   Úpathlibr   rS   ÚosÚ	functoolsr   r   Útypingr   r   r   r	   r
   r   r   rC   r   Ú__version__rz   Úboolr$   Úlistr/   r|   r?   rO   r]   ÚAsyncHTTPTransportr_   ÚAsyncBaseTransportÚResponserE   © r0   r   Ú<module>r“      s  ðÛ Û Ý Û Û 	ß &ß I× IÑ Iã ò ñ
 ‹m€ð�Sð ˜Tô ð sð ¸dÀ3¹ið ÈDô ñ"˜Sõ ñ Óð°#ð ¸$¸s¹)ó ó ðð$? sð ?¨sô ?ô&;˜5×3Ñ3ô ;ð& *.ØCGñ!GØ	ð!Gà˜3‘i $Ñ&ð!Gð ×(Ñ(¨7°5©>Ñ9¸DÑ@ð!Gð
 ‡^�^ö!Gr0   