type: object
properties:
    role:
        type: string
        enum: ['moderator', 'publisher']
        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.
            - `publisher`: Can publish media streams to the room.
        example: 'moderator'
    permissions:
        type: object
        properties:
            livekit:
                type: object
                properties:
                    roomCreate:
                        type: boolean
                        description: >
                            Indicates whether the participant can create a room.
                        example: true
                    roomJoin:
                        type: boolean
                        description: >
                            Indicates whether the participant can join a room.
                        example: true
                    roomList:
                        type: boolean
                        description: >
                            Indicates whether the participant can list available rooms.
                        example: true
                    roomRecord:
                        type: boolean
                        description: >
                            Indicates whether the participant can record a room.
                        example: true
                    roomAdmin:
                        type: boolean
                        description: >
                            Indicates whether the participant has administrative privileges in the room.
                        example: true
                    room:
                        type: string
                        description: >
                            The ID of the room associated with the participant.
                        example: roomId
                    ingressAdmin:
                        type: boolean
                        description: >
                            Indicates whether the participant can manage ingress settings.
                        example: true
                    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
                    hidden:
                        type: boolean
                        description: >
                            Indicates whether the participant is hidden in the room.
                        example: false
                    recorder:
                        type: boolean
                        description: >
                            Indicates whether the participant is a recorder in the room.
                        example: false
                    agent:
                        type: boolean
                        description: >
                            Indicates whether the participant is an agent in the room.
                        example: false
            openvidu:
                type: object
                properties:
                    canPublishScreen:
                        type: boolean
                        description: >
                            Indicates whether the participant can publish screen sharing in the room.
                        example: true
                    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 virtual background in the room.
                        example: true
