Skip to content

Commit e8811ea

Browse files
committed
Update access_token.py
1 parent 12072a8 commit e8811ea

File tree

1 file changed

+17
-6
lines changed

1 file changed

+17
-6
lines changed

livekit-api/livekit/api/access_token.py

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@
1313
# limitations under the License.
1414

1515
import calendar
16-
import dataclasses
1716
import re
1817
import datetime
1918
import os
2019
import jwt
20+
from dataclasses import dataclass
2121
from typing import Optional, List, Literal
2222
from google.protobuf.json_format import MessageToDict, ParseDict
2323

@@ -27,7 +27,7 @@
2727
DEFAULT_LEEWAY = datetime.timedelta(minutes=1)
2828

2929

30-
@dataclasses.dataclass
30+
@dataclass
3131
class VideoGrants:
3232
# actions on rooms
3333
room_create: Optional[bool] = None
@@ -68,21 +68,27 @@ class VideoGrants:
6868
agent: Optional[bool] = None
6969

7070

71-
@dataclasses.dataclass
71+
@dataclass
7272
class SIPGrants:
7373
# manage sip resources
7474
admin: bool = False
7575
# make outbound calls
7676
call: bool = False
7777

7878

79-
@dataclasses.dataclass
79+
@dataclass
8080
class InferenceGrants:
8181
# perform inference
8282
perform: bool = False
8383

8484

85-
@dataclasses.dataclass
85+
@dataclass
86+
class ObservabilityGrants:
87+
# write grants to publish observability data
88+
write: bool = False
89+
90+
91+
@dataclass
8692
class Claims:
8793
identity: str = ""
8894
name: str = ""
@@ -91,13 +97,14 @@ class Claims:
9197
video: Optional[VideoGrants] = None
9298
sip: Optional[SIPGrants] = None
9399
inference: Optional[InferenceGrants] = None
100+
observability: Optional[ObservabilityGrants] = None
94101
attributes: Optional[dict[str, str]] = None
95102
sha256: Optional[str] = None
96103
room_preset: Optional[str] = None
97104
room_config: Optional[RoomConfiguration] = None
98105

99106
def asdict(self) -> dict:
100-
# in order to produce minimal JWT size, exclude None or empty values
107+
# in order to produce minimal jwt size, exclude None or empty values
101108
claims = dataclasses.asdict(
102109
self,
103110
dict_factory=lambda items: {
@@ -143,6 +150,10 @@ def with_sip_grants(self, grants: SIPGrants) -> "AccessToken":
143150
self.claims.sip = grants
144151
return self
145152

153+
def with_observability_grants(self, grants: ObservabiliyGrants) -> "AccessToken":
154+
self.claims.observability = grants
155+
return self
156+
146157
def with_inference_grants(self, grants: InferenceGrants) -> "AccessToken":
147158
self.claims.inference = grants
148159
return self

0 commit comments

Comments
 (0)