Skip to content

Commit 5b554a4

Browse files
authored
add ObservabilityGrants (#505)
1 parent 12072a8 commit 5b554a4

File tree

1 file changed

+18
-6
lines changed

1 file changed

+18
-6
lines changed

livekit-api/livekit/api/access_token.py

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,12 @@
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+
import dataclasses
21+
from dataclasses import dataclass
2122
from typing import Optional, List, Literal
2223
from google.protobuf.json_format import MessageToDict, ParseDict
2324

@@ -27,7 +28,7 @@
2728
DEFAULT_LEEWAY = datetime.timedelta(minutes=1)
2829

2930

30-
@dataclasses.dataclass
31+
@dataclass
3132
class VideoGrants:
3233
# actions on rooms
3334
room_create: Optional[bool] = None
@@ -68,21 +69,27 @@ class VideoGrants:
6869
agent: Optional[bool] = None
6970

7071

71-
@dataclasses.dataclass
72+
@dataclass
7273
class SIPGrants:
7374
# manage sip resources
7475
admin: bool = False
7576
# make outbound calls
7677
call: bool = False
7778

7879

79-
@dataclasses.dataclass
80+
@dataclass
8081
class InferenceGrants:
8182
# perform inference
8283
perform: bool = False
8384

8485

85-
@dataclasses.dataclass
86+
@dataclass
87+
class ObservabilityGrants:
88+
# write grants to publish observability data
89+
write: bool = False
90+
91+
92+
@dataclass
8693
class Claims:
8794
identity: str = ""
8895
name: str = ""
@@ -91,13 +98,14 @@ class Claims:
9198
video: Optional[VideoGrants] = None
9299
sip: Optional[SIPGrants] = None
93100
inference: Optional[InferenceGrants] = None
101+
observability: Optional[ObservabilityGrants] = None
94102
attributes: Optional[dict[str, str]] = None
95103
sha256: Optional[str] = None
96104
room_preset: Optional[str] = None
97105
room_config: Optional[RoomConfiguration] = None
98106

99107
def asdict(self) -> dict:
100-
# in order to produce minimal JWT size, exclude None or empty values
108+
# in order to produce minimal jwt size, exclude None or empty values
101109
claims = dataclasses.asdict(
102110
self,
103111
dict_factory=lambda items: {
@@ -143,6 +151,10 @@ def with_sip_grants(self, grants: SIPGrants) -> "AccessToken":
143151
self.claims.sip = grants
144152
return self
145153

154+
def with_observability_grants(self, grants: ObservabilityGrants) -> "AccessToken":
155+
self.claims.observability = grants
156+
return self
157+
146158
def with_inference_grants(self, grants: InferenceGrants) -> "AccessToken":
147159
self.claims.inference = grants
148160
return self

0 commit comments

Comments
 (0)