
    i2                         d Z ddlZddlZddlZddlmZmZmZ ddlZddl	m
Z
  ej        e          Z G d de
          ZdS )z=Browserbase cloud browser provider (direct credentials only).    N)AnyDictOptional)CloudBrowserProviderc                       e Zd ZdZdefdZdefdZdee	ee
f                  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 )BrowserbaseProvideru  Browserbase (https://browserbase.com) cloud browser backend.

    This provider requires direct BROWSERBASE_API_KEY and BROWSERBASE_PROJECT_ID
    credentials.  Managed Nous gateway support has been removed — the Nous
    subscription now routes through Browser Use instead.
    returnc                     dS )NBrowserbase selfs    H/home/ubuntu/.hermes/hermes-agent/tools/browser_providers/browserbase.pyprovider_namez!BrowserbaseProvider.provider_name   s    }    c                 .    |                                  d uS N)_get_config_or_noner   s    r   is_configuredz!BrowserbaseProvider.is_configured   s    ''))55r   c                     t           j                            d          }t           j                            d          }|r9|r7||t           j                            dd                              d          dS d S )NBROWSERBASE_API_KEYBROWSERBASE_PROJECT_IDBROWSERBASE_BASE_URLzhttps://api.browserbase.com/)api_key
project_idbase_url)osenvirongetrstrip)r   r   r   s      r   r   z'BrowserbaseProvider._get_config_or_none!   sy    *..!677Z^^$<==
 	z 	"(JNN+AC`aahhilmm  
 tr   c                 P    |                                  }|t          d          |S )NzZBrowserbase requires BROWSERBASE_API_KEY and BROWSERBASE_PROJECT_ID environment variables.)r   
ValueError)r   configs     r   _get_configzBrowserbaseProvider._get_config,   s6    ))++>)   r   task_idc                 8   |                                  }t          j                            dd                                          dk    }t          j                            dd                                          dk    }t          j                            dd                                          dk    }t          j                            d          }dddddd	}d
|d         i}|rd|d<   |rG	 t          |          }	|	dk    r|	|d<   n+# t          $ r t                              d|           Y nw xY w|rd|d<   |rddi|d<   d|d         d}
t          j
        |d          d|
|d          }d}d}|j        dk    r|rSd}t                              d           |                    dd            t          j
        |d          d|
|d          }|j        dk    rU|rSd}t                              d           |                    dd            t          j
        |d          d|
|d          }|j        st          d|j         d|j                   |                                }d| d t#          j                    j        d d!          }|r|sd|d<   |rd|d"<   |r|sd|d#<   |r	d|v rd|d$<   d%                    d& |                                D                       }t                              d'||           ||d(         |d)         |d*S )+NBROWSERBASE_PROXIEStruefalseBROWSERBASE_ADVANCED_STEALTHBROWSERBASE_KEEP_ALIVEBROWSERBASE_SESSION_TIMEOUTTF)basic_stealthproxiesadvanced_stealth
keep_alivecustom_timeout	projectIdr   	keepAliver   timeoutz-Invalid BROWSERBASE_SESSION_TIMEOUT value: %sr/   advancedStealthbrowserSettingsapplication/jsonr   )Content-TypeX-BB-API-Keyr   z/v1/sessions   headersjsonr5   i  zhkeepAlive may require paid plan (402), retrying without it. Sessions may timeout during long operations.zYProxies unavailable (402), retrying without proxies. Bot detection may be less effective.z&Failed to create Browserbase session:  hermes__   r0   r1   r2   z, c              3   $   K   | ]\  }}||V  d S r   r   ).0kvs      r   	<genexpr>z5BrowserbaseProvider.create_session.<locals>.<genexpr>   s+      LLda!LLLLLLLr   z0Created Browserbase session %s with features: %sid
connectUrl)session_namebb_session_idcdp_urlfeatures)r%   r   r   r    lowerintr#   loggerwarningrequestspoststatus_codepopokRuntimeErrortextr>   uuiduuid4hexjoinitemsinfo)r   r&   r$   enable_proxiesenable_advanced_stealthenable_keep_alivecustom_timeout_msfeatures_enabledsession_configtimeout_valr=   responseproxies_fallbackkeepalive_fallbacksession_datarJ   feature_strs                    r   create_sessionz"BrowserbaseProvider.create_session5   s$   !!## (=vFFLLNNRYY"$*..1OQX"Y"Y"_"_"a"aek"kJNN+CVLLRRTTX__JNN+HII " %#
 
 .9&:N,O 	/*.N;' 	cc!"344??0;N9- c c cNPabbbbbc  	-(,N9%" 	J1BD0IN,- /"9-
 

 =j!///	
 
 
 !" 3&&  %)"C   "";555#=j)777#'	   #s**~*#' ;   ""9d333#=j)777#'	   { 	:': :*2-: :  
  }}AAA4:<<+;BQB+?AA 	/"2 	/*.Y'" 	837/0 	2%7 	2-1\* 	6n!<!<15-.iiLL.>.D.D.F.FLLLLLFVabbb ))$/#L1(	
 
 	
s   2D %D54D5
session_idc                    	 |                                  }n,# t          $ r t                              d|           Y dS w xY w	 t	          j        |d          d| |d         dd|d         d	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)Nu;   Cannot close Browserbase session %s — missing credentialsFr   /v1/sessions/r   r8   r:   r9   r   REQUEST_RELEASEr3   status
   r<   )         z*Successfully closed Browserbase session %sTz(Failed to close session %s: HTTP %s - %srt   z,Exception closing Browserbase session %s: %s)r%   r#   rP   rQ   rR   rS   rT   debugrX   	Exceptionerror)r   rl   r$   rf   es        r   close_sessionz!BrowserbaseProvider.close_session   sY   	%%''FF 	 	 	NNXZdeee55		}*%@@J@@$*9$5$6 
 "(!5/    H #66I:VVVt>(M$3$'	   u 	 	 	LLGUVWWW55555	s-    %A A AC /C 
DC<<DNc                 @   |                                  }|t                              d|           d S 	 t          j        |d          d| |d         dd|d         dd	d
           d S # t
          $ r'}t                              d||           Y d }~d S d }~ww xY w)NuG   Cannot emergency-cleanup Browserbase session %s — missing credentialsr   rn   r   r8   ro   r   rp   rq      r<   z7Emergency cleanup failed for Browserbase session %s: %s)r   rP   rQ   rR   rS   rx   rw   )r   rl   r$   rz   s       r   emergency_cleanupz%BrowserbaseProvider.emergency_cleanup   s    ))++>NNdfpqqqF	cM*%@@J@@$*9$5$6 
 "(!5/         	c 	c 	cLLRT^`abbbbbbbbb	cs   5A, ,
B6BB)__name__
__module____qualname____doc__strr   boolr   r   r   r   r   r%   objectrk   r{   r~   r   r   r   r   r      s        s    6t 6 6 6 6	Xd38n%= 	 	 	 	T#s(^    l
c l
d3;.? l
 l
 l
 l
\! ! ! ! ! !FcC cD c c c c c cr   r   )r   loggingr   rY   typingr   r   r   rR   tools.browser_providers.baser   	getLoggerr   rP   r   r   r   r   <module>r      s    C C  				  & & & & & & & & & &  = = = = = =		8	$	$Jc Jc Jc Jc Jc. Jc Jc Jc Jc Jcr   