
    ?jr                         d Z ddlZddlZddlZddlmZ ddlZddlmZ  ej	        e
          ZdZ G d de          ZdS )z!Firecrawl cloud browser provider.    N)Dict)CloudBrowserProviderzhttps://api.firecrawl.devc                       e Zd ZdZdefdZdefdZdefdZde	eef         fdZ
dede	eef         fdZd	edefd
Zd	eddfdZdS )FirecrawlProviderz8Firecrawl (https://firecrawl.dev) cloud browser backend.returnc                     dS )N	Firecrawl selfs    F/home/ubuntu/.hermes/hermes-agent/tools/browser_providers/firecrawl.pyprovider_namezFirecrawlProvider.provider_name   s    {    c                 Z    t          t          j                            d                    S )NFIRECRAWL_API_KEY)boolosenvirongetr   s    r   is_configuredzFirecrawlProvider.is_configured   s    BJNN#677888r   c                 L    t           j                            dt                    S )NFIRECRAWL_API_URL)r   r   r   	_BASE_URLr   s    r   _api_urlzFirecrawlProvider._api_url   s    z~~19===r   c                 r    t           j                            d          }|st          d          dd| dS )Nr   zYFIRECRAWL_API_KEY environment variable is required. Get your key at https://firecrawl.devzapplication/jsonzBearer )zContent-TypeAuthorization)r   r   r   
ValueError)r   api_keys     r   _headerszFirecrawlProvider._headers!   sT    *..!455 	8  
 /0w00
 
 	
r   task_idc                 Z   t          t          j                            dd                    }d|i}	 t	          j        |                                  d|                                 |d          }n*# t          j        $ r}t          d|           |d }~ww xY w|j
        st          d|j         d	|j                   |                                }d
| dt          j                    j        d d          }t"                              d|           ||d         |d         ddidS )NFIRECRAWL_BROWSER_TTL300ttlz/v2/browser   )headersjsontimeoutz!Firecrawl API connection failed: z,Failed to create Firecrawl browser session:  hermes__   z$Created Firecrawl browser session %sidcdpUrl	firecrawlT)session_namebb_session_idcdp_urlfeatures)intr   r   r   requestspostr   r   RequestExceptionRuntimeErrorokstatus_codetextr'   uuiduuid4hexloggerinfo)r   r    r$   bodyresponseexcdatar0   s           r   create_sessionz FirecrawlProvider.create_session-   sf   "*..!8%@@AA#(#,
	}==??///	  HH ( 	 	 	9C99 	
 { 	:': :*2-: :  
 }}AAA4:<<+;BQB+?AA:LIII )!$ZH~$d+	
 
 	
s   ?A3 3BBB
session_idc                    	 t          j        |                                  d| |                                 d          }|j        dv rt
                              d|           dS t
                              d||j        |j        d d                    d	S # t          $ r'}t
          
                    d
||           Y d }~d	S d }~ww xY w)N/v2/browser/
   r&   r(   >            z(Successfully closed Firecrawl session %sTz2Failed to close Firecrawl session %s: HTTP %s - %srK   Fz*Exception closing Firecrawl session %s: %s)r5   deleter   r   r:   r?   debugwarningr;   	Exceptionerror)r   rF   rB   es       r   close_sessionzFirecrawlProvider.close_sessionP   s    	==??<<
<<  H
 #66GTTTtH(M$3$'	   u 	 	 	LLEzSTUUU55555	s   A$B (/B 
C
#CC
Nc                 >   	 t          j        |                                  d| |                                 d           d S # t          $ r t
                              d|           Y d S t          $ r'}t
                              d||           Y d }~d S d }~ww xY w)NrH      rJ   uE   Cannot emergency-cleanup Firecrawl session %s — missing credentialsz5Emergency cleanup failed for Firecrawl session %s: %s)	r5   rN   r   r   r   r?   rP   rQ   rO   )r   rF   rS   s      r   emergency_cleanupz#FirecrawlProvider.emergency_cleanupf   s    		aO==??<<
<<     
  	p 	p 	pNNbdnoooooo 	a 	a 	aLLPR\^_`````````	as   A A %B,	B5BB)__name__
__module____qualname____doc__strr   r   r   r   r   r   objectrE   rT   rW   r
   r   r   r   r      s       BBs    9t 9 9 9 9># > > > >

$sCx. 

 

 

 

!
c !
d3;.? !
 !
 !
 !
F     ,
aC 
aD 
a 
a 
a 
a 
a 
ar   r   )r[   loggingr   r<   typingr   r5   tools.browser_providers.baser   	getLoggerrX   r?   r   r   r
   r   r   <module>rb      s    ' '  				         = = = = = =		8	$	$'	_a _a _a _a _a, _a _a _a _a _ar   