Skip to content

Commit b0045db

Browse files
committed
fix(api): return kind and observability grants from TokenVerifier.verify
1 parent bdeadba commit b0045db

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
@@ -322,12 +322,23 @@ def verify(self, token: str, *, verify_signature: bool = True) -> Claims:
322322
}
323323
inference = InferenceGrants(**inference_dict)
324324

325+
observability_dict = claims.get("observability", dict())
326+
observability_dict = {camel_to_snake(k): v for k, v in observability_dict.items()}
327+
observability_dict = {
328+
k: v
329+
for k, v in observability_dict.items()
330+
if k in ObservabilityGrants.__dataclass_fields__
331+
}
332+
observability = ObservabilityGrants(**observability_dict)
333+
325334
grant_claims = Claims(
326335
identity=claims.get("sub", ""),
327336
name=claims.get("name", ""),
337+
kind=claims.get("kind", ""),
328338
video=video,
329339
sip=sip,
330340
inference=inference,
341+
observability=observability,
331342
attributes=claims.get("attributes", {}),
332343
metadata=claims.get("metadata", ""),
333344
sha256=claims.get("sha256", ""),

‎tests/api/test_access_token.py‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
TokenVerifier,
1313
VideoGrants,
1414
)
15+
from livekit.api.access_token import ObservabilityGrants
1516
from livekit.protocol.room import RoomConfiguration
1617
from livekit.protocol.agent_dispatch import RoomAgentDispatch
1718

@@ -157,3 +158,18 @@ def test_verify_token_missing_exp() -> None:
157158
token_verifier = TokenVerifier(TEST_API_KEY, TEST_API_SECRET)
158159
with pytest.raises(Exception):
159160
token_verifier.verify(token)
161+
162+
163+
def test_verify_token_preserves_kind_and_observability() -> None:
164+
token = (
165+
AccessToken(TEST_API_KEY, TEST_API_SECRET)
166+
.with_identity("test_identity")
167+
.with_kind("agent")
168+
.with_observability_grants(ObservabilityGrants(write=True))
169+
.to_jwt()
170+
)
171+
172+
claims = TokenVerifier(TEST_API_KEY, TEST_API_SECRET).verify(token)
173+
assert claims.kind == "agent"
174+
assert claims.observability is not None
175+
assert claims.observability.write is True

0 commit comments

Comments
 (0)