
    Ki'                        U d Z ddl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 ddlmZ ddlmZ  ej        e          Zi Zeeef         ed<    ej                    Zded	efd
Zded	dfdZde	j        d	efdZ G d de          ZdS )z#Browserbase cloud browser provider.    N)AnyDictOptional)CloudBrowserProvider)resolve_managed_tool_gateway)managed_nous_tools_enabled_pending_create_keystask_idreturnc                     t           5  t                              |           }|r|cd d d            S dt          j                    j         }|t          | <   |cd d d            S # 1 swxY w Y   d S )Nzbrowserbase-session-create:)_pending_create_keys_lockr	   getuuiduuid4hex)r
   existingcreateds      @/home/ubuntu/hermes-agent/tools/browser_providers/browserbase.py!_get_or_create_pending_create_keyr      s    	"  '++G44 	       
 C
0@BB(/W%                 s   A&&A&&A*-A*c                 |    t           5  t                              | d            d d d            d S # 1 swxY w Y   d S N)r   r	   pop)r
   s    r   _clear_pending_create_keyr      s    	" 0 0  $///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0s   155responsec                 ~   | j         dk    rdS | j         dk    rdS 	 |                                 }n# t          $ r Y dS w xY wt          |t                    sdS |                    d          }t          |t                    sdS t          |                    d          pd                                          }d|v S )	Ni  Ti  Ferrormessage zalready in progress)status_codejson	Exception
isinstancedictr   strlower)r   payloadr   r   s       r   #_should_preserve_pending_create_keyr'   $   s    s""ts""u--//   uu gt$$ uKK  EeT"" u%))I&&,"--3355G G++s   1 
??c                       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 )BrowserbaseProviderz<Browserbase (https://browserbase.com) cloud browser backend.r   c                     dS )NBrowserbase selfs    r   provider_namez!BrowserbaseProvider.provider_name>   s    }    c                 .    |                                  d uS r   )_get_config_or_noner-   s    r   is_configuredz!BrowserbaseProvider.is_configuredA   s    ''))55r0   c                 d   t           j                            d          }t           j                            d          }|r:|r8||t           j                            dd                              d          ddS t	          d          }|d S |j        d	|j                            d          d
dS )NBROWSERBASE_API_KEYBROWSERBASE_PROJECT_IDBROWSERBASE_BASE_URLzhttps://api.browserbase.com/F)api_key
project_idbase_urlmanaged_modebrowserbasemanagedT)osenvironr   rstripr   nous_user_tokengateway_origin)r.   r9   r:   r>   s       r   r2   z'BrowserbaseProvider._get_config_or_noneH   s    *..!677Z^^$<==
 	z 	"(JNN+AC`aahhilmm %	   /}==?4 .#.55c:: 	
 
 	
r0   c                 t    |                                  }|!d}t                      rd}t          |          |S )NzSBrowserbase requires direct BROWSERBASE_API_KEY/BROWSERBASE_PROJECT_ID credentials.zBrowserbase requires either direct BROWSERBASE_API_KEY/BROWSERBASE_PROJECT_ID credentials or a managed Browserbase gateway configuration.)r2   r   
ValueError)r.   configr   s      r   _get_configzBrowserbaseProvider._get_config^   sP    ))++>e  *++ R  W%%%r0   r
   c                 H   |                                  }t          |                    d                    }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}|rt          |          |d<   t          j        |d          d||	d          }d	}d	}|j        dk    r|s|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?|rt!          |          st#          |           t%          d|j         d |j                   |                                }|rt#          |           d!| d"t+          j                    j        d d#          }|r|j                            d$          n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 ).Nr<   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: %srP   advancedStealthbrowserSettingsapplication/jsonr9   )Content-TypeX-BB-API-KeyzX-Idempotency-Keyr;   z/v1/sessions   headersr    rV   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__   zx-external-call-idrQ   rR   rS   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Lr0   z0Created Browserbase session %s with features: %sid
connectUrl)session_namebb_session_idcdp_urlfeaturesexternal_call_id)rG   boolr   r?   r@   r%   intrE   loggerwarningr   requestspostr   r   okr'   r   RuntimeErrortextr    r   r   r   r^   joinitemsinfo)r.   r
   rF   r<   enable_proxiesenable_advanced_stealthenable_keep_alivecustom_timeout_msfeatures_enabledsession_configtimeout_valr^   r   proxies_fallbackkeepalive_fallbacksession_datarj   rn   feature_strs                      r   create_sessionz"BrowserbaseProvider.create_sessionl   s   !!##FJJ~6677 (=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-
 
  	V+LW+U+UG'(=j!///	
 
 
 !" 3&&|&  %)"C   "";555#=j)777#'	   #s**~*#' ;   ""9d333#=j)777#'	   { 	 3$G$Q$Q 3)'222:': :*2-: :  
  }} 	/%g...AAA4:<<+;BQB+?AAIU_8+//0DEEE[_ 	/"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( 0
 
 	
s   D/ /%EE
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/r9   rY   r[   rZ   r:   REQUEST_RELEASErT   status
   r]   )         z*Successfully closed Browserbase session %sTz(Failed to close session %s: HTTP %s - %sr   z,Exception closing Browserbase session %s: %s)rG   rE   rq   rr   rs   rt   r   debugrw   r!   r   )r.   r   rF   r   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;   r   r9   rY   r   r:   r   r      r]   z7Emergency cleanup failed for Browserbase session %s: %s)r2   rq   rr   rs   rt   r!   r   )r.   r   rF   r   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__r$   r/   ro   r3   r   r   r   r2   rG   objectr   r   r   r,   r0   r   r)   r)   ;   s       FFs    6t 6 6 6 6
Xd38n%= 
 
 
 
,T#s(^    u
c u
d3;.? u
 u
 u
 u
n! ! ! ! ! !FcC cD c c c c c cr0   r)   )r   loggingr?   	threadingr   typingr   r   r   rs   tools.browser_providers.baser   tools.managed_tool_gatewayr   tools.tool_backend_helpersr   	getLoggerr   rq   r	   r$   __annotations__Lockr   r   r   Responsero   r'   r)   r,   r0   r   <module>r      s   ) ) )  				      & & & & & & & & & &  = = = = = = C C C C C C A A A A A A		8	$	$') d38n ) ) )*IN,, s s    0s 0t 0 0 0 0
,(2C , , , , ,.^c ^c ^c ^c ^c. ^c ^c ^c ^c ^cr0   