Refactors types location for backend models

Moves shared type definitions from backend models to the `typings` package.

This change centralizes type definitions, improving code maintainability
and consistency across the project. It removes duplicated type
definitions in backend and uses shared types from `typings` package
instead.
This commit is contained in:
CSantosM 2026-02-06 18:01:10 +01:00
parent af6b5cab28
commit 1c85eaa364
14 changed files with 49 additions and 33 deletions

View File

@ -1,4 +1,4 @@
import { MeetRecordingInfo } from '@openvidu-meet/typings';
import { MeetRecordingField, MeetRecordingInfo } from '@openvidu-meet/typings';
import archiver from 'archiver';
import { Request, Response } from 'express';
import { Readable } from 'stream';
@ -10,7 +10,6 @@ import {
internalError,
rejectRequestFromMeetError
} from '../models/error.model.js';
import { MeetRecordingField } from '../models/recording-request.js';
import { LoggerService } from '../services/logger.service.js';
import { RecordingService } from '../services/recording.service.js';
import { getBaseUrl } from '../utils/url.utils.js';

View File

@ -2,6 +2,9 @@ import {
MeetRoomDeletionPolicyWithMeeting,
MeetRoomDeletionPolicyWithRecordings,
MeetRoomDeletionSuccessCode,
MeetRoomExpandableProperties,
MeetRoomField,
MeetRoomFilters,
MeetRoomOptions
} from '@openvidu-meet/typings';
import { Request, Response } from 'express';
@ -9,7 +12,6 @@ import { container } from '../config/dependency-injector.config.js';
import { INTERNAL_CONFIG } from '../config/internal-config.js';
import { MeetRoomHelper } from '../helpers/room.helper.js';
import { handleError } from '../models/error.model.js';
import { MeetRoomExpandableProperties, MeetRoomField, MeetRoomFilters } from '../models/room-request.js';
import { LoggerService } from '../services/logger.service.js';
import { RoomService } from '../services/room.service.js';
import { getBaseUrl } from '../utils/url.utils.js';

View File

@ -1,13 +1,15 @@
import { MeetRoom, MeetRoomMemberPermissions, MeetRoomOptions } from '@openvidu-meet/typings';
import { INTERNAL_CONFIG } from '../config/internal-config.js';
import { MEET_ENV } from '../environment.js';
import {
MEET_ROOM_EXPANDABLE_FIELDS,
MeetRoom,
MeetRoomCollapsibleProperties,
MeetRoomExpandableProperties,
MeetRoomField,
MeetRoomMemberPermissions,
MeetRoomOptions,
SENSITIVE_ROOM_FIELDS_ENTRIES
} from '../models/room-request.js';
} from '@openvidu-meet/typings';
import { INTERNAL_CONFIG } from '../config/internal-config.js';
import { MEET_ENV } from '../environment.js';
export class MeetRoomHelper {
private constructor() {
@ -234,7 +236,10 @@ export class MeetRoomHelper {
let filteredRoom: MeetRoom | undefined;
for (const [permissionKey, fields] of SENSITIVE_ROOM_FIELDS_ENTRIES) {
for (const [permissionKey, fields] of SENSITIVE_ROOM_FIELDS_ENTRIES as [
keyof MeetRoomMemberPermissions,
(keyof MeetRoom)[]
][]) {
if (!fields?.length) {
continue;
}

View File

@ -1,6 +1,10 @@
import { MeetRecordingLayout, MeetRecordingStatus } from '@openvidu-meet/typings';
import {
MEET_RECORDING_FIELDS,
MeetRecordingField,
MeetRecordingLayout,
MeetRecordingStatus
} from '@openvidu-meet/typings';
import { z } from 'zod';
import { MEET_RECORDING_FIELDS, MeetRecordingField } from '../recording-request.js';
import { encodingValidator, nonEmptySanitizedRoomId } from './room.schema.js';
// Shared fields validation schema for Recording entity

View File

@ -1,4 +1,6 @@
import {
MEET_ROOM_EXPANDABLE_FIELDS,
MEET_ROOM_FIELDS,
MeetAppearanceConfig,
MeetChatConfig,
MeetE2EEConfig,
@ -14,6 +16,8 @@ import {
MeetRoomConfig,
MeetRoomDeletionPolicyWithMeeting,
MeetRoomDeletionPolicyWithRecordings,
MeetRoomExpandableProperties,
MeetRoomField,
MeetRoomOptions,
MeetRoomRolesConfig,
MeetRoomStatus,
@ -25,12 +29,6 @@ import ms from 'ms';
import { z } from 'zod';
import { INTERNAL_CONFIG } from '../../config/internal-config.js';
import { MeetRoomHelper } from '../../helpers/room.helper.js';
import {
MEET_ROOM_EXPANDABLE_FIELDS,
MEET_ROOM_FIELDS,
MeetRoomExpandableProperties,
MeetRoomField
} from '../room-request.js';
import { PartialMeetPermissionsSchema } from './room-member.schema.js';
export const nonEmptySanitizedRoomId = (fieldName: string) =>

View File

@ -1,8 +1,12 @@
import { MeetRecordingInfo, MeetRecordingStatus } from '@openvidu-meet/typings';
import {
MeetRecordingField,
MeetRecordingFilters,
MeetRecordingInfo,
MeetRecordingStatus
} from '@openvidu-meet/typings';
import { inject, injectable } from 'inversify';
import { uid as secureUid } from 'uid/secure';
import { MeetRecordingDocument, MeetRecordingModel } from '../models/mongoose-schemas/recording.schema.js';
import { MeetRecordingField, MeetRecordingFilters } from '../models/recording-request.js';
import { LoggerService } from '../services/logger.service.js';
import { BaseRepository } from './base.repository.js';

View File

@ -1,7 +1,6 @@
import { MeetRoom, MeetRoomStatus } from '@openvidu-meet/typings';
import { MeetRoom, MeetRoomField, MeetRoomFilters, MeetRoomStatus } from '@openvidu-meet/typings';
import { inject, injectable } from 'inversify';
import { MeetRoomDocument, MeetRoomModel } from '../models/mongoose-schemas/room.schema.js';
import { MeetRoomField, MeetRoomFilters } from '../models/room-request.js';
import { LoggerService } from '../services/logger.service.js';
import { getBasePath } from '../utils/html-injection.utils.js';
import { getBaseUrl } from '../utils/url.utils.js';

View File

@ -1,6 +1,8 @@
import {
MeetRecordingEncodingOptions,
MeetRecordingEncodingPreset,
MeetRecordingField,
MeetRecordingFilters,
MeetRecordingInfo,
MeetRecordingLayout,
MeetRecordingStatus,
@ -34,7 +36,6 @@ import {
isErrorRecordingNotFound,
OpenViduMeetError
} from '../models/error.model.js';
import { MeetRecordingField, MeetRecordingFilters } from '../models/recording-request.js';
import { RecordingRepository } from '../repositories/recording.repository.js';
import { DistributedEventService } from './distributed-event.service.js';
import { FrontendEventService } from './frontend-event.service.js';

View File

@ -8,8 +8,10 @@ import {
MeetRoomDeletionPolicyWithMeeting,
MeetRoomDeletionPolicyWithRecordings,
MeetRoomDeletionSuccessCode,
MeetRoomFilters,
MeetRoomMemberPermissions,
MeetRoomOptions,
MeetRoomResponseOptions,
MeetRoomRoles,
MeetRoomRolesConfig,
MeetRoomStatus,
@ -34,10 +36,7 @@ import {
internalError,
OpenViduMeetError
} from '../models/error.model.js';
import {
MeetRoomFilters,
MeetRoomResponseOptions
} from '../models/room-request.js';
import { RoomMemberRepository } from '../repositories/room-member.repository.js';
import { RoomRepository } from '../repositories/room.repository.js';
import { FrontendEventService } from './frontend-event.service.js';

View File

@ -299,7 +299,7 @@ export class MeetingLobbyService {
const { recordings } = await this.recordingService.listRecordings({
maxItems: 1,
roomId,
fields: 'recordingId'
fields: ['recordingId']
});
const hasRecordings = recordings.length > 0;

View File

@ -5,9 +5,11 @@ export * from './event.model.js';
export * from './global-config.js';
export * from './permissions/livekit-permissions.js';
export * from './permissions/meet-permissions.js';
export * from './recording-response.js';
export * from './recording.model.js';
export * from './room-config.js';
export * from './room-member.js';
export * from './room-response.js';
export * from './room.js';
export * from './sort-pagination.js';
export * from './user.js';
@ -18,3 +20,4 @@ export * from './webcomponent/command.model.js';
export * from './webcomponent/event.model.js';
export * from './webcomponent/message.type.js';
export * from './webcomponent/properties.model.js';

View File

@ -1,4 +1,5 @@
import { MeetRecordingInfo, MeetRecordingStatus, SortAndPagination } from '@openvidu-meet/typings';
import { MeetRecordingInfo, MeetRecordingStatus } from './recording.model';
import { SortAndPagination } from './sort-pagination';
/**
* List of all valid fields that can be selected from a MeetRecordingInfo.

View File

@ -1,4 +1,6 @@
import { MeetRoom, MeetRoomMemberPermissions, MeetRoomStatus, SortAndPagination } from '@openvidu-meet/typings';
import { MeetRoomMemberPermissions } from './permissions/meet-permissions';
import { MeetRoom, MeetRoomStatus } from './room';
import { SortAndPagination } from './sort-pagination';
/**
* List of all valid fields that can be selected from a MeetRoom.
@ -49,10 +51,9 @@ export const SENSITIVE_ROOM_FIELDS_BY_PERMISSION: Partial<Record<keyof MeetRoomM
canShareAccessLinks: ['anonymous']
};
export const SENSITIVE_ROOM_FIELDS_ENTRIES = Object.entries(SENSITIVE_ROOM_FIELDS_BY_PERMISSION) as ReadonlyArray<[
keyof MeetRoomMemberPermissions,
MeetRoomField[]
]>;
export const SENSITIVE_ROOM_FIELDS_ENTRIES = Object.entries(SENSITIVE_ROOM_FIELDS_BY_PERMISSION) as ReadonlyArray<
[keyof MeetRoomMemberPermissions, MeetRoomField[]]
>;
/**
* Filters for querying rooms with pagination, sorting, field selection, and expand support.

View File

@ -8,7 +8,7 @@
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"typeRoots": ["node_modules/@types"],
"lib": ["es2016", "dom"],
"lib": ["es2017", "dom"],
"outDir": "dist",
"rootDir": "src",
"strict": true,