Ë
    âß²jú  ã                  ón   — d Z ddlmZ ddlZddlZddlmZmZmZm	Z	 ddl
Z
ddlmZ h d£Z G d„ de«      Zy)	ae  Shared base for the bundled cloud-browser plugins. Every vendor speaks the same REST shape
(POST to create a session, one request to release it); :class:`CloudBrowserProvider` owns that
lifecycle, subclasses supply attributes + hooks. Logs go to the subclass module's logger with the
vendor label so emitted text matches the pre-refactor per-vendor modules.é    )ÚannotationsN)ÚAnyÚDictÚListÚOptional)ÚBrowserProvider>   éÈ   éÉ   éÌ   c                  ó@  — e Zd ZU dZded<   ded<   ded<   ded<   dZded<   d	Zd
ed<   g Zded<   dZded<   d	Z	d
ed<   e
d"d„«       Ze
d"d„«       Ze
d#d„«       Zd$d„Zd%d„Zd&d„Zd'd„Zd'd„Zd(d„Zd)d„Zed*d„«       Zddœ	 	 	 	 	 	 	 	 	 d+d„Zd,d„Zd-d„Zd.d „Zd%d!„Zy	)/ÚCloudBrowserProvidera  Subclasses set ``provider_id``/``label``, ``release_method``/``release_path`` (``{session_id}``
    placeholder appended to ``config["base_url"]``), implement ``_get_config_or_none()`` and
    ``_headers(config)``, and build ``create_session`` on ``_post_create``/``_check_created``.ÚstrÚprovider_idÚlabelÚrelease_methodÚrelease_pathÚ Úmissing_credentials_errorNzOptional[str]Ú	setup_tagzList[Dict[str, str]]Úsetup_env_varsÚcreate_label_suffixÚclose_fail_fmtc                ó   — | j                   S ©N)r   ©Úselfs    ú</home/ubuntu/.hermes/hermes-agent/plugins/browser/_common.pyÚnamezCloudBrowserProvider.name"   s   € à×ÑÐó    c                ó   — | j                   S r   )r   r   s    r   Údisplay_namez!CloudBrowserProvider.display_name&   s   € à�z‰zÐr   c                óR   — t        j                  t        | «      j                  «      S r   )ÚloggingÚ	getLoggerÚtypeÚ
__module__r   s    r   Ú_logzCloudBrowserProvider._log*   s   € ä× Ñ ¤ d£×!6Ñ!6Ó7Ð7r   c                ó&   — | j                  «       d uS r   )Ú_get_config_or_noner   s    r   Úis_availablez!CloudBrowserProvider.is_available.   s   € Ø×'Ñ'Ó)°Ð5Ð5r   c                ó   — t         ‚r   ©ÚNotImplementedErrorr   s    r   r)   z(CloudBrowserProvider._get_config_or_none1   ó   € Ü!Ð!r   c                óT   — | j                  «       }|€t        | j                  «      ‚|S r   )r)   Ú
ValueErrorr   ©r   Úconfigs     r   Ú_get_configz CloudBrowserProvider._get_config4   s+   € Ø×)Ñ)Ó+ˆØˆ>Ü˜T×;Ñ;Ó<Ð<Øˆr   c                ó   — t         ‚r   r,   r1   s     r   Ú_headerszCloudBrowserProvider._headers:   r.   r   c                ó$   — | j                  |«      S r   )r5   r1   s     r   Ú_release_headersz%CloudBrowserProvider._release_headers=   s   € Ø�}‰}˜VÓ$Ð$r   c                 ó   — y r   © r1   s     r   Ú_release_bodyz"CloudBrowserProvider._release_body@   s   € Ør   c                óâ   — | j                  |«      |dœ}| j                  |«      }|�||d<   |d   › | j                  j                  |¬«      › �} t	        t
        | j                  «      |fi |¤ŽS )N)ÚheadersÚtimeoutÚjsonÚbase_url)Ú
session_id)r7   r:   r   ÚformatÚgetattrÚrequestsr   )r   r2   r@   r=   ÚkwargsÚbodyÚurls          r   Ú_releasezCloudBrowserProvider._releaseC   s   € Ø-1×-BÑ-BÀ6Ó-JÐW^Ñ!_ˆØ×!Ñ! &Ó)ˆØÐØ!ˆF�6‰NØ˜
Ñ#Ð$ T×%6Ñ%6×%=Ñ%=ÈÐ%=Ó%TÐ$UÐVˆØ5Œw”x ×!4Ñ!4Ó5°cÑD¸VÑDÐDr   c                óP   — d| › dt        j                  «       j                  d d › �S )NÚhermes_Ú_é   )ÚuuidÚuuid4Úhex)Útask_ids    r   Ú_session_namez"CloudBrowserProvider._session_nameK   s)   € à˜˜	 ¤4§:¡:£<×#3Ñ#3°B°QÐ#7Ð"8Ð9Ð9r   T)Úwrap_errorsc               ó¨   — 	 t        j                  |||d¬«      S # t         j                  $ r#}|s‚ t        | j                  › d|› �«      |‚d}~ww xY w)u†   POST the create request; network failures â†’ RuntimeError unless the managed gateway
        caller needs the raw exception to retry.é   )r<   r>   r=   z API connection failed: N)rC   ÚpostÚRequestExceptionÚRuntimeErrorr   )r   rF   r<   ÚpayloadrQ   Úexcs         r   Ú_post_createz!CloudBrowserProvider._post_createO   sY   € ð
	VÜ—=‘= ¨g¸GÈRÔPÐPøÜ×(Ñ(ò 	VÙØÜ $§*¡* Ð-EÀcÀUÐKÓLÐRUÐUûð	Vús   ‚ ›A®AÁAc           	     ó˜   — |j                   s>t        d| j                  › | j                  › d|j                  › d|j
                  › �«      ‚y )NzFailed to create z
 session: Ú )ÚokrV   r   r   Ústatus_codeÚtext)r   Úresponses     r   Ú_check_createdz#CloudBrowserProvider._check_created[   sN   € Ø�{Š{ÜØ# D§J¡J <°×0HÑ0HÐ/IÈØ×'Ñ'Ð(¨¨(¯-©-¨ð:ó;ð ;ð r   c                óN  — 	 | j                  «       }	 | j                  ||d¬«      }|j                  t        v r(| j                  j                  d| j                  |«       y| j                  j                  | j                  xs d| j                  › d�||j                  |j                  d d	 «       y# t        $ r* | j                  j                  d| j                  |«       Y yw xY w# t        $ r2}| j                  j                  d
| j                  ||«       Y d }~yd }~ww xY w)Nu2   Cannot close %s session %s â€” missing credentialsFé
   ©r=   z!Successfully closed %s session %sTzFailed to close z session %s: HTTP %s - %sr	   z#Exception closing %s session %s: %s)r3   r0   r'   Úwarningr   rG   r]   Ú	_CLOSE_OKÚdebugr   r^   Ú	ExceptionÚerror)r   r@   r2   r_   Úes        r   Úclose_sessionz"CloudBrowserProvider.close_sessiona   s	  € ð	Ø×%Ñ%Ó'ˆFð	Ø—}‘} V¨ZÀ�}ÓDˆHØ×#Ñ#¤yÑ0Ø—	‘	—‘Ð CÀTÇZÁZÐQ[Ô\ØØ�I‰I×ÑØ×#Ñ#Ò_Ð)9¸$¿*¹*¸ÐE^Ð'_Ø˜H×0Ñ0°(·-±-ÀÀÐ2EôGð øô ò 	Ø�I‰I×ÑÐRÐTX×T^ÑT^Ð`jÔkÙð	ûô ò 	Ø�I‰I�O‰OÐAÀ4Ç:Á:ÈzÐ[\Ô]Üûð	ús0   ‚B3 “AC) Á!AC) Â30C&Ã%C&Ã)	D$Ã2(DÄD$c                ó  — | j                  «       }|€(| j                  j                  d| j                  |«       y 	 | j	                  ||d¬«       y # t
        $ r2}| j                  j                  d| j                  ||«       Y d }~y d }~ww xY w)Nu>   Cannot emergency-cleanup %s session %s â€” missing credentialsé   rc   z.Emergency cleanup failed for %s session %s: %s)r)   r'   rd   r   rG   rg   rf   )r   r@   r2   ri   s       r   Úemergency_cleanupz&CloudBrowserProvider.emergency_cleanupt   s…   € Ø×)Ñ)Ó+ˆØˆ>Ø�I‰I×ÑØPÐRV×R\ÑR\Ð^hôð ð	iØ�M‰M˜& *°aˆMÕ8øÜò 	iØ�I‰I�O‰OÐLÈdÏjÉjÐZdÐfg×hÑhûð	iús   ¼A Á	BÁ(BÂBc           	     ó    — | j                   €y | j                  d| j                   | j                  D �cg c]  }t        |«      ‘Œ c}ddœS c c}w )NÚpaidÚbrowserbase)r   ÚbadgeÚtagÚenv_varsÚ
post_setup)r   r   r   Údict)r   Úvs     r   Úget_setup_schemaz%CloudBrowserProvider.get_setup_schema€   sJ   € Ø�>‰>Ð!Øà—J‘JØØ—>‘>Ø*.×*=Ñ*=Ö> Qœ˜a�Ò>à'ñ
ð 	
ùò ?s   ³A
)Úreturnr   )rx   zlogging.Logger)rx   Úbool)rx   zOptional[Dict[str, Any]])rx   úDict[str, Any])r2   rz   rx   úDict[str, str])r2   rz   rx   zOptional[Dict[str, object]])r2   rz   r@   r   r=   Úintrx   úrequests.Response)rO   r   rx   r   )
rF   r   r<   r{   rW   zDict[str, object]rQ   ry   rx   r}   )r_   r}   rx   ÚNone)r@   r   rx   ry   )r@   r   rx   r~   )Ú__name__r&   Ú__qualname__Ú__doc__Ú__annotations__r   r   r   r   r   Úpropertyr   r!   r'   r*   r)   r3   r5   r7   r:   rG   ÚstaticmethodrP   rY   r`   rj   rm   rw   r9   r   r   r   r      s  … ñbð ÓØƒJØÓØÓØ%'Ð˜sÓ'Ø#€Iˆ}Ó#Ø+-€NÐ(Ó-Ø!Ð˜Ó!Ø$(€N�MÓ(àò ó ð ð òó ðð ò8ó ð8ó6ó"óó"ó%óóEð ò:ó ð:ð eiñ
VØð
VØ!/ð
VØ:Kð
VØ]að
Và	ó
Vó;óó&
iô

r   r   )r�   Ú
__future__r   r#   rL   Útypingr   r   r   r   rC   Úagent.browser_providerr   re   r   r9   r   r   ú<module>rˆ      s5   ðñMõ
 #ã Û ß ,Ó ,ã å 2â€	ôw
˜?õ w
r   