
    h}                     ~   S SK r S SKrS SKrS SKrS SKrS SKrS SKJrJrJ	r	  S SK
JrJr  S SKJr  \R                  " SS9r\R                  " SS9r\R$                   " S	 S
5      5       r\R$                   " S S5      5       r\R$                   " S S5      5       r " S S5      r " S S5      rS\4S jrS\4S jrg)    N)OptionalListLiteral)MessageToDict	ParseDict)RoomConfiguration   )hours   )minutesc                   0   \ rS rSr% Sr\\   \S'   Sr\\   \S'   Sr	\\   \S'   Sr
\\   \S'   Sr\\   \S'   Sr\\S	'   S
r\\S'   S
r\\S'   S
r\\S'   Sr\\\      \S'   Sr\\   \S'   Sr\\   \S'   Sr\\   \S'   Sr\\   \S'   Sr\\   \S'   Srg)VideoGrants   Nroom_create	room_listroom_record
room_admin	room_join roomTcan_publishcan_subscribecan_publish_datacan_publish_sourcescan_update_own_metadataingress_adminhiddenrecorderagent )__name__
__module____qualname____firstlineno__r   r   bool__annotations__r   r   r   r   r   strr   r   r   r   r   r   r   r   r   r   __static_attributes__r        J/var/www/html/env/lib/python3.13/site-packages/livekit/api/access_token.pyr   r      s     #'K$& $Ix~$"&K$& "&J% $Ix~$D#N KM4!d!
 04$s),3 /3Xd^2 %)M8D>( "FHTN!  $Hhtn# !E8D> r)   r   c                   2    \ rS rSr% Sr\\S'   Sr\\S'   Srg)	SIPGrantsD   Fadmincallr    N)	r!   r"   r#   r$   r.   r%   r&   r/   r(   r    r)   r*   r,   r,   D   s     E4D$r)   r,   c                       \ rS rSr% Sr\\S'   Sr\\S'   Sr\\S'   Sr	\\S'   Sr
\\   \S'   Sr\\   \S	'   Sr\\\\4      \S
'   Sr\\   \S'   Sr\\   \S'   Sr\\   \S'   S\4S jrSrg)ClaimsL   r   identitynamekindmetadataNvideosip
attributessha256room_presetroom_configreturnc                     [         R                  " U S S9nU R                  (       a  [        U R                  5      US'   U$ )Nc                 j    U  VVs0 s H  u  pUc  M
  US:w  d  M  [        U5      U_M      snn$ s  snnf )Nr   )snake_to_lower_camel)itemskvs      r*   <lambda>Claims.asdict.<locals>.<lambda>]   s<    7<(7<tq*RSWYRY*$Q'*u( (s   	///)dict_factory
roomConfig)dataclassesasdictr<   r   )selfclaimss     r*   rI   Claims.asdictY   s?    ##
 #01A1A#BF< r)   r    )r!   r"   r#   r$   r3   r'   r&   r4   r5   r6   r7   r   r   r8   r,   r9   dictr:   r;   r<   r   rI   r(   r    r)   r*   r1   r1   L   s    HcD#ND#NHc#'E8K '#C)	#+/Jc3h(/ FHSM !%K#%/3K+,3
 
r)   r1   c                   :   \ rS rSr\S   r  SS\\   S\\   SS4S jjrS\	R                  SS 4S	 jrS
\SS 4S jrS
\SS 4S jrS\SS 4S jrS\SS 4S jrS\SS 4S jrS\SS 4S jrS\\\4   SS 4S jrS\SS 4S jrS\SS 4S jrS\SS 4S jrS\4S jrSrg) AccessTokenf   )standardegressingressr8   r   Napi_key
api_secretr=   c                    U=(       d    [         R                  " S5      nU=(       d    [         R                  " S5      nU(       a  U(       d  [        S5      eXl        X l        [        5       U l        SU l        [        U l	        g )NLIVEKIT_API_KEYLIVEKIT_API_SECRET"api_key and api_secret must be setr   )
osgetenv
ValueErrorrT   rU   r1   rK   r3   DEFAULT_TTLttl)rJ   rT   rU   s      r*   __init__AccessToken.__init__i   s`    
 9RYY'89B299-A#B
jABB$h r)   r^   c                     Xl         U $ N)r^   )rJ   r^   s     r*   with_ttlAccessToken.with_ttl|   s    r)   grantsc                 &    XR                   l        U $ rb   )rK   r7   rJ   re   s     r*   with_grantsAccessToken.with_grants   s    "r)   c                 &    XR                   l        U $ rb   )rK   r8   rg   s     r*   with_sip_grantsAccessToken.with_sip_grants   s     r)   r3   c                     Xl         U $ rb   )r3   )rJ   r3   s     r*   with_identityAccessToken.with_identity   s     r)   r5   c                 &    XR                   l        U $ rb   )rK   r5   )rJ   r5   s     r*   	with_kindAccessToken.with_kind       r)   r4   c                 &    XR                   l        U $ rb   )rK   r4   )rJ   r4   s     r*   	with_nameAccessToken.with_name   rs   r)   r6   c                 &    XR                   l        U $ rb   )rK   r6   )rJ   r6   s     r*   with_metadataAccessToken.with_metadata   s    'r)   r9   c                 &    XR                   l        U $ rb   )rK   r9   )rJ   r9   s     r*   with_attributesAccessToken.with_attributes   s    !+r)   r:   c                 &    XR                   l        U $ rb   )rK   r:   )rJ   r:   s     r*   with_sha256AccessToken.with_sha256   s    #r)   presetc                 &    XR                   l        U $ rb   )rK   r;   )rJ   r   s     r*   with_room_presetAccessToken.with_room_preset       "(r)   configc                 &    XR                   l        U $ rb   )rK   r<   )rJ   r   s     r*   with_room_configAccessToken.with_room_config   r   r)   c           
         U R                   R                  nU(       a>  UR                  (       a-  U R                  (       a  UR                  (       d  [        S5      eU R                   R                  5       nUR                  U R                  U R                  [        R                  " [        R                  R                  [        R                  R                  5      R                  5       5      [        R                  " [        R                  R                  [        R                  R                  5      U R                   -   R                  5       5      S.5        ["        R$                  " X R&                  SS9$ )Nz1identity and room must be set when joining a room)subissnbfexpHS256)	algorithm)rK   r7   r   r3   r   r\   rI   updaterT   calendartimegmdatetimenowtimezoneutcutctimetupler^   jwtencoderU   )rJ   r7   
jwt_claimss      r*   to_jwtAccessToken.to_jwt   s    !!U__dmm5::PQQ [['')
}}||x'8'8'<'<X=N=N=R=R'S'`'`'bc&&**8+<+<+@+@ADHHLZZ\			
 zz*ooIIr)   )rT   rU   rK   r3   r^   NN)r!   r"   r#   r$   r   ParticipantKindr   r'   r_   r   	timedeltarc   r   rh   r,   rk   rn   rq   ru   rx   rM   r{   r~   r   r   r   r   r(   r    r)   r*   rO   rO   f   s,   MNO "&$(# SM 
	&H.. = + - i M c m o - c m c m $sCx. ] # - s } '8 ] J Jr)   rO   c            
       p    \ rS rSr  S\S.S\\   S\\   S\R                  SS4S jjjr	S	\S\
4S
 jrSrg)TokenVerifier   N)leewayrT   rU   r   r=   c                    U=(       d    [         R                  " S5      nU=(       d    [         R                  " S5      nU(       a  U(       d  [        S5      eXl        X l        X0l        g )NrW   rX   rY   )rZ   r[   r\   rT   rU   _leeway)rJ   rT   rU   r   s       r*   r_   TokenVerifier.__init__   sL     9RYY'89B299-A#B
jABB$r)   tokenc                    [         R                  " UU R                  U R                  S/U R                  R                  5       S9nUR                  S[        5       5      nUR                  5        VVs0 s H  u  pE[        U5      U_M     nnnUR                  5        VVs0 s H  u  pEU[        R                  ;   d  M  XE_M     nnn[        S0 UD6nUR                  S[        5       5      nUR                  5        VVs0 s H  u  pE[        U5      U_M     nnnUR                  5        VVs0 s H  u  pEU[        R                  ;   d  M  XE_M     nnn[        S0 UD6n[        UR                  SS5      UR                  SS5      UUUR                  S0 5      UR                  S	S5      UR                  S
S5      S9n	UR                  S5      (       a  UR                  S5      U	l        UR                  S5      (       a'  [        UR                  S5      [!        5       SS9U	l        U	$ s  snnf s  snnf s  snnf s  snnf )Nr   )issuer
algorithmsr   r7   r8   r   r   r4   r9   r6   r:   )r3   r4   r7   r8   r9   r6   r:   
roomPresetrG   T)ignore_unknown_fieldsr    )r   decoderU   rT   r   total_secondsgetrM   rA   camel_to_snaker   __dataclass_fields__r,   r1   r;   r   r   r<   )
rJ   r   rK   
video_dictrB   rC   r7   sip_dictr8   grant_claimss
             r*   verifyTokenVerifier.verify   s   OO<<y<<--/
 ZZ0
7A7G7G7IJ7ItqnQ'*7I
J'1'7'7'9c'9tqQ+BbBb=bdad'9
c)j)::eTV,5=^^5EF5ETQN1%q(5EF%-^^%5]%5TQi>\>\9\DAD%5]#(#ZZr*FB'zz,3ZZ
B/::h+
 ::l##'-zz,'?L$::l##'0

<(!#&*(L$ 9 Kc G]s$   3H*!H0?H0 H6.H<H<)r   rT   rU   r   )r!   r"   r#   r$   DEFAULT_LEEWAYr   r'   r   r   r_   r1   r   r(   r    r)   r*   r   r      s`     "&$(
 &4# SM
 "" 
"&C &F &r)   r   tc                 N    [         R                  " SSU 5      R                  5       $ )Nz(?<!^)(?=[A-Z])_)rer   lowerr   s    r*   r   r      s    66$c1-3355r)   c                 b    SR                  S [        U R                  S5      5       5       5      $ )Nr   c              3   X   #    U  H   u  pU(       a  UR                  5       OUv   M"     g 7frb   )
capitalize).0iwords      r*   	<genexpr>'snake_to_lower_camel.<locals>.<genexpr>   s"     [CZ4??$t3CZs   (*r   )join	enumeratesplitr   s    r*   r@   r@      s%    77[9QWWUX\CZ[[[r)   )r   rH   r   r   rZ   r   typingr   r   r   google.protobuf.json_formatr   r   livekit.protocol.roomr   r   r]   r   	dataclassr   r,   r1   rO   r   r'   r   r@   r    r)   r*   <module>r      s      	  	 
 * * @ 3  q)##A. "! "! "!J      2SJ SJl8 8v6c 6\C \r)   