§
    ®eîi's  ã                   óø  — d Z ddlmZmZmZmZ ddlmZmZ de	de	fd„Z
dedefd	„Zdedefd
„ZdZddede	dee	ef         dee         def
d„Zdee	ef         defd„Zddedee	ef         dee         dedef
d„Zdedefd„Zddedee	e	f         fd„Zdedeee	ef                  fd„Zdedee	ef         fd„Zdedee	ef         fd„Zdee         dee         fd„Zdee         deee	ef                  fd„ZdS ) z3
Shared validation functions for Firecrawl v2 API.
é    )ÚOptionalÚDictÚAnyÚListé   )ÚScrapeOptionsÚScrapeFormatsÚ
format_strÚreturnc                 ó:   — ddddœ}|                      | | ¦  «        S )zµ
    Convert format string from snake_case to camelCase.
    
    Args:
        format_str: Format string in snake_case
        
    Returns:
        Format string in camelCase
    ÚrawHtmlÚchangeTrackingzscreenshot@fullPage)Úraw_htmlÚchange_trackingÚscreenshot_full_page)Úget)r
   Úformat_mappings     úa/home/div/.hermes/hermes-agent/venv/lib/python3.11/site-packages/firecrawl/v2/utils/validation.pyÚ_convert_format_stringr   	   s1   € ð Ø+Ø 5ðð €Nð
 ×Ò˜j¨*Ñ5Ô5Ð5ó    Úschemac                 ó”   ‡‡— | rt          | t          ¦  «        s| S t          ¦   «         Šdt          dt          fˆˆfd„Š ‰| ¦  «        S )zº
    Normalize a schema for OpenAI compatibility by handling recursive references.
    
    Args:
        schema: Schema to normalize
        
    Returns:
        Normalized schema
    Úobjr   c                 óò  •‡	— t          | t          ¦  «        s%t          | t          ¦  «        rˆ
fd„| D ¦   «         S | S t          | ¦  «        }|‰v r| S ‰                     |¦  «         t          | ¦  «        Š	d‰	v r‰                     |¦  «         ‰	S d‰	v r§‰	                     d¦  «        }i }‰	                     ¦   «         D ]2\  }}t          |t          ¦  «        rd|vr ‰
|¦  «        ||<   Œ-|||<   Œ3i }|                     ¦   «         D ]\  }} ‰
|¦  «        ||<   Œi |¥d|i¥}‰                     |¦  «         |S ‰	                     d¦  «        dk    rd‰	v r‰	                     d¦  «        du r‰	d= ‰	                     d¦  «        dk    rad	‰	v r]d‰	v rYt          ‰	d	         t          ¦  «        r;t          ‰	d         t          ¦  «        r ˆ	fd
„‰	d	         D ¦   «         }|r|‰	d	<   n‰	d	= n‰	d	= t          ‰	                     ¦   «         ¦  «        D ]S\  }}t          |t          ¦  «        rd|vr ‰
|¦  «        ‰	|<   Œ-t          |t          ¦  «        rˆ
fd„|D ¦   «         ‰	|<   ŒT‰                     |¦  «         ‰	S )Nc                 ó&   •— g | ]} ‰|¦  «        ‘ŒS © r   ©Ú.0ÚitemÚnormalize_objects     €r   ú
<listcomp>zInormalize_schema_for_openai.<locals>.normalize_object.<locals>.<listcomp>-   s%   ø€ Ð?Ð?Ð?°4Ð(Ð(¨Ñ.Ô.Ð?Ð?Ð?r   ú$refú$defsÚtypeÚobjectÚ
propertiesÚadditionalPropertiesTÚrequiredc                 ó(   •— g | ]}|‰d          v ¯|‘ŒS )r&   r   )r   ÚfieldÚ
normalizeds     €r   r!   zInormalize_schema_for_openai.<locals>.normalize_object.<locals>.<listcomp>X   s5   ø€ ð "Eð "Eð "E¨EØ"'¨:°lÔ+CÐ"CÐ"Cð #(Ø"CÐ"CÐ"Cr   c                 óT   •— g | ]$}t          |t          ¦  «        r ‰|¦  «        n|‘Œ%S r   )Ú
isinstanceÚdictr   s     €r   r!   zInormalize_schema_for_openai.<locals>.normalize_object.<locals>.<listcomp>e   s;   ø€ Ð"pÐ"pÐ"pÐbf½ZÈÍdÑ=SÔ=SÐ#]Ð#3Ð#3°DÑ#9Ô#9Ð#9ÐY]Ð"pÐ"pÐ"pr   )	r-   r.   ÚlistÚidÚaddÚdiscardÚpopÚitemsr   )r   Úobj_idÚdefsÚprocessed_restÚkeyÚvalueÚnormalized_defsÚresultÚvalid_requiredr+   r    Úvisiteds            @€€r   r    z5normalize_schema_for_openai.<locals>.normalize_object*   s(  øø€ Ý˜#�tÑ$Ô$ð 	Ý˜#�tÑ$Ô$ð @Ø?Ð?Ð?Ð?¸3Ð?Ñ?Ô?Ð?ØˆJå�C‘”ˆØ�WÐÐØˆJØ�Š�FÑÔÐå˜#‘Y”Yˆ
ð �ZÐÐØ�OŠO˜FÑ#Ô#Ð#ØÐà�jÐ Ð Ø—>’> 'Ñ*Ô*ˆDØˆNà(×.Ò.Ñ0Ô0ð 0ð 0‘
��UÝ˜e¥TÑ*Ô*ð 0¨v¸UÐ/BÐ/BØ*:Ð*:¸5Ñ*AÔ*A�N 3Ñ'Ð'à*/�N 3Ñ'Ð'à ˆOØ"Ÿjšj™lœlð ?ð ?‘
��UØ'7Ð'7¸Ñ'>Ô'>� Ñ$Ð$àA˜ÐA¨°ÐAÐAˆFØ�OŠO˜FÑ#Ô#Ð#ØˆMà�NŠN˜6Ñ"Ô" hÒ.Ð.Ø˜JÐ&Ð&Ø�NŠNÐ1Ñ2Ô2°dÐ:Ð:ØÐ1Ð2à�NŠN˜6Ñ"Ô" hÒ.Ð.Ø˜*Ð$Ð$Ø˜JÐ&Ð&Ý˜: jÔ1µ4Ñ8Ô8ð 	+Ý˜: lÔ3µTÑ:Ô:ð	+ð"Eð "Eð "Eð "E°ZÀ
Ô5Kð "Eñ "Eô "E�à!ð /Ø-;�J˜zÑ*Ð*à" :Ð.Ð.à˜zÐ*å˜z×/Ò/Ñ1Ô1Ñ2Ô2ð 	qð 	q‰JˆC�Ý˜%¥Ñ&Ô&ð q¨6¸Ð+>Ð+>Ø"2Ð"2°5Ñ"9Ô"9�
˜3‘�Ý˜E¥4Ñ(Ô(ð qØ"pÐ"pÐ"pÐ"pÐjoÐ"pÑ"pÔ"p�
˜3‘øà�Š˜ÑÔÐØÐr   )r-   r.   Úsetr   )r   r    r=   s    @@r   Únormalize_schema_for_openair?      sr   øø€ ð ð � F­DÑ1Ô1ð Øˆå‰eŒe€Gð>�cð >¥cð >ð >ð >ð >ð >ð >ð >ð@ Ð˜FÑ#Ô#Ð#r   c                 ó–   ‡‡— | rt          | t          ¦  «        sdS t          ¦   «         Šdt          dt          fˆˆfd„Š ‰| ¦  «         S )z¬
    Validate schema for OpenAI compatibility.
    
    Args:
        schema: Schema to validate
        
    Returns:
        True if schema is valid, False otherwise
    Tr   r   c                 óÞ  •— t          | t          ¦  «        sdS t          | ¦  «        }|‰v rdS ‰                     |¦  «         d| v r‰                     |¦  «         dS |                      d¦  «        dk    r6d| vr2d| vr.|                      d¦  «        du r‰                     |¦  «         dS |                      ¦   «         D ]–}t          |t          ¦  «        r(d|vr$ ‰|¦  «        r‰                     |¦  «          dS Œ?t          |t          ¦  «        rB|D ]?}t          |t          ¦  «        r(d|vr$ ‰|¦  «        r‰                     |¦  «           dS Œ@Œ—‰                     |¦  «         dS )	NFr"   r$   r%   r&   ÚpatternPropertiesr'   T)r-   r.   r0   r1   r2   r   Úvaluesr/   )r   r5   r9   r   Úhas_invalid_structurer=   s       €€r   rD   z9validate_schema_for_openai.<locals>.has_invalid_structure|   s«  ø€ Ý˜#�tÑ$Ô$ð 	Ø�5å�C‘”ˆØ�WÐÐØ�5Ø�Š�FÑÔÐà�Sˆ=ˆ=Ø�OŠO˜FÑ#Ô#Ð#Ø�5à�GŠG�F‰OŒO˜xÒ'Ð'Ø Ð#Ð#Ø sÐ*Ð*Ø�GŠGÐ*Ñ+Ô+¨tÐ3Ð3Ø�OŠO˜FÑ#Ô#Ð#Ø�4à—Z’Z‘\”\ð 
	(ð 
	(ˆEÝ˜%¥Ñ&Ô&ð 	(¨6¸Ð+>Ð+>Ø(Ð(¨Ñ/Ô/ð  Ø—O’O FÑ+Ô+Ð+Ø˜4˜4ð õ ˜E¥4Ñ(Ô(ð (Ø!ð (ð (�DÝ! $­Ñ-Ô-ð (°&ÀÐ2DÐ2DØ0Ð0°Ñ6Ô6ð (Ø#ŸOšO¨FÑ3Ô3Ð3Ø#' 4 4 4øøà�Š˜ÑÔÐØˆur   )r-   r.   r>   r   Úbool)r   rD   r=   s    @@r   Úvalidate_schema_for_openairF   m   su   øø€ ð ð � F­DÑ1Ô1ð Øˆtå‰eŒe€Gð!¥3ð !­4ð !ð !ð !ð !ð !ð !ð !ðF %Ð$ VÑ,Ô,Ð,Ð,r   a  Schema contains invalid structure for OpenAI: object type with no 'properties' defined but 'additionalProperties: true' (schema-less dictionary not supported by OpenAI). Please define specific properties for your object. Note: Recursive schemas using '$ref' are supported.Nr   Útarget_def_namer6   r=   c                 óî  — | rt          | t          t          f¦  «        sdS |€t          ¦   «         }ddl}|                     | dt          ¬¦  «        }||v rdS |                     |¦  «         	 t          | t          ¦  «        rþd| v r¸t          | d         t          ¦  «        r�| d                              d¦  «        }t          |¦  «        dk    ro|d         d	k    rc|d
         dk    rW|d         }||k    r	 | 
                    |¦  «         dS ||v r-t          ||         |||¦  «        | 
                    |¦  «         S |                      ¦   «         D ],}t          ||||¦  «        r | 
                    |¦  «         dS Œ-nDt          | t          ¦  «        r/| D ],}	t          |	|||¦  «        r | 
                    |¦  «         dS Œ-| 
                    |¦  «         n# | 
                    |¦  «         w xY wdS )a�  
    Check if an object contains a recursive reference to a specific definition.
    
    Args:
        obj: Object to check
        target_def_name: Name of the definition to check for recursion
        defs: Dictionary of definitions
        visited: Set of visited object keys to detect cycles
        
    Returns:
        True if recursive reference is found, False otherwise
    FNr   T)Ú	sort_keysÚdefaultr"   ú/é   ú#é   r#   éÿÿÿÿ)r-   r.   r/   r>   ÚjsonÚdumpsÚstrr1   ÚsplitÚlenr2   Ú_contains_recursive_refrC   )
r   rG   r6   r=   rP   Úobj_keyÚref_pathÚdef_namer9   r   s
             r   rU   rU   ©   s>  € ð ð •j ¥t­T lÑ3Ô3ð Øˆuà€Ý‘%”%ˆà€K€K€KØ�jŠj˜¨µcˆjÑ:Ô:€GØ�'ÐÐØˆuØ‡K‚K�ÑÔÐð!Ý�c�4Ñ Ô ð 	 Ø˜ˆ}ˆ}¥¨C°¬K½Ñ!=Ô!=ˆ}Ø˜vœ;×,Ò,¨SÑ1Ô1�Ý�x‘=”= AÒ%Ð%¨(°1¬+¸Ò*<Ð*<ÀÈ!ÄÐPWÒAWÐAWØ'¨œ|�HØ ?Ò2Ð2Ø#ð 	�Š˜Ñ Ô Ð Ð Ð ð   4Ð'Ð'Ý6°t¸H´~ÀÐX\Ð^eÑfÔfð 	�Š˜Ñ Ô Ð Ð ð Ÿš™œð  ð  �Ý*¨5°/À4ÈÑQÔQð  Øð 	�Š˜Ñ Ô Ð Ð Ð ð ð õ ˜�TÑ"Ô"ð 	 Øð  ð  �Ý*¨4°À$ÈÑPÔPð  Øð 	�Š˜Ñ Ô Ð Ð Ð ð	 ð 	�Š˜Ñ Ô Ð Ð øˆ�Š˜Ñ Ô Ð Ð øøøàˆ5s%   Á.BG ÄG Ä?)G Å?.G ÇG ÇG2c                 ój   — | sdS |                       ¦   «         D ]\  }}t          ||| ¦  «        r dS ŒdS )zÊ
    Check if $defs contain circular references.
    
    Args:
        defs: Dictionary of definitions to check
        
    Returns:
        True if circular references are found, False otherwise
    FT)r4   rU   )r6   rX   Ú	def_values      r   Ú_check_for_circular_defsr[   Ü   sT   € ð ð Øˆuà#Ÿzšz™|œ|ð ð Ñˆ�)Ý" 9¨h¸Ñ=Ô=ð 	Ø�4�4ð	ð ˆ5r   Údepthc                 óþ  ‡‡‡— | r"t          | t          t          f¦  «        r‰dk    r| S ‰€t          ¦   «         Št	          | ¦  «        }|‰v r| S ‰                     |¦  «         	 t          | t          ¦  «        �rd| v rÁt          | d         t          ¦  «        r¦| d                              d¦  «        }t          |¦  «        dk    ra|d         dk    rU|d         d	k    rI|d
         }|‰v r=t          t          ‰|         ¦  «        ‰‰‰dz   ¦  «        ‰ 
                    |¦  «         S | ‰ 
                    |¦  «         S i }|                      ¦   «         D ]$\  }}	|d	k    rŒt          |	‰‰‰dz   ¦  «        ||<   Œ%|‰ 
                    |¦  «         S t          | t          ¦  «        r%ˆˆˆfd„| D ¦   «         ‰ 
                    |¦  «         S 	 ‰ 
                    |¦  «         n# ‰ 
                    |¦  «         w xY w| S )aP  
    Resolve $ref references in a JSON schema object.
    
    Args:
        obj: Object to resolve references in
        defs: Dictionary of definitions
        visited: Set to track visited objects and prevent infinite recursion
        depth: Current recursion depth
        
    Returns:
        Object with resolved references
    é
   Nr"   rK   rL   r   rM   rN   r#   rO   c           	      ó:   •— g | ]}t          |‰‰‰d z   ¦  «        ‘ŒS )rN   )Úresolve_refs)r   r   r6   r\   r=   s     €€€r   r!   z resolve_refs.<locals>.<listcomp>  s+   ø€ ÐQÐQÐQÀT•L  t¨W°e¸a±iÑ@Ô@ÐQÐQÐQr   )r-   r.   r/   r>   r0   r1   rR   rS   rT   r`   r2   r4   )
r   r6   r=   r\   r5   rW   rX   Úresolvedr8   r9   s
    ```      r   r`   r`   ð   s9  øøø€ ð ð •j ¥t­T lÑ3Ô3ð °u¸r²z°zØˆ
à€Ý‘%”%ˆå�‰WŒW€FØ�ÐÐØˆ
à‡K‚K�ÑÔÐð Ý�c�4Ñ Ô ñ 	RØ˜ˆ}ˆ}¥¨C°¬K½Ñ!=Ô!=ˆ}Ø˜vœ;×,Ò,¨SÑ1Ô1�Ý�x‘=”= AÒ%Ð%¨(°1¬+¸Ò*<Ð*<ÀÈ!ÄÐPWÒAWÐAWØ'¨œ|�HØ 4Ð'Ð'Ý+­D°°h´Ñ,@Ô,@À$ÈÐQVÐYZÑQZÑ[Ô[ð 	�Š˜ÑÔÐÐð ð 	�Š˜ÑÔÐÐð ˆHØ!Ÿiši™kœkð Nð N‘
��UØ˜'’>�>ØÝ ,¨U°D¸'À5È1Á9Ñ MÔ M�˜‘�Øð 	�Š˜ÑÔÐÐõ	 ˜�TÑ"Ô"ð 	RØQÐQÐQÐQÐQÐQÈSÐQÑQÔQð 	�Š˜ÑÔÐÐð		Rð 	�Š˜ÑÔÐÐøˆ�Š˜ÑÔÐÐøøøà€Js   Á%B.G# Ä)G# Å <G# Æ$G# Ç#G:c                 óô   — | rt          | t          ¦  «        sdS ddl}|                     | ¦  «        }d|v pd|v pd|v }t	          |                      d¦  «        p|                      d¦  «        ¦  «        }|p|S )	zÁ
    Detect if a schema contains recursive references.
    
    Args:
        schema: Schema to analyze
        
    Returns:
        True if schema has recursive patterns, False otherwise
    Fr   Nú"$ref"ú#/$defs/z#/definitions/r#   Údefinitions)r-   r.   rP   rQ   rE   r   )r   rP   Úschema_stringÚhas_refsÚhas_defss        r   Údetect_recursive_schemari   #  sš   € ð ð � F­DÑ1Ô1ð Øˆuà€K€K€KØ—J’J˜vÑ&Ô&€Mà�MÐ!ð 	*Ø�mÐ#ð	*à˜MÐ)ð õ
 �F—J’J˜wÑ'Ô'ÐD¨6¯:ª:°mÑ+DÔ+DÑEÔE€HàÐ�xÐr   c                 óB   — | sdddœS t          | ¦  «        rdddœS dddœS )z¬
    Select appropriate model based on schema complexity.
    
    Args:
        schema: Schema to analyze
        
    Returns:
        Dict with modelName and reason
    zgpt-4o-miniÚ	no_schema)Ú	modelNameÚreasonzgpt-4oÚrecursive_schema_detectedÚsimple_schema)ri   )r   s    r   Úselect_model_for_schemarp   <  sI   € ð ð CØ*°kÐBÐBÐBå˜vÑ&Ô&ð NØ%Ð1LÐMÐMÐMà&°/ÐBÐBÐBr   c                 ó  — 	 t          | d¦  «        r(t          | j        ¦  «        r|                      ¦   «         S t          | d¦  «        rft          | j        ¦  «        rRt	          | j        dd¦  «        }t          |¦  «        r| j                             ¦   «         S |                      ¦   «         S t          | d¦  «        r(t          | j        ¦  «        r|                      ¦   «         S t          | d¦  «        rft          | j        ¦  «        rRt	          | j        dd¦  «        }t          |¦  «        r| j                             ¦   «         S |                      ¦   «         S n# t          $ r Y nw xY wt          | t          ¦  «        r| ndS )z‰
    Normalize a schema object which may be a dict, Pydantic BaseModel subclass,
    or a Pydantic model instance into a plain dict.
    Úmodel_json_schemaÚ
model_dumpNr   r.   )
ÚhasattrÚcallablerr   rs   ÚgetattrÚ	__class__r   r.   Ú	Exceptionr-   )r   ÚmjsÚschs      r   Ú_normalize_schemar{   O  s�  € ð
å�6Ð.Ñ/Ô/ð 	.µH¸VÔ=UÑ4VÔ4Vð 	.Ø×+Ò+Ñ-Ô-Ð-å�6˜<Ñ(Ô(ð 	'­X°fÔ6GÑ-HÔ-Hð 	'å˜&Ô*Ð,?ÀÑFÔFˆCÝ˜‰}Œ}ð <ØÔ'×9Ò9Ñ;Ô;Ð;à×$Ò$Ñ&Ô&Ð&å�6˜8Ñ$Ô$ð 	#­°&´-Ñ)@Ô)@ð 	#Ø—=’=‘?”?Ð"å�6˜6Ñ"Ô"ð 	!¥x°´Ñ'<Ô'<ð 	!å˜&Ô*¨H°dÑ;Ô;ˆCÝ˜‰}Œ}ð 1ØÔ'×.Ò.Ñ0Ô0Ð0Ø—;’;‘=”=Ð øøÝð ð ð Øˆðøøøõ   ­Ñ-Ô-Ð7ˆ6ˆ6°4Ð7s0   ‚7E ºA!E ÂE Â07E Ã(A!E Å
E Å
E,Å+E,Ú
format_objc                 ó~  — t          | t          ¦  «        st          d¦  «        ‚|                      d¦  «        dk    rt          d¦  «        ‚|                      d¦  «        }t          | ¦  «        }|��It	          |¦  «        }|��7t          |t          ¦  «        rë|                     di ¦  «        }ddl}|                     |¦  «        }|                     d¦  «        pd	|v pd
|v }|r_	 t          ||¦  «        }|                     |¦  «        }	d	|	v pd
|	v }
|
s|}t          |t          ¦  «        rd|v r|d= nN# t          $ r Y nBw xY w	 t          ||¦  «        }t          |t          ¦  «        rd|v r|d= n# t          $ r Y nw xY wt          |¦  «        }t          |¦  «        st          t          ¦  «        ‚||d<   |S )a  
    Validate and prepare json format object.
    
    Args:
        format_obj: Format object that should be json type
        
    Returns:
        Validated json format dict
        
    Raises:
        ValueError: If json format is missing required fields
    úHjson format must be an object with 'type', 'prompt', and 'schema' fieldsr$   rP   z!json format must have type='json'r   Nr#   r   rc   rd   )r-   r.   Ú
ValueErrorr   r{   rP   rQ   r`   rx   r?   rF   ÚOPENAI_SCHEMA_ERROR_MESSAGE)r|   r   r+   Únormalized_schemar6   rP   rf   Úhas_any_refsÚresolved_schemaÚresolved_stringÚhas_remaining_refsÚopenai_normalized_schemas               r   Ú_validate_json_formatr‡   p  s3  € õ �j¥$Ñ'Ô'ð eÝÐcÑdÔdÐdà‡~‚~�fÑÔ Ò'Ð'ÝÐ<Ñ=Ô=Ð=ð �^Š^˜HÑ%Ô%€FÝ�jÑ!Ô!€JØÑÝ-¨fÑ5Ô5ÐØÑ(åÐ+­TÑ2Ô2ð  Ø(×,Ò,¨W°bÑ9Ô9�Ø���Ø $§
¢
Ð+<Ñ =Ô =�à%×)Ò)¨'Ñ2Ô2ð 0Ø Ð-ð0à -Ð/ð ð  ð ðÝ*6Ð7HÈ$Ñ*OÔ*O˜Ø*.¯*ª*°_Ñ*EÔ*E˜Ø-5¸Ð-HÐ-iÈJÐZiÐLiÐ*à1ð ?Ø0?Ð-å)Ð*;½TÑBÔBð ?ÀwÐRcÐGcÐGcØ$5°gÐ$>øøå$ð ð ð à˜ðøøøð
Ý,8Ð9JÈDÑ,QÔ,QÐ)Ý%Ð&7½Ñ>Ô>ð ;À7ÐN_ÐC_ÐC_Ø 1°'Ð :øøÝ$ð ð ð Ø˜ðøøøõ (CÐCTÑ'UÔ'UÐ$Ý-Ð.FÑGÔGð >Ý Õ!<Ñ=Ô=Ð=à#;ˆJ�xÑ ØÐs%   Ã*AD8 Ä8
EÅEÅ	,E6 Å6
FÆFc                 óð   — t          | t          ¦  «        st          d¦  «        ‚t          |                      d¦  «        t          ¦  «        r| d                              ¦   «         st          d¦  «        ‚| S )a   
    Validate and prepare query format object.

    Args:
        format_obj: Format object that should be query type

    Returns:
        Validated query format dict

    Raises:
        ValueError: If query format is missing required 'prompt' field
    ú>query format must be an object with 'type' and 'prompt' fieldsÚpromptz1query format requires a non-empty 'prompt' string)r-   r.   r   r   rR   Ústrip)r|   s    r   Ú_validate_query_formatrŒ   ¶  ss   € õ �j¥$Ñ'Ô'ð [ÝÐYÑZÔZÐZå�j—n’n XÑ.Ô.µÑ4Ô4ð N¸JÀxÔ<P×<VÒ<VÑ<XÔ<Xð NÝÐLÑMÔMÐMàÐr   Úoptionsc                 ó’   — | €dS | j         �| j         dk    rt          d¦  «        ‚| j        �| j        dk     rt          d¦  «        ‚| S )zå
    Validate and normalize scrape options.
    
    Args:
        options: Scraping options to validate
        
    Returns:
        Validated options or None
        
    Raises:
        ValueError: If options are invalid
    Nr   zTimeout must be positivezwait_for must be non-negative)Útimeoutr   Úwait_for)r�   s    r   Úvalidate_scrape_optionsr‘   Ì  s_   € ð €Øˆtð „Ð" w¤¸!Ò';Ð';ÝÐ3Ñ4Ô4Ð4ð ÔÐ#¨Ô(8¸1Ò(<Ð(<ÝÐ8Ñ9Ô9Ð9à€Nr   c                 ó¤  — | €dS t          | ¦  «        }|€dS dddddddddœ}|                     d¬¦  «        }|                     ¦   «         D ]\  }}||vr|||<   Œi }ddd	d
ddddddddœ}|                     ¦   «         D ]!\  }}	||v r|                     |¦  «        ||	<   Œ"|                     ¦   «         D �	]˜\  }
}|�	��|
dk    r't	          |¦  «                             ¦   «         pd|d<   Œ6|
dk    �rûg }t          | dd¦  «        }t          |t          ¦  «        �r_|j	        �r‘|j	        D �]ˆ}t          |t          ¦  «        rM|dk    rt          d¦  «        ‚|dk    rt          d¦  «        ‚|                     t          |¦  «        ¦  «         Œet          |t          ¦  «        �r;|                     d¦  «        r"t          |                     d¦  «        ¦  «        nd}|dk    r+t          i |¥ddi¥¦  «        }|                     |¦  «         Œå|dk    r$|                     t!          |¦  «        ¦  «         �Œ|dk    ryi |¥ddi¥}d|v r|                     d¦  «        |d<   |                     d¦  «        }t#          |d¦  «        r|                     d¬¦  «        |d<   |                     |¦  «         �ŒŽd|v r|p|d         |d<   |                     |¦  «         �Œ¶t#          |d¦  «        r­|j        dk    r6|                     t          |                     ¦   «         ¦  «        ¦  «         �Œ|j        dk    r8|                     t!          |                     d¬¦  «        ¦  «        ¦  «         �ŒJ|                     t          |j        ¦  «        ¦  «         �Œs|                     |¦  «         �ŒŠ|j        r|                     d¦  «         |j        r|                     d ¦  «         |j        r|                     d!¦  «         |j        r|                     d"¦  «         |j        r|                     d#¦  «         |j        r|                     d¦  «         |j        r|                     d$¦  «         �njt          |t4          ¦  «        �r(|D �]#}t          |t          ¦  «        rM|dk    rt          d¦  «        ‚|dk    rt          d¦  «        ‚|                     t          |¦  «        ¦  «         Œet          |t          ¦  «        �r;|                     d¦  «        r"t          |                     d¦  «        ¦  «        nd}|dk    r+t          i |¥ddi¥¦  «        }|                     |¦  «         Œå|dk    r$|                     t!          |¦  «        ¦  «         �Œ|dk    ryi |¥ddi¥}d|v r|                     d¦  «        |d<   |                     d¦  «        }t#          |d¦  «        r|                     d¬¦  «        |d<   |                     |¦  «         �ŒŽd|v r|p|d         |d<   |                     |¦  «         �Œ¶t#          |d¦  «        �rG|j        dk    r6|                     t          |                     ¦   «         ¦  «        ¦  «         �Œ|j        dk    r�ddi}t          |dd¦  «        �
|j        |d<   t          |d%d¦  «        �
|j        |d%<   t          |dd¦  «        }|�+t#          |d¦  «        r|                     d¬¦  «        n||d<   |                     |¦  «         �Œ¢|j        dk    r8|                     t!          |                     d¬¦  «        ¦  «        ¦  «         �Œå|                     t          |j        ¦  «        ¦  «         �Œ|                     |¦  «         �Œ%n,	 |D ]}|                     |¦  «         Œn# t:          $ r Y nw xY w|r||d<   �Œ8|
d&k    r¾g }|D ]²}t          |t          ¦  «        rCi }|                     ¦   «         D ]\  }}|dk    r||d<   Œ|||<   Œ|                     |¦  «         ŒZ|                     d¬¦  «        }i }|                     ¦   «         D ]\  }}|dk    r||d<   Œ|||<   Œ|                     |¦  «         Œ³||d&<   �Œü|
d'k    rÖg }|D ]Ê}t          |t          ¦  «        r|                     |¦  «         Œ-t          |t          ¦  «        rAt          |¦  «        }d(|v r|                     d(¦  «        |d)<   |                     |¦  «         Œƒ|                     d¬¦  «        }d(|v r|                     d(¦  «        |d)<   |                     |¦  «         ŒË||d'<   �ŒØ|
d*k    r7t          |t          ¦  «        r||d*<   �Œú|                     d¬¦  «        |d*<   �	Œ|
d+k    rxt          |t          ¦  «        r4|d,         |                     d-|                     d.d¦  «        ¦  «        d/œ}n(|j        t          |d-t          |d.d¦  «        ¦  «        d/œ}||d+<   �	Œ“|||
<   �	Œš|S )0zø
    Prepare ScrapeOptions for API submission with manual snake_case to camelCase conversion.
    
    Args:
        options: ScrapeOptions to prepare
        
    Returns:
        Dictionary ready for API submission or None if options is None
    NTFi ºÛ )Úonly_main_contentÚmobileÚskip_tls_verificationÚremove_base64_imagesÚ	fast_modeÚ	block_adsÚmax_ageÚstore_in_cache)Úexclude_noneÚincludeTagsÚexcludeTagsÚonlyMainContentÚwaitForÚskipTlsVerificationÚremoveBase64ImagesÚfastModeÚuseMockÚblockAdsÚstoreInCacheÚmaxAge)Úinclude_tagsÚexclude_tagsr“   r�   r•   r–   r—   Úuse_mockr˜   rš   r™   ÚintegrationÚformatsrP   r~   Úqueryr‰   r$   Ú
screenshotÚ	full_pageÚfullPageÚviewportrs   ÚmarkdownÚhtmlr   ÚsummaryÚlinksr   ÚqualityÚactionsÚparsersÚ	max_pagesÚmaxPagesÚlocationÚprofileÚnameÚsave_changesÚsaveChanges)r¼   r¾   )r‘   rs   r4   r3   rR   r‹   rv   r-   r	   r«   r   Úappendr   r.   r   r‡   rŒ   rt   r$   r±   r²   r   r³   r´   r­   r   r/   r®   rµ   Ú	TypeErrorr¼   )r�   Úvalidated_optionsÚdefault_valuesÚoptions_datar*   Údefault_valueÚscrape_dataÚfield_mappingsÚ
snake_caseÚ
camel_caser8   r9   Úconverted_formatsÚoriginal_formatsÚfmtÚfmt_typeÚvalidated_jsonr+   ÚvpÚconverted_actionsÚactionÚconverted_actionÚ
action_keyÚaction_valueÚaction_dataÚconverted_parsersÚparserÚparser_dataÚprofile_datas                                r   Úprepare_scrape_optionsrÙ   ç  s?  € ð €Øˆtõ 0°Ñ8Ô8ÐØÐ Øˆtð "ØØ!%Ø $ØØØØð	ð 	€Nð %×/Ò/¸TÐ/ÑBÔB€Lð !/× 4Ò 4Ñ 6Ô 6ð 0ð 0Ñˆˆ}Ø˜Ð$Ð$Ø"/ˆL˜Ñøà€Kð &Ø%Ø.ØØ!6Ø 4ØØØØ(Øðð €Nð #1×"6Ò"6Ñ"8Ô"8ð Cð CÑˆ
�JØ˜Ð%Ð%Ø&2×&6Ò&6°zÑ&BÔ&BˆK˜
Ñ#øð #×(Ò(Ñ*Ô*ð {)ñ {)‰
ˆˆUØÑØ�mÒ#Ð#Ý.1°%©j¬j×.>Ò.>Ñ.@Ô.@Ð.HÀD�˜MÑ*ØØ�iÒÑà/1Ð!õ $+¨7°I¸tÑ#DÔ#DÐ åÐ.µÑ>Ô>ñ oà'Ô/ñ %>Ø#3Ô#;ð $>ñ $>˜CÝ)¨#­sÑ3Ô3ð #>Ø#&¨&¢= =Ý*4Ð5ñ  +Aô  +Að  %AØ#&¨'¢> >Ý*4Ð5uÑ*vÔ*vÐ$vØ 1× 8Ò 8Õ9OÐPSÑ9TÔ9TÑ UÔ UÐ UÐ UÝ!+¨CµÑ!6Ô!6ñ >ØVY×V]ÒV]Ð^dÑVeÔVeÐ+oÕ+AÀ#Ç'Â'È&Á/Ä/Ñ+RÔ+RÐ+RÐko Ø#+¨vÒ#5Ð#5Ý5JÐKbÈcÐKbÐSYÐ[aÐKbÐKbÑ5cÔ5c NØ$5×$<Ò$<¸^Ñ$LÔ$LÐ$LÐ$LØ%-°Ò%8Ð%8Ø$5×$<Ò$<Õ=SÐTWÑ=XÔ=XÑ$YÔ$YÐ$YÑ$YØ%-°Ò%=Ð%=à1N°CÐ1N¸ÀÐ1NÐ1N JØ'2°jÐ'@Ð'@ØAKÇÂÐP[ÑA\ÔA\¨
°:Ñ(>à)3¯ª¸
Ñ)CÔ)C BÝ'.¨r°<Ñ'@Ô'@ð %bØACÇÂÐ\`ÀÑAaÔAa¨
°:Ñ(>Ø$5×$<Ò$<¸ZÑ$HÔ$HÐ$HÑ$Hà'-° } }Ø6>Ð6MÀ#ÀfÄ+¨¨F©Ø$5×$<Ò$<¸SÑ$AÔ$AÐ$AÑ$AÝ!(¨¨fÑ!5Ô!5ð >Ø#&¤8¨vÒ#5Ð#5Ø$5×$<Ò$<Õ=RÐSV×SaÒSaÑScÔScÑ=dÔ=dÑ$eÔ$eÐ$eÑ$eØ%(¤X°Ò%8Ð%8Ø$5×$<Ò$<Õ=SÐTW×TbÒTbÐptÐTbÑTuÔTuÑ=vÔ=vÑ$wÔ$wÐ$wÑ$wà$5×$<Ò$<Õ=SÐTWÔT\Ñ=]Ô=]Ñ$^Ô$^Ð$^Ñ$^à 1× 8Ò 8¸Ñ =Ô =Ð =Ñ =ð (Ô0ð =Ø)×0Ò0°Ñ<Ô<Ð<Ø'Ô,ð 9Ø)×0Ò0°Ñ8Ô8Ð8Ø'Ô0ð <Ø)×0Ò0°Ñ;Ô;Ð;Ø'Ô/ð <Ø)×0Ò0°Ñ;Ô;Ð;Ø'Ô-ð :Ø)×0Ò0°Ñ9Ô9Ð9Ø'Ô2ð ?Ø)×0Ò0°Ñ>Ô>Ð>Ø'Ô7ð CØ)×0Ò0Ð1AÑBÔBÐBùõ  Ð 0µ$Ñ7Ô7ñ 4Ø/ð ,:ñ ,:˜Ý% c­3Ñ/Ô/ð +:Ø" fš}˜}Ý&0Ð1{Ñ&|Ô&|Ð |Ø" gš~˜~Ý&0Ð1qÑ&rÔ&rÐ rØ-×4Ò4Õ5KÈCÑ5PÔ5PÑQÔQÐQÐQÝ'¨­TÑ2Ô2ñ %:ØRU×RYÒRYÐZ`ÑRaÔRaÐ'kÕ'=¸c¿gºgÀf¹o¼oÑ'NÔ'NÐ'NÐgk˜HØ'¨6Ò1Ð1Ý1FÐG^È#ÐG^ÈvÐW]ÐG^ÐG^Ñ1_Ô1_ Ø 1× 8Ò 8¸Ñ HÔ HÐ HÐ HØ!)¨WÒ!4Ð!4Ø 1× 8Ò 8Õ9OÐPSÑ9TÔ9TÑ UÔ UÐ UÑ UØ!)¨\Ò!9Ð!9Ø-J°Ð-J°V¸\Ð-JÐ-J 
Ø#.°*Ð#<Ð#<Ø=G¿^º^ÈKÑ=XÔ=X J¨zÑ$:Ø%/§^¢^°JÑ%?Ô%? Ý#*¨2¨|Ñ#<Ô#<ð !^Ø=?¿]º]ÐX\¸]Ñ=]Ô=] J¨zÑ$:Ø 1× 8Ò 8¸Ñ DÔ DÐ DÑ Dà#)¨S = =Ø2:Ð2I¸cÀ&¼k C¨¡KØ 1× 8Ò 8¸Ñ =Ô =Ð =Ñ =Ý$ S¨&Ñ1Ô1ñ :Ø"œx¨6Ò1Ð1Ø 1× 8Ò 8Õ9NÈsÏ~Ê~ÑO_ÔO_Ñ9`Ô9`Ñ aÔ aÐ aÑ aØ!$¤¨\Ò!9Ð!9Ø.4°lÐ-C 
Ý#*¨3°¸TÑ#BÔ#BÐ#NØ=@¼] J¨zÑ$:Ý#*¨3°	¸4Ñ#@Ô#@Ð#LØ<?¼K J¨yÑ$9Ý%,¨S°*¸dÑ%CÔ%C Ø#% >ÝahÐikÐmyÑazÔazð  >C¸R¿]º]ÐX\¸]Ñ=]Ô=]Ð=]ð  AC J¨zÑ$:Ø 1× 8Ò 8¸Ñ DÔ DÐ DÑ DØ!$¤¨WÒ!4Ð!4Ø 1× 8Ò 8Õ9OÐPS×P^ÒP^ÐlpÐP^ÑPqÔPqÑ9rÔ9rÑ sÔ sÐ sÑ sà 1× 8Ò 8Õ9OÐPSÔPXÑ9YÔ9YÑ ZÔ ZÐ ZÑ Zà-×4Ò4°SÑ9Ô9Ð9Ñ9ðY,:ð^Ø#(ð :ð :˜CØ-×4Ò4°SÑ9Ô9Ð9Ð9ð:øå$ð ð ð Ø˜ðøøøð %ð ?Ø->�K 	Ñ*ùØ˜	Ò!Ð!à$&Ð!Ø#ð Cð C�FÝ! &­$Ñ/Ô/ð Cà+-Ð(Ø8>¿º¹¼ð Lð LÑ4˜J¨Ø)¨[Ò8Ð8Ø?KÐ 0°Ñ <Ð <à?KÐ 0°Ñ <Ð <Ø)×0Ò0Ð1AÑBÔBÐBÐBð '-×&7Ò&7ÀTÐ&7Ñ&JÔ&J˜Ø+-Ð(Ø8C×8IÒ8IÑ8KÔ8Kð Lð LÑ4˜J¨Ø)¨[Ò8Ð8Ø?KÐ 0°Ñ <Ð <à?KÐ 0°Ñ <Ð <Ø)×0Ò0Ð1AÑBÔBÐBÐBØ):�˜IÑ&Ñ&Ø˜	Ò!Ð!Ø$&Ð!Ø#ð >ð >�FÝ! &­#Ñ.Ô.ð >Ø)×0Ò0°Ñ8Ô8Ð8Ð8Ý# F­DÑ1Ô1ð 
>Ý&*¨6¡l¤l˜Ø&¨+Ð5Ð5Ø6A·o²oÀkÑ6RÔ6R˜K¨
Ñ3Ø)×0Ò0°Ñ=Ô=Ð=Ð=à&,×&7Ò&7ÀTÐ&7Ñ&JÔ&J˜à&¨+Ð5Ð5Ø6A·o²oÀkÑ6RÔ6R˜K¨
Ñ3Ø)×0Ò0°Ñ=Ô=Ð=Ð=Ø):�˜IÑ&Ñ&Ø˜
Ò"Ð"Ý˜e¥TÑ*Ô*ð RØ.3�K 
Ñ+Ñ+à.3×.>Ò.>ÈDÐ.>Ñ.QÔ.Q�K 
Ñ+Ñ+Ø˜	Ò!Ð!Ý˜e¥TÑ*Ô*ð 	à % f¤Ø',§y¢y°ÀÇÂÈ=ÐZ^ÑA_ÔA_Ñ'`Ô'`ð$ð $�L�Lð !&¤
Ý'.¨u°nÅgÈeÐUbÐdhÑFiÔFiÑ'jÔ'jð$ð $�Lð *6�˜IÑ&Ñ&ð $)�˜CÑ ùàÐs   Þ:_ß
_"ß!_")N)Nr   )Ú__doc__Útypingr   r   r   r   Útypesr   r	   rR   r   r?   rE   rF   r€   r>   rU   r[   Úintr`   ri   rp   r{   r‡   rŒ   r‘   rÙ   r   r   r   ú<module>rÞ      sÞ  ððð ð -Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0ð6 sð 6¨sð 6ð 6ð 6ð 6ð$O$¨ð O$°ð O$ð O$ð O$ð O$ðd2- sð 2-¨tð 2-ð 2-ð 2-ð 2-ðlmð ð0ð 0 ð 0°sð 0À$ÀsÈCÀxÄ.ð 0Ð[cÐdgÔ[hð 0Ðtxð 0ð 0ð 0ð 0ðf 4¨¨S¨¤>ð °dð ð ð ð ð(0ð 0�cð 0  c¨3 h¤ð 0¸(À3¼-ð 0ÐWZð 0Ðcfð 0ð 0ð 0ð 0ðf  Cð  ¨Dð  ð  ð  ð  ð2Cð C Cð C°4¸¸S¸´>ð Cð Cð Cð Cð&8˜cð 8 h¨t°C¸°H¬~Ô&>ð 8ð 8ð 8ð 8ðBC cð C¨d°3¸°8¬nð Cð Cð Cð CðL sð ¨t°C¸°H¬~ð ð ð ð ð, X¨mÔ%<ð ÀÈ-ÔAXð ð ð ð ð6z H¨]Ô$;ð zÀÈÈcÐSVÈhÌÔ@Xð zð zð zð zð zð zr   