
    T>qjP                        d dl Z d dlZd dlm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 d dlmZ d dlmZ d	d
lmZmZ d	dlmZmZ g dZdZ	 g ddddddddddddddddddddddddddddddddddddddddddddddd dddd!d"d#d$dddd%d"d#d&dddd'd"d#d(dddd)d"d#d*dddd+d"d#d,dddd-d"d.d/dddd0d"d.d1dddd2d"d3d4dddd5d"d3d6d7ddd8d"d3d9d7dddd:d;d<dddd+d:d=d>ddd?dddd@ddd?ddddAdddBdCd"dDdEdddBdFd"dGdHdddBdId"d#dJdddBdKdLdKdMdddBdNd"d.dOdddBdNdLdNdPdddBdQd"d.dRdddBdQdLdQdSdddBdTd"d3dUdddBdVd"d3dWdddBdTdLdTdXdddYdZd"d#d[dddYd\d"d#d]dddYd^d"d3d_dddYd`d"d3dad7ddbdcd"d#ddddZdeZ G df dgee      ZdhefdiZe G dj dk             Zedl   Z g dmZ!e G dn do             Z" G dp dq      Z#dredhefdsZ$y)t    N)deepcopy)	dataclassfieldfields)datetime)cache)BytesIO)Literal)	urlencode   )CurlInfoCurlOpt)Curl	CurlError)FingerprintFingerprintUpdateErrorFingerprintSpecFingerprintManagerget_fingerprintd   Chrome99Windows10chrome99F)browserversionos
os_versiontarget_nameh3_fingerprints100	chrome100101	chrome101104	chrome104107	chrome107110	chrome110116	chrome116119macOSSonoma	chrome119120	chrome120123	chrome123124	chrome124131	chrome131133Sequoia
chrome133a136	chrome136142Tahoe	chrome142145	chrome145T146	chrome146Android12chrome99_android14chrome131_androidEdgeedge99edge101Safariz15.3zBig Sur	safari153z15.5Monterey	safari155z17.0	safari170z17.2iOSsafari172_iosz18.0	safari180safari180_iosz18.4	safari184safari184_iosz26.0	safari260z26.0.1
safari2601safari260_iosFirefoxz133.0
firefox133z135.0
firefox135z144.0
firefox144z147.0
firefox147Torz14.5tor145zhttps://api.impersonate.pro/v1c                       e Zd ZdZy)r   z%Raised when fingerprint update fails.N)__name__
__module____qualname____doc__     U/opt/rentech/trading_bot/.venv/lib/python3.12/site-packages/curl_cffi/fingerprints.pyr   r   P  s    /ri   r   returnc                  r   t         j                  dk(  rt         j                  j                  d      } | r t         j                  j                  | d      S t         j                  j                  d      }|r"t         j                  j                  |ddd      S t         j                  j                  d      }t         j                  j                  |ddd      S t         j                  j                  d      }|r t         j                  j                  |d      S t         j                  j                  d	      S )
NntAPPDATAimpersonateUSERPROFILEAppDataRoaming~XDG_CONFIG_HOMEz~/.config/impersonate)r   nameenvirongetpathjoin
expanduser)appdatauserprofilehomexdg_config_homes       rj   _get_default_config_dirr   T  s    	ww$**..+77<<77jjnn]377<<Y	=QQww!!#&ww||D)YFFjjnn%67Oww||O];;77566ri   c                   Z   e Zd ZU 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e
      Zee   ed<   dZeed<   dZeed<    ee
      Zee   ed<    ee
      Zee   ed<   dZeed<    ee
      Zee   ed<   dZeed<   dZeed<    ee
      Zee   ed<   dZedz  ed<   dZeed<   dZeed<   dZeed<   dZedz  ed<   dZeed<    ee
      Z eeef   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dz  ed&<   dZ(edz  ed'<   dZ)eed(<   dZ*eed)<   dZ+eed*<   dZ,eed+<    ee
      Z-eeef   ed,<   dZ.eed-<    ee
      Z/ee   ed.<   dZ0eed/<    ee
      Z1eeef   ed0<   dZ2eed1<   dZ3eed2<   dZ4ee   dz  ed3<   dZ5eed4<   y)5r    clientclient_versionr   r   v2http_versionz1.2tls_version)default_factorytls_ciphersFtls_alpntls_alpstls_cert_compressiontls_signature_hashes   tls_key_shares_limittls_supported_groupstls_session_tickettls_extension_ordertls_delegated_credentialsNtls_record_size_limit
tls_greasetls_use_new_alps_codepointtls_signed_cert_timestampstls_echtls_permute_extensionsheadersheader_ordersplit_cookiesform_boundaryhttp2_settingsr   http2_window_updatehttp2_pseudo_headers_orderhttp2_stream_weighthttp2_stream_exclusivehttp2_no_priorityhttp3_settingshttp3_pseudo_headers_orderhttp3_tls_extension_orderhttp3_headershttp3_header_orderhttp3_tls_supported_groupsquic_transport_parameters
ws_headersws_header_orderws_disable_session_ticketws_tls_cert_compressionheader_lang)6rd   re   rf   r   str__annotations__r   r   r   r   r   r   listr   r   boolr   r   r   r   intr   r   r   r   r   r   r   r   r   r   dictr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rh   ri   rj   r   r   e  sH   FCNCBLJ L#K"48Kc8HdHd&+D&A$s)A&+D&A$s)A !#!&+D&A$s)A$$!!+0+FtCyF(,3:,J',,',,GS4Z#(D(#D9GT#s(^9L#M4M3NC  &((&*t*)-C$J-#t#NC&((%'s'$)$$?M4S>?  ,1$,GS	G%'s'!&t!<JS#X<OS&+t+04T#Y-4Kri   r   )chromefirefoxedgebraveoperar   	operaminiqihooqqquarksamsungsogousogou_ievolleyokhttpwebviewbaiduwechatbing
duckduckgogoogleyandex)macoswindowslinuxiosandroidc                   P    e Zd ZU dZedz  ed<   dZedz  ed<   dZe	d   dz  ed<   y)r   Nplatformr   uniformstrategy)
rd   re   rf   r   r   r   r   ClientLiteralr   r
   rh   ri   rj   r   r     s3    HcDj#'FMD '*3Hgi 4'3ri   r   c                      e Zd Zedefd       Zedefd       Zedefd       Zedefd       Zededz  fd       Z	ededdfd	       Z
ed
edeeef   defd       Zeddedz  defd       Zedeeef   deeef   fd       Zedeeef   fd       Zeedeeef   fd              Zededefd       Zedeeeef      fd       Zy)r   rk   c                 R    t         j                  j                  dt                     S )NIMPERSONATE_CONFIG_DIR)r   rv   rw   r   clss    rj   get_config_dirz!FingerprintManager.get_config_dir  s    zz~~68O8QRRri   c                 ^    t         j                  j                  | j                         d      S )Nzconfig.jsonr   rx   ry   r   r   s    rj   get_config_pathz"FingerprintManager.get_config_path  s     ww||C..0-@@ri   c                 ^    t         j                  j                  | j                         d      S )Nzfingerprints.jsonr   r   s    rj   get_fingerprint_pathz'FingerprintManager.get_fingerprint_path  s!    ww||C..02EFFri   c                 Z    t         j                  j                  dt              xs t        S )NIMPERSONATE_API_ROOT)r   rv   rw   DEFAULT_API_ROOTr   s    rj   get_api_rootzFingerprintManager.get_api_root  s#     JJNN13CDXHX	
ri   Nc                    t         j                  j                  d      }|r|S | j                         }t         j                  j                  |      sy t        |      5 }	 t        j                  |      }	 d d d        j                  d      }t        |t              r|r|S y # t        j                  $ r Y d d d        y w xY w# 1 sw Y   PxY w)NIMPERSONATE_API_KEYapi_key)r   rv   rw   r   rx   existsopenjsonloadJSONDecodeError
isinstancer   )r   r   config_pathfconfigs        rj   get_api_keyzFingerprintManager.get_api_key  s    **..!67N))+ww~~k*+ 	!1	
 **Y'gs#N '' 		 		 	s*   C!B%%C8CCCCr   c                 X   | j                         }t        j                  j                  |      st        j                  |       | j                         }t        j                  j                  |      r+t        |      5 }	 t        j                  |      }ddd       ni }|d<   t        j                         j                         |d<   t        |d      5 }t        j                  ||d       ddd       y# t        j                  $ r i }Y zw xY w# 1 sw Y   |xY w# 1 sw Y   yxY w)z(Persist the API key for impersonate.pro.Nr   update_timew   indent)r   r   rx   r   makedirsr   r   r   r   r   r   utcnow	isoformatdump)r   r   
config_dirconfig_filer   r   s         rj   set_api_keyzFingerprintManager.set_api_key  s     '')
ww~~j)KK
#))+77>>+&k"  a !YYq\F    F#y ( 1 ; ; =}+s# 	+qIIfa*	+ 	+ ++  F    	+ 	+s6   ?DC9D 9DDDDD D)urlr   c           
         t               }t               }	 |j                  t        j                  | j                                |rT|j                  t        j                  |j                         D cg c]  \  }}| d| j                          c}}       |j                  t        j                  |       |j                          t        |j                  t        j                              }	 |j!                          |j#                         }|dk\  r'|j%                  dd      }	t        d|  d| d|	       |S c c}}w # t        $ r}t        d|  d|       |d }~ww xY w# |j!                          w xY w)N: z)Failed to access fingerprint endpoint at i  zutf-8replace)errorsz: HTTP )r   r	   setoptr   URLencode
HTTPHEADERitems	WRITEDATAperformr   getinfor   RESPONSE_CODEr   r   closegetvaluedecode)
r   r   curlbufferkeyvaluestatus_codeexcpayloadbodys
             rj   _fetch_fingerprint_payloadz-FingerprintManager._fetch_fingerprint_payload  sO   v	KKSZZ\2&&BI--/RJCuBug&--/R KK))62LLNdll8+A+ABCK JJL//##>>')><D(;C5 A#}Btf.  ' S
  	(;C53%H	
 JJLs7   AE 3EA E E 	E'E""E''E* *E<api_rootc                    |xs | j                         }|j                  d       d}i }| j                         }|rd| |d<   i }d}t        }	 | dt	        ||d       }| j                  ||      }		 t        j                  |	      }
t        |
t              st        d| d	      |
j                  d
|
j                  d            }t        |t              st        d|       |D ]  }t        |t              s|j                  d      xs |j                  d      }|s;|j                  d|j                  di             }t        |t              r	 t        j                  |      }t        |t              s|||<    |
j                  d      }t        |t              r|j                  d      sn9|j                  d      }t        |t              r||k  rt        d| d      |}| j!                         }t"        j$                  j'                  |      st#        j(                  |       t+        | j-                         d      5 }t        j.                  ||d       ddd       | j0                  j3                          t5        |      S # t        j                  $ r}t        d| d|       |d}~ww xY w# t        j                  $ r Y w xY w# 1 sw Y   uxY w)z.Get the latest fingerprints for impersonating./z/fingerprintszBearer Authorizationr   ?)skiplimitz"Invalid fingerprint response from z: expected objectr  datar   NzNo fingerprints found at ru   targetfingerprint
paginationhas_more	next_skipz$Invalid fingerprint pagination from z: expected increasing next_skipr   r   r   )r   rstripr   FINGERPRINT_PAGE_LIMITr   r  r   loadsr   r   r   rw   r   r   r   r   r   r   rx   r   r   r   r   r   load_fingerprintscache_clearlen)r   r  base_urlr   r   fingerprintsr  r  r   r  r  r  r  itemru   rawr!  r#  r   wfs                       rj   update_fingerprintsz&FingerprintManager.update_fingerprints  s    1s//1ooc*+=9//#)0	':GO$(*&Ja	4%*H IJKC44S'BG
zz'*!$-0<SEARS  $((6*:; eT*,/H-NOO -!$-xx'=488H+=hhvtxxr'BCc3'!"jjo c4(),L&- ,/Jj$/z~~j7Q"{3Ii-d1B,:3% @4 4  DW Z '')
ww~~j)KK
##**,c2 	2bIIlBq1	2))+<  Q '' ,8RuE$  // ! !&	2 	2s7   6AJ KKK )J;;K KKK&r  c                 *   t        t              D ch c]  }|j                   }}i }| j                         D ]L  \  }}t	        |t
              s|j                         D ci c]  \  }}||v s|| }}}t        di |||<   N |S c c}w c c}}w )Nrh   )r   r   ru   r  r   r   )	r  r,  allowedparsedr  r  kvfiltereds	            rj   _parse_fingerprintsz&FingerprintManager._parse_fingerprintsM  s    )/)<=499==)+!--/ 	2JCeT*).GA!w,1GHG%11F3K		2
  >
 Hs   B
#B0Bc                    i }t         D ]  }|j                  d      }t        |t              r|s'|j                  d      }|j                  d      }|j                  d      }|j                  d      }t        |t              r|j	                         ndt        |t              r|ndt        |t              r|ndt        |t              r|ndd||<    | j                  |      S )Nr    r   r   r   r   r   )r   r   r   r   )NATIVE_IMPERSONATE_TARGETSrw   r   r   lowerr6  )r   native_payloadr,  r    r   r   os_namer   s           rj   _load_native_fingerprintsz,FingerprintManager._load_native_fingerprintsX  s    46. 	D((=1Kk3/{hhy)Ghhy)GhhtnG,/J-7-E'--/2-7-E'2!+GS!9gr,6z3,GjR	+N;'	 &&~66ri   c                 j   | j                         }| j                         }t        j                  j	                  |      rgt        |      5 }t        j                  |j                               }d d d        t        t              r |j                  | j                  |             |S # 1 sw Y   ;xY wN)r<  r   r   rx   r   r   r   r&  readr   r   updater6  )r   r2  fingerprint_pathr   r+  s        rj   r'  z$FingerprintManager.load_fingerprintsk  s     ..033577>>*+&' 41#zz!&&(34,-c55lCD	4 4s   $B))B2r  c                 b    | j                         }||vrt        d|       t        ||         S )>Return a deep-copied fingerprint that callers can edit safely.zFingerprint target not found: )r'  KeyErrorr   )r   r  r+  s      rj   r   z"FingerprintManager.get_fingerprintw  s=     ,,.%;F8DEEV,--ri   c                 F   t         D ci c]  }|d   |
 }}g }t        | j                         j                               D ]  \  }}|j	                  |      }|rs|j                  d||j	                  dd      |j	                  dd      |j	                  dd      |j	                  dd      t        |j	                  dd	            d
       |j                  d||j                  |j                  |j                  |j                  |j                  dv d
        |S c c}w )Nr    builtinr   r   r   r   r   r!   F)typeru   r   r   r   r   r!   custom)v3v3only)r8  sortedr'  r  rw   appendr   r   r   r   r   r   )r   r,  native_lookuprowsru   r   natives          rj   list_fingerprintsz$FingerprintManager.list_fingerprints  s'    3M
*.D%
 
 )+!'(=(=(?(E(E(G!H 	D+"&&t,F ) $#)::i#<#)::i#<$jjr2&,jjr&B+/

;Le0T+U
  ( $#.#5#5#.#=#=)nn&1&<&<+6+C+CGW+W
	4 =
s   Dr>  )rd   re   rf   classmethodr   r   r   r   r   r   r   staticmethodr   bytesr  r   r/  objectr   r6  r<  r   r'  r   r   rP  rh   ri   rj   r   r     s   Ss S S A A A GS G G 
S 
 

 C$J  " +# +$ + +&  d38n   : ?!3: ?! ?! ?!B T#v+%6 4[@P;Q   7$sK/?*@ 7 7$ 
$sK'7"8    .S .[ . . $tCK'8"9  ri   r   r  c                 ,    t         j                  |       S )rC  )r   r   )r  s    rj   r   r     s    --f55ri   )%r   r   copyr   dataclassesr   r   r   r   	functoolsr   ior	   typingr
   urllib.parser   constr   r   r  r   r   __all__r%  r8  r   RuntimeErrorr   r   r   r   r   PlatformLiteralr   r   r   rh   ri   rj   <module>r`     s    	  0 0     " $ !  i! i " i$ " #i4 " 3iD " CiT " Sid " cit " siD " CiT " Sid " cit " siD # CiT " Sid " cit "siD "CiT ) Sid * cit  siD   CiT " Sid  " cit " siD & CiT " Sid & cit " siD & CiT " Sid # cit & siD # CiT # Sid # cit #siD	  C	i X	 4 0\9 07 7" 6 6 6t A B 4 4 4k k\6C 6K 6ri   