
    'jr                        d dl Z d dlmZmZ d dlmZ d dlmZmZm	Z	m
Z
 d dlmZmZmZ d dlmZ  ed          Z edd	
          Ze G d de                      Z	 ddeeef         deeef         deeef         de	e         ddf
dZdeeef         deddfdZddede	e         deeef         fdZdedededdfdZdde	e
eef                  defdZedk    r&d dlmZ  e            Z e ee                     dS dS )     N)asdict	dataclass)	randrange)AnyDictOptionalTuple)FingerprintFingerprintGeneratorScreenFingerprint)	load_yamlzbrowserforge.ymlfirefox)linuxmacoswindows)browserosc                   .    e Zd ZU dZdZee         ed<   dS )ExtendedScreenzG
    An extended version of Browserforge's ScreenFingerprint class
    NscreenY)__name__
__module____qualname____doc__r   r   int__annotations__     Y/home/ice/.hermes/hermes-agent/venv/lib/python3.11/site-packages/camoufox/fingerprints.pyr   r      s2           "GXc]!!!!!r   r   camoufox_data	cast_enumbf_dict
ff_versionreturnc                    |                                 D ]\  }}|s|                    |          }|s t          |t                    rt	          | |||           H|                    d          rt          |t                    r|dk     rd}|r.t          |t                    rt          j	        d| d|          }|| |<   dS )zH
    Casts Browserforge fingerprints to Camoufox config properties.
    zscreen.r   z(?<!\d)(1[0-9]{2})(\.0)(?!\d)z\2N)
itemsget
isinstancedict_cast_to_properties
startswithr   strresub)r    r!   r"   r#   keydatatype_keys          r   r*   r*      s     ]]__ ' '	T 	==%% 	dD!! 	xzJJJy)) 	js.C.C 	qD 	V*T3// 	V6:
<N<N<NPTUUD"&h%' 'r   	fp_screenc                    d| v rdS |j         }|sd| d<   d| d<   dS |t          dd          v r|| d<   dS |j        |j        z
  }|dk    rd| d<   dS |dk    rt	          d|          | d<   dS t	          |d          | d<   dS )zT
    Helper method to set window.screenY based on Browserforge's screenX value.
    zwindow.screenYNr   zwindow.screenXi3   )screenXrangeavailHeightouterHeightr   )r    r2   r5   r   s       r   handle_screenXYr9   ;   s    
 =((G *+&'*+&' %R..  *1&' #i&;;G!||*+&'''	1*3Aw*?*?&'''*3GQ*?*?&'''r   fingerprintc                 ~    i }t          |t          t          |           |           t          || j                   |S )zC
    Converts a Browserforge fingerprint to a Camoufox config.
    )r!   r"   r#   )r*   BROWSERFORGE_DATAr   r9   screen)r:   r#   r    s      r   from_browserforger>   X   sO     %'M#{##	    M;#5666r   fpouter_widthouter_heightc                    t          di t          | j                  | _        | j        }|xj        |j        |z
  dz  z  c_        |j        |z
  dz  |_        |j        r%t          ||j	        z
  |j        z   d          |_        |j
        r%t          ||j        z
  |j
        z   d          |_
        ||_	        ||_        dS )zV
    Helper method to set a custom outer window size, and center it in the screen
       r   Nr   )r   r   r=   r5   widthheightr   
innerWidthmax
outerWidthinnerHeightr8   )r?   r@   rA   scs       r   handle_window_sizerK   h   s    
 33	!2!233BI	B JJ28k)a//JJ)l*q0BJ 
} LK"-7"-GKK	~ P\BN:R^KQOO  BM!BNNNr   windowc                 h    | r t          j        di |}t          |g| R   |S t          j        di |S )z<
    Generates a Firefox fingerprint with Browserforge.
    r   )FP_GENERATORgeneraterK   )rL   configr:   s      r   generate_fingerprintrQ      sU      "+55f55;00000 **6***r   __main__)pprint)N)r-   dataclassesr   r   randomr   typingr   r   r   r	   browserforge.fingerprintsr
   r   r   camoufox.pkgmanr   r<   rN   r   r,   r*   r9   r>   r   rK   rQ   r   rS   r?   r   r   r   <module>rY      s   				 ) ) ) ) ) ) ) )       - - - - - - - - - - - -          & % % % % % I011 ##I:WXXX " " " " "& " " " !%	' 'S>'CH~' #s(^' 	'
 
' ' ' '<@4S> @>O @TX @ @ @ @: ; HSM UYZ]_bZbUc     "; "S " "PT " " " ".+ +%S/!: +P[ + + + + z				B
FR  !!!!!	 r   