Skip to content

Commit 2d08022

Browse files
committed
fix(api): return kind and observability grants from TokenVerifier.verify
1 parent 082e83c commit 2d08022

2 files changed

Lines changed: 27 additions & 0 deletions

File tree

‎livekit-api/livekit/api/access_token.py‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,12 +270,23 @@ def verify(self, token: str, *, verify_signature: bool = True) -> Claims:
270270
}
271271
inference = InferenceGrants(**inference_dict)
272272

273+
observability_dict = claims.get("observability", dict())
274+
observability_dict = {camel_to_snake(k): v for k, v in observability_dict.items()}
275+
observability_dict = {
276+
k: v
277+
for k, v in observability_dict.items()
278+
if k in ObservabilityGrants.__dataclass_fields__
279+
}
280+
observability = ObservabilityGrants(**observability_dict)
281+
273282
grant_claims = Claims(
274283
identity=claims.get("sub", ""),
275284
name=claims.get("name", ""),
285+
kind=claims.get("kind", ""),
276286
video=video,
277287
sip=sip,
278288
inference=inference,
289+
observability=observability,
279290
attributes=claims.get("attributes", {}),
280291
metadata=claims.get("metadata", ""),
281292
sha256=claims.get("sha256", ""),

‎tests/api/test_access_token.py‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import jwt
55
import pytest
66
from livekit.api import AccessToken, TokenVerifier, VideoGrants, SIPGrants
7+
from livekit.api.access_token import ObservabilityGrants
78
from livekit.protocol.room import RoomConfiguration
89
from livekit.protocol.agent_dispatch import RoomAgentDispatch
910

@@ -116,3 +117,18 @@ def test_verify_token_missing_exp() -> None:
116117
token_verifier = TokenVerifier(TEST_API_KEY, TEST_API_SECRET)
117118
with pytest.raises(Exception):
118119
token_verifier.verify(token)
120+
121+
122+
def test_verify_token_preserves_kind_and_observability() -> None:
123+
token = (
124+
AccessToken(TEST_API_KEY, TEST_API_SECRET)
125+
.with_identity("test_identity")
126+
.with_kind("agent")
127+
.with_observability_grants(ObservabilityGrants(write=True))
128+
.to_jwt()
129+
)
130+
131+
claims = TokenVerifier(TEST_API_KEY, TEST_API_SECRET).verify(token)
132+
assert claims.kind == "agent"
133+
assert claims.observability is not None
134+
assert claims.observability.write is True

0 commit comments

Comments
 (0)