Centralize Prettier configuration to enforce consistent formatting across all subprojects

This commit is contained in:
juancarmore 2026-02-03 15:50:24 +01:00
parent 8af5759e4d
commit b3ab245dff
22 changed files with 1674 additions and 658 deletions

View File

@ -1,10 +0,0 @@
{
"singleQuote": true,
"printWidth": 120,
"trailingComma": "none",
"semi": true,
"bracketSpacing": true,
"useTabs": true,
"jsxSingleQuote": true,
"tabWidth": 4
}

View File

@ -2,23 +2,23 @@
* Interface representing analytics data for OpenVidu Meet usage.
*/
export interface MeetAnalytics {
/**
* Total number of rooms created
*/
totalRooms: number;
/**
* Total number of rooms created
*/
totalRooms: number;
/**
* Number of rooms currently with an active meeting
*/
activeRooms: number;
/**
* Number of rooms currently with an active meeting
*/
activeRooms: number;
/**
* Total number of recordings created
*/
totalRecordings: number;
/**
* Total number of recordings created
*/
totalRecordings: number;
/**
* Number of recordings that are complete and playable
*/
completeRecordings: number;
/**
* Number of recordings that are complete and playable
*/
completeRecordings: number;
}

View File

@ -1,4 +1,4 @@
export interface MeetApiKey {
key: string;
creationDate: number;
key: string;
creationDate: number;
}

View File

@ -2,31 +2,31 @@
* Authentication configuration.
*/
export interface AuthenticationConfig {
/**
* Allow admins to create new user accounts.
*/
allowUserCreation: boolean;
/**
* Allow admins to create new user accounts.
*/
allowUserCreation: boolean;
/**
* List of allowed OAuth providers for user registration.
*/
oauthProviders: OAuthProviderConfig[];
/**
* List of allowed OAuth providers for user registration.
*/
oauthProviders: OAuthProviderConfig[];
}
/**
* Configuration for OAuth authentication.
*/
export interface OAuthProviderConfig {
provider: OAuthProvider;
clientId: string;
clientSecret: string;
redirectUri: string;
provider: OAuthProvider;
clientId: string;
clientSecret: string;
redirectUri: string;
}
/**
* Supported OAuth providers.
*/
export enum OAuthProvider {
GOOGLE = 'google',
GITHUB = 'github'
GOOGLE = 'google',
GITHUB = 'github'
}

View File

@ -1,23 +1,23 @@
import { MeetRoomMemberRole } from './room-member.js';
import { MeetRoomConfig } from './room-config.js';
import { MeetRoomMemberRole } from './room-member.js';
export enum MeetSignalType {
MEET_ROOM_CONFIG_UPDATED = 'meet_room_config_updated',
MEET_PARTICIPANT_ROLE_UPDATED = 'meet_participant_role_updated'
MEET_ROOM_CONFIG_UPDATED = 'meet_room_config_updated',
MEET_PARTICIPANT_ROLE_UPDATED = 'meet_participant_role_updated'
}
export interface MeetRoomConfigUpdatedPayload {
roomId: string;
config: MeetRoomConfig;
timestamp: number;
roomId: string;
config: MeetRoomConfig;
timestamp: number;
}
export interface MeetParticipantRoleUpdatedPayload {
roomId: string;
participantIdentity: string;
newRole: MeetRoomMemberRole;
secret?: string;
timestamp: number;
roomId: string;
participantIdentity: string;
newRole: MeetRoomMemberRole;
secret?: string;
timestamp: number;
}
export type MeetSignalPayload = MeetRoomConfigUpdatedPayload | MeetParticipantRoleUpdatedPayload;

View File

@ -5,20 +5,20 @@ import { MeetAppearanceConfig } from './room-config.js';
* Represents global config for OpenVidu Meet.
*/
export interface GlobalConfig {
projectId: string;
securityConfig: SecurityConfig;
webhooksConfig: WebhookConfig;
roomsConfig: {
appearance: MeetAppearanceConfig;
};
projectId: string;
securityConfig: SecurityConfig;
webhooksConfig: WebhookConfig;
roomsConfig: {
appearance: MeetAppearanceConfig;
};
}
export interface WebhookConfig {
enabled: boolean;
url?: string;
// events: WebhookEvent[];
enabled: boolean;
url?: string;
// events: WebhookEvent[];
}
export interface SecurityConfig {
authentication: AuthenticationConfig;
authentication: AuthenticationConfig;
}

View File

@ -1,19 +1,17 @@
export * from './analytics.js';
export * from './api-key.js';
export * from './auth-config.js';
export * from './global-config.js';
export * from './event.model.js';
export * from './global-config.js';
export * from './permissions/livekit-permissions.js';
export * from './permissions/meet-permissions.js';
export * from './sort-pagination.js';
export * from './room-member.js';
export * from './user.js';
export * from './room-config.js';
export * from './room.js';
export * from './recording.model.js';
export * from './room-config.js';
export * from './room-member.js';
export * from './room.js';
export * from './sort-pagination.js';
export * from './user.js';
export * from './webhook.model.js';
export * from './analytics.js';
// Webcomponent types
export * from './webcomponent/command.model.js';

View File

@ -22,7 +22,7 @@ export enum TrackSource {
/**
* @generated from enum value: SCREEN_SHARE_AUDIO = 4;
*/
SCREEN_SHARE_AUDIO = 4,
SCREEN_SHARE_AUDIO = 4
}
interface VideoGrant {

View File

@ -14,12 +14,10 @@ export interface MeetRoomMemberPermissions {
* Can delete recordings.
*/
canDeleteRecordings: boolean;
/**
* Can join the meeting.
*/
canJoinMeeting: boolean;
/**
* Can share access links to invite others.
*/
@ -36,7 +34,6 @@ export interface MeetRoomMemberPermissions {
* Can end the meeting for all participants.
*/
canEndMeeting: boolean;
/**
* Can publish video in the meeting.
*/
@ -49,7 +46,6 @@ export interface MeetRoomMemberPermissions {
* Can share screen in the meeting.
*/
canShareScreen: boolean;
/**
* Can read chat messages in the meeting.
*/
@ -58,7 +54,6 @@ export interface MeetRoomMemberPermissions {
* Can send chat messages in the meeting.
*/
canWriteChat: boolean;
/**
* Can change the virtual background.
*/

View File

@ -4,69 +4,69 @@ import { SortAndPagination } from './sort-pagination.js';
* Recording status enumeration.
*/
export enum MeetRecordingStatus {
STARTING = 'starting',
ACTIVE = 'active',
ENDING = 'ending',
COMPLETE = 'complete',
FAILED = 'failed',
ABORTED = 'aborted',
LIMIT_REACHED = 'limit_reached'
STARTING = 'starting',
ACTIVE = 'active',
ENDING = 'ending',
COMPLETE = 'complete',
FAILED = 'failed',
ABORTED = 'aborted',
LIMIT_REACHED = 'limit_reached'
}
/**
* Layout options for recordings.
*/
export enum MeetRecordingLayout {
GRID = 'grid',
SPEAKER = 'speaker',
SINGLE_SPEAKER = 'single-speaker'
// GRID_LIGHT = 'grid-light',
// SPEAKER_LIGHT = 'speaker-light',
// SINGLE_SPEAKER_LIGHT = 'single-speaker-light'
GRID = 'grid',
SPEAKER = 'speaker',
SINGLE_SPEAKER = 'single-speaker'
// GRID_LIGHT = 'grid-light',
// SPEAKER_LIGHT = 'speaker-light',
// SINGLE_SPEAKER_LIGHT = 'single-speaker-light'
}
/**
* Encoding presets for recordings.
*/
export enum MeetRecordingEncodingPreset {
/**
* 1280x720, 30fps, 3000kbps. Recommended for most cases.
*/
H264_720P_30 = 'H264_720P_30',
/**
* 1280x720, 60fps, ~4500 kbps. Smooth motion for fast action.
*/
H264_720P_60 = 'H264_720P_60',
/**
* 1280x720, 30fps, 3000kbps. Recommended for most cases.
*/
H264_720P_30 = 'H264_720P_30',
/**
* 1280x720, 60fps, ~4500 kbps. Smooth motion for fast action.
*/
H264_720P_60 = 'H264_720P_60',
/**
* 1920x1080, 30fps, ~4500 kbps. High visual quality for detailed content.
*/
H264_1080P_30 = 'H264_1080P_30',
/**
* 1920x1080, 30fps, ~4500 kbps. High visual quality for detailed content.
*/
H264_1080P_30 = 'H264_1080P_30',
/**
* 1920x1080, 60fps, ~6000 kbps. Premium quality with very smooth motion.
*/
H264_1080P_60 = 'H264_1080P_60',
/**
* 1920x1080, 60fps, ~6000 kbps. Premium quality with very smooth motion.
*/
H264_1080P_60 = 'H264_1080P_60',
/**
* Portrait 720x1280, 30fps. Vertical video optimized for mobile/portrait use.
*/
PORTRAIT_H264_720P_30 = 'PORTRAIT_H264_720P_30',
/**
* Portrait 720x1280, 30fps. Vertical video optimized for mobile/portrait use.
*/
PORTRAIT_H264_720P_30 = 'PORTRAIT_H264_720P_30',
/**
* Portrait 720x1280, 60fps. Vertical video with smoother motion.
*/
PORTRAIT_H264_720P_60 = 'PORTRAIT_H264_720P_60',
/**
* Portrait 720x1280, 60fps. Vertical video with smoother motion.
*/
PORTRAIT_H264_720P_60 = 'PORTRAIT_H264_720P_60',
/**
* Portrait 1080x1920, 30fps. High-quality vertical recording.
*/
PORTRAIT_H264_1080P_30 = 'PORTRAIT_H264_1080P_30',
/**
* Portrait 1080x1920, 30fps. High-quality vertical recording.
*/
PORTRAIT_H264_1080P_30 = 'PORTRAIT_H264_1080P_30',
/**
* Portrait 1080x1920, 60fps. Premium vertical recording with smooth motion.
*/
PORTRAIT_H264_1080P_60 = 'PORTRAIT_H264_1080P_60'
/**
* Portrait 1080x1920, 60fps. Premium vertical recording with smooth motion.
*/
PORTRAIT_H264_1080P_60 = 'PORTRAIT_H264_1080P_60'
}
/**
@ -75,56 +75,56 @@ export enum MeetRecordingEncodingPreset {
* Both video and audio configurations are required when using advanced options.
*/
export interface MeetRecordingEncodingOptions {
/** Video encoding configuration */
video: {
/** Video width in pixels */
width: number;
/** Video height in pixels */
height: number;
/** Frame rate in fps */
framerate: number;
/** Video codec */
codec: MeetRecordingVideoCodec;
/** Video bitrate in kbps */
bitrate: number;
/** Keyframe interval in seconds */
keyFrameInterval: number;
/** Video depth (pixel format) in bits */
depth: number;
};
/** Video encoding configuration */
video: {
/** Video width in pixels */
width: number;
/** Video height in pixels */
height: number;
/** Frame rate in fps */
framerate: number;
/** Video codec */
codec: MeetRecordingVideoCodec;
/** Video bitrate in kbps */
bitrate: number;
/** Keyframe interval in seconds */
keyFrameInterval: number;
/** Video depth (pixel format) in bits */
depth: number;
};
/**
* Audio encoding configuration
*/
audio: {
/** Audio codec */
codec: MeetRecordingAudioCodec;
/** Audio bitrate in kbps */
bitrate: number;
/** Audio sample rate in Hz */
frequency: number;
};
/**
* Audio encoding configuration
*/
audio: {
/** Audio codec */
codec: MeetRecordingAudioCodec;
/** Audio bitrate in kbps */
bitrate: number;
/** Audio sample rate in Hz */
frequency: number;
};
}
/**
* Video encoding configuration
*/
export enum MeetRecordingVideoCodec {
DEFAULT_VC = 'DEFAULT_VC',
H264_BASELINE = 'H264_BASELINE',
H264_MAIN = 'H264_MAIN',
H264_HIGH = 'H264_HIGH',
VP8 = 'VP8'
DEFAULT_VC = 'DEFAULT_VC',
H264_BASELINE = 'H264_BASELINE',
H264_MAIN = 'H264_MAIN',
H264_HIGH = 'H264_HIGH',
VP8 = 'VP8'
}
/**
* Audio encoding configuration
*/
export enum MeetRecordingAudioCodec {
DEFAULT_AC = 'DEFAULT_AC',
OPUS = 'OPUS',
AAC = 'AAC',
AC_MP3 = 'AC_MP3'
DEFAULT_AC = 'DEFAULT_AC',
OPUS = 'OPUS',
AAC = 'AAC',
AC_MP3 = 'AC_MP3'
}
// export enum MeetRecordingOutputMode {
@ -135,41 +135,41 @@ export enum MeetRecordingAudioCodec {
* Interface representing a recording
*/
export interface MeetRecordingInfo {
recordingId: string;
roomId: string;
roomName: string;
// outputMode: MeetRecordingOutputMode;
status: MeetRecordingStatus;
layout?: MeetRecordingLayout;
encoding?: MeetRecordingEncodingPreset | MeetRecordingEncodingOptions;
filename?: string;
startDate?: number;
endDate?: number;
duration?: number;
size?: number;
errorCode?: number;
error?: string;
details?: string;
recordingId: string;
roomId: string;
roomName: string;
// outputMode: MeetRecordingOutputMode;
status: MeetRecordingStatus;
layout?: MeetRecordingLayout;
encoding?: MeetRecordingEncodingPreset | MeetRecordingEncodingOptions;
filename?: string;
startDate?: number;
endDate?: number;
duration?: number;
size?: number;
errorCode?: number;
error?: string;
details?: string;
}
/**
* Filters for querying recordings with pagination, sorting and field selection.
*/
export interface MeetRecordingFilters extends SortAndPagination {
/**
* Filter recordings by room ID (exact match)
*/
roomId?: string;
/**
* Filter recordings by room name (case-insensitive partial match)
*/
roomName?: string;
/**
* Filter recordings by status
*/
status?: MeetRecordingStatus;
/**
* Comma-separated list of fields to include in the response
*/
fields?: string;
/**
* Filter recordings by room ID (exact match)
*/
roomId?: string;
/**
* Filter recordings by room name (case-insensitive partial match)
*/
roomName?: string;
/**
* Filter recordings by status
*/
status?: MeetRecordingStatus;
/**
* Comma-separated list of fields to include in the response
*/
fields?: string;
}

View File

@ -4,94 +4,94 @@ import { MeetRecordingEncodingOptions, MeetRecordingEncodingPreset, MeetRecordin
* Interface representing the config for a room.
*/
export interface MeetRoomConfig {
/**
* Configuration for chat feature. See {@link MeetChatConfig} for details.
*/
chat: MeetChatConfig;
/**
* Configuration for recording feature. See {@link MeetRecordingConfig} for details.
*/
recording: MeetRecordingConfig;
/**
* Configuration for virtual backgrounds feature. See {@link MeetVirtualBackgroundConfig} for details.
*/
virtualBackground: MeetVirtualBackgroundConfig;
/**
* Configuration for end-to-end encryption feature. See {@link MeetE2EEConfig} for details.
*/
e2ee: MeetE2EEConfig;
/**
* Configuration for captions feature. See {@link MeetRoomCaptionsConfig} for details.
*/
captions: MeetRoomCaptionsConfig;
// appearance: MeetAppearanceConfig;
/**
* Configuration for chat feature. See {@link MeetChatConfig} for details.
*/
chat: MeetChatConfig;
/**
* Configuration for recording feature. See {@link MeetRecordingConfig} for details.
*/
recording: MeetRecordingConfig;
/**
* Configuration for virtual backgrounds feature. See {@link MeetVirtualBackgroundConfig} for details.
*/
virtualBackground: MeetVirtualBackgroundConfig;
/**
* Configuration for end-to-end encryption feature. See {@link MeetE2EEConfig} for details.
*/
e2ee: MeetE2EEConfig;
/**
* Configuration for captions feature. See {@link MeetRoomCaptionsConfig} for details.
*/
captions: MeetRoomCaptionsConfig;
// appearance: MeetAppearanceConfig;
}
/**
* Interface representing the config for recordings in a room.
*/
export interface MeetRecordingConfig {
/**
* Indicates if recording is enabled in the room
*/
enabled: boolean;
/**
* Layout used for recordings in the room. See {@link MeetRecordingLayout} for details.
*/
layout?: MeetRecordingLayout;
/**
* Encoding configuration: use a preset string for common scenarios,
* or provide detailed options for fine-grained control.
*/
encoding?: MeetRecordingEncodingPreset | MeetRecordingEncodingOptions;
/**
* Indicates if recording is enabled in the room
*/
enabled: boolean;
/**
* Layout used for recordings in the room. See {@link MeetRecordingLayout} for details.
*/
layout?: MeetRecordingLayout;
/**
* Encoding configuration: use a preset string for common scenarios,
* or provide detailed options for fine-grained control.
*/
encoding?: MeetRecordingEncodingPreset | MeetRecordingEncodingOptions;
}
export interface MeetChatConfig {
/**
* Indicates if chat is enabled in the room
*/
enabled: boolean;
/**
* Indicates if chat is enabled in the room
*/
enabled: boolean;
}
export interface MeetVirtualBackgroundConfig {
/**
* Indicates if virtual backgrounds are enabled in the room
*/
enabled: boolean;
/**
* Indicates if virtual backgrounds are enabled in the room
*/
enabled: boolean;
}
export interface MeetE2EEConfig {
/**
* Indicates if end-to-end encryption is enabled in the room
*/
enabled: boolean;
/**
* Indicates if end-to-end encryption is enabled in the room
*/
enabled: boolean;
}
export interface MeetRoomCaptionsConfig {
/**
* Indicates if captions are enabled in the room
*/
enabled: boolean;
/**
* Indicates if captions are enabled in the room
*/
enabled: boolean;
}
export interface MeetAppearanceConfig {
/**
* List of themes available in the room
*/
themes: MeetRoomTheme[];
/**
* List of themes available in the room
*/
themes: MeetRoomTheme[];
}
export interface MeetRoomTheme {
name: string;
enabled: boolean;
baseTheme: MeetRoomThemeMode;
backgroundColor?: string;
primaryColor?: string;
secondaryColor?: string;
accentColor?: string;
surfaceColor?: string;
name: string;
enabled: boolean;
baseTheme: MeetRoomThemeMode;
backgroundColor?: string;
primaryColor?: string;
secondaryColor?: string;
accentColor?: string;
surfaceColor?: string;
}
export enum MeetRoomThemeMode {
LIGHT = 'light',
DARK = 'dark'
LIGHT = 'light',
DARK = 'dark'
}

View File

@ -5,10 +5,10 @@ import { SortAndPagination } from './sort-pagination.js';
* Options for adding a member to a room.
*/
export interface MeetRoomMemberOptions {
userId?: string; // userId of a registered Meet user (mutually exclusive with name)
name?: string; // Name for an external user (mutually exclusive with userId)
baseRole: MeetRoomMemberRole; // The base role assigned to the member
customPermissions?: Partial<MeetRoomMemberPermissions>; // Custom permissions for the member (overrides base role permissions)
userId?: string; // userId of a registered Meet user (mutually exclusive with name)
name?: string; // Name for an external user (mutually exclusive with userId)
baseRole: MeetRoomMemberRole; // The base role assigned to the member
customPermissions?: Partial<MeetRoomMemberPermissions>; // Custom permissions for the member (overrides base role permissions)
}
/**
@ -16,29 +16,29 @@ export interface MeetRoomMemberOptions {
* A member can be an internal user (identified by userId) or an external user (identified by name).
*/
export interface MeetRoomMember {
memberId: string; // Unique identifier for the member (equals userId for registered users, or generated for external users)
roomId: string; // ID of the room the member belongs to
name: string; // Name of the member (either registered or external user name)
membershipDate: number; // Timestamp when the member was added to the room
accessUrl: string; // URL for the member to access the room
baseRole: MeetRoomMemberRole; // The base role of the member in the room
customPermissions?: Partial<MeetRoomMemberPermissions>; // Custom permissions for the member (if any)
effectivePermissions: MeetRoomMemberPermissions; // Effective permissions for the member (base role + custom permissions)
permissionsUpdatedAt: number; // Timestamp when the effective permissions were last updated
currentParticipantIdentity?: string; // The participant identity if the member is currently in a meeting, undefined otherwise
memberId: string; // Unique identifier for the member (equals userId for registered users, or generated for external users)
roomId: string; // ID of the room the member belongs to
name: string; // Name of the member (either registered or external user name)
membershipDate: number; // Timestamp when the member was added to the room
accessUrl: string; // URL for the member to access the room
baseRole: MeetRoomMemberRole; // The base role of the member in the room
customPermissions?: Partial<MeetRoomMemberPermissions>; // Custom permissions for the member (if any)
effectivePermissions: MeetRoomMemberPermissions; // Effective permissions for the member (base role + custom permissions)
permissionsUpdatedAt: number; // Timestamp when the effective permissions were last updated
currentParticipantIdentity?: string; // The participant identity if the member is currently in a meeting, undefined otherwise
}
/**
* Represents the role of a member in a room.
*/
export enum MeetRoomMemberRole {
MODERATOR = 'moderator',
SPEAKER = 'speaker'
MODERATOR = 'moderator',
SPEAKER = 'speaker'
}
export interface MeetRoomMemberFilters extends SortAndPagination {
name?: string;
fields?: string;
name?: string;
fields?: string;
}
/**
@ -46,25 +46,25 @@ export interface MeetRoomMemberFilters extends SortAndPagination {
* A room member token provides access to room resources (recordings, meetings, etc.)
*/
export interface MeetRoomMemberTokenOptions {
/**
* A secret key for room access. Determines the member's role.
*/
secret?: string;
/**
* Whether the token is intended for joining a meeting.
* If true, participantName must be provided.
*/
joinMeeting?: boolean;
/**
* The name of the participant when joining the meeting.
* Required if joinMeeting is true.
*/
participantName?: string;
/**
* The identity of the participant in the meeting.
* Required when refreshing an existing token used to join a meeting.
*/
participantIdentity?: string;
/**
* A secret key for room access. Determines the member's role.
*/
secret?: string;
/**
* Whether the token is intended for joining a meeting.
* If true, participantName must be provided.
*/
joinMeeting?: boolean;
/**
* The name of the participant when joining the meeting.
* Required if joinMeeting is true.
*/
participantName?: string;
/**
* The identity of the participant in the meeting.
* Required when refreshing an existing token used to join a meeting.
*/
participantIdentity?: string;
}
/**
@ -72,12 +72,12 @@ export interface MeetRoomMemberTokenOptions {
* Contains information about the room and member permissions.
*/
export interface MeetRoomMemberTokenMetadata {
/** Token issued at timestamp (milliseconds since epoch) */
iat: number;
livekitUrl: string;
roomId: string;
memberId?: string;
baseRole: MeetRoomMemberRole;
customPermissions?: Partial<MeetRoomMemberPermissions>;
effectivePermissions: MeetRoomMemberPermissions;
/** Token issued at timestamp (milliseconds since epoch) */
iat: number;
livekitUrl: string;
roomId: string;
memberId?: string;
baseRole: MeetRoomMemberRole;
customPermissions?: Partial<MeetRoomMemberPermissions>;
effectivePermissions: MeetRoomMemberPermissions;
}

View File

@ -6,81 +6,81 @@ import { SortAndPagination } from './sort-pagination.js';
* Options for creating a room.
*/
export interface MeetRoomOptions {
/**
* Name of the room
*/
roomName?: string;
/**
* Date in milliseconds since epoch when the room will be automatically deleted
*/
autoDeletionDate?: number;
/**
* Configuration for automatic deletion behavior of the room. See {@link MeetRoomAutoDeletionPolicy} for details.
*/
autoDeletionPolicy?: MeetRoomAutoDeletionPolicy;
/**
* Configuration of the room. See {@link MeetRoomConfig} for details.
*/
config?: Partial<MeetRoomConfig>;
/**
* Roles configuration for the room. See {@link MeetRoomRolesConfig} for details.
*/
roles?: MeetRoomRolesConfig;
/**
* Anonymous access configuration for the room. See {@link MeetRoomAnonymousConfig} for details.
*/
anonymous?: MeetRoomAnonymousConfig;
// maxParticipants?: number | null;
/**
* Name of the room
*/
roomName?: string;
/**
* Date in milliseconds since epoch when the room will be automatically deleted
*/
autoDeletionDate?: number;
/**
* Configuration for automatic deletion behavior of the room. See {@link MeetRoomAutoDeletionPolicy} for details.
*/
autoDeletionPolicy?: MeetRoomAutoDeletionPolicy;
/**
* Configuration of the room. See {@link MeetRoomConfig} for details.
*/
config?: Partial<MeetRoomConfig>;
/**
* Roles configuration for the room. See {@link MeetRoomRolesConfig} for details.
*/
roles?: MeetRoomRolesConfig;
/**
* Anonymous access configuration for the room. See {@link MeetRoomAnonymousConfig} for details.
*/
anonymous?: MeetRoomAnonymousConfig;
// maxParticipants?: number | null;
}
/**
* Representation of a room
*/
export interface MeetRoom extends MeetRoomOptions {
/**
* Unique identifier of the room
*/
roomId: string;
/**
* Name of the room
*/
roomName: string;
/**
* User ID of the internal Meet user who owns this room
*/
owner: string;
/**
* Timestamp of room creation in milliseconds since epoch
*/
creationDate: number;
/**
* Configuration of the room. See {@link MeetRoomConfig} for details.
*/
config: MeetRoomConfig;
/**
* Roles configuration for the room. See {@link MeetRoomRoles} for details.
*/
roles: MeetRoomRoles;
/**
* Anonymous access configuration for the room. See {@link MeetRoomAnonymous} for details.
*/
anonymous: MeetRoomAnonymous;
/**
* General access URL for authenticated users (owner and internal members)
*/
accessUrl: string;
/**
* Status of the room. See {@link MeetRoomStatus} for details.
*/
status: MeetRoomStatus;
/**
* Timestamp in milliseconds of the last time the room's role permissions or anonymous access were updated
*/
rolesUpdatedAt: number;
/**
* Action to take on the room when the meeting ends. See {@link MeetingEndAction} for details.
*/
meetingEndAction: MeetingEndAction;
/**
* Unique identifier of the room
*/
roomId: string;
/**
* Name of the room
*/
roomName: string;
/**
* User ID of the internal Meet user who owns this room
*/
owner: string;
/**
* Timestamp of room creation in milliseconds since epoch
*/
creationDate: number;
/**
* Configuration of the room. See {@link MeetRoomConfig} for details.
*/
config: MeetRoomConfig;
/**
* Roles configuration for the room. See {@link MeetRoomRoles} for details.
*/
roles: MeetRoomRoles;
/**
* Anonymous access configuration for the room. See {@link MeetRoomAnonymous} for details.
*/
anonymous: MeetRoomAnonymous;
/**
* General access URL for authenticated users (owner and internal members)
*/
accessUrl: string;
/**
* Status of the room. See {@link MeetRoomStatus} for details.
*/
status: MeetRoomStatus;
/**
* Timestamp in milliseconds of the last time the room's role permissions or anonymous access were updated
*/
rolesUpdatedAt: number;
/**
* Action to take on the room when the meeting ends. See {@link MeetingEndAction} for details.
*/
meetingEndAction: MeetingEndAction;
}
/**
@ -88,12 +88,12 @@ export interface MeetRoom extends MeetRoomOptions {
* Defines the complete permissions for moderator and speaker roles.
*/
export interface MeetRoomRoles {
moderator: {
permissions: MeetRoomMemberPermissions;
};
speaker: {
permissions: MeetRoomMemberPermissions;
};
moderator: {
permissions: MeetRoomMemberPermissions;
};
speaker: {
permissions: MeetRoomMemberPermissions;
};
}
/**
@ -101,12 +101,12 @@ export interface MeetRoomRoles {
* Allows partial permission updates.
*/
export interface MeetRoomRolesConfig {
moderator?: {
permissions: Partial<MeetRoomMemberPermissions>;
};
speaker?: {
permissions: Partial<MeetRoomMemberPermissions>;
};
moderator?: {
permissions: Partial<MeetRoomMemberPermissions>;
};
speaker?: {
permissions: Partial<MeetRoomMemberPermissions>;
};
}
/**
@ -114,14 +114,14 @@ export interface MeetRoomRolesConfig {
* Defines which roles have anonymous access enabled and their access URLs.
*/
export interface MeetRoomAnonymous {
moderator: {
enabled: boolean;
accessUrl: string;
};
speaker: {
enabled: boolean;
accessUrl: string;
};
moderator: {
enabled: boolean;
accessUrl: string;
};
speaker: {
enabled: boolean;
accessUrl: string;
};
}
/**
@ -129,132 +129,132 @@ export interface MeetRoomAnonymous {
* Only includes enabled flags.
*/
export interface MeetRoomAnonymousConfig {
moderator?: {
enabled: boolean;
};
speaker?: {
enabled: boolean;
};
moderator?: {
enabled: boolean;
};
speaker?: {
enabled: boolean;
};
}
/**
* Represents the current status of a meeting room.
*/
export enum MeetRoomStatus {
/**
* Room is open and available to host a meeting.
*/
OPEN = 'open',
/**
* Room is open and available to host a meeting.
*/
OPEN = 'open',
/**
* There is an ongoing meeting in the room.
*/
ACTIVE_MEETING = 'active_meeting',
/**
* There is an ongoing meeting in the room.
*/
ACTIVE_MEETING = 'active_meeting',
/**
* Room is closed to hosting new meetings.
*/
CLOSED = 'closed'
/**
* Room is closed to hosting new meetings.
*/
CLOSED = 'closed'
}
/**
* Defines the action to take when a meeting ends.
*/
export enum MeetingEndAction {
/**
* No action is taken when the meeting ends.
*/
NONE = 'none',
/**
* No action is taken when the meeting ends.
*/
NONE = 'none',
/**
* The room will be closed when the meeting ends.
*/
CLOSE = 'close',
/**
* The room will be closed when the meeting ends.
*/
CLOSE = 'close',
/**
* The room (and its recordings, if any) will be deleted
* when the meeting ends.
*/
DELETE = 'delete'
/**
* The room (and its recordings, if any) will be deleted
* when the meeting ends.
*/
DELETE = 'delete'
}
/**
* Configuration for automatic deletion behavior of a meeting room.
*/
export interface MeetRoomAutoDeletionPolicy {
/**
* Deletion policy when there is an active meeting.
*/
withMeeting: MeetRoomDeletionPolicyWithMeeting;
/**
* Deletion policy when there is an active meeting.
*/
withMeeting: MeetRoomDeletionPolicyWithMeeting;
/**
* Deletion policy when recordings exist.
*/
withRecordings: MeetRoomDeletionPolicyWithRecordings;
/**
* Deletion policy when recordings exist.
*/
withRecordings: MeetRoomDeletionPolicyWithRecordings;
}
/**
* Defines how room deletion behaves when a meeting is active.
*/
export enum MeetRoomDeletionPolicyWithMeeting {
/**
* Force deletion even if there is an active meeting.
*/
FORCE = 'force',
/**
* Force deletion even if there is an active meeting.
*/
FORCE = 'force',
/**
* Delete the room when the meeting ends.
*/
WHEN_MEETING_ENDS = 'when_meeting_ends',
/**
* Delete the room when the meeting ends.
*/
WHEN_MEETING_ENDS = 'when_meeting_ends',
/**
* Fail the deletion if there is an active meeting.
*/
FAIL = 'fail'
/**
* Fail the deletion if there is an active meeting.
*/
FAIL = 'fail'
}
/**
* Defines how room deletion behaves when recordings exist.
*/
export enum MeetRoomDeletionPolicyWithRecordings {
/**
* Force deletion even if there are ongoing or previous recordings.
*/
FORCE = 'force',
/**
* Force deletion even if there are ongoing or previous recordings.
*/
FORCE = 'force',
/**
* Close the room and keep recordings.
*/
CLOSE = 'close',
/**
* Close the room and keep recordings.
*/
CLOSE = 'close',
/**
* Fail the deletion if there are ongoing or previous recordings.
*/
FAIL = 'fail'
/**
* Fail the deletion if there are ongoing or previous recordings.
*/
FAIL = 'fail'
}
export interface MeetRoomFilters extends SortAndPagination {
roomName?: string;
status?: MeetRoomStatus;
fields?: string;
roomName?: string;
status?: MeetRoomStatus;
fields?: string;
}
export enum MeetRoomDeletionSuccessCode {
ROOM_DELETED = 'room_deleted',
ROOM_WITH_ACTIVE_MEETING_DELETED = 'room_with_active_meeting_deleted',
ROOM_WITH_ACTIVE_MEETING_SCHEDULED_TO_BE_DELETED = 'room_with_active_meeting_scheduled_to_be_deleted',
ROOM_AND_RECORDINGS_DELETED = 'room_and_recordings_deleted',
ROOM_CLOSED = 'room_closed',
ROOM_WITH_ACTIVE_MEETING_AND_RECORDINGS_DELETED = 'room_with_active_meeting_and_recordings_deleted',
ROOM_WITH_ACTIVE_MEETING_CLOSED = 'room_with_active_meeting_closed',
ROOM_WITH_ACTIVE_MEETING_AND_RECORDINGS_SCHEDULED_TO_BE_DELETED = 'room_with_active_meeting_and_recordings_scheduled_to_be_deleted',
ROOM_WITH_ACTIVE_MEETING_SCHEDULED_TO_BE_CLOSED = 'room_with_active_meeting_scheduled_to_be_closed'
ROOM_DELETED = 'room_deleted',
ROOM_WITH_ACTIVE_MEETING_DELETED = 'room_with_active_meeting_deleted',
ROOM_WITH_ACTIVE_MEETING_SCHEDULED_TO_BE_DELETED = 'room_with_active_meeting_scheduled_to_be_deleted',
ROOM_AND_RECORDINGS_DELETED = 'room_and_recordings_deleted',
ROOM_CLOSED = 'room_closed',
ROOM_WITH_ACTIVE_MEETING_AND_RECORDINGS_DELETED = 'room_with_active_meeting_and_recordings_deleted',
ROOM_WITH_ACTIVE_MEETING_CLOSED = 'room_with_active_meeting_closed',
ROOM_WITH_ACTIVE_MEETING_AND_RECORDINGS_SCHEDULED_TO_BE_DELETED = 'room_with_active_meeting_and_recordings_scheduled_to_be_deleted',
ROOM_WITH_ACTIVE_MEETING_SCHEDULED_TO_BE_CLOSED = 'room_with_active_meeting_scheduled_to_be_closed'
}
export enum MeetRoomDeletionErrorCode {
ROOM_HAS_ACTIVE_MEETING = 'room_has_active_meeting',
ROOM_HAS_RECORDINGS = 'room_has_recordings',
ROOM_WITH_ACTIVE_MEETING_HAS_RECORDINGS = 'room_with_active_meeting_has_recordings',
ROOM_WITH_ACTIVE_MEETING_HAS_RECORDINGS_CANNOT_SCHEDULE_DELETION = 'room_with_active_meeting_has_recordings_cannot_schedule_deletion',
ROOM_WITH_RECORDINGS_HAS_ACTIVE_MEETING = 'room_with_recordings_has_active_meeting'
ROOM_HAS_ACTIVE_MEETING = 'room_has_active_meeting',
ROOM_HAS_RECORDINGS = 'room_has_recordings',
ROOM_WITH_ACTIVE_MEETING_HAS_RECORDINGS = 'room_with_active_meeting_has_recordings',
ROOM_WITH_ACTIVE_MEETING_HAS_RECORDINGS_CANNOT_SCHEDULE_DELETION = 'room_with_active_meeting_has_recordings_cannot_schedule_deletion',
ROOM_WITH_RECORDINGS_HAS_ACTIVE_MEETING = 'room_with_recordings_has_active_meeting'
}

View File

@ -1,6 +1,6 @@
export interface SortAndPagination {
maxItems?: number;
nextPageToken?: string;
sortField?: string;
sortOrder?: 'asc' | 'desc';
maxItems?: number;
nextPageToken?: string;
sortField?: string;
sortOrder?: 'asc' | 'desc';
}

View File

@ -4,34 +4,34 @@ import { SortAndPagination } from './sort-pagination.js';
* Options for creating a new Meet user.
*/
export interface MeetUserOptions {
userId: string; // Unique identifier for the user (lowercase letters, numbers, underscores)
name: string; // Name of the user
role: MeetUserRole; // Role of the user
password: string; // Plain text password for the user (will be hashed before storage)
userId: string; // Unique identifier for the user (lowercase letters, numbers, underscores)
name: string; // Name of the user
role: MeetUserRole; // Role of the user
password: string; // Plain text password for the user (will be hashed before storage)
}
export interface MeetUser {
userId: string;
name: string;
registrationDate: number;
role: MeetUserRole;
passwordHash: string;
mustChangePassword: boolean;
userId: string;
name: string;
registrationDate: number;
role: MeetUserRole;
passwordHash: string;
mustChangePassword: boolean;
}
export enum MeetUserRole {
// Represents a user with administrative privileges (can manage all rooms and users)
ADMIN = 'admin',
// Represents a regular user (can manage own rooms and access rooms where they are members)
USER = 'user',
// Represents a room member role (used for room-specific access)
ROOM_MEMBER = 'room_member'
// Represents a user with administrative privileges (can manage all rooms and users)
ADMIN = 'admin',
// Represents a regular user (can manage own rooms and access rooms where they are members)
USER = 'user',
// Represents a room member role (used for room-specific access)
ROOM_MEMBER = 'room_member'
}
export type MeetUserDTO = Omit<MeetUser, 'passwordHash' | 'mustChangePassword'>;
export interface MeetUserFilters extends SortAndPagination {
userId?: string;
name?: string;
role?: MeetUserRole;
userId?: string;
name?: string;
role?: MeetUserRole;
}

View File

@ -2,26 +2,26 @@
* All available commands that can be sent to the WebComponent.
*/
export enum WebComponentCommand {
/**
* Initializes the WebComponent with the given configuration.
* This command is sent from the webcomponent to the iframe for intialice the domain.
* @private
*/
INITIALIZE = 'initialize',
/**
* Ends the current meeting for all participants.
* @moderator
*/
END_MEETING = 'endMeeting',
/**
* Disconnects the local participant from the current room.
*/
LEAVE_ROOM = 'leaveRoom',
/**
* Kicks a participant from the meeting.
* @moderator
*/
KICK_PARTICIPANT = 'kickParticipant'
/**
* Initializes the WebComponent with the given configuration.
* This command is sent from the webcomponent to the iframe for intialice the domain.
* @private
*/
INITIALIZE = 'initialize',
/**
* Ends the current meeting for all participants.
* @moderator
*/
END_MEETING = 'endMeeting',
/**
* Disconnects the local participant from the current room.
*/
LEAVE_ROOM = 'leaveRoom',
/**
* Kicks a participant from the meeting.
* @moderator
*/
KICK_PARTICIPANT = 'kickParticipant'
}
/**
@ -30,18 +30,18 @@ export enum WebComponentCommand {
* @category Communication
*/
export interface WebComponentCommandPayloads {
/**
* Payload for the INITIALIZE command.
* @private
*/
[WebComponentCommand.INITIALIZE]: {
domain: string;
};
[WebComponentCommand.END_MEETING]: void;
[WebComponentCommand.LEAVE_ROOM]: void;
[WebComponentCommand.KICK_PARTICIPANT]: {
participantIdentity: string;
};
/**
* Payload for the INITIALIZE command.
* @private
*/
[WebComponentCommand.INITIALIZE]: {
domain: string;
};
[WebComponentCommand.END_MEETING]: void;
[WebComponentCommand.LEAVE_ROOM]: void;
[WebComponentCommand.KICK_PARTICIPANT]: {
participantIdentity: string;
};
}
/**
@ -51,5 +51,5 @@ export interface WebComponentCommandPayloads {
* @private
*/
export type WenComponentCommandPayloadFor<T extends WebComponentCommand> = T extends keyof WebComponentCommandPayloads
? WebComponentCommandPayloads[T]
: never;
? WebComponentCommandPayloads[T]
: never;

View File

@ -3,36 +3,36 @@
* @category Communication
*/
export enum WebComponentEvent {
/**
* Event emitted when application is ready to receive commands.
* @private
*/
READY = 'ready',
/**
* Event emitted when the local participant joins the room.
*/
JOINED = 'joined',
/**
* Event emitted when the local participant leaves the room.
*/
LEFT = 'left',
/**
* Event emitted when the application is closed.
*/
CLOSED = 'closed'
/**
* Event emitted when application is ready to receive commands.
* @private
*/
READY = 'ready',
/**
* Event emitted when the local participant joins the room.
*/
JOINED = 'joined',
/**
* Event emitted when the local participant leaves the room.
*/
LEFT = 'left',
/**
* Event emitted when the application is closed.
*/
CLOSED = 'closed'
}
/**
* Reason for emitting the LEFT event in OpenVidu Meet.
*/
export enum LeftEventReason {
VOLUNTARY_LEAVE = 'voluntary_leave', // The participant left the meeting voluntarily
NETWORK_DISCONNECT = 'network_disconnect', // The participant was disconnected due to network issues
SERVER_SHUTDOWN = 'server_shutdown', // The server was shut down
PARTICIPANT_KICKED = 'participant_kicked', // The participant was removed from the meeting by a moderator
MEETING_ENDED = 'meeting_ended', // The meeting was ended by a moderator or the room was deleted
MEETING_ENDED_BY_SELF = 'meeting_ended_by_self', // The local participant ended the meeting
UNKNOWN = 'unknown' // An unknown reason for leaving the meeting
VOLUNTARY_LEAVE = 'voluntary_leave', // The participant left the meeting voluntarily
NETWORK_DISCONNECT = 'network_disconnect', // The participant was disconnected due to network issues
SERVER_SHUTDOWN = 'server_shutdown', // The server was shut down
PARTICIPANT_KICKED = 'participant_kicked', // The participant was removed from the meeting by a moderator
MEETING_ENDED = 'meeting_ended', // The meeting was ended by a moderator or the room was deleted
MEETING_ENDED_BY_SELF = 'meeting_ended_by_self', // The local participant ended the meeting
UNKNOWN = 'unknown' // An unknown reason for leaving the meeting
}
/**
@ -41,20 +41,20 @@ export enum LeftEventReason {
* @category Communication
*/
export interface WebComponentEventPayloads {
/**
* Payload for the {@link WebComponentEvent.READY} event.
* @private
*/
[WebComponentEvent.READY]: {};
[WebComponentEvent.JOINED]: {
roomId: string;
participantIdentity: string;
};
[WebComponentEvent.LEFT]: {
roomId: string;
participantIdentity: string;
reason: LeftEventReason;
};
/**
* Payload for the {@link WebComponentEvent.READY} event.
* @private
*/
[WebComponentEvent.READY]: {};
[WebComponentEvent.JOINED]: {
roomId: string;
participantIdentity: string;
};
[WebComponentEvent.LEFT]: {
roomId: string;
participantIdentity: string;
reason: LeftEventReason;
};
}
/**
@ -64,5 +64,5 @@ export interface WebComponentEventPayloads {
* @private
*/
export type WebComponentEventPayloadFor<T extends WebComponentEvent> = T extends keyof WebComponentEventPayloads
? WebComponentEventPayloads[T]
: never;
? WebComponentEventPayloads[T]
: never;

View File

@ -1,13 +1,13 @@
import { WenComponentCommandPayloadFor, WebComponentCommand } from './command.model.js';
import { WebComponentEventPayloadFor, WebComponentEvent } from './event.model.js';
import { WebComponentCommand, WenComponentCommandPayloadFor } from './command.model.js';
import { WebComponentEvent, WebComponentEventPayloadFor } from './event.model.js';
/**
* Represents all possible messages exchanged between the host application and WebComponent.
* @category Communication
*/
export type WebComponentMessage =
| WebComponentInboundCommandMessage<WebComponentCommand>
| WebComponentOutboundEventMessage<WebComponentEvent>;
| WebComponentInboundCommandMessage<WebComponentCommand>
| WebComponentOutboundEventMessage<WebComponentEvent>;
/**
* Message sent from the host application to the WebComponent.
@ -15,10 +15,10 @@ export type WebComponentMessage =
* @category Communication
*/
export interface WebComponentInboundCommandMessage<T extends WebComponentCommand = WebComponentCommand> {
/** The command to execute in the WebComponent */
command: T;
/** Optional payload with additional data for the command */
payload?: WenComponentCommandPayloadFor<T>;
/** The command to execute in the WebComponent */
command: T;
/** Optional payload with additional data for the command */
payload?: WenComponentCommandPayloadFor<T>;
}
/**
@ -27,10 +27,10 @@ export interface WebComponentInboundCommandMessage<T extends WebComponentCommand
* @category Communication
*/
export interface WebComponentOutboundEventMessage<T extends WebComponentEvent = WebComponentEvent> {
/** The type of event being emitted */
event: T;
/** Optional payload with additional data about the event */
payload?: WebComponentEventPayloadFor<T>;
/** The type of event being emitted */
event: T;
/** Optional payload with additional data about the event */
payload?: WebComponentEventPayloadFor<T>;
}
/**
@ -42,10 +42,10 @@ export interface WebComponentOutboundEventMessage<T extends WebComponentEvent =
* @private
*/
export function createWebComponentCommandMessage<T extends WebComponentCommand>(
command: T,
payload?: WenComponentCommandPayloadFor<T>
command: T,
payload?: WenComponentCommandPayloadFor<T>
): WebComponentInboundCommandMessage<T> {
return { command, payload };
return { command, payload };
}
/**
@ -57,8 +57,8 @@ export function createWebComponentCommandMessage<T extends WebComponentCommand>(
* @private
*/
export function createWebComponentEventMessage<T extends WebComponentEvent>(
event: T,
payload?: WebComponentEventPayloadFor<T>
event: T,
payload?: WebComponentEventPayloadFor<T>
): WebComponentOutboundEventMessage<T> {
return { event, payload };
return { event, payload };
}

View File

@ -1,32 +1,32 @@
export enum WebComponentProperty {
/**
* The OpenVidu Meet room URL to connect to (moderator or speaker url)
* @required This attribute is required unless `recording-url` is provided.
*/
ROOM_URL = 'room-url',
/**
* The URL of a recording to view.
* @required This attribute is required unless `room-url` is provided.
*/
RECORDING_URL = 'recording-url',
/**
* Display name for the local participant.
*/
PARTICIPANT_NAME = 'participant-name',
/**
* The OpenVidu Meet room URL to connect to (moderator or speaker url)
* @required This attribute is required unless `recording-url` is provided.
*/
ROOM_URL = 'room-url',
/**
* The URL of a recording to view.
* @required This attribute is required unless `room-url` is provided.
*/
RECORDING_URL = 'recording-url',
/**
* Display name for the local participant.
*/
PARTICIPANT_NAME = 'participant-name',
/**
* Secret key for end-to-end encryption (E2EE).
* If provided, the participant will join the meeting using E2EE key.
*/
E2EE_KEY = 'e2ee-key',
/**
* Secret key for end-to-end encryption (E2EE).
* If provided, the participant will join the meeting using E2EE key.
*/
E2EE_KEY = 'e2ee-key',
/**
* URL to redirect to when leaving the meeting.
* Redirection occurs after the **`CLOSED` event** fires.
*/
LEAVE_REDIRECT_URL = 'leave-redirect-url',
/**
* Whether to show only recordings instead of live meetings.
*/
SHOW_ONLY_RECORDINGS = 'show-only-recordings'
/**
* URL to redirect to when leaving the meeting.
* Redirection occurs after the **`CLOSED` event** fires.
*/
LEAVE_REDIRECT_URL = 'leave-redirect-url',
/**
* Whether to show only recordings instead of live meetings.
*/
SHOW_ONLY_RECORDINGS = 'show-only-recordings'
}

View File

@ -4,16 +4,16 @@ import { MeetRoom } from './room.js';
export type MeetWebhookPayload = MeetRecordingInfo | MeetRoom;
export enum MeetWebhookEventType {
MEETING_STARTED = 'meetingStarted',
MEETING_ENDED = 'meetingEnded',
RECORDING_STARTED = 'recordingStarted',
RECORDING_UPDATED = 'recordingUpdated',
RECORDING_ENDED = 'recordingEnded',
ROOM_FINISHED = 'roomFinished'
MEETING_STARTED = 'meetingStarted',
MEETING_ENDED = 'meetingEnded',
RECORDING_STARTED = 'recordingStarted',
RECORDING_UPDATED = 'recordingUpdated',
RECORDING_ENDED = 'recordingEnded',
ROOM_FINISHED = 'roomFinished'
}
export interface MeetWebhookEvent {
creationDate: number;
event: MeetWebhookEventType;
data: MeetWebhookPayload;
creationDate: number;
event: MeetWebhookEventType;
data: MeetWebhookPayload;
}

1107
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff