+
    jHàj  ã                  ón  € R t ^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIHtH	t	 ^ RI
Ht ^ RIH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HtHtHt R
tR"t0 R#mtRR0t R$t!0 R%mt"]! RR7       ! R R4      4       t#]! ]R]] ]RRRR7      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# )&a  Private SQLite storage for negotiated hosted-room links.

Route metadata and its scoped grant share the gateway's private root ``state.db``. SQLite WAL plus
``BEGIN IMMEDIATE`` owns concurrency; grants are never included in reprs, status payloads, or exception messages.
)ÚannotationsN)Ú	dataclassÚfield)Úpartial)ÚPath)ÚAnyÚMapping)Úhosted_rooms)ÚGatewayRoomCatalogÚHostedRoomPeerErrorÚTransportSecurityÚvalidate_room_link_url)ÚDbPathÚcompact_jsonÚexact_fieldsÚ
identifieri   Útransport_securityÚstatusT)Úfrozenc                  óÜ   € ] tR t^&t$ R]R&   R]R&   R]R&   R]R&   ]! RR7      tR]R&   R	]R
&   R]R&   R]R&   R]R&   R]R&   R]R&   ]R R l4       t]R R l4       t	R R lt
R R ltRtR# )ÚStoredRoomLinkÚstrÚroom_idÚ	member_idÚ
target_urlÚtarget_profileF)ÚreprÚgrantr
   ÚcatalogÚcancellation_scope_idÚtrace_idr   r   r   ÚfloatÚ
updated_atc               ó    € V ^8„  d   QhRRRR/# ©é   ÚvaluezMapping[str, Any]Úreturnr   © )Úformats   "Ú>/home/ubuntu/.hermes/hermes-agent/gateway/hosted_room_links.pyÚ__annotate__ÚStoredRoomLink.__annotate__5   s   € ÷ 2ñ 2Ð!2ð 2°~ñ 2ó    c                	óø  € \        V4       \        VR ,          R 4      p\        VR,          R4      p\        VR,          R4      p\        VR,          4      w  rV\        VP	                  R4      ;'       g    T4      pWv8w  d   \        R4      h\        VR,          ;'       g    R4      pV'       d   \        V4      \        8”  d   \        R4      h\        VP	                  R	4      ;'       g    R
4      p	V	\        9  d   \        R4      h\        VR,          4      p
V
^ 8”  g   \        R4      hV ! W#WTV\        P                  ! VR,          4      \        VR,          R4      \        VR,          R4      VWšR7      # )r   r   r   r   r   z,transport_security does not match target_urlr   Ú z"room grant is missing or too larger   Úreadyú"stored room link status is invalidr"   zupdated_at must be positiver   r   r    )r   r   r   r   r   r   r   r    r   r   r"   )Ú_link_fieldsÚ_short_stringr   r   Úgetr   ÚlenÚMAX_GRANT_CHARSÚ	_STATUSESr!   r
   Úfrom_mapping)Úclsr&   r   r   r   r   Údetected_securityr   r   r   r"   s   &&         r*   r8   ÚStoredRoomLink.from_mapping4   sP  € ä�UÔÜ  iÕ 0°)Ó<ˆÜ! %¨Õ"4°kÓBˆ	Ü& uÐ-=Õ'>Ð@PÓQˆÜ(>¸uÀ\Õ?RÓ(SÑ%ˆ
Ü  §¡Ð+?Ó!@×!UÐ!UÐDUÓVÐØÔ2Ü%Ð&TÓUÐUÜ�E˜'•N×(Ð( bÓ)ˆßœ˜E›
¤_Ô4Ü%Ð&JÓKÐKÜ�U—Y‘Y˜xÓ(×3Ð3¨GÓ4ˆØœÔ"Ü%Ð&JÓKÐKÜ˜5 Õ.Ó/ˆ
Ø˜AŒ~Ü%Ð&CÓDÐDÙØ¸ZØÔ!3×!@Ò!@ÀÀyÕAQÓ!RÜ"/°Ð6MÕ0NÐPgÓ"hÜ" 5¨Õ#4°jÓAÐVhØô2ð 	2r-   c               ó    € V ^8„  d   QhRRRR/# r$   r(   )r)   s   "r*   r+   r,   O   s   € ÷ hñ hÐ 1ð h°nñ hr-   c           	     	óú   €  \         P                  ! \        VR ,          4      4      pT P                  / \         Uu/ uF  qDY,          bK  	  upCRT/C4      #   \         d   p\	        R4      ThRp?ii ; iu upi )Úcatalog_jsonz&stored room link catalog is unreadableNr   )ÚjsonÚloadsr   Ú	Exceptionr   r8   Ú_RECORD_FIELDS)r9   r&   r   ÚexcÚnames   &&   r*   Úfrom_recordÚStoredRoomLink.from_recordN   s{   € ð	YÜ—j’j¤ U¨>Õ%:Ó!;Ó<ˆGð ×ÑÐ fÅ.Ó#QÁ.¸$¨%­+Ò$5Á.Ñ#QÐ fÐS\Ð^eÑ fÓgÐgøô ô 	YÜ%Ð&NÓOÐUXÐXûð	Yüâ#Qs   ‚&A ¼A8
ÁA5Á$A0Á0A5c               ó   € V ^8„  d   QhRR/# ©r%   r'   zdict[str, Any]r(   )r)   s   "r*   r+   r,   V   s   € ÷ )ñ ) ñ )r-   c                	ó6   € V P                   P                  4       # ©N)r   Ú
as_mapping)Úselfs   &r*   Úcatalog_mappingÚStoredRoomLink.catalog_mappingV   s   € Ø�|‰|×&Ñ&Ó(Ð(r-   c               ó   € V ^8„  d   QhRR/# rH   r(   )r)   s   "r*   r+   r,   Y   s   € ÷ ñ ˜>ñ r-   c                	óˆ   € \          Uu/ uF  q\        W4      bK  	  pp\        V P                  4       R R7      VR&   V# u upi )F)Úensure_asciir>   )rB   Úgetattrr   rM   )rL   rD   Úrecords   &  r*   Ú	as_recordÚStoredRoomLink.as_recordY   sD   € Ý8FÓG¹°œ Ó+Ò+¹ˆÐGÜ!-¨d×.BÑ.BÓ.DÐSXÔ!Yˆˆ~ÑØˆùò Hs   ‰?r(   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__r   r   Úclassmethodr8   rE   rM   rT   Ú__static_attributes__r(   r-   r*   r   r   &   s   ‡ àƒLØƒNØƒOØÓÙ˜EÔ"€Eˆ3Ó"ØÓØÓØƒMØ)Ó)ØƒKØÓàô2ó ð2ð2 ôhó ðhõ)÷ñ r-   r   zstored room linkz#stored room link fields are invalid)ÚlabelÚrequiredÚoptionalÚerrorÚ
not_objectÚmissing_fmtÚunknown_fmtc               ó$   € V ^8„  d   QhRRRRRR/# )r%   r&   r   r   r   r'   r(   )r)   s   "r*   r+   r+   e   s!   € ÷ 'ñ '˜ð ' Sð '¨Sñ 'r-   c           	     óX   € \        \        T ;'       g    R 4      V\        RRV R2R7      # )r/   é   Nz is invalid)r]   r`   Ú	max_charsÚpatternÚinvalid)r   r   r   )r&   r   s   &&r*   r3   r3   e   s1   € ÜÜˆE�KˆK�RÓ Ô-@ÈCÐY]Ø�'˜Ð%ô'ð 'r-   c               ó    € V ^8„  d   QhRRRR/# )r%   Údb_pathr   r'   zlist[dict[str, Any]]r(   )r)   s   "r*   r+   r+   k   s   € ÷ ñ ˜ð Ð#7ñ r-   c                óp   € \         P                  ! V 4      p\        V4      \        8”  d   \	        R 4      hV# )z stored room link list is invalid)r	   Úlist_room_link_recordsr5   Ú	MAX_LINKSr   )rk   Úrowss   & r*   Ú
_link_rowsrp   k   s/   € Ü×.Ò.¨wÓ7€DÜ
ˆ4ƒy”9ÔÜ!Ð"DÓEÐEØ€Kr-   c               ó    € V ^8„  d   QhRRRR/# )r%   rk   r   r'   ztuple[StoredRoomLink, ...]r(   )r)   s   "r*   r+   r+   r   s   € ÷ Qñ Q˜Vð QÐ(Bñ Qr-   c                ó~   € \         ;QJ d    . R  \        V 4       4       F  NK  	  5# ! R  \        V 4       4       4      # )c              3  óL   "  € T F  p\         P                  V4      x € K  	  R # 5irJ   )r   rE   )Ú.0Úrows   & r*   Ú	<genexpr>Ú"load_room_links.<locals>.<genexpr>s   s    é € ÐPÑ<O°S”×+Ñ+¨C×0Ð0Ó<Oùs   ‚"$)Útuplerp   )rk   s   &r*   Úload_room_linksry   r   s.   € ßŒ5ÑP¼JÀwÔ<OÓP�5ÐPˆ5ÑP¼JÀwÔ<OÓPÓPÐPr-   c               ó    € V ^8„  d   QhRRRR/# )r%   rk   r   r'   z2tuple[tuple[StoredRoomLink, ...], tuple[str, ...]]r(   )r)   s   "r*   r+   r+   v   s   € ÷ 'ñ ' fð 'Ð1cñ 'r-   c           	     óX  € . . r!\        V 4       F(  p VP                  \        P                  V4      4       K*  	  \        V4      \        V4      3#   \         dN    TP                  TP                  R4      ;'       g    R RTP                  R4      ;'       g    R R24        K™  i ; i)zBLoad healthy routes while quarantining malformed rows by identity.r   ÚunknownÚ:r   z:invalid)rp   Úappendr   rE   rA   r4   rx   )rk   ÚlinksÚerrorsru   s   &   r*   Úload_room_links_tolerantr�   v   sœ   € à˜ˆ6Ü˜'Ö"ˆð	lØ�L‰Lœ×3Ñ3°CÓ8Ö9ñ #ô
 �‹<œ˜v›Ð&Ð&øô ô 	lØ�M‰M˜SŸW™W YÓ/×<Ð<°9Ð=¸Q¸s¿w¹wÀ{Ó?S×?`Ð?`ÐW`Ð>aÐaiÐj×kð	lús   “$AÁ-B)Á?B)Â
B)Â(B)c               ó$   € V ^8„  d   QhRRRRRR/# )r%   rk   r   Úlinkr   r'   ÚNoner(   )r)   s   "r*   r+   r+   �   s!   € ÷ 'ñ '˜Fð '¨.ð '¸Tñ 'r-   c                ó:  € \         P                  ! WP                  4       \        R 7       \        P
                  R8X  dH   \        P                  ! \        4      ;_uu_ 4        \        V 4      P                  R4       RRR4       R# R#   + '       g   i     R# ; i))rS   Ú	max_linksÚposixi€  N)r	   Úupsert_room_link_recordrT   rn   ÚosrD   Ú
contextlibÚsuppressÚOSErrorr   Úchmod)rk   rƒ   s   &&r*   Úsave_room_linkrŽ   �   s`   € Ü×(Ò(¨¿¹Ó9IÔU^Õ_Ü	‡w�w�'ÔÜ× Ò ¤×)Õ)Ü�‹M×Ñ Ô&÷ *Ñ)ñ ß)×)Ð)ús   Á"B	Â	B	c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	r%   rk   r   r   r   r   r   r'   Úboolr(   )r)   s   "r*   r+   r+   ˆ   s1   € ÷ ñ  6ð °sð Àsð ÐTWð Ð\`ñ r-   c               óŠ   € V\         9  d   \        R 4      h\        P                  ! V \	        VR4      \	        VR4      VR7      # )r1   r   r   )r   r   r   )r7   r   r	   Úupdate_room_link_statusr3   )rk   r   r   r   s   &$$$r*   Úmark_room_link_statusr“   ˆ   sC   € Ø”YÔÜ!Ð"FÓGÐGÜ×/Ò/Øœ w°	Ó:ÄmÐT]Ð_jÓFkØôð r-   c               ó<   € V ^8„  d   QhRRRRRRRRRRRRR	RR
RRR/	# )r%   r   r   r   r   r   r   r   r
   r   r    r'   r   r(   )r)   s   "r*   r+   r+   �   s_   € ÷ wñ wØðwØ #ðwØ14ðwØFIðwØRUðwØ`rðwàðwà*-ðwà2@ñwr-   c                ó´   € \        V4      w  r(\        P                  R V RVRVRVRVRVP                  4       RVRVRVR	R
R\        P                  ! 4       /4      # )r   r   r   r   r   r   r   r    r   r   r0   r"   )r   r   r8   rK   Útime)	r   r   r   r   r   r   r   r    r   s	   $$$$$$$$ r*   Úmake_stored_linkr—   �   sv   € ô &<¸JÓ%GÑ"€JÜ×&Ñ&Ø�7˜K¨°LÀ*ÐN^Ð`nØ�˜	 7×#5Ñ#5Ó#7Ð9PÐRgØ�HÐ2Ð4FÈÐRYÐ[gÔim×irÒirÓitð(vó wð wr-   i @  >	   r   r   r   r    r   r   r"   r   r   )
r   r   r   r   r   r   r    r   r   r"   >   r0   ÚunavailableÚneeds_reauthorization),Ú__doc__Ú
__future__r   rŠ   r?   r‰   r–   Údataclassesr   r   Ú	functoolsr   Úpathlibr   Útypingr   r   Úgatewayr	   Úgateway.hosted_room_peerr
   r   r   r   Úgateway.hosted_rooms_commonr   r   r   r   rn   r6   Ú_LEGACY_FIELDSÚ_OPTIONAL_FIELDSrB   r7   r   r2   r3   rp   ry   r�   rŽ   r“   r—   r(   r-   r*   Ú<module>r¥      sÒ   ðñõ #ã Û Û 	Û ß (Ý Ý ß å  ÷Xó Xç VÓ Vð €	Ø€ò€ð )¨(Ð3Ð ð2€ò >€	ñ �$Ô÷5ð 5ó ð5ñp ØÐ*°^ÐN^Ø
Ð*OØ5ÐChôj€õ'õõQõ'õ'õ÷wr-   