§
    ®eîiA  ã                   ó|   — d Z ddlZddlmZmZmZ ddlmZmZm	Z	 ddl
Z
ddlmZ  e¦   «         Z G d„ d¦  «        ZdS )	z#
HTTP client utilities for v2 API.
é    N)ÚDictÚAnyÚOptional)ÚurlparseÚ
urlunparseÚurljoiné   )Úget_versionc                   óü  — e Zd ZdZ	 	 	 ddee         dedee         ded	ef
d
„Zdedefd„Z	ddee         de
eef         fd„Z	 	 	 	 ddede
eef         dee
eef                  dee         dee         d	ee         dej        fd„Z	 	 	 	 ddedee
eef                  dee         dee         d	ee         dej        fd„Z	 	 	 	 ddedee
eef                  dee         dee         d	ee         dej        fd„ZdS )Ú
HttpClientz0HTTP client with retry logic and error handling.Né   ç      à?Úapi_keyÚapi_urlÚtimeoutÚmax_retriesÚbackoff_factorc                 óL   — || _         || _        || _        || _        || _        d S ©N)r   r   r   r   r   )Úselfr   r   r   r   r   s         úb/home/div/.hermes/hermes-agent/venv/lib/python3.11/site-packages/firecrawl/v2/utils/http_client.pyÚ__init__zHttpClient.__init__   s/   € ð ˆŒØˆŒØˆŒØ&ˆÔØ,ˆÔÐÐó    ÚendpointÚreturnc                 óJ  — t          | j        ¦  «        }t          |¦  «        }|j        ri|j        pd}|j        pd|j        pdk    r&t          |j        pd|j        |d|j        df¦  «        S t          |j        pd|j        |d|j        df¦  «        S | j                             d¦  «        r| j        n	| j        › d�}| 	                    d¦  «        rAt          d|› �¦  «        }|j        pd}t          |j        pd|j        |d|j        df¦  «        S t          ||¦  «        S )Nú/Ú Úhttpsz//zhttps:)r   r   ÚnetlocÚpathÚhostnamer   ÚschemeÚqueryÚendswithÚ
startswithr   )r   r   ÚbaseÚepr!   Úbase_strÚep2s          r   Ú
_build_urlzHttpClient._build_url   s;  € Ý˜œÑ%Ô%ˆÝ�hÑÔˆð Œ9ð 	]à”7�>˜cˆDØ”Ð!˜r t¤}Ð':¸Ò;Ð;Ý! 4¤;Ð#9°'¸4¼;ÈÈbÐRTÔRZÐ\^Ð"_Ñ`Ô`Ð`å˜tœ{Ð5¨g°t´{ÀDÈ"ÈbÌhÐXZÐ[Ñ\Ô\Ð\ð $(¤<×#8Ò#8¸Ñ#=Ô#=ÐU�4”<�<ÀdÄlÐCUÐCUÐCUˆà×Ò˜tÑ$Ô$ð 	^ÝÐ. HÐ.Ð.Ñ/Ô/ˆCØ”8�?˜sˆDÝ˜tœ{Ð5¨g°t´{ÀDÈ"ÈcÌiÐY[Ð\Ñ]Ô]Ð]Ý�x Ñ*Ô*Ð*r   Úidempotency_keyc                 óD   — ddi}| j         rd| j         › �|d<   |r||d<   |S )z!Prepare headers for API requests.zContent-Typezapplication/jsonzBearer ÚAuthorizationzx-idempotency-key)r   )r   r,   Úheaderss      r   Ú_prepare_headerszHttpClient._prepare_headers4   sJ   € ð Ð.ð
ˆð Œ<ð 	@Ø'?°´Ð'?Ð'?ˆG�OÑ$àð 	;Ø+:ˆGÐ'Ñ(àˆr   Údatar/   Úretriesc                 ó.  — |€|                       ¦   «         }|€| j        }|€| j        }|€| j        }dt          › �|d<   |                      |¦  «        }d}t          d|¦  «        }	t          |	¦  «        D ]�}
	 t          j	        ||||¬¦  «        }|j
        dk    r$|
|	dz
  k     rt          j        |d|
z  z  ¦  «         ŒJ|c S # t          j        $ r1}|}|
|	dz
  k    r|‚t          j        |d|
z  z  ¦  «         Y d}~Œ‰d}~ww xY w|pt          d¦  «        ‚)	z%Make a POST request with retry logic.Nzpython-sdk@Úoriginr	   )r/   Újsonr   éö  é   z Unexpected error in POST request)r0   r   r   r   Úversionr+   ÚmaxÚrangeÚrequestsÚpostÚstatus_codeÚtimeÚsleepÚRequestExceptionÚ	Exception)r   r   r1   r/   r   r2   r   ÚurlÚlast_exceptionÚnum_attemptsÚattemptÚresponseÚes                r   r<   zHttpClient.postB   sr  € ð ˆ?Ø×+Ò+Ñ-Ô-ˆGØˆ?Ø”lˆGØˆ?ØÔ&ˆGØÐ!Ø!Ô0ˆNà0¥wÐ0Ð0ˆˆX‰à�oŠo˜hÑ'Ô'ˆàˆÝ˜1˜g‘”ˆå˜\Ñ*Ô*ð 	<ð 	<ˆGð<Ý#œ=ØØ#ØØ#ð	ñ ô �ð Ô'¨3Ò.Ð.Ø °Ñ!1Ò1Ð1Ýœ
 >°Q¸'±\Ñ#BÑCÔCÐCØ à���øåÔ,ð <ð <ð <Ø!"�Ø˜l¨QÑ.Ò.Ð.Ø�GÝ”
˜>¨Q°'©\Ñ:Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;øøøøð	<øøøð ÐM¥	Ð*LÑ MÔ MÐMs   Á8ACÂ?CÃDÃ'C>Ã>Dc                 ó  — |€|                       ¦   «         }|€| j        }|€| j        }|€| j        }|                      |¦  «        }d}t          d|¦  «        }t          |¦  «        D ]�}		 t          j        |||¬¦  «        }
|
j	        dk    r$|	|dz
  k     rt          j        |d|	z  z  ¦  «         ŒI|
c S # t          j        $ r1}|}|	|dz
  k    r|‚t          j        |d|	z  z  ¦  «         Y d}~Œˆd}~ww xY w|pt          d¦  «        ‚)z$Make a GET request with retry logic.Nr	   ©r/   r   r6   r7   zUnexpected error in GET request)r0   r   r   r   r+   r9   r:   r;   Úgetr=   r>   r?   r@   rA   ©r   r   r/   r   r2   r   rB   rC   rD   rE   rF   rG   s               r   rJ   zHttpClient.getu   s^  € ð ˆ?Ø×+Ò+Ñ-Ô-ˆGØˆ?Ø”lˆGØˆ?ØÔ&ˆGØÐ!Ø!Ô0ˆNà�oŠo˜hÑ'Ô'ˆàˆÝ˜1˜g‘”ˆå˜\Ñ*Ô*ð 	<ð 	<ˆGð<Ý#œ<ØØ#Ø#ðñ ô �ð Ô'¨3Ò.Ð.Ø °Ñ!1Ò1Ð1Ýœ
 >°Q¸'±\Ñ#BÑCÔCÐCØ à���øåÔ,ð <ð <ð <Ø!"�Ø˜l¨QÑ.Ò.Ð.Ø�GÝ”
˜>¨Q°'©\Ñ:Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;øøøøð	<øøøð ÐL¥	Ð*KÑ LÔ LÐLó   Á+AB5Â1B5Â5C5Ã'C0Ã0C5c                 ó  — |€|                       ¦   «         }|€| j        }|€| j        }|€| j        }|                      |¦  «        }d}t          d|¦  «        }t          |¦  «        D ]�}		 t          j        |||¬¦  «        }
|
j	        dk    r$|	|dz
  k     rt          j        |d|	z  z  ¦  «         ŒI|
c S # t          j        $ r1}|}|	|dz
  k    r|‚t          j        |d|	z  z  ¦  «         Y d}~Œˆd}~ww xY w|pt          d¦  «        ‚)z'Make a DELETE request with retry logic.Nr	   rI   r6   r7   z"Unexpected error in DELETE request)r0   r   r   r   r+   r9   r:   r;   Údeleter=   r>   r?   r@   rA   rK   s               r   rN   zHttpClient.delete¤   s^  € ð ˆ?Ø×+Ò+Ñ-Ô-ˆGØˆ?Ø”lˆGØˆ?ØÔ&ˆGØÐ!Ø!Ô0ˆNà�oŠo˜hÑ'Ô'ˆàˆÝ˜1˜g‘”ˆå˜\Ñ*Ô*ð 	<ð 	<ˆGð<Ý#œ?ØØ#Ø#ðñ ô �ð Ô'¨3Ò.Ð.Ø °Ñ!1Ò1Ð1Ýœ
 >°Q¸'±\Ñ#BÑCÔCÐCØ à���øåÔ,ð <ð <ð <Ø!"�Ø˜l¨QÑ.Ò.Ð.Ø�GÝ”
˜>¨Q°'©\Ñ:Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;øøøøð	<øøøð ÐO¥	Ð*NÑ OÔ OÐOrL   )Nr   r   r   )NNNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚstrÚfloatÚintr   r+   r   r0   r   r;   ÚResponser<   rJ   rN   © r   r   r   r      s{  € € € € € Ø:Ð:ð $(ØØ #ð-ð -à˜#”ð-ð ð-ð ˜%”ð	-ð
 ð-ð ð-ð -ð -ð -ð+ 3ð +¨3ð +ð +ð +ð +ð,ð °¸´ð ÈÈcÐSVÈhÌð ð ð ð ð$ -1Ø#'Ø!%Ø*.ð1Nð 1Nàð1Nð �3˜�8Œnð1Nð ˜$˜s C˜xœ.Ô)ð	1Nð
 ˜%”ð1Nð ˜#”ð1Nð ! œð1Nð 
Ô	ð1Nð 1Nð 1Nð 1Nðl -1Ø#'Ø!%Ø*.ð-Mð -Màð-Mð ˜$˜s C˜xœ.Ô)ð-Mð ˜%”ð	-Mð
 ˜#”ð-Mð ! œð-Mð 
Ô	ð-Mð -Mð -Mð -Mðd -1Ø#'Ø!%Ø*.ð-Pð -Pàð-Pð ˜$˜s C˜xœ.Ô)ð-Pð ˜%”ð	-Pð
 ˜#”ð-Pð ! œð-Pð 
Ô	ð-Pð -Pð -Pð -Pð -Pð -Pr   r   )rR   r>   Útypingr   r   r   Úurllib.parser   r   r   r;   r
   r8   r   rW   r   r   ú<module>rZ      sÂ   ððð ð €€€Ø &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $à
ˆ+‰-Œ-€ðDPð DPð DPð DPð DPñ DPô DPð DPð DPð DPr   