
    AF[i              	          d dl Z d dlZd dlmZ d dlZd dlZd dlmZmZ d dl	m
Z
mZmZmZmZmZmZ d dlZd Z e       ZdedefdZd	ed
ee   defdZddefdZ e       d	edee   fd       Zd	edefdZ G d dej:                        Z	 	 dded
ee   dz  dej>                  ed   z  dz  dej@                  fdZ!y)    N)Path)	lru_cachewraps)Any	AwaitableCallable	CoroutineLiteralTTuplec                      t        t              j                  dz  } t        | d      5 }|j	                         j                         cd d d        S # 1 sw Y   y xY w)Nzversion.txtr)r   __file__parentopenreadstrip)version_filefs     [/var/www/html/chatbot/moweb-chatbot/venv/lib/python3.12/site-packages/safehttpx/__init__.pyget_versionr      sG    >((=8L	lC	   Avvx~~     s   AAipreturnc                     	 t        j                  |       }|j                  xs6 |j                  xs( |j                  xs |j
                  xs |j                   S # t        $ r Y yw xY w)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   AA 	A('A(hostnamedomain_whitelistc                     | r|sy| j                         } |D ]N  }|s|j                         }|j                  d      r!|dd  }| |k(  s| j                  d|z         sF y| |k(  sN y y)NFz*.   .T)lower
startswithendswith)r%   r&   domainsuffixs       r   matches_domain_whitelistr/       s|    +~~H" 	T"ABZF6!X%6%6sV|%D	     maxsizec                      dt         dt        t        t        t        f   f   dt         dt        t           f   f fd}|S )N
async_func.r   c           	           t              t               dt        dt        dt        t           f fd              }|S )N)r1   argskwargsr   c                  :    t        j                   | i |      S N)asynciocreate_task)r5   r6   r3   s     r   wrapperz3lru_cache_async.<locals>.decorator.<locals>.wrapper5   s      &&z4'B6'BCCr0   )r   r   r   r   r   )r3   r;   r1   s   ` r   	decoratorz"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aK"889	#y|#	$ r0   c           	        K   t        j                         4 d {   }	 |j                  d|  d       d {   }|j                  d|  d       d {   }g }|j                         |j                         fD ]4  }|j	                  |j                  dg       D cg c]  }|d   	 c}       6 |cd d d       d {    S 7 7 7 tc c}w 7 # t
        $ r g cY cd d d       d {  7   S w xY w# 1 d {  7  sw Y   y xY ww)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_googlerM   ?   s      "  f	 &

28*GD! K !'

28*JG! K C(--/1A1A1CD V

hPR9STvF6NTUV   U  	I  	  s   DCDC7CC	CCACC+
C5DCD	CCCDC4C7 D,C/-D3C44C77D	=D >D	Dc                   K   	 t        j                         }|j                  | d        d {   }|D ]?  \  }}}}}|d   }|t        j                  t        j                  fv s1t        |      s=|c S  t        |        d {   D ]  }t        |      s|c S  t        d|  d      7 ~# t        j                  $ r}t        d|  d|       |d }~ww xY w7 Vw)NzUnable to resolve hostname z: r   z	Hostname z failed validation)
r9   get_event_loopgetaddrinfosocketgaierrorr"   AF_INETAF_INET6r$   rM   )r%   loopaddrinfoefamily_sockaddrr   s           r   async_validate_urlr[   R   s     O%%'))(D99 &. !1aa[
fnnfoo66<
;S
 :(CC 

# y
*<=
>> :?? O6xj1#FGQNO DsU   C)B. B,B. 2C%C1CCCC,B. .CCCCc                   n     e Zd Zdef fdZdej                  deee	e	ej                  f   f fdZ xZS )AsyncSecureTransportverified_ipc                 0    || _         t        | 	          y r8   )r^   super__init__)selfr^   	__class__s     r   ra   zAsyncSecureTransport.__init__f   s    &r0   requestr   c                    K   |j                   }|j                  }|j                  | j                        }||_         ||j                  d<   d|i|_        t        |   |       d {   S 7 w)N)hostHostsni_hostname)urlrf   	copy_withr^   headers
extensionsr`   handle_async_request)rb   rd   original_urloriginal_hostnew_urlrc   s        r   rm   z)AsyncSecureTransport.handle_async_requestj   sn      {{$))((d.>.>(?"/,m<W1'::::s   A&A0)A.*A0)__name__
__module____qualname__strra   rA   Requestr   intbytesHeadersrm   __classcell__)rc   s   @r   r]   r]   e   sA    C 
;
; 
sE5%--/	0
; 
;r0   r]   ri   
_transportFc                   K   t        j                  |       }|j                  }|st        d|  d      |g }|r|}n1|du st	        ||      rd}nt        |       d{   }t        |      }t        j                  |      4 d{   } |j                  | fddi| d{   cddd      d{    S 7 \7 47 7 # 1 d{  7  sw Y   yxY ww)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)	rA   URLrf   r"   r/   r[   r]   rB   rC   )	ri   r&   rz   r6   
parsed_urlr%   r|   r^   rG   s	            r   rC   rC   v   s     " 3JH4u$CDEE		u	 8CS T	.x88(5	  95 G GVZZFeFvFFG G G 9GFG G G Gsl   ACB< )C	B>
CC&C 'C*C6C7C>C CCC
CCC)   )NN)"r9   r   pathlibr   rQ   os	functoolsr   r   typingr   r   r   r	   r
   r   r   rA   r   __version__rt   boolr$   listr/   rv   r=   rM   r[   AsyncHTTPTransportr]   AsyncBaseTransportResponserC    r0   r   <module>r      s       	 & I I I  
 mS T s d3i D "S  # $s)  $?s ?s ?&;533 ;& *.CG!G	!G3i$&!G ((75>9D@!G
 ^^!Gr0   