
    jKj                       d Z ddlmZ ddlZddlmZmZ dZdZ ej                  d      Z
dZ ej                  d	      Z ej                  d
ej                        ZddZddZddZddZddZddZddZddZddZddZd dZy)!a  Event sanitization: redact non-text response content blocks, large base64
strings, PostHog tokens, and sensitive keys. Pure functions that return new
objects without mutating the input; run after customer redaction (``before_send``
runs later in the pipeline) but before truncation.
    )annotationsN)AnyDict)contextconversation_idz
[redacted]z^[A-Za-z0-9+/\n\r]+=*$i (  z\bph[a-z]_[A-Za-z0-9_-]{20,}\bz^(authorization|cookie|set-cookie|x-api-key|api[-_]?key|api[-_]?token|access[-_]?token|refresh[-_]?token|token|password|secret|client[-_]?secret|private[-_]?key)$c                "    t        | t              S N)
isinstancedictvalues    j/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/posthog/mcp/_sanitization.py
_is_recordr      s    eT""    c                >    t        t        j                  |             S r	   )bool_SENSITIVE_KEY_PATTERNmatch)keys    r   _should_redact_keyr   #   s    &,,S122r   c                    t        |       t        k\  rt        j                  |       ryt        j                  t        |       S )Nz?[binary data redacted - not supported by PostHog MCP analytics])len
_SIZE_GATE_BASE64_PATTERNr   _POSTHOG_TOKEN_PATTERNsub_REDACTED_VALUEr   s    r   _sanitize_stringr   '   s1    
5zZO$9$9%$@P!%%ou==r   c                H   | | S t        | t              rt        |       S t        | t              r| D cg c]  }t	        |       c}S t        | t
              s| S i }| j                         D ]-  \  }}t        t        |            rt        n
t	        |      ||<   / |S c c}w r	   )	r
   strr   listsanitize_captured_valuer   itemsr   r   )r   itemresultr   nesteds        r   r"   r"   -   s    }%&&%:?@%$'-%@@eT"F{{}V "#c(+ (0 	s % M As   Bc                    i | }|j                  d      t        |d         |d<   |j                  d      t        |d         |d<   |j                  d      t        |d         |d<   |S )zuSanitize an event's response, parameters, and user_intent. Returns a new
    shallow copy; does not mutate the input.response
parametersuser_intent)get_sanitize_responser"   )eventr%   s     r   sanitize_eventr.   B   s}     YFzz*)/z0BCzzz,+6vl7KL| zz- , 7}8M N}Mr   c                   | t        | t        t        t        f      st	        |       S t	        |       }t        |      s|S i |}|j                  d      }t        |t              r|D cg c]  }t        |       c}|d<   |j                  d      *t        |d   t        t        f      rt	        |d         |d<   |S c c}w )NcontentstructuredContent)r
   r   r!   r    r"   r   r+   _sanitize_content_block)r(   	sanitizedr%   r0   blocks        r   r,   r,   U   s    z(T44EF&x00'1Ii 	]Fjj#G'4 IPQ4U;Qyzz%&2z"#dD\8 '>&''
"# M Rs   *B?c                    t        |       s| S | j                  d      }|dk(  rt        |       S |dk(  rdddS |dk(  rdddS |dk(  rt        |       S |d	k(  rt        |       S dd
| ddS )NtypetextimagezA[image content redacted - not supported by PostHog MCP analytics]r6   r7   audiozA[audio content redacted - not supported by PostHog MCP analytics]resourceresource_linkz[unsupported content type "z4" redacted - not supported by PostHog MCP analytics])r   r+   r"   _sanitize_resource_block)r4   
block_types     r   r2   r2   l   s    e6"JV&u--WW
 	
 WW
 	
 Z'.._$&u---j\9mn r   c                l    | j                  d      }t        |t              r	d|v rdddS t        |       S )Nr;   blobr7   zK[binary resource content redacted - not supported by PostHog MCP analytics]r9   )r+   r
   r   r"   )r4   r;   s     r   r=   r=      s>    yy$H(D!f&8a
 	
 #5))r   c                    t        |       sdt        |       iS i }dD ]  }|| v st        | |         ||<    d| v rt        | d         |d<   d|iS )zBuild the sanitized ``$mcp_parameters`` payload from a request, stripping
    the injected ``context`` argument before logging.request)idjsonrpcmethodparams)r   r"   _build_captured_mcp_params)rB   captured_requestr   s      r   build_captured_mcp_parametersrI      ss     g27;<<')*'>$;GCL$IS! + 7%?@Q%R"'((r   c                    t        |       st        |       S i }| j                         D ]#  \  }}|dk(  rt        |      n
t        |      ||<   % |S )N	arguments)r   r"   r#   _build_captured_mcp_arguments)rF   capturedr   r   s       r   rG   rG      sZ    f&v..!Hlln
U k! *%0(/ 	 % Or   c                    t        |       st        |       S i }| j                         D ]  \  }}|t        v rt        |      ||<    |S r	   )r   r"   r#   _INJECTED_ARGUMENT_NAMES)rK   rM   r   r   s       r   rL   rL      sP    i &y11!Hoo'
U**/6 ( Or   )r   r   returnr   )r   r    rP   r   )r   r    rP   r    )r   r   rP   r   )r-   Dict[str, Any]rP   rQ   )r(   r   rP   r   )r4   r   rP   r   )r4   rQ   rP   r   )rB   r   rP   rQ   )rF   r   rP   r   )rK   r   rP   r   )__doc__
__future__r   retypingr   r   rO   r   compiler   r   r   
IGNORECASEr   r   r   r   r"   r.   r,   r2   r=   rI   rG   rL    r   r   <module>rY      s   
 # 	  : "**67
#$EF # MM	 #3>*&.6*)"	r   