
    pi                     H    d dl mZ d dlmZ  G d de      Z G d de      Zy)    )Jwt)	urlencodec                   Z     e Zd ZdZdZej                  ddf fd	Zd Zd Z	d Z
d	 Z xZS )
ClientCapabilityTokenz1A token to control permissions with Twilio ClientHS256i  Nc                    t         t        |   | j                  ||||d       || _        || _        d| _        i | _        d|v r | j                  di |d    d|v r | j                  di |d    d|v r | j                  di |d    yy)a  
        :param str account_sid: The account sid to which this token is granted access.
        :param str auth_token: The secret key used to sign the token. Note, this auth token is not
                               visible to the user of the token.
        :param int nbf: Time in secs from epic before which this token is considered invalid.
        :param int ttl: the amount of time in seconds from generation that this token is valid for.
        :param kwargs:


        :returns: A new CapabilityToken with zero permissions
        N)	algorithm
secret_keyissuernbfttlvalid_untilallow_client_outgoingallow_client_incomingallow_event_stream )superr   __init__	ALGORITHMaccount_sid
auth_tokenclient_namecapabilitiesr   r   r   )selfr   r   r   r   r   kwargs	__class__s          \/opt/services/ai/voice_agent/venv/lib/python3.12/site-packages/twilio/jwt/client/__init__.pyr   zClientCapabilityToken.__init__   s    ( 	#T3nn! 	4 	
 '$"f,&D&&I0G)HI"f,&D&&I0G)HI6)#D##Cf-A&BC *    c                 ~    t        ddd|i      }|r|j                  dt        |d             || j                  d<   y)z
        Allow the user of this token to make outgoing connections. Keyword arguments are passed
        to the application.

        :param str application_sid: Application to contact
        clientoutgoingappSid	appParamsTdoseqNScopeURI	add_paramr   r   )r   application_sidr   scopes       r   r   z+ClientCapabilityToken.allow_client_outgoing4   s?     ://JKOOK6)FG(-*%r   c                 J    || _         t        ddd|i      | j                  d<   y)z
        Allow the user of this token to accept incoming connections.

        :param str client_name: Client name to accept calls from
        r    incoming
clientNameN)r   r'   r   )r   r   s     r   r   z+ClientCapabilityToken.allow_client_incomingA   s-     '(0j<"=)
*%r   c                 ~    t        ddddi      }|r|j                  dt        |d             || j                  d<   y	)
zL
        Allow the user of this token to access their event stream.
        stream	subscribepathz/2010-04-01/EventsparamsTr$   eventsNr&   )r   r   r*   s      r   r   z(ClientCapabilityToken.allow_event_streamL   s@     ;9M0NOOOHid&CD&+(#r   c                 "   d| j                   v r5| j                  )| j                   d   j                  d| j                         | j                   j                         D cg c]  }|j	                          }}ddj                  |      iS c c}w )Nr!   r-   r*    )r   r   r(   values
to_payloadjoin)r   	scope_uri
scope_uriss      r   _generate_payloadz'ClientCapabilityToken._generate_payloadV   s    ***t/?/?/Kj)33L$BRBRS 594E4E4L4L4N
'0I  "

 
 *-..
s    B)__name__
__module____qualname____doc__r   r   GENERATEr   r   r   r   r;   __classcell__)r   s   @r   r   r      s5    ;I LL'DR.	
,/r   r   c                   *    e Zd ZdZddZd Zd Zd Zy)r'   zDA single capability granted to Twilio Client and scoped to a serviceNc                 6    || _         || _        |xs i | _        y N)service	privileger2   )r   rE   rF   r2   s       r   r   zScopeURI.__init__c   s    "lr   c                 "    || j                   |<   y rD   )r2   )r   keyvalues      r   r(   zScopeURI.add_paramh   s     Cr   c                 "   | j                   rUt        | j                   j                         D cg c]	  \  }}||f c}}      }t        |      }dj	                  |      }nd}dj	                  | j
                  | j                  |      S c c}}w )Nz?{} zscope:{}:{}{})r2   sorteditemsr   formatrE   rF   )r   kvsorted_paramsencoded_paramsparam_strings         r   r7   zScopeURI.to_payloadk   ss    ;;"t{{7H7H7J#Ktq!QF#KLM&}5N <<7LL%%dllDNNLQQ $Ls   B
c                 @    dj                  | j                               S )Nz<ScopeURI {}>)rN   r7   )r   s    r   __str__zScopeURI.__str__t   s    %%doo&788r   rD   )r<   r=   r>   r?   r   r(   r7   rU   r   r   r   r'   r'   `   s    N#
!R9r   r'   N)
twilio.jwtr   urllib.parser   r   objectr'   r   r   r   <module>rY      s&     "W/C W/t9v 9r   