+
    „WÝjt  ã                  ó4  a € 0 t $ R t^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIHt ^ RIHt ]P                  ! ]4      t]
P$                  ! 4       tRtRtRt^t]! 0 Rm4      tR]R&    ! R	 R
]P6                  4      tR R ltR R ltR R ltR R lt R# )a2  Audit log for dashboard-auth events: ``$HERMES_HOME/logs/dashboard-auth.log``, one JSON object
per line. Token-like fields are stripped before serialisation so refresh tokens / JWTs never
reach disk. Minimal import surface (no ``hermes_constants`` at import time) so early-loading
middleware can import it.)ÚannotationsN)ÚPath)ÚAnyé   z...[truncated]Ú	frozensetÚ_REDACTED_FIELDSc                  ó^   € ] tR t^$tRtRtRtRtRtRt	Rt
RtR	tR
tRtRtRtRtRtRtRtRtRtR# )Ú
AuditEventzEEvent types; values are the literal ``event`` field on the JSON line.Úlogin_startÚlogin_successÚlogin_failureÚlogoutÚrefresh_successÚrefresh_failureÚrevokeÚsession_verify_failureÚsession_rejectedÚws_ticket_mintedÚws_ticket_rejectedÚtoken_auth_successÚtoken_auth_failureÚnative_authorize_startÚnative_code_issuedÚnative_token_successÚnative_token_failure© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚLOGIN_STARTÚLOGIN_SUCCESSÚLOGIN_FAILUREÚLOGOUTÚREFRESH_SUCCESSÚREFRESH_FAILUREÚREVOKEÚSESSION_VERIFY_FAILUREÚSESSION_REJECTEDÚWS_TICKET_MINTEDÚWS_TICKET_REJECTEDÚTOKEN_AUTH_SUCCESSÚTOKEN_AUTH_FAILUREÚNATIVE_AUTHORIZE_STARTÚNATIVE_CODE_ISSUEDÚNATIVE_TOKEN_SUCCESSÚNATIVE_TOKEN_FAILUREÚ__static_attributes__r   ó    ÚSC:\Users\johnn\AppData\Local\hermes\hermes-agent\hermes_cli\dashboard_auth\audit.pyr	   r	   $   sd   † ÙOØ€KØ#€MØ#€MØ€FØ'€OØ'€OØ€FØ5ÐØ)ÐØ)ÐØ-ÐØ-ÐØ-Ðà5ÐØ-ÐØ1ÐØ1Ôr3   r	   c               ó   € V ^8„  d   QhRR/# )é   Úreturnr   r   )Úformats   "r4   Ú__annotate__r9   :   s   € ÷ =ñ =˜4ñ =r3   c                 ó8   € ^ RI Hp  V ! 4       R,          R,          # )z]Lazy leaf import: honours profile overrides + the native-Windows ``%LOCALAPPDATA%`` fallback.©Úget_hermes_homeÚlogszdashboard-auth.log)Úhermes_constantsr<   r;   s    r4   Ú_resolve_log_pathr?   :   s   € å0ÙÓ˜vÕ%Ð(<Õ<Ð<r3   c               ó    € V ^8„  d   QhRRRR/# )r6   Úvaluer   r7   r   )r8   s   "r4   r9   r9   @   s   € ÷ 
ñ 
˜#ð 
 #ñ 
r3   c           
     ó,  € \        V \        4      '       d/   V P                  4        UUu/ uF  w  rV\        V4      bK  	  upp# \        V \        \
        34      '       d   V  Uu. uF  p\        V4      NK  	  up# \        V \        \        \        \        \        R4      34      '       g   \        V 4      p \        V \        4      '       d=   \        V 4      \        8”  d)   V R\        \        \        4      ,
           \        ,           # V # u uppi u upi )zKBound strings, including nested values and non-JSON object representations.N)Ú
isinstanceÚdictÚitemsÚ_bounded_valueÚlistÚtupleÚstrÚintÚfloatÚboolÚtypeÚreprÚlenÚ_MAX_FIELD_LENGTHÚ_TRUNCATION_MARKER)rA   ÚkÚvs   &  r4   rF   rF   @   sÍ   € ä�%œ×ÒØ16·±´Ô?±©¨�”> !Ó$Ò$±Ò?Ð?Ü�%œ$¤˜×'Ò'Ù+0Ó1©5 a”˜qÖ!©5Ñ1Ð1Ü�eœc¤3¬¬t´T¸$³ZÐ@×AÒAÜ�U“ˆÜ�%œ×Ò¤# e£*Ô/@Ô"@ØÐAÔ'¬#Ô.@Ó*AÕAÐBÔEWÕWÐWØ€Lùó @ùâ1s   ªDÁ%Dc               ó$   € V ^8„  d   QhRRRRRR/# )r6   Úpathr   Úpending_bytesrJ   r7   ÚNoner   )r8   s   "r4   r9   r9   M   s!   € ÷ ñ ˜Dð °ð ¸ñ r3   c           
     ó4  €  V P                  4       P                  V,           \        8  d   R#   \	        \
        ^,
          ^ R4       Fv  pT P                  T P                   RT 24      pTP                  4       '       g   K;  \        P                  ! Y0P                  T P                   RT^,            24      4       Kx  	  \        P                  ! Y P                  T P                   R24      4       R#   \         d     R# i ; i  \         d     R# i ; i)u÷   Rotate ``path`` to ``.1``/â€¦/``.<_BACKUP_COUNT>`` once appending *pending_bytes* would
reach ``_MAX_BYTES``. Mirrors stdlib ``RotatingFileHandler``'s naming; must be called
with ``_write_lock`` held. Rotation errors must not break the write path.NÚ.z.1éÿÿÿÿ)ÚstatÚst_sizeÚ
_MAX_BYTESÚOSErrorÚrangeÚ_BACKUP_COUNTÚ	with_nameÚnameÚexistsÚosÚreplace)rU   rV   ÚiÚsrcs   &&  r4   Ú_rotate_if_neededrh   M   sÞ   € ðØ�9‰9‹;×Ñ Õ.´Ô;Ùð <ðÜ”} qÕ(¨!¨RÖ0ˆAØ—.‘. D§I¡I ;¨a°¨sÐ!3Ó4ˆCØ�z‰z�|Œ|Ü—
’
˜3§¡°$·)±)°¸A¸aÀ!½e¸WÐ/EÓ FÖGñ 1ô 	�
Š
�4Ÿ™¨4¯9©9¨+°RÐ(8Ó9Ö:øô ô Úðûô ô Úðús*   ‚*C6 °AD ÂA1D Ã6DÄDÄDÄDc               ó$   € V ^8„  d   QhRRRRRR/# )r6   Úeventr	   Úfieldsr   r7   rW   r   )r8   s   "r4   r9   r9   `   s&   € ÷ Eñ E�Zð E¨3ð E°4ñ Er3   c           	     ó*  €  R\         P                  P                  \         P                  4      P	                  4       RV P
                  /VP                  4        UUu/ uF  w  r#V\        9  g   K  V\        V4      bK   	  uppCp\        P                  ! VRR7      R,           pVP                  R4      p\        4       pVP                  P                  RRR7       \        ;_uu_ 4        \!        V\#        V4      4       \%        VR4      ;_uu_ 4       pVP'                  V4       R	R	R	4       R	R	R	4       R	# u uppi   + '       g   i     L ; i  + '       g   i     R	# ; i  \(         d"   p	\*        P-                  R
T	4        R	p	?	R	# R	p	?	ii ; i)uï   Append one event; token-like fields dropped, log dir created, size-capped rotation
(``_MAX_BYTES`` with ``_BACKUP_COUNT`` backups). Write failures are logged at WARNING
but never raise â€” auth must not fail because the audit logger broke.Útsrj   )Ú
separatorsÚ
zutf-8T)ÚparentsÚexist_okÚabNz)dashboard-auth audit log write failed: %s)Ú,Ú:)Ú_dtÚdatetimeÚnowÚUTCÚ	isoformatrA   rE   r   rF   ÚjsonÚdumpsÚencoder?   ÚparentÚmkdirÚ_write_lockrh   rO   ÚopenÚwriteÚ	ExceptionÚ_logÚwarning)
rj   rk   rR   rS   ÚentryÚlineÚ
line_bytesrU   ÚfÚes
   &,        r4   Ú	audit_logrŠ   `   s-  € ðEà”#—,‘,×"Ñ"¤3§7¡7Ó+×5Ñ5Ó7Ø�U—[‘[ð^ð 17·±´Ô\±©¨À!ÔK[ÑB[Ô#ˆq”. Ó#Ò#±Ò\ð^ˆô �zŠz˜%¨JÔ7¸$Õ>ˆØ—[‘[ Ó)ˆ
Ü Ó"ˆØ�‰×Ñ $°ÐÔ6ßŽ[Ü˜d¤C¨
£OÔ4Ü�d˜D×!Ô! QØ—‘˜
Ô#÷ "÷ ‰[ùó ]÷ "×!ú÷ �[ˆ[ûô ô EÜ�‰Ð@À!×DÒDûðEúsg   ‚AE& ÁD9Á1D9ÂA*E& Ã+*EÄD?	Ä'EÄ/E& Ä9E& Ä?EÅ
EÅE#	ÅE& Å#E& Å&FÅ1FÆFi  P >	   ÚcodeÚstateÚcookieÚticketÚaccess_tokenÚAuthorizationÚauthorizationÚcode_verifierÚrefresh_token)!Ú__conditional_annotations__r    Ú
__future__r   rv   ru   Úenumrz   Úloggingrd   Ú	threadingÚpathlibr   Útypingr   Ú	getLoggerr   rƒ   ÚLockr   rP   rQ   r]   r`   r   r   Ú__annotations__ÚEnumr	   r?   rF   rh   rŠ   )r”   s   @r4   Ú<module>rŸ      s�   øðôõ #ã Û Û Û Û 	Û Ý Ý à×Ò˜Ó"€Ø�nŠnÓ€ØÐ Ø%Ð ð €
Ø€ñ (ò )Có DÐ �)ó Dô
2�—‘ô 2õ,=õ
õ÷&Er3   