@@ -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,24 @@ 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 : payload . roomConfig
169+ ? ( RoomConfiguration . fromJson (
170+ payload . roomConfig as Record < string , any > ,
171+ ) as RoomConfigurationObject )
172+ : undefined ,
173+ } ;
174+
175+ return mappedPayload ;
176+ }
177+
156178/**
157179 * A Session represents a manages connection to a Room which can contain Agents.
158180 * @public
0 commit comments