
    hg                         d dl Z d dlZd dlmZmZmZ d dlmZmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZmZ  G d d	ej                  Z G d
 de
j                  ZdS )    N)ListOptionalUnion)CloseReasonOpcode)flow)serializable)
websockets)humanstrutilsc                       e Zd ZdZ	 ddededeeef         de	e
         ded	dfd
Zed             Zd Zd Zd Zd ZdS )WebSocketMessagezB
    A WebSocket message sent from one endpoint to the other.
    NFtypefrom_clientcontent	timestampkilledreturnc                     t          |          | _        	 || _        	 || _        	 |pt	          j                    | _        	 || _        d S N)r   r   r   r   timer   r   )selfr   r   r   r   r   s         d/var/www/fb-scrape/myenv/lib/python3.11/site-packages/seleniumwire/thirdparty/mitmproxy/websocket.py__init__zWebSocketMessage.__init__   sK     4LL	S&;E ) 8TY[[E\\    c                      | | S r    )clsstates     r   
from_statezWebSocketMessage.from_state    s    sE{r   c                 \    t          | j                  | j        | j        | j        | j        fS r   )intr   r   r   r   r   r   s    r   	get_statezWebSocketMessage.get_state$   s$    49~~t/t~t{ZZr   c                 z    |\  | _         | _        | _        | _        | _        t          | j                   | _         d S r   )r   r   r   r   r   r   )r   r   s     r   	set_statezWebSocketMessage.set_state'   s2    QVN	4#T\4>4;49%%			r   c                     | j         t          j        k    r'd                    t	          | j                            S d                    t          j        | j                            S )Nztext message: {}zbinary message: {})r   r   TEXTformatreprr   r   bytes_to_escaped_strr#   s    r   __repr__zWebSocketMessage.__repr__+   sP    9##%,,T$,-?-?@@@'..x/LT\/Z/Z[[[r   c                     d| _         dS )z~
        Kill this message.

        It will not be sent to the other endpoint. This has no effect in streaming mode.
        TN)r   r#   s    r   killzWebSocketMessage.kill1   s     r   )NF)__name__
__module____qualname____doc__r"   boolr   bytesstrr   floatr   classmethodr    r$   r&   r,   r.   r   r   r   r   r      s         
 w|] ]]&*]5:5#:5F]S[\aSb]qu]	] ] ] ]   [[ [ [& & &\ \ \    r   r   c                        e Zd ZdZd fd	Zej        j                                        Ze	                     e
ee         eeeeeeeeee                      fdZed             Zd Zded	efd
Zd Z xZS )WebSocketFlowzS
    A WebSocketFlow is a simplified representation of a Websocket connection.
    Nc                 L   t                                          d|||           g | _        	 d| _        	 t          j        | _        	 d| _        	 d| _        	 d| _	        	 || _
        	 d| _        	 t          j        d          | _        t          j        d          | _        |rt!          j        |j        j                  | _        t!          j        |j        j                  | _        t!          j        |j        j                  | _        t!          j        |j        j                  | _        t!          j        |j        j                  | _        t!          j        |j        j                  | _        d S d| _        d| _        d| _        d| _        d| _        d| _        d S )	N	websocketclientz(message missing)zunknown status codeF   )maxsize )superr   messagesclose_senderr   NORMAL_CLOSURE
close_codeclose_messageclose_reasonstreamhandshake_flowendedqueueQueue_inject_messages_client_inject_messages_serverr
   get_client_keyrequestheaders
client_keyget_protocolclient_protocolget_extensionsclient_extensionsget_server_acceptresponseserver_acceptserver_protocolserver_extensions)r   client_connserver_connrH   live	__class__s        r   r   zWebSocketFlow.__init__?   sz   k;EEE027$B%4#0&1%R,G
A',{1'='='=$',{1'='='=$ 	((78N8VWWDO#-#:>;Q;Y#Z#ZD %/%>~?U?]%^%^D"!+!=n>U>]!^!^D#-#:>;R;Z#[#[D %/%>~?V?^%_%_D""" DO#%D %'D"!#D#%D %'D"""r   )rA   rB   rD   rE   rF   rQ   rS   rU   rX   rY   rZ   c                 x    t                                                      }t          |d                   |d<   |S )NrD   )r@   r$   r"   )r   dr^   s     r   r$   zWebSocketFlow.get_statex   s2    GGao..,r   c                 J     | d d d           }|                     |           |S r   )r&   )r   r   fs      r   r    zWebSocketFlow.from_state}   s,    CdD!!	Er   c                 P    d                     t          | j                            S )Nz<WebSocketFlow ({} messages)>)r)   lenrA   r#   s    r   r,   zWebSocketFlow.__repr__   s     .55c$-6H6HIIIr   messager   c                     d                     |j        t          j        | j        j                  t          j        | j        j                  |j        rdnd| j        j	        j
                  S )NzL{client} {direction} WebSocket {type} message {direction} {server}{endpoint}z->z<-)r   r<   server	directionendpoint)r)   r   r   format_addressr[   addressr\   r   rH   rO   path)r   re   s     r   message_infozWebSocketFlow.message_info   sh    ]dd'(8(@AA'(8(@AA%1;ddt(05 e 
 
 	
r   c                     || j         k    r| j                            |           dS || j        k    r| j                            |           dS t          d          )a  
        Inject and send a full WebSocket message to the remote endpoint.
        This might corrupt your WebSocket connection! Be careful!

        The endpoint needs to be either flow.client_conn or flow.server_conn.

        If ``payload`` is of type ``bytes`` then the message is flagged as
        being binary If it is of type ``str`` encoded as UTF-8 and sent as
        text.

        :param payload: The message body to send.
        :type payload: ``bytes`` or ``str``
        zInvalid endpointN)r[   rL   putr\   rM   
ValueError)r   ri   payloads      r   inject_messagezWebSocketFlow.inject_message   si     t'''(,,W55555)))(,,W55555/000r   r   )r/   r0   r1   r2   r   r   Flow_stateobject_attributescopyupdatedictr   r   r5   r"   r$   r7   r    r,   rm   rr   __classcell__)r^   s   @r   r9   r9   :   s+        $( $( $( $( $( $(L #i?DDFF""44&'$ $ $   "    
   [
J J J
$4 
 
 
 
 
1 1 1 1 1 1 1r   r9   )rJ   r   typingr   r   r   wsproto.frame_protocolr   r   !seleniumwire.thirdparty.mitmproxyr   +seleniumwire.thirdparty.mitmproxy.coretypesr	   %seleniumwire.thirdparty.mitmproxy.netr
   'seleniumwire.thirdparty.mitmproxy.utilsr   r   Serializabler   rs   r9   r   r   r   <module>r      s	     ( ( ( ( ( ( ( ( ( ( 6 6 6 6 6 6 6 6 2 2 2 2 2 2 D D D D D D < < < < < < C C C C C C C C* * * * *|0 * * *Zi1 i1 i1 i1 i1DI i1 i1 i1 i1 i1r   