+
    jHàj9  ã                  ó|   € R t ^ RIHt ^ RIt^ RIt^ RIHtHtHtH	t	 ^ RI
t
^ RIHt ^ RIHt 0 Rmt ! R R]4      tR# )	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)Úrequests_verifyc                  óz  € ] tR t^t$ RtR]R&   R]R&   R]R&   R]R&   RtR]R&   R	tR
]R&   . tR]R&   Rt	R]R&   R	t
R
]R&   ]R R l4       t]R R l4       t]R R l4       tR R ltR R ltR R ltR R ltR R ltR  R! ltR" R# lt]R$ R% l4       tR&R'/R( R) lltR* R+ ltR, R- ltR. R/ ltR0 R1 ltR2tR	# )3Ú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               ó   € V ^8„  d   QhRR/# ©é   Úreturnr   © )Úformats   "Ú</home/ubuntu/.hermes/hermes-agent/plugins/browser/_common.pyÚ__annotate__Ú!CloudBrowserProvider.__annotate__$   s   € ÷  ñ  �cñ  ó    c                	ó   € V P                   # ©N)r   ©Úselfs   &r   ÚnameÚCloudBrowserProvider.name#   s   € à×ÑÐr   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   r   (   s   € ÷ ñ ˜cñ r   c                	ó   € V P                   # r!   )r   r"   s   &r   Údisplay_nameÚ!CloudBrowserProvider.display_name'   s   € à�z‰zÐr   c               ó   € V ^8„  d   QhRR/# )r   r   zlogging.Loggerr   )r   s   "r   r   r   ,   s   € ÷ 8ñ 8�nñ 8r   c                	óT   € \         P                  ! \        V 4      P                  4      # r!   )ÚloggingÚ	getLoggerÚtypeÚ
__module__r"   s   &r   Ú_logÚCloudBrowserProvider._log+   s   € ä× Ò ¤ d£×!6Ñ!6Ó7Ð7r   c               ó   € V ^8„  d   QhRR/# )r   r   Úboolr   )r   s   "r   r   r   /   s   € ÷ 6ñ 6˜dñ 6r   c                	ó&   € V P                  4       R J# r!   )Ú_get_config_or_noner"   s   &r   Úis_availableÚ!CloudBrowserProvider.is_available/   s   € Ø×'Ñ'Ó)°Ð5Ð5r   c               ó   € V ^8„  d   QhRR/# ©r   r   zOptional[dict[str, Any]]r   )r   s   "r   r   r   2   s   € ÷ "ñ "Ð%=ñ "r   c                	ó   € \         hr!   ©ÚNotImplementedErrorr"   s   &r   r5   Ú(CloudBrowserProvider._get_config_or_none2   ó   € Ü!Ð!r   c               ó   € V ^8„  d   QhRR/# )r   r   údict[str, Any]r   )r   s   "r   r   r   5   s   € ÷ ñ ˜^ñ r   c                	óX   € V P                  4       pVf   \        V P                  4      hV# r!   )r5   Ú
ValueErrorr   ©r#   Úconfigs   & r   Ú_get_configÚ CloudBrowserProvider._get_config5   s+   € Ø×)Ñ)Ó+ˆØŠ>Ü˜T×;Ñ;Ó<Ð<Øˆr   c               ó    € V ^8„  d   QhRRRR/# ©r   rD   r@   r   údict[str, str]r   )r   s   "r   r   r   ;   s   € ÷ "ñ "˜~ð "°.ñ "r   c                	ó   € \         hr!   r;   rC   s   &&r   Ú_headersÚCloudBrowserProvider._headers;   r>   r   c               ó    € V ^8„  d   QhRRRR/# rH   r   )r   s   "r   r   r   >   s   € ÷ %ñ % ~ð %¸.ñ %r   c                	ó$   € V P                  V4      # r!   )rK   rC   s   &&r   Ú_release_headersÚ%CloudBrowserProvider._release_headers>   s   € Ø�}‰}˜VÓ$Ð$r   c               ó    € V ^8„  d   QhRRRR/# )r   rD   r@   r   zOptional[dict[str, object]]r   )r   s   "r   r   r   A   s   € ÷ ñ  Nð Ð7Rñ r   c                	ó   € R # r!   r   rC   s   &&r   Ú_release_bodyÚ"CloudBrowserProvider._release_bodyA   s   € Ùr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   rD   r@   Ú
session_idr   ÚtimeoutÚintr   úrequests.Responser   )r   s   "r   r   r   D   s/   € ÷ Eñ E˜~ð E¸3ð EÈð EÐQbñ Er   c                	ó  € R V P                  V4      RVR\        4       /pV P                  V4      pVe   WTR&   VR,           V P                  P	                  VR7       2p\        \        V P                  4      ! V3/ VB # )ÚheadersrW   ÚverifyÚjsonÚbase_url)rV   )rO   r   rS   r   r   ÚgetattrÚrequestsr   )r#   rD   rV   rW   ÚkwargsÚbodyÚurls   &&&&   r   Ú_releaseÚCloudBrowserProvider._releaseD   s�   € ð �t×,Ñ,¨VÓ4Ø�wØ”oÓ'ð"
ˆð
 ×!Ñ! &Ó)ˆØÒØ!�6‰NØ˜
Õ#Ð$ T×%6Ñ%6×%=Ñ%=ÈÐ%=Ó%TÐ$UÐVˆÜ”x ×!4Ñ!4Ô5°cÑD¸VÑDÐDr   c               ó    € V ^8„  d   QhRRRR/# )r   Útask_idr   r   r   )r   s   "r   r   r   S   s   € ÷ :ñ :˜sð : sñ :r   c                	óZ   € R V  R\         P                  ! 4       P                  R,           2# )Úhermes_Ú_:Né   N)ÚuuidÚuuid4Úhex)rg   s   &r   Ú_session_nameÚ"CloudBrowserProvider._session_nameR   s'   € à˜˜	 ¤4§:¢:£<×#3Ñ#3°BÕ#7Ð"8Ð9Ð9r   Úwrap_errorsTc          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r   rc   r   r[   rI   Úpayloadzdict[str, object]rq   r3   r   rY   r   )r   s   "r   r   r   V   s;   € ÷ 
Vñ 
VØð
VØ!/ð
VØ:Kð
VØ]að
Và	ñ
Vr   c               óÊ   €  \         P                  ! WV^\        4       R7      #   \         P                   d*   pT'       g   h \	        T P
                   RT 24      ThRp?ii ; i)u~   POST the create request; network failures â†’ RuntimeError unless the managed gateway
caller needs the raw exception to retry.)r[   r]   rW   r\   z API connection failed: N)r`   Úpostr   ÚRequestExceptionÚRuntimeErrorr   )r#   rc   r[   rs   rq   Úexcs   &&&&$ r   Ú_post_createÚ!CloudBrowserProvider._post_createV   s]   € ð
	VÜ—=’= ¸GÈRÔXgÓXiÔjÐjøÜ×(Ñ(ô 	VßØÜ $§*¡* Ð-EÀcÀUÐKÓLÐRUÐUûð	Vús   ‚!$ ¤A"¹$AÁA"c               ó    € V ^8„  d   QhRRRR/# )r   ÚresponserY   r   ÚNoner   )r   s   "r   r   r   b   s   € ÷ ;ñ ;Ð'8ð ;¸Tñ ;r   c           	     	ó¦   € VP                   '       g?   \        R V P                   V P                   RVP                   RVP
                   24      hR# )zFailed to create z
 session: Ú N)Úokrw   r   r   Ústatus_codeÚtext)r#   r|   s   &&r   Ú_check_createdÚ#CloudBrowserProvider._check_createdb   sP   € Ø�{�{ˆ{ÜØ# D§J¡J <°×0HÑ0HÐ/IÈØ×'Ñ'Ð(¨¨(¯-©-¨ð:ó;ð ;ñ r   c               ó    € V ^8„  d   QhRRRR/# )r   rV   r   r   r3   r   )r   s   "r   r   r   h   s   € ÷ ñ ¨ð °ñ r   c                	ór  €  V P                  4       p T P                  Y!^
R7      pTP                  \        9   d*   T P                  P                  RT P                  T4       R# T P                  P                  T P                  ;'       g    RT P                   R2YP                  TP                  R,          4       R#   \         d,    T P                  P                  R T P                  T4        R# i ; i  \         d3   pT P                  P                  RT P                  Y4        R	p?R# R	p?ii ; i)
u2   Cannot close %s session %s â€” missing credentialsF©rW   z!Successfully closed %s session %sTzFailed to close z session %s: HTTP %s - %s:NéÈ   Nz#Exception closing %s session %s: %sN)rE   rB   r0   Úwarningr   rd   r�   Ú	_CLOSE_OKÚdebugr   r‚   Ú	ExceptionÚerror)r#   rV   rD   r|   Úes   &&   r   Úclose_sessionÚ"CloudBrowserProvider.close_sessionh   s  € ð	Ø×%Ñ%Ó'ˆFð	Ø—}‘} VÀ�}ÓDˆHØ×#Ñ#¤yÔ0Ø—	‘	—‘Ð CÀTÇZÁZÐQ[Ô\ÙØ�I‰I×ÑØ×#Ñ#×_Ð_Ð)9¸$¿*¹*¸ÐE^Ð'_Ø×0Ñ0°(·-±-ÀÕ2EôGñ øô ô 	Ø�I‰I×ÑÐRÐTX×T^ÑT^Ð`jÔkÚð	ûô ô 	Ø�I‰I�O‰OÐAÀ4Ç:Á:ÈzÔ]Ýûð	ús5   ‚C  “AC9 Á$'C9 Â2C9 Ã 2C6Ã5C6Ã9D6Ä'D1Ä1D6c               ó    € V ^8„  d   QhRRRR/# )r   rV   r   r   r}   r   )r   s   "r   r   r   {   s   € ÷ 
iñ 
i¨Cð 
i°Dñ 
ir   c                	ó(  € V P                  4       pVf*   V P                  P                  RV P                  V4       R #  V P	                  W!^R7       R #   \
         d3   pT P                  P                  RT P                  Y4        R p?R # R p?ii ; i)Nu>   Cannot emergency-cleanup %s session %s â€” missing credentialsr‡   z.Emergency cleanup failed for %s session %s: %s)r5   r0   r‰   r   rd   rŒ   r‹   )r#   rV   rD   rŽ   s   &&  r   Úemergency_cleanupÚ&CloudBrowserProvider.emergency_cleanup{   s€   € Ø×)Ñ)Ó+ˆØŠ>Ø�I‰I×ÑØPÐRV×R\ÑR\Ð^hôñ ð	iØ�M‰M˜&°aˆMÖ8øÜô 	iØ�I‰I�O‰OÐLÈdÏjÉjÐZd×hÒhûð	iús   ¿A ÁBÁ'BÂBc               ó   € V ^8„  d   QhRR/# r9   r   )r   s   "r   r   r   ‡   s   € ÷ 

ñ 

Ð":ñ 

r   c                	ó²   € V P                   f   R # RV P                  RRRV P                   RV P                   Uu. uF  p\        V4      NK  	  upRR/# u upi )Nr$   ÚbadgeÚpaidÚtagÚenv_varsÚ
post_setupÚbrowserbase)r   r   r   Údict)r#   Úvs   & r   Úget_setup_schemaÚ%CloudBrowserProvider.get_setup_schema‡   sZ   € Ø�>‰>Ò!Ùà�D—J‘JØ�VØ�4—>‘>Ø¨$×*=Ò*=Ó>Ñ*= Qœ˜ažÑ*=Ñ>à˜-ð
ð 	
ùò ?s   ºAr   )Ú__name__r/   Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__r   r   r   r   r   Úpropertyr$   r(   r0   r6   r5   rE   rK   rO   rS   rd   Ústaticmethodro   ry   rƒ   r�   r“   rŸ   Ú__static_attributes__r   r   r   r
   r
      sñ   ‡ ñbð ÓØƒJØÓØÓØ%'Ð˜sÓ'Ø#€Iˆ}Ó#Ø+-€NÐ(Ó-Ø!Ð˜Ó!Ø$(€N�MÓ(àô ó ð ð ôó ðð ô8ó ð8õ6õ"õõ"õ%õõEð ô:ó ð:ð
VØdh÷
Võ;õõ&
i÷

ñ 

r   r
   >   rˆ   éÉ   éÌ   )r¤   Ú
__future__r   r,   rl   Útypingr   r   r   r   r`   Úagent.browser_providerr   Úagent.ssl_verifyr   rŠ   r
   r   r   r   Ú<module>r¯      s8   ðñMõ
 #ã Û ß ,Ó ,ã å 2Ý ,â€	ô}
˜?ö }
r   