
    hg                     \   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mZ  e j        d          Zd Zdd	ed
edededef
dZddeeeef                  dedefdZd ZddededefdZdedefdZd	ed
ededefdZd	edee         fdZdededeeee         f         fdZdS )     N)AnyStrOptionalSequenceTuple)check)is_valid_hostis_valid_port)
always_strz+^(?P<host>[^:]+|\[.+\])(?::(?P<port>\d+))?$c                    d }t          | t                    r|                                 }  ||           sut          j                            |           } t          |           } t          j                            | d                   | d<   t          j                            |           } t          j        	                    |           }|j
        st          d          |j
                            d          }t          |t          j        j                  r|                    d          }|j        }|s|j        dk    rdnd}t          j                            d	d	|j        |j        |j        |j        f          }|                    d
          sd
|z   }t-          j        |          st          d          |j        |||fS )a  
        URL-parsing function that checks that
            - port is an integer 0-65535
            - host is a valid IDNA-encoded hostname with no null-bytes
            - path is valid ASCII

        Args:
            A URL (as bytes or as unicode)

        Returns:
            A (scheme, host, port, path) tuple

        Raises:
            ValueError, if the URL is not properly formatted.
    c                     t          |           t          t          |                                                     k    rdS dS )NTF)lenstrencode)ls    g/var/www/fb-scrape/myenv/lib/python3.11/site-packages/seleniumwire/thirdparty/mitmproxy/net/http/url.pyascii_checkzparse.<locals>.ascii_check#   s3    q66SQ))))4u       zNo hostname givenidnaascii   https  P   r      /zInvalid Host)
isinstancebytesdecodeurllibparseurlsplitlistquote
urlunspliturlparsehostname
ValueErrorr   ParseResultportscheme
urlunparsepathparamsqueryfragment
startswithr   r   )urlr   parsedhostr(   	full_paths         r   r   r      s   (  
 #u /jjll{3 	/,'',,Cs))C\''A//CF,))#..C\""3''F? ,,--- %%f--ffl677 	,]]7++F;D 8mx//ssR''	c6;v|V_M I %% %9$	t$$ )(((=$i//r    r)   r2   r(   r+   returnc                 F    |dk    rd}t          | ||          }|  d| | S )zs
    Returns a URL string, constructed from the specified components.

    Args:
        All args must be str.
    *r4   z://)hostport)r)   r2   r(   r+   	authoritys        r   unparser:   I   s<     s{{t,,I***D***r   s
similar_toc                 
   d}|r,t          d |                    d          D                       }t          j                            | dd          }|r.|r,|                    dd          }|d         dk    r
|d	d         }|S )
z
        Takes a list of (key, value) tuples and returns a urlencoded string.
        If similar_to is passed, the output is formatted similar to the provided urlencoded string.
    Fc              3      K   | ]}d |vV  	dS )=N ).0params     r   	<genexpr>zencode.<locals>.<genexpr>^   s'      #X#XCu$4#X#X#X#X#X#Xr   &surrogateescapeerrorsz=&r?   N)anysplitr   r   	urlencodereplace)r;   r<   remove_trailing_equalencodeds       r   r   r   V   s     " Y ##X#X*BRBRSVBWBW#X#X#X X Xl$$Q6G$HHG #( #//$,,2;#crclGNr   c                 F    t           j                            | dd          S )zd
        Takes a urlencoded string and returns a list of surrogate-escaped (key, value) tuples.
    TrE   )keep_blank_valuesrG   )r   r   	parse_qslr;   s    r   r   r   j   s"     <!!!tDU!VVVr   /bsafec                 F    t           j                            | |d          S )z2
    Returns:
        An ascii-encodable str.
    rE   )rU   rG   )r   r   r"   )rT   rU   s     r   r"   r"   q   s"    
 <ad3DEEEr   c                 D    t           j                            | d          S )z_
    Args:
        s: A surrogate-escaped str
    Returns:
        A surrogate-escaped str
    rE   rF   )r   r   unquoterR   s    r   rX   rX   y   s      <*;<<<r   c                 r    t          |           |k    r|S t          |t                    rd||fz  S d||fz  S )zN
        Returns the host component, with a port specification if needed.
    s   %s:%dz%s:%d)default_portr   r   )r)   r2   r(   s      r   r8   r8      sL     Ft##dE"" 	*tTl**dD\))r   c                 8    ddddd                     | d           S )Nr   r   )https   httphttpsr   )get)r)   s    r   rZ   rZ      s.    	 
 
c&$r   r9   r   c                 X   	 t          | t                    r|                     d          }n| }t                              |          }|st
          |                    d          }|                    d          r|                    d          r
|dd         }t          |          st
          |                    d          r<t          |                    d                    }t          |          st
          ||fS |dfS # t
          $ r |r t          | d	d
          dfcY S w xY w)zExtract the host and port from host header/authority information

    Raises:
        ValueError, if check is True and the authority information is malformed.
    r   r2   []   rH   r(   Nzutf-8rE   )r   r   r   _authority_rematchr&   groupr/   endswithr   intr	   r
   )r9   r   authority_strmr2   r(   s         r   parse_authorityrj      sJ   Ki'' 	&%,,V44MM%M.. 	wwv??3 	DMM#$6$6 	":DT"" 	776?? 	qwwv''D && !  :: K K K 	Ki2CDDdJJJJ	Ks   C?D D  D)(D))r4   )N)rS   )reurllib.parser   typingr   r   r   r   %seleniumwire.thirdparty.mitmproxy.netr   +seleniumwire.thirdparty.mitmproxy.net.checkr   r	   0seleniumwire.thirdparty.mitmproxy.utils.strutilsr
   compilerc   r   r   rg   r:   r   r   r"   rX   r8   rZ   boolrj   r@   r   r   <module>rs      s    				     4 4 4 4 4 4 4 4 4 4 4 4 7 7 7 7 7 7 U T T T T T T T G G G G G G
IJJ70 70 70t
+ 
+C 
+s 
+# 
+S 
+# 
+ 
+ 
+ 
+ huS#X' S C    (W W WF FS F Fc F F F F=s =s = = = =
*V 
*6 
* 
* 
* 
* 
* 
* HSM    !Kv !Kd !KuS(3-=O7P !K !K !K !K !K !Kr   