
    Pi              	          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!dS )    N)Path)	lru_cachewraps)Any	AwaitableCallable	CoroutineLiteralTTuplec                      t          t                    j        dz  } t          | d          5 }|                                                                cd d d            S # 1 swxY w Y   d S )Nzversion.txtr)r   __file__parentopenreadstrip)version_filefs     f/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/safehttpx/__init__.pyget_versionr      s    >>(=8L	lC	 	   Avvxx~~                                   s   &A  A$'A$ipreturnc                     	 t          j        |           }|j        p|j        p|j        p|j        p|j         S # t          $ r Y dS 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$      s{    
%b)) "!"#" "" !
 	
    uus   7: 
AAhostnamedomain_whitelistc                    | r|sdS |                                  } |D ]c}|s|                                 }|                    d          r,|dd          }| |k    s|                     d|z             r dS Z| |k    r dS ddS )NFz*.   .T)lower
startswithendswith)r%   r&   domainsuffixs       r   matches_domain_whitelistr/       s     + u~~H" 	 	 	T"" 	ABBZF6!!X%6%6sV|%D%D!tt "44  5       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)r2   argskwargsr   c                  8    t          j         | i |          S N)asynciocreate_task)r6   r7   r4   s     r   wrapperz3lru_cache_async.<locals>.decorator.<locals>.wrapper5   s%     &zz4'B6'B'BCCCr0   )r   r   r   r   r   )r4   r<   r2   s   ` r   	decoratorz"lru_cache_async.<locals>.decorator2   sv     
7	#	#	#	z			D3 	D# 	D)A, 	D 	D 	D 	D 	D 
	 
$	#	D r0   )r   r	   r   r   r   )r2   r=   s   ` r   lru_cache_asyncr>   1   s\    S)CaK"889	#y|#	$      r0   c           	        K   t          j                    4 d {V }	 |                    d|  d           d {V }|                    d|  d           d {V }g }|                                |                                fD ]5}|                    d |                    dg           D                        6|cd d d           d {V  S # t
          $ r g cY cd d d           d {V  S w xY w# 1 d {V swxY w Y   d S )Nz https://dns.google/resolve?name=z&type=Az
&type=AAAAc                     g | ]
}|d          S )data ).0answers     r   
<listcomp>z1async_resolve_hostname_google.<locals>.<listcomp>L   s    TTTvF6NTTTr0   Answer)httpxAsyncClientgetjsonextend	Exception)r%   clientresponse_v4response_v6ipsresponses         r   async_resolve_hostname_googlerR   ?   s*      ""       f	 &

D8DDD! !      K !'

G8GGG! !      K C(--//1A1A1C1CD V V

TThPR9S9STTTUUUU               	 	 	II             	               s/   C4BCC1C40C11C44
C>C>c                   K   	 t          j                    }|                    | d            d {V }n-# t          j        $ r}t          d|  d|           |d }~ww xY w|D ]=\  }}}}}|d         }|t          j        t          j        fv rt          |          r|c S >t          |            d {V D ]}t          |          r|c S t          d|  d          )NzUnable to resolve hostname z: r   z	Hostname z failed validation)
r:   get_event_loopgetaddrinfosocketgaierrorr"   AF_INETAF_INET6r$   rR   )r%   loopaddrinfoefamily_sockaddrr   s           r   async_validate_urlr`   R   sB     O%''))(D99999999? O O OFxFF1FFGGQNO &.  !1aa[
fnfo666<
;S;S69(CCCCCCCC  

## 		 ====
>
>>s   /4 AAAc                   `     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                 V    || _         t                                                       d S r9   )rc   super__init__)selfrc   	__class__s     r   rf   zAsyncSecureTransport.__init__f   s'    &r0   requestr   c                    K   |j         }|j        }|                    | j                  }||_         ||j        d<   d|i|_        t                                          |           d {V S )N)hostHostsni_hostname)urlrk   	copy_withrc   headers
extensionsre   handle_async_request)rg   ri   original_urloriginal_hostnew_urlrh   s        r   rr   z)AsyncSecureTransport.handle_async_requestj   s{       {$)((d.>(??"/,m<WW11':::::::::r0   )__name__
__module____qualname__strrf   rG   Requestr   intbytesHeadersrr   __classcell__)rh   s   @r   rb   rb   e   s        C      
;
; 
sE5%-/	0
; 
; 
; 
; 
; 
; 
; 
; 
; 
;r0   rb   rn   
_transportFc                   K   t          j        |           }|j        }|st          d|  d          |g }|r|}n;|du st	          ||          rd}n$t          |           d{V }t          |          }t          j        |          4 d{V } |j        | fddi| d{V cddd          d{V  S # 1 d{V swxY w Y   dS )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)	rG   URLrk   r"   r/   r`   rb   rH   rI   )	rn   r&   r   r7   
parsed_urlr%   r   rc   rM   s	            r   rI   rI   v   s     " 3JH FDDDDEEE 6			u		 8CS T T			.x88888888(55	 9555 G G G G G G GVZFFeFvFFFFFFFFG G G G G G G G G G G G G G G G G G G G G G G G G G G G G Gs   B;;
CC)r1   )NN)"r:   r   pathlibr   rV   os	functoolsr   r   typingr   r   r   r	   r
   r   r   rG   r   __version__ry   boolr$   listr/   r{   r>   rR   r`   AsyncHTTPTransportrb   AsyncBaseTransportResponserI   rB   r0   r   <module>r      s                				 & & & & & & & & I I I I I I I I I I I I I I I I I I      
 kmmS T    s d3i D    " S     # $s)    $?s ?s ? ? ? ?&; ; ; ; ;53 ; ; ;& *.CG!G !G	!G3i$&!G (75>9D@!G
 ^!G !G !G !G !G !Gr0   