
    /j$                        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  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\ " S
 S5      5       r\ " S S5      5       r\ " S S5      5       r\ " S S5      5       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)	dataclass)OptionalListLiteral)MessageToDict	ParseDict)RoomConfiguration   )hours   )minutesc                   D   \ 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\\   \S'   Srg)VideoGrants   Nroom_create	room_listroom_record
room_admin	room_join roomdestination_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    r!   __static_attributes__r"       I/app/agent/.venv/lib/python3.13/site-packages/livekit/api/access_token.pyr   r      s     #'K$& $Ix~$"&K$& "&J% $Ix~$D#N '+hsm* 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)	SIPGrantsH   Fadmincallr"   N)	r#   r$   r%   r&   r0   r'   r(   r1   r*   r"   r+   r,   r.   r.   H   s     E4D$r+   r.   c                   $    \ rS rSr% Sr\\S'   Srg)InferenceGrantsP   Fperformr"   N)r#   r$   r%   r&   r5   r'   r(   r*   r"   r+   r,   r3   r3   P   s     GTr+   r3   c                   $    \ rS rSr% Sr\\S'   Srg)ObservabilityGrantsV   Fwriter"   N)r#   r$   r%   r&   r9   r'   r(   r*   r"   r+   r,   r7   r7   V   s     E4r+   r7   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\\   \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)Claims\   r   identitynamekindmetadataNvideosip	inferenceobservability
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>o   s<    7<(7<tq*RSWYRY*$Q'*u( (s   	///)dict_factory
roomConfig)dataclassesasdictrH   r   )selfclaimss     r,   rU   Claims.asdictk   s?    ##
 #01A1A#BF< r+   r"   )r#   r$   r%   r&   r=   r)   r(   r>   r?   r@   rA   r   r   rB   r.   rC   r3   rD   r7   rE   dictrF   rG   rH   r	   rU   r*   r"   r+   r,   r;   r;   \   s    HcD#ND#NHc#'E8K '#C)	#+/Ix(/37M8/07+/Jc3h(/ FHSM !%K#%/3K+,3
 
r+   r;   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\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)"AccessTokenx   )standardegressingressrB   r!   Napi_key
api_secretrI   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
ValueErrorr`   ra   r;   rW   r=   DEFAULT_TTLttl)rV   r`   ra   s      r,   __init__AccessToken.__init__{   s`    
 9RYY'89B299-A#B
jABB$h r+   rj   c                     Xl         U $ N)rj   )rV   rj   s     r,   with_ttlAccessToken.with_ttl   s    r+   grantsc                 &    XR                   l        U $ rn   )rW   rA   rV   rq   s     r,   with_grantsAccessToken.with_grants   s    "r+   c                 &    XR                   l        U $ rn   )rW   rB   rs   s     r,   with_sip_grantsAccessToken.with_sip_grants   s     r+   c                 &    XR                   l        U $ rn   )rW   rD   rs   s     r,   with_observability_grants%AccessToken.with_observability_grants   s    $*!r+   c                 &    XR                   l        U $ rn   )rW   rC   rs   s     r,   with_inference_grants!AccessToken.with_inference_grants   s     &r+   r=   c                     Xl         U $ rn   )r=   )rV   r=   s     r,   with_identityAccessToken.with_identity   s     r+   r?   c                 &    XR                   l        U $ rn   )rW   r?   )rV   r?   s     r,   	with_kindAccessToken.with_kind       r+   r>   c                 &    XR                   l        U $ rn   )rW   r>   )rV   r>   s     r,   	with_nameAccessToken.with_name   r   r+   r@   c                 &    XR                   l        U $ rn   )rW   r@   )rV   r@   s     r,   with_metadataAccessToken.with_metadata   s    'r+   rE   c                 &    XR                   l        U $ rn   )rW   rE   )rV   rE   s     r,   with_attributesAccessToken.with_attributes   s    !+r+   rF   c                 &    XR                   l        U $ rn   )rW   rF   )rV   rF   s     r,   with_sha256AccessToken.with_sha256   s    #r+   presetc                 &    XR                   l        U $ rn   )rW   rG   )rV   r   s     r,   with_room_presetAccessToken.with_room_preset       "(r+   configc                 &    XR                   l        U $ rn   )rW   rH   )rV   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)rW   rA   r   r=   r   rh   rU   updater`   calendartimegmdatetimenowtimezoneutcutctimetuplerj   jwtencodera   )rV   rA   
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+   )r`   ra   rW   r=   rj   NN) r#   r$   r%   r&   r   ParticipantKindr   r)   rk   r   	timedeltaro   r   rt   r.   rw   r7   rz   r3   r}   r   r   r   r   rY   r   r   r   r	   r   r   r*   r"   r+   r,   r[   r[   x   sS   MNO "&$(# SM 
	&H.. = + - i M 0C  O  c m o - c m c m $sCx. ] # - s } '8 ] J Jr+   r[   c            
       |    \ rS rSr  S\S.S\\   S\\   S\R                  SS4S jjjr	S	S
.S\S\
S\4S jjrSrg)TokenVerifier   N)leewayr`   ra   r   rI   c                    U=(       d    [         R                  " S5      nU=(       d    [         R                  " S5      nXl        X l        X0l        g )Nrc   rd   )rf   rg   r`   ra   _leeway)rV   r`   ra   r   s       r,   rk   TokenVerifier.__init__   s;     9RYY'89B299-A#B
$r+   T)verify_signaturetokenr   c                J   U(       a-  U R                   (       a  U R                  (       d  [        S5      e[        R                  " UU R                  =(       d    SU R                   =(       d    SS/U R
                  R                  5       SU0S9nUR                  S[        5       5      nUR                  5        VVs0 s H  u  pV[        U5      U_M     nnnUR                  5        VVs0 s H  u  pVU[        R                  ;   d  M  XV_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  pV[        U5      U_M     nnnUR                  5        VVs0 s H  u  pVU[        R                  ;   d  M  XV_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  pV[        U5      U_M     n
nnU
R                  5        VVs0 s H  u  pVU[        R                  ;   d  M  XV_M     n
nn[        S0 U
D6n[        UR                  S	S5      UR                  S
S5      U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 s  snnf s  snnf )Nre   r   r   r   )keyissuer
algorithmsr   optionsrA   rB   rC   r   r>   rE   r@   rF   )r=   r>   rA   rB   rC   rE   r@   rF   
roomPresetrS   T)ignore_unknown_fieldsr"   )r`   ra   rh   r   decoder   total_secondsgetrY   rM   camel_to_snaker   __dataclass_fields__r.   r3   r;   rG   r   r	   rH   )rV   r   r   rW   
video_dictrN   rO   rA   sip_dictrB   inference_dictrC   grant_claimss                r,   verifyTokenVerifier.verify   s   T\\ABB%2<<%2y<<--/')9:
 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]#(#K8;I;O;O;QR;Q41.+Q.;QR+113
3TQqO<`<`7`DAD3 	 
 $5n5	ZZr*FB'zz,3ZZ
B/::h+	
 ::l##'-zz,'?L$::l##'0

<(!#&*(L$ I Kc G] S
s6   <L*LL	L7LLLL"L)r   r`   ra   r   )r#   r$   r%   r&   DEFAULT_LEEWAYr   r)   r   r   rk   r'   r;   r   r*   r"   r+   r,   r   r      sr     "&$(
 &4# SM
 "" 
 >B 1C 1d 1f 1 1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rn   )
capitalize).0iwords      r,   	<genexpr>'snake_to_lower_camel.<locals>.<genexpr>  s"     [CZ4??$t3CZs   (*r   )join	enumeratesplitr   s    r,   rL   rL     s%    77[9QWWUX\CZ[[[r+   )r   r   r   rf   r   rT   r   typingr   r   r   google.protobuf.json_formatr   r   livekit.protocol.roomr	   r   ri   r   r   r.   r3   r7   r;   r[   r   r)   r   rL   r"   r+   r,   <module>r      s     	  	 
  ! * * @ 3  q)##A. %! %! %!P      
   
   6[J [J|@ @F6c 6\C \r+   