type: object
properties:
    role:
        type: string
        enum: ['moderator', 'speaker']
        description: |
            A role that a participant can have in a room.
            The role determines the permissions of the participant in the room.
            - `moderator`: Can manage the room and its participants.
            - `speaker`: Can publish media streams to the room.
        example: 'moderator'
    permissions:
        type: object
        properties:
            livekit:
                type: object
                properties:
                    roomJoin:
                        type: boolean
                        description: >
                            Indicates whether the participant can join a room.
                        example: true
                    room:
                        type: string
                        description: >
                            Unique identifier of the room to which the participant is assigned.
                    canPublish:
                        type: boolean
                        description: >
                            Indicates whether the participant can publish media streams to the room.
                        example: true
                    canSubscribe:
                        type: boolean
                        description: >
                            Indicates whether the participant can subscribe to media streams in the room.
                        example: true
                    canPublishData:
                        type: boolean
                        description: >
                            Indicates whether the participant can publish data messages to the room.
                        example: true
                    canUpdateOwnMetadata:
                        type: boolean
                        description: >
                            Indicates whether the participant can update their own metadata.
                        example: true
            openvidu:
                type: object
                properties:
                    canRecord:
                        type: boolean
                        description: >
                            Indicates whether the participant can record the room.
                        example: true
                    canChat:
                        type: boolean
                        description: >
                            Indicates whether the participant can send and receive chat messages in the room.
                        example: true
                    canChangeVirtualBackground:
                        type: boolean
                        description: >
                            Indicates whether the participant can change their own virtual background.
                        example: true
