ó
    üÞ j6  ã                   ó  • % S SK r S SKrS SKJr  S SKJrJr  S SKJrJ	r	J
r
JrJr   " S S\5      r " S S\5      rS	\S
\S\\   4S jr " S S5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r\\	\\\\\4      /\4   \\   \4   rS\S\4S jrSS.S\S\
\   S\	\/\4   4S jjrSr \ R8                  " S5      \S.\ R8                  " S5      \S.\ R8                  " S 5      \S.\ R8                  " S!5      \S.\ R8                  " S"5      \S.\ R8                  " S#5      \S.\ R8                  " S$5      \S.\ R8                  " S%5      \S.\ R8                  " S&5      \S.\ R8                  " S'5      \S.\ R8                  " S(5      \S.\ R8                  " S)5      \S.\ R8                  " S*5      \S.\ R8                  " S+5      \S.\ R8                  " S,5      \S.\ R8                  " S-5      \S.\ R8                  " S.5      \S.\ R8                  " S/5      \S.\ R8                  " S05      \S.\ R8                  " S15      \S.\ R8                  " S2\ R:                  5      S3\ 3S.\ R8                  " S4\ R:                  5      S5\ 3S.\ R8                  " S6\ R:                  5      S3\ 3S.\ R8                  " S7\ R:                  5      S3\ S83S./r\\   \S9'    SS:S;.S<\
\\      S\
\   S\	\/\4   4S= jjr g)>é    N)Úabstractmethod)ÚdefaultdictÚdeque)ÚAnyÚCallableÚOptionalÚ	TypedDictÚUnionc                   ó&   • \ rS rSr% \\   \S'   Srg)Ú_ExtractOptionsé   Ú	max_depth© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   ÚintÚ__annotations__Ú__static_attributes__r   ó    ÚN/var/www/html/gaurav/venv/lib/python3.13/site-packages/langsmith/anonymizer.pyr   r      s   ‡ Ø˜‰}Óòr   r   c                   ó@   • \ rS rSr% Sr\\S'    \\\\	4      \S'   Sr
g)Ú
StringNodeé   z$String node extracted from the data.ÚvalueÚpathr   N)r   r   r   r   Ú__doc__Ústrr   Úlistr
   r   r   r   r   r   r   r      s#   ‡ Ù.àƒJØà
ˆu�S˜#�X‰Ñ
ÓÚ.r   r   ÚdataÚoptionsÚreturnc                 ó:  • UR                  S5      =(       d    Sn[        U S/ 4/5      n/ nU(       aè  UR                  5       u  pVn[        U[        [
        45      (       a:  Xb:¼  a  M<  UR                  5        H  u  p‰UR                  X–S-   Xx/-   45        M      Ow[        U[        5      (       a5  Xb:¼  a  M‹  [        U5       H  u  p«UR                  X¶S-   Xz/-   45        M      O-[        U[        5      (       a  UR                  [        XWS95        U(       a  Mè  U$ )Nr   é
   r   é   ©r   r   )Úgetr   ÚpopleftÚ
isinstanceÚdictr   ÚitemsÚappendr    Ú	enumerater   r   )r!   r"   r   ÚqueueÚresultr   Údepthr   ÚkeyÚnested_valueÚiÚitems               r   Ú_extract_string_nodesr6      sõ   € Ø—‘˜KÓ(×.¨B€Iô <AÀ4ÈÈBÀ-ÀÓ;Q€EØ!€Fæ
Ø"Ÿ]™]›_Ñˆ�dä�eœd¤KÐ0×1Ñ1ØÓ!ÙØ%*§[¡[¦]Ñ!�Ø—‘˜l°A©I°t¸e±|ÐDÖEò &3ä˜œt×$Ñ$ØÓ!ÙÜ$ UÖ+‘�Ø—‘˜d¨A¡I¨t°c©zÐ:Ö;ò ,ä˜œs×#Ñ#Ø�M‰Mœ*¨5Ñ<Ô=÷ ˆ%ð  €Mr   c                   ó@   • \ rS rSrSr\S\\   S\\   4S j5       rSr	g)ÚStringNodeProcessoré4   z-Processes a list of string nodes for masking.Únodesr#   c                 ó   • g)z6Accept and return a list of string nodes to be masked.Nr   )Úselfr:   s     r   Ú
mask_nodesÚStringNodeProcessor.mask_nodes7   s   � r   r   N)
r   r   r   r   r   r   r    r   r=   r   r   r   r   r8   r8   4   s3   † Ù7àðE  ZÑ 0ð E°T¸*Ñ5Eó Eó óEr   r8   c                   ó<   • \ rS rSr% Sr\\   \S'    \\   \S'   Sr	g)ÚReplacerOptionsé<   z3Configuration options for replacing sensitive data.r   Ú
deep_cloner   N)
r   r   r   r   r   r   r   r   Úboolr   r   r   r   r@   r@   <   s   ‡ Ù=à˜‰}ÓØ?à˜‘ÓÚ/r   r@   c                   óJ   • \ rS rSr% Sr\R                  \S'    \\	   \S'   Sr
g)ÚStringNodeRuleéF   z3Declarative rule used for replacing sensitive data.ÚpatternÚreplacer   N)r   r   r   r   r   ÚreÚPatternr   r   r   r   r   r   r   rE   rE   F   s   ‡ Ù=à�Z‰ZÓØ!à�c‰]ÓÚGr   rE   c                   ó^   • \ rS rSr% Sr\\   \S'    S\\   4S jrS\\	   S\\	   4S jr
Srg	)
ÚRuleNodeProcessoréP   zJString node processor that uses a list of rules to replace sensitive data.Úrulesc           	      ó  • U Vs/ sHo  n[        US   [        R                  5      (       a  US   O[        R                  " US   5      [        UR	                  S5      [
        5      (       a  US   OSS.PMq     snU l        gs  snf )z.Initialize the processor with a list of rules.rG   rH   z
[redacted]©rG   rH   N)r*   rI   rJ   Úcompiler(   r   rN   )r<   rN   Úrules      r   Ú__init__ÚRuleNodeProcessor.__init__Z   s€   € ñ ó
ñ �ô " $ y¡/´2·:±:×>Ñ>ð ˜’OäŸš D¨¡OÓ4ô " $§(¡(¨9Ó"5´s×;Ñ;ð ˜’Oà%ôñ ñ
ˆ�
ùò 
s   …A5Br:   r#   c                 óÆ   • / nU HX  nUS   nU R                    H  nUS   R                  US   U5      nM     XCS   :w  d  M=  UR                  [        XCS   S95        MZ     U$ )zMask nodes using the rules.r   rG   rH   r   r'   )rN   Úsubr-   r   )r<   r:   r0   r5   Ú	new_valuerR   s         r   r=   ÚRuleNodeProcessor.mask_nodesl   sh   € àˆÛˆDØ˜W™ˆIØŸ
œ
�Ø  ™O×/Ñ/°°Y±ÀÓK’	ñ #à ™MÕ)Ø—‘œj¨yÀF¹|ÑLÖMñ ð ˆr   ©rN   N)r   r   r   r   r   r    rE   r   rS   r   r=   r   r   r   r   rL   rL   P   sC   ‡ ÙTà�ÑÓðð
˜d >Ñ2ô 
ð$	  ZÑ 0ð 	°T¸*Ñ5E÷ 	r   rL   c            	       óÆ   • \ rS rSr% Sr\\\/\4   \\\\\\	4      /\4   4   \
S'    \\
S'    S\\\/\4   \\\\\\	4      /\4   4   4S jrS\\   S\\   4S jrS	rg
)ÚCallableNodeProcessoréx   zNString node processor that uses a callable function to replace sensitive data.ÚfuncÚaccepts_pathc                 ór   • Xl         [        [        R                  " U5      R                  5      S:H  U l        g)z2Initialize the processor with a callable function.é   N)r]   ÚlenÚinspectÚ	signatureÚ
parametersr^   )r<   r]   s     r   rS   ÚCallableNodeProcessor.__init__ˆ   s,   € ð
 Œ	Ü¤× 1Ò 1°$Ó 7× BÑ BÓCÀqÑHˆÕr   r:   r#   c                 óà   • / nU He  nU R                   (       a  U R                  US   US   5      OU R                  US   5      nXCS   :w  d  MJ  UR                  [        XCS   S95        Mg     U$ )z'Mask nodes using the callable function.r   r   r'   )r^   r]   r-   r   )r<   r:   ÚretvalÚnodeÚ	candidates        r   r=   Ú CallableNodeProcessor.mask_nodes�   sq   € à#%ˆÛˆDð ×$×$ð —	‘	˜$˜w™-¨¨f©Ô6à—Y‘Y˜t G™}Ó-ð ð
  ™MÕ)Ø—‘œj¨yÀF¹|ÑLÖMñ ð ˆr   )r^   r]   N)r   r   r   r   r   r
   r   r   r    r   r   rC   rS   r   r=   r   r   r   r   r[   r[   x   s­   ‡ ÙXà
�˜#˜ ˜Ñ$ h°°T¸%ÀÀSÀ¹/Ñ5JÐ/KÈSÐ/PÑ&QÐQÑ
RÓRðð ÓðGð
Ià�H˜c˜U C˜ZÑ(¨(°C¸¸eÀCÈÀH¹oÑ9NÐ3OÐQTÐ3TÑ*UÐUÑVôIð  ZÑ 0ð °T¸*Ñ5E÷ r   r[   Úreplacerc                 ót   • [        U [        5      (       a	  [        U S9$ [        U 5      (       a	  [	        U S9$ U $ )NrY   )r]   )r*   r    rL   Úcallabler[   )rk   s    r   Ú_get_node_processorrn   ¥   s5   € Ü�(œD×!Ñ!Ü  xÑ0Ð0Ü	�(×	Ñ	Ü$¨(Ñ3Ð3àˆr   ©r   r   c                óJ   ^^• [        U 5      mS[        S[        4UU4S jjnU$ )zCreate an anonymizer function.r!   r#   c                 óØ   >• [        U ST=(       d    S05      nU nT	R                  U5      nU H8  nUS   (       d  US   nM  UnUS   S S  H  nXV   nM	     US   S   nUS   XW'   M:     U$ )Nr   r%   r   r   éÿÿÿÿ)r6   r=   )
r!   r:   Úmutate_valueÚ	to_updaterh   ÚtempÚpartÚ	last_partr   Ú	processors
           €€r   Ú
anonymizerÚ%create_anonymizer.<locals>.anonymizer¶   s‹   ø€ Ü% d¨[¸)¿/ÀrÐ,JÓKˆØˆà×(Ñ(¨Ó/ˆ	ÛˆDØ˜—<Ø# G™}’à#�Ø  ™L¨¨"Ó-�DØ™:’Dñ .ð ! ™L¨Ñ,�	Ø"& w¡-�“ñ ð Ðr   )rn   r   )rk   r   ry   rx   s    ` @r   Úcreate_anonymizerr{   ®   s/   ù€ ô $ HÓ-€Iðœð ¤÷ ð ð$ Ðr   z[SECRET_DETECTED]zsk-ant-[A-Za-z0-9_-]{20,}rP   z,sk-(?:proj|svcacct|admin)-[A-Za-z0-9_-]{20,}zsk-[A-Za-z0-9]{32,}z1lsv2_(?:pt|sk)_[A-Za-z0-9]{32,}(?:_[A-Za-z0-9]+)*zls__[A-Za-z0-9]{16,}zgh[pousr]_[A-Za-z0-9]{36,}zgithub_pat_[A-Za-z0-9_]{82}zglpat-[A-Za-z0-9_-]{20,}z3\b(?:AKIA|ASIA|ABIA|ACCA|A3T[A-Z0-9])[0-9A-Z]{16}\bzAIza[0-9A-Za-z_-]{35}zya29\.[0-9A-Za-z_-]+zxox[baprs]-[A-Za-z0-9-]{10,}zxapp-\d-[A-Za-z0-9-]{10,}z0https://hooks\.slack\.com/services/[A-Za-z0-9/]+z,\b(?:sk|rk)_(?:live|test)_[A-Za-z0-9]{20,}\bznpm_[A-Za-z0-9]{36}z!pypi-AgEIcHlwaS[A-Za-z0-9_-]{50,}z(SG\.[A-Za-z0-9_-]{22}\.[A-Za-z0-9_-]{43}z4eyJ[A-Za-z0-9_-]+\.eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+zr-----BEGIN (?:[A-Z0-9 ]+ )?PRIVATE KEY(?: BLOCK)?-----[\s\S]+?-----END (?:[A-Z0-9 ]+ )?PRIVATE KEY(?: BLOCK)?-----zã\b([A-Za-z0-9_.-]*(?:API[_-]?KEY|SECRET|TOKEN|PASSWORD|PASSWD|PRIVATE[_-]?KEY|ACCESS[_-]?KEY|AUTH[_-]?TOKEN|CLIENT[_-]?SECRET)(?![A-Za-z0-9])(?:[_.-][A-Za-z0-9]+)*["']?\s*[:=]\s*["']?)(?:(?:bearer|token|basic)\s+)?[^\s"'&;]{6,}z\g<1>zs\b(authorization|x-api-key|x-auth-token)(["']?\s*[:=]\s*["']?)(bearer\s+|token\s+|basic\s+)?[A-Za-z0-9._~+/-]{8,}=*z\g<1>\g<2>\g<3>z%\b(Bearer\s+)[A-Za-z0-9._~+/-]{10,}=*z-\b([a-z][a-z0-9+.-]*://[^:@/\s]*:)[^@/\s]+(@)z\g<2>ÚDEFAULT_SECRET_RULESé   )Úextra_rulesr   r~   c                 ó\   • [        [        5      nU (       a  U[        U 5      -   n[        X!S9$ )a�  Build an anonymizer pre-loaded with :data:`DEFAULT_SECRET_RULES`.

Pass the result to ``Client(anonymizer=...)`` to redact detected secrets
from run inputs, outputs, and metadata client-side, before upload.

Args:
    extra_rules: Additional rules appended after the defaults.
    max_depth: Max recursion depth (default 24; higher than
        ``create_anonymizer``'s default of 10 because traced payloads nest
        deeply, e.g. ``messages[].content[].args``).

Example:
    >>> from langsmith import Client
    >>> from langsmith.anonymizer import create_secret_anonymizer
    >>> client = Client(anonymizer=create_secret_anonymizer())
ro   )r    r|   r{   )r~   r   rN   s      r   Úcreate_secret_anonymizerr€   U  s,   € ô* Ô%Ó&€EÞØœ˜[Ó)Ñ)ˆÜ˜UÑ8Ð8r   )!rI   rb   Úabcr   Úcollectionsr   r   Útypingr   r   r   r	   r
   r   r   r    r6   r8   r@   rE   rL   r[   r   r   ÚReplacerTypern   r{   ÚSECRET_PLACEHOLDERrQ   Ú
IGNORECASEr|   r   r€   r   r   r   Ú<module>r‡      sõ  ðÜ 	Û Ý ß *ß <Õ <ô�iô ô/�ô /ð ð ¨oð À$ÀzÑBRô ÷6Eñ Eô0�iô 0ôH�Yô Hô%Ð+ô %ôP#Ð/ô #ðL Øˆc�4˜˜c 3˜h™Ñ(Ð)¨3Ð.Ñ/ØˆÑØðñ€ð ,ð Ð3Fô ð  $òØðð ˜‰}ðð ˆsˆe�SˆjÑõ	ð: )Ð ðDð —:’:Ð:Ó;Ø%ñð —:’:ÐMÓNØ%ñð —
’
Ð1Ó2Ð?QÑRð —:’:ÐRÓSØ%ñð —
’
Ð2Ó3Ð@RÑSð —:’:Ð;Ó<Ø%ñð
 —:’:Ð<Ó=Ø%ñð
 —
’
Ð6Ó7ÐDVÑWð —:’:ÐTÓUØ%ñð
 —
’
Ð3Ó4ÐASÑTØ—
’
Ð2Ó3Ð@RÑSð —:’:Ð=Ó>Ø%ñð
 —:’:Ð:Ó;Ø%ñð
 —:’:ÐQÓRØ%ñð —:’:ÐMÓNØ%ñð
 —
’
Ð1Ó2Ð?QÑRð —:’:ÐBÓCØ%ñð —:’:ÐIÓJØ%ñð —:’:ÐUÓVØ%ñð —:’:ðLó
ð &ñð" —:’:ð wØ�M‰Mó
ð Ð.Ð/Ð0ñð —:’:ð GØ�M‰Mó
ð &Ð&8Ð%9Ð:ñð —:’:ÐFÈÏÉÓVØÐ.Ð/Ð0ñð —:’:Ø<¸b¿m¹mó
ð Ð.Ð/¨uÐ5ñ	ðiz.Ð �d˜>Ñ*ó zðvGð 37Ø!ò9à˜$˜~Ñ.Ñ/ð9ð ˜‰}ð9ð ˆsˆe�SˆjÑö	9r   