
    i                     x    d Z ddlZddlZddlmZ ddlmZ ddlmZm	Z	  ej                  e      Z G d d      Zy)zA
Cloud sync service for sending events to the Browser Use cloud.
    N)	BaseEvent)CONFIG)TEMP_USER_IDDeviceAuthClientc                   b    e Zd ZdZddedz  defdZdeddfdZdeddfd	Z	dd
Z
ddedefdZy)	CloudSyncz3Service for syncing events to the Browser Use cloudNbase_urlallow_session_events_for_authc                     |xs t         j                  | _        t        | j                        | _        d | _        || _        d| _        t         j                  | _	        y )N)r	   F)
r   BROWSER_USE_CLOUD_API_URLr	   r   auth_client
session_idr
   auth_flow_activeBROWSER_USE_CLOUD_SYNCenabled)selfr	   r
   s      b/mnt/e/genesis-system/.venvs/browser-army/lib/python3.12/site-packages/browser_use/sync/service.py__init__zCloudSync.__init__   sI    >f>>$-%t}}=$ $$/'D$$$..$,    eventreturnc           	      `  K   	 | j                   sy|j                  dk(  r&t        |d      rt        |j                        | _        | j                  j                  r| j                  |       d{    y| j                  r0| j                  |       d{    |j                  dk(  r,d| _
        yt        j                  d|j                   d       yy7 f7 B# t        $ rG}t        j                  d|j                   dt        |      j                    d	| d
       Y d}~yd}~ww xY ww)z*Handle an event by sending it to the cloudNCreateAgentSessionEventidTzSkipping event z - user not authenticatedzFailed to handle z event: : )exc_info)r   
event_typehasattrstrr   r   r   is_authenticated_send_eventr
   r   loggerdebug	Exceptionerrortype__name__)r   r   es      r   handle_eventzCloudSync.handle_event   s    f
,,
 33t8L%((mDO ''


5
!!!**


5
!!!44!T LL?5#3#3"44MNO	 5 " " 
 f	<<#E$4$4#5Xd1g>N>N=OrRSQTU`d<eefsu   D.C D.AC 0C1C 5D.6 C CC 1D.2#C D.C C 	D+$=D&!D.&D++D.c           	        K   	 i }| j                   rW| j                   j                  rAt        |dd      }|t        k7  rUt	        |dt        | j                   j                               n*t        |d      rt        |dd      st	        |dt               | j                   r)|j                  | j                   j                                t        j                         4 d{   }|j                  d      }| j                   r/| j                   j                  r| j                   j                  |d<   |j                  | j                  j!                  d       dd|gi|d	
       d{   }|j"                  dk\  rFt$        j'                  d|j(                  j*                   d|j"                   d|j,                          ddd      d{    y7 7 l7 	# 1 d{  7  sw Y   yxY w# t        j.                  $ r t$        j'                  d|        Y yt        j0                  $ r
}Y d}~yd}~wt        j2                  $ r;}t$        j'                  d| dt5        |      j6                   d|        Y d}~yd}~wt8        $ r;}t$        j'                  d| dt5        |      j6                   d|        Y d}~yd}~ww xY ww)zSend event to cloud APIuser_idNjson)mode	device_id/z/api/v1/eventseventsg      $@)r,   headerstimeouti  z Failed to send sync event: POST  z - z'Event send timed out after 10 seconds: zHTTP error sending event r   zUnexpected error sending event )r   r    getattrr   setattrr   r+   r   updateget_headershttpxAsyncClient
model_dumpr.   postr	   rstripstatus_coder"   r#   requesturltextTimeoutExceptionConnectError	HTTPErrorr&   r'   r$   )r   r   r1   current_user_idclient
event_dataresponser(   s           r   r!   zCloudSync._send_event9   sn    .T7 4++<<eY5O,&UIs4#3#3#;#;<= 5)$GE9d,KUI|, NN4##//12 !  V!!v!.JD,,66#//99Z[[S!".1j\
"	 !  H s"\\()9)9)=)=(>a@T@T?UUXYaYfYfXgh     $ 
		 C	<<9%AB			 	 N	<<+E7"T!W5E5E4FbLMM	 T	<<1%47;K;K:LBqcRSSTs   K	CG/  G!G/ $BG)G*AGG/ GG/ K	G/ GG/ G, G#!G,(G/ +K	,G/ /+KK	K.K	3K	1I?:K	?K1K<K	KK	c                     d| _         y)z,Mark auth flow as active to allow all eventsTN)r   )r   s    r   set_auth_flow_activezCloudSync.set_auth_flow_active   s
    $r   show_instructionsc                   K   | j                   sy| j                  j                  r.ddl} |j                  t
              }|r|j                  d       y| j                  j                  | j                  |       d{   S 7 w)z#Authenticate with the cloud serviceFr   Nu/   ✅ Already authenticated! Skipping OAuth flow.T)agent_session_idrJ   )	r   r   r    logging	getLoggerr'   infoauthenticater   )r   rJ   rM   r"   s       r   rP   zCloudSync.authenticate   st      

 
&&Gh'6
KKAB
 ,,dooar,s	ss	ss   A<B>B?B)NF)r   N)T)r'   
__module____qualname____doc__r   boolr   r   r)   r!   rI   rP    r   r   r   r      se    :/cDj /PT /fY f4 f80TI 0T$ 0Tht t tr   r   )rS   rM   r8   bubusr   browser_use.configr   browser_use.sync.authr   r   rN   r'   r"   r   rU   r   r   <module>rY      s;       % @			8	$Qt Qtr   