+
    iHàj™  ã                  óä   € R t ^ RIHt ^ RIt^ RIHtHt ^ RIHt ^ RI	H
t
HtHtHt ^ RIHt  ! R R]4      t ! R	 R
]4      tR R ltR R ltR R ltR tR R ltR R ltR R ltR R ltR# )a³  Login-backend contract + registry for the browser credential vault.

A ``LoginBackend`` lists login metadata (never secrets) and resolves ONE
password at fill time. External managers (1Password, Bitwarden) additionally
need a per-session unlock; ``resolve_password`` raises ``UnlockRequired``
while locked so the tool can ask the surface to prompt. Handles are
namespaced by ``prefix`` so ``backend_for_handle`` needs no lookup table.
)ÚannotationsN)ÚABCÚabstractmethod)ÚPath)ÚDictÚListÚOptionalÚSequence)ÚVaultItemMetac                  ó2   a € ] tR t^tRtR V 3R lltRtV ;t# )ÚUnlockRequiredzXThe backend is locked for this session; the surface must prompt for the master password.c               ó   € V ^8„  d   QhRR/# )é   ÚbackendÚLoginBackend© )Úformats   "Ú>/home/ubuntu/.hermes/hermes-agent/agent/vault_backends/base.pyÚ__annotate__ÚUnlockRequired.__annotate__   s   € ÷ ñ  ñ ó    c                	óL   <€ \         SV `  VP                   R 24       Wn        R# )z
 is lockedN)ÚsuperÚ__init__Údisplay_namer   )Úselfr   Ú	__class__s   &&€r   r   ÚUnlockRequired.__init__   s#   ø€ Ü‰Ñ˜G×0Ñ0Ð1°Ð<Ô=ØŽr   )r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   Ú__static_attributes__Ú__classcell__)r   s   @r   r   r      s   ø† Ùb÷ö r   r   c                  ó¶   € ] tR t^t$ R]R&   R]R&   R]R&   RtR]R&   R R	 ltR
 R lt]R R l4       t	]R R l4       t
]R R l4       tR R ltR R ltRtR# )r   ÚstrÚnamer   ÚprefixFÚboolÚneeds_unlockc               ó    € V ^8„  d   QhRRRR/# )r   Úhandler&   Úreturnr)   r   )r   s   "r   r   ÚLoginBackend.__annotate__"   s   € ÷ .ñ .˜3ð . 4ñ .r   c                	ó8   € VP                  V P                  4      # ©N)Ú
startswithr(   ©r   r,   s   &&r   ÚownsÚLoginBackend.owns"   s   € Ø× Ñ  §¡Ó-Ð-r   c               ó   € V ^8„  d   QhRR/# )r   r-   r)   r   )r   s   "r   r   r.   %   s   € ÷ ñ ˜Tñ r   c                	ó   € R # )Tr   ©r   s   &r   Úis_unlockedÚLoginBackend.is_unlocked%   s   € Ùr   c               ó   € V ^8„  d   QhRR/# )r   r-   zlist[VaultItemMeta]r   )r   s   "r   r   r.   )   s   € ÷ fñ fÐ/ñ fr   c                ó   € R# )zWMetadata only. Locked external backends return [] (the agent sees a lock hint instead).Nr   r7   s   &r   Ú
list_itemsÚLoginBackend.list_items(   ó   ‚ r   c               ó    € V ^8„  d   QhRRRR/# )r   r,   r&   r-   zOptional[VaultItemMeta]r   )r   s   "r   r   r.   -   s   € ×CÑC˜sÐCÐ'>ÑCr   c                	ó   € R # r0   r   r2   s   &&r   Úget_metaÚLoginBackend.get_meta,   s   € Ù@Cr   c               ó    € V ^8„  d   QhRRRR/# )r   r,   r&   r-   r   )r   s   "r   r   r.   0   s   € ÷ Gñ G sð G¨sñ Gr   c                ó   € R# )z8Server-side only; raises ``UnlockRequired`` when locked.Nr   r2   s   &&r   Úresolve_passwordÚLoginBackend.resolve_password/   r>   r   c               ó    € V ^8„  d   QhRRRR/# )r   r,   r&   r-   zOptional[str]r   )r   s   "r   r   r.   3   s   € ÷ ñ  #ð ¨-ñ r   c                ó   € R# )z‚Current one-time code for a login that stores a TOTP seed, else None (the user is asked).
Server-side only, like resolve_password.Nr   r2   s   &&r   Úresolve_otpÚLoginBackend.resolve_otp3   s   € ñ r   c               ó    € V ^8„  d   QhRRRR/# )r   r,   r&   r-   údict[str, str]r   )r   s   "r   r   r.   8   s   € ÷ ;ñ ; Sð ;¨^ñ ;r   c                ó(   € RV P                  V4      /# )z‹Full payload of a payment/address item (server-side only). External managers list only
logins, so the base returns the password-only shape.Úpassword)rE   r2   s   &&r   Úresolve_secretÚLoginBackend.resolve_secret8   s   € ð ˜D×1Ñ1°&Ó9Ð:Ð:r   r   N)r   r   r    r!   Ú__annotations__r*   r3   r8   r   r<   rA   rE   rI   rO   r#   r   r   r   r   r      so   ‡ Ø
ƒIØÓØƒKØ€L�$Óõ.õð ôfó ðfð ÜCó ØCàôGó ðGõ÷
;ñ ;r   r   c               ó0   € V ^8„  d   QhRRRRRRRRR	RR
R/# )r   ÚargvúSequence[str]ÚenvrL   Úsecretr&   ÚtimeoutÚfloatÚlabelr-   úsubprocess.CompletedProcessr   )r   s   "r   r   r   >   sA   € ÷ 
Hñ 
H ð 
H°~ð 
HÈsð 
HÐ]bð 
HØ!$ð
HØ)Dñ
Hr   c               ó   €  \         P                  ! \        V 4      WR,           RRRRVRR7	      #   \         P                   d   p\	        T RTR R	24      ThR
p?i\
         d   p\	        RT RT 24      ThR
p?ii ; i)ud   Run a manager CLI feeding *secret* on stdin (never argv, never env). Spawn/timeout â†’ RuntimeError.Ú
Túutf-8ÚreplaceF)rU   ÚinputÚcapture_outputÚtextÚencodingÚerrorsrW   Úcheckú unlock timed out after ú.0fÚsNúfailed to invoke ú: )Ú
subprocessÚrunÚlistÚTimeoutExpiredÚRuntimeErrorÚOSError)rS   rU   rV   rW   rY   Úexcs   &$$$$ r   Úrun_with_stdin_secretrq   >   s“   € ðHÜ�~Š~Ü�‹J˜C°¥}ÀTÐPTØ Y¸ÀuôNð 	Nøô ×$Ñ$ô VÜ˜e˜WÐ$<¸WÀS¸MÈÐKÓLÐRUÐUûÜô HÜÐ.¨u¨g°R¸°uÐ=Ó>ÀCÐGûðHús'   ‚-0 °A=ÁAÁA=Á%A=Á&A8Á8A=c               ó4   € V ^8„  d   QhRRRRRRRRRR	R
RRR/# )r   rS   rT   rU   rL   Ú
secret_envr&   rV   rW   rX   rY   r-   rZ   r   )r   s   "r   r   r   K   sK   € ÷ Hñ H˜mð H°^ð HÐQTð HÐ^að HÐlqð HØ"ðHØ'BñHr   c               ó.  € \        V4      pW6V&    \        P                  ! \        V 4      V\        P                  RRRRVRR7	      #   \        P
                   d   p\        T RTR R24      ThR	p?i\         d   p\        R
T RT 24      ThR	p?ii ; i)z¬Run a manager CLI whose non-interactive contract reads the secret from a named env var.
The variable is set on the child's environment only (never argv, never our process).Tr]   r^   F)rU   Ústdinr`   ra   rb   rc   rW   rd   re   rf   rg   Nrh   ri   )Údictrj   rk   rl   ÚDEVNULLrm   rn   ro   )rS   rU   rs   rV   rW   rY   Ú	child_envrp   s   &$$$$$  r   Úrun_with_secret_envry   K   s«   € ô �S“	€IØ"ˆjÑðHÜ�~Š~Ü�‹J˜I¬Z×-?Ñ-?ÐPTÐ[_Ø Y¸ÀuôNð 	Nøô ×$Ñ$ô VÜ˜e˜WÐ$<¸WÀS¸MÈÐKÓLÐRUÐUûÜô HÜÐ.¨u¨g°R¸°uÐ=Ó>ÀCÐGûðHús)   ‘5A ÁBÁA/Á/BÁ<BÁ=BÂBc               ó   € V ^8„  d   QhRR/# )r   r-   rv   r   )r   s   "r   r   r   [   s   € ÷ 0ñ 0ˆdñ 0r   c                 ó‚   € ^ RI Hp  V ! 4       P                  R4      ;'       g    / p\        V\        4      '       d   V# / # )é    )Úload_config_readonlyÚvault)Úhermes_cli.configr}   ÚgetÚ
isinstancerv   )r}   Úcfgs     r   Ú_cfgrƒ   [   s7   € Ý6Ù
Ó
 ×
$Ñ
$ WÓ
-×
3Ð
3°€CÜ˜S¤$×'Ò'ˆ3Ð/¨RÐ/r   c                 ó    € ^ RI Hp  ^ RIHp W3# )r|   )ÚBitwardenLoginBackend)ÚOnePasswordLoginBackend)Úagent.vault_backends.bitwardenr…   Ú agent.vault_backends.onepasswordr†   )r…   r†   s     r   Úexternal_backend_classesr‰   a   s   € ÝDÝHØ#Ð;Ð;r   c               ó    € V ^8„  d   QhRRRR/# ©r   r'   r&   r-   r)   r   )r   s   "r   r   r   g   s   € ÷ 
*ñ 
*�sð 
*˜tñ 
*r   c                ó\  € ^ RI p\        4       P                  V 4      ;'       g    / p\        V\        4      '       d%   \        VP                  R4      ;'       g    R4      MRpV'       d   \        V4      P                  4       # V R8X  d   ^ RIH	p V! 4       RJ# VP                  R4      RJ# )uR   Is the manager CLI reachable â€” honouring a configured ``binary_path`` over PATH.NÚbinary_pathÚ Úonepassword)Úfind_opÚbw)Úshutilrƒ   r€   r�   rv   r&   r   Úis_fileÚ agent.secret_sources.onepasswordr�   Úwhich)r'   r’   ÚsectionÚexplicitr�   s   &    r   Úis_installedr˜   g   s‰   € ãÜ‹f�j‰j˜Ó×$Ð$ "€GÜ8BÀ7ÌD×8QÒ8QŒs�7—;‘;˜}Ó-×3Ð3°Ô4ÐWY€HßÜ�H‹~×%Ñ%Ó'Ð'Øˆ}ÔÝ<Ù‹y Ð$Ð$Ø�<‰<˜Ó TÐ)Ð)r   c               ó    € V ^8„  d   QhRRRR/# r‹   r   )r   s   "r   r   r   t   s   € ÷ ñ �Sð ˜Tñ r   c                ó¸   € \        4       P                  V 4      ;'       g    / p\        V\        4      '       d   VP                  R4      RJ d   R# \	        V 4      # )zÅAn installed manager is a login source unless the user opted out (``vault.<name>.enabled: false``).
Zero-config on purpose: a user with ``bw``/``op`` on PATH should never have to discover a toggle.ÚenabledF)rƒ   r€   r�   rv   r˜   )r'   r–   s   & r   Ú
is_enabledrœ   t   sG   € ô ‹f�j‰j˜Ó×$Ð$ "€GÜ�'œ4× Ò  W§[¡[°Ó%;¸uÓ%DÙÜ˜ÓÐr   c               ó   € V ^8„  d   QhRR/# )r   r-   zlist[LoginBackend]r   )r   s   "r   r   r   }   s   € ÷ 
ñ 
Ð,ñ 
r   c            	     ó:  € ^ RI Hp  \        4       pV ! 4       .p\        4        Ft  p\	        VP
                  4      '       g   K   VP                  VP
                  4      ;'       g    / pTP                  T! \        V\        4      '       d   TM/ 4      4       Kv  	  V# )zZLocal first (always on), then every detected external manager the user has not turned off.)ÚLocalLoginBackend)
Úagent.vault_backends.localrŸ   rƒ   r‰   rœ   r'   r€   Úappendr�   rv   )rŸ   r‚   ÚoutÚclsr–   s        r   Úenabled_backendsr¤   }   ss   € å<ä
‹&€CÙ0Ó2Ð3€CÜ'Ö)ˆÜ�c—h‘h×ÔØ—g‘g˜cŸh™hÓ'×-Ð-¨2ˆGØ�J‰J‘s¤j°¼$×&?Ò&?™7ÀRÓHÖIñ *ð €Jr   c               ó    € V ^8„  d   QhRRRR/# )r   r,   r&   r-   zOptional[LoginBackend]r   )r   s   "r   r   r   Š   s   € ÷ Iñ I˜sð IÐ'=ñ Ir   c                ó@   a € \        V 3R  l\        4        4       R4      # )c              3  óX   <"  € T F  qP                  S4      '       g   K  Vx € K!  	  R # 5ir0   )r3   )Ú.0Úbr,   s   & €r   Ú	<genexpr>Ú%backend_for_handle.<locals>.<genexpr>‹   s   øé € ÐAÑ.�q·&±&¸·.—’Ó.ùs   ƒ* 
*N)Únextr¤   )r,   s   fr   Úbackend_for_handler­   Š   s   ø€ ÜÔAÔ,Ô.ÓAÀ4ÓHÐHr   )r"   Ú
__future__r   rj   Úabcr   r   Úpathlibr   Útypingr   r   r   r	   Úagent.vault_storer
   Ú	Exceptionr   r   rq   ry   rƒ   r‰   r˜   rœ   r¤   r­   r   r   r   Ú<module>r´      se   ðñõ #ã ß #Ý ß 1Ó 1å +ô�Yô ô;�3ô ;õD
HõHõ 0ò<õ
*õõ
÷Ir   