♻️(backend) replace LiveKit token metadata with attributes

Switch from metadata to attributes when generating LiveKit tokens for
more convenient dict-like structure handling during token creation and
client-side reading.

Attributes provide better data structure flexibility compared to
metadata, simplifying both server-side token generation and client-side
data access patterns.
This commit is contained in:
lebaudantoine
2025-08-27 15:29:16 +02:00
committed by aleb_the_flash
parent f28da45b4c
commit 1268346405
2 changed files with 8 additions and 21 deletions

View File

@@ -110,7 +110,9 @@ def generate_token(
.with_grants(video_grants)
.with_identity(identity)
.with_name(username or default_username)
.with_metadata(json.dumps({"color": color, "room_admin": is_admin_or_owner}))
.with_attributes(
{"color": color, "room_admin": "true" if is_admin_or_owner else "false"}
)
)
return token.to_jwt()

View File

@@ -10,31 +10,16 @@ function isValidHsl(colorString: string) {
}
export const getParticipantColor = (participant: Participant): string => {
const { metadata } = participant
const attributes = participant.attributes
if (!metadata) {
if (!attributes?.color) {
return DEFAULT_COLOR
}
let parsedMetadata: unknown
try {
parsedMetadata = JSON.parse(metadata)
} catch (error) {
console.error('Invalid JSON in participant metadata:', error)
if (!isValidHsl(attributes.color)) {
console.warn('Invalid color value:', attributes.color)
return DEFAULT_COLOR
}
if (!parsedMetadata || typeof parsedMetadata !== 'object') {
return DEFAULT_COLOR
}
const colorValue = (parsedMetadata as Record<string, unknown>)['color']
if (typeof colorValue !== 'string' || !isValidHsl(colorValue)) {
console.error('Invalid color value:', colorValue)
return DEFAULT_COLOR
}
return colorValue
return attributes.color
}