+
    jHàjé  ã                  óî   € R t ^ RIHt ^ RIt^ RIt^ RIt^ RIHt ^ RIH	t	 ]P                  ! ]4      t]P                  ! R4      t]P                  ! R4      tR R ltR	 R
 ltR R ltR R ltR R ltR# )až  Shared helpers for canonicalising WhatsApp sender identity.

The bridge can surface one human as a LID (``999...@lid``) or a phone JID
(``1555...@s.whatsapp.net``) within one conversation. Authorisation (:mod:`gateway.run`) and
session keys (:mod:`gateway.session`) both resolve aliases here so they never drift apart;
plugins should use :func:`canonical_whatsapp_identifier` to line up with Hermes' session keys.
)ÚannotationsN)ÚSet)Úget_hermes_dirz^[A-Za-z0-9@.+\-]+$z^\+?[\d\s().\-]+$c               ó    € V ^8„  d   QhRRRR/# ©é   ÚvalueÚstrÚreturn© )Úformats   "Ú>/home/ubuntu/.hermes/hermes-agent/gateway/whatsapp_identity.pyÚ__annotate__r      s   € ÷ Zñ Z¨ð Z°ñ Zó    c                óÆ   € \        T ;'       g    R4      P                  4       P                  RR^4      P                  R^4      ^ ,          P                  R^4      ^ ,          # )z™Strip JID/LID/device/plus syntax down to the bare numeric identifier:
``"6012:47@s.whatsapp.net"``, ``"6012@lid"`` and ``"+6012"`` all become ``"6012"``.Ú Ú+Ú:Ú@)r	   ÚstripÚreplaceÚsplit)r   s   &r   Únormalize_whatsapp_identifierr      sS   € ô ˆu�{ˆ{˜Ó×!Ñ!Ó#×+Ñ+¨C°°QÓ7×=Ñ=¸cÀ1ÓEÀaÕH×NÑNÈsÐTUÓVÐWXÕYÐYr   c               ó    € V ^8„  d   QhRRRR/# r   r   )r   s   "r   r   r   #   s   € ÷ ñ ˜3ð  3ñ r   c                ó^  € V '       g   R# \        V 4      P                  4       pRV9   d:   RV9   d3   VP                  R4      w  r#pVP                  R^4      ^ ,           RV 2pRV9   d   V# \        P                  V4      '       d&   \        P                  ! RRV4      pV'       d   V R2# V# )aI  Normalize an *outbound* target to a bridge-safe JID (inverse of normalize).  Baileys'
``jidDecode`` crashes on a bare phone, so bare phones become ``<digits>@s.whatsapp.net``;
``user:device@domain`` collapses to ``user@domain``; anything else is returned unchanged
so the bridge can surface a real error.  ``""`` for empty input.r   r   r   z\D+z@s.whatsapp.net)r	   r   Ú	partitionr   Ú_BARE_PHONE_REÚ	fullmatchÚreÚsub)r   Ú
normalizedÚprefixÚ_ÚdomainÚdigitss   &     r   Úto_whatsapp_jidr%   #   s¨   € ÷
 ÙÜ�U“×!Ñ!Ó#€JØ
ˆjÔ˜S JÔ.Ø&×0Ñ0°Ó5Ñˆ�6ØŸ™ S¨!Ó,¨QÕ/Ð0°°&°Ð:ˆ
Ø
ˆjÔØÐÜ×Ñ 
×+Ò+Ü—’˜  JÓ/ˆßØ�X˜_Ð-Ð-ØÐr   c               ó    € V ^8„  d   QhRRRR/# r   r   )r   s   "r   r   r   7   s   € ÷ ñ ¨#ð °#ñ r   c                ó¾   € \        V 4      pVP                  R4      w  r#pV'       d6   VP                  4       '       d    VP                  4       '       d
   VR9   d   V# R# )zBReturn a valid participant JID for an outbound mention, or ``""``.r   r   >   Úlidús.whatsapp.net)r%   r   ÚisasciiÚisdigit)r   ÚjidÚuserÚ	separatorr#   s   &    r   Únormalize_whatsapp_mention_jidr/   7   sW   € ä
˜%Ó
 €CØ!Ÿm™m¨CÓ0Ñ€D�V÷ Ø�L‰L�NŠNØ�L‰L�NŠNØÐ/Ô/ð	 	ðð ðr   c               ó    € V ^8„  d   QhRRRR/# )r   Ú
identifierr	   r
   zset[str]r   )r   s   "r   r   r   E   s   € ÷ ñ ¨ð °ñ r   c           	     ó¤  € \        V 4      pV'       g   \        4       # \        RR4      p\        4       pV.pV'       dÓ   VP                  ^ 4      pV'       d"   WS9   g   \        P                  V4      '       g   KD  VP                  V4       R	 F}  pVRV V R2,          pVP                  4       '       g   K*   \        \        P                  ! VP                  RR7      4      4      pT'       g   Kd  Yƒ9  g   Kl  TP                  T4       K  	  KÚ  V#   \        \        P                  3 d"   p	\        P                  RYy4        Rp	?	K¼  Rp	?	ii ; i)
z¨All identifiers transitively reachable via the bridge's ``lid-mapping-*.json`` files;
always includes the normalized input itself (empty set if it normalizes to empty).zplatforms/whatsapp/sessionzwhatsapp/sessionzlid-mapping-z.jsonz	utf-8-sig)Úencodingz(whatsapp_identity: failed to read %s: %sN)r   Ú_reverse)r   Úsetr   ÚpopÚ_SAFE_IDENTIFIER_REÚmatchÚaddÚexistsÚjsonÚloadsÚ	read_textÚOSErrorÚJSONDecodeErrorÚloggerÚdebugÚappend)
r1   r    Úsession_dirÚresolvedÚqueueÚcurrentÚsuffixÚmapping_pathÚmappedÚexcs
   &         r   Úexpand_whatsapp_aliasesrK   E   s  € ô /¨zÓ:€JßÜ‹uˆÜ Ð!=Ð?QÓR€KÜ›€HØˆL€Eß
Ø—)‘)˜A“,ˆ÷ ˜'Ô-Ô5H×5NÑ5NÈw×5WÒ5WÙØ�‰�WÔÛ&ˆFØ&¨<¸°yÀÀÈÐ)NÕNˆLØ×&Ñ&×(Ò(Ùðä6Ü—J’J˜|×5Ñ5¸{Ð5ÓKÓLó�÷ ‰v˜&Ö0Ø—‘˜VÖ$ó 'ð €Oøô œT×1Ñ1Ð2ô Ü—‘ÐGÈÔ[Ýûðús   Â9/DÄEÄ.E
Å
Ec               ó    € V ^8„  d   QhRRRR/# )r   r1   r	   r
   r   )r   s   "r   r   r   f   s   € ÷ 
3ñ 
3¨cð 
3°cñ 
3r   c                ó^   € \        V 4      pV'       g   R# \        V4      p\        VR R7      # )zÿStable sender identity across phone-JID/LID variants (DM ``chat_id`` and group
``participant_id`` alike): the shortest alias from :func:`expand_whatsapp_aliases`, which
degrades to the normalized input when no mapping files exist.  ``""`` for empty input.r   c                ó   € \        V 4      V 3# )N)Úlen)Úcs   &r   Ú<lambda>Ú/canonical_whatsapp_identifier.<locals>.<lambda>p   s   € ¤s¨1£v¨q¡kr   )Úkey)r   rK   Úmin)r1   r    Úaliasess   &  r   Úcanonical_whatsapp_identifierrV   f   s.   € ô /¨zÓ:€JßÙô & jÓ1€GÜˆwÑ1Ô2Ð2r   )Ú__doc__Ú
__future__r   r;   Úloggingr   Útypingr   Úhermes_constantsr   Ú	getLoggerÚ__name__r@   Úcompiler7   r   r   r%   r/   rK   rV   r   r   r   Ú<module>r_      sl   ðñõ #ã Û Û 	Ý å +à	×	Ò	˜8Ó	$€ð —j’jÐ!7Ó8Ð ð —’Ð0Ó1€õZõõ(õ÷B
3r   