@@ -10,13 +10,17 @@ import {
1010 TokenSourceFixed ,
1111 TokenSourceFetchOptions ,
1212 RoomConnectOptions ,
13+ TokenPayload ,
14+ RoomConfigurationObject ,
1315} from 'livekit-client' ;
1416import { EventEmitter } from 'events' ;
1517
1618import { useMaybeRoomContext } from '../context' ;
1719import { AgentState , useAgent , useAgentTimeoutIdStore } from './useAgent' ;
1820import { TrackReference } from '@livekit/components-core' ;
1921import { useLocalParticipant } from './useLocalParticipant' ;
22+ import { decodeJwt } from 'jose' ;
23+ import { RoomConfiguration } from '@livekit/protocol' ;
2024
2125/** @public */
2226export enum SessionEvent {
@@ -153,6 +157,22 @@ type UseSessionCommonOptions = {
153157type UseSessionConfigurableOptions = UseSessionCommonOptions & TokenSourceFetchOptions ;
154158type UseSessionFixedOptions = UseSessionCommonOptions ;
155159
160+ /** Given a LiveKit generated participant token, decodes and returns the associated {@link TokenPayload} data. */
161+ export function decodeTokenPayload ( token : string ) {
162+ const payload = decodeJwt < Omit < TokenPayload , 'roomConfig' > > ( token ) ;
163+
164+ const { roomConfig, ...rest } = payload ;
165+
166+ const mappedPayload : TokenPayload = {
167+ ...rest ,
168+ roomConfig : roomConfig
169+ ? ( RoomConfiguration . fromJson ( roomConfig as Record < string , any > ) as RoomConfigurationObject )
170+ : undefined ,
171+ } ;
172+
173+ return mappedPayload ;
174+ }
175+
156176/**
157177 * A Session represents a manages connection to a Room which can contain Agents.
158178 * @public
0 commit comments