Skip to content

Commit 0a9c2c5

Browse files
committed
feat: temporarily copy decodeTokenPayload into this project from livekit-client
I should be able to get rid of this once this is merged: livekit/client-sdk-js#1710
1 parent ffd6617 commit 0a9c2c5

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

packages/react/etc/components-react.api.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ import { SourcesArray } from '@livekit/components-core';
5858
import { SVGProps } from 'react';
5959
import { TextStreamData } from '@livekit/components-core';
6060
import { ToggleSource } from '@livekit/components-core';
61+
import { TokenPayload } from 'livekit-client';
6162
import { TokenSourceConfigurable } from 'livekit-client';
6263
import { TokenSourceFetchOptions } from 'livekit-client';
6364
import { TokenSourceFixed } from 'livekit-client';
@@ -300,6 +301,9 @@ export interface ControlBarProps extends React_2.HTMLAttributes<HTMLDivElement>
300301
variation?: 'minimal' | 'verbose' | 'textOnly';
301302
}
302303

304+
// @public
305+
export function decodeTokenPayload(token: string): TokenPayload;
306+
303307
// @public
304308
export const DisconnectButton: (props: DisconnectButtonProps & React_2.RefAttributes<HTMLButtonElement>) => React_2.ReactNode;
305309

packages/react/src/hooks/useSession.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,17 @@ import {
1010
TokenSourceFixed,
1111
TokenSourceFetchOptions,
1212
RoomConnectOptions,
13+
TokenPayload,
14+
RoomConfigurationObject,
1315
} from 'livekit-client';
1416
import { EventEmitter } from 'events';
1517

1618
import { useMaybeRoomContext } from '../context';
1719
import { AgentState, useAgent, useAgentTimeoutIdStore } from './useAgent';
1820
import { TrackReference } from '@livekit/components-core';
1921
import { useLocalParticipant } from './useLocalParticipant';
22+
import { decodeJwt } from 'jose';
23+
import { RoomConfiguration } from '@livekit/protocol';
2024

2125
/** @public */
2226
export enum SessionEvent {
@@ -153,6 +157,22 @@ type UseSessionCommonOptions = {
153157
type UseSessionConfigurableOptions = UseSessionCommonOptions & TokenSourceFetchOptions;
154158
type 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

Comments
 (0)