backend: remove unnecessary index files and update import paths

This commit is contained in:
juancarmore 2025-11-23 16:40:04 +01:00
parent 0d6838019d
commit 49b44d0353
105 changed files with 354 additions and 436 deletions

View File

@ -1,9 +0,0 @@
export * from './src/routes/index.js';
export * from './src/controllers/index.js';
export * from './src/services/index.js';
export * from './src/models/index.js';
export * from './src/helpers/index.js';
export * from './src/environment.js';
export * from './src/config/index.js';
export * from './src/middlewares/index.js';
export * from './src/utils/index.js';

View File

@ -1,52 +1,58 @@
import { Container } from 'inversify';
import { MEET_ENV } from '../environment.js';
import {
ApiKeyRepository,
BaseRepository,
GlobalConfigRepository,
MigrationRepository,
RecordingRepository,
RoomRepository,
UserRepository
} from '../repositories/index.js';
import {
ABSService,
ABSStorageProvider,
AnalyticsService,
ApiKeyService,
BaseUrlService,
BlobStorageService,
DistributedEventService,
FrontendEventService,
GCSService,
GCSStorageProvider,
GlobalConfigService,
LegacyStorageService,
LiveKitService,
LivekitWebhookService,
LoggerService,
// MigrationService,
MongoDBService,
MutexService,
OpenViduWebhookService,
ParticipantNameService,
RecordingService,
RedisService,
RequestSessionService,
RoomMemberService,
RoomService,
S3KeyBuilder,
S3Service,
S3StorageProvider,
StorageFactory,
StorageInitService,
StorageKeyBuilder,
StorageProvider,
TaskSchedulerService,
TokenService,
UserService
} from '../services/index.js';
import { ApiKeyRepository } from '../repositories/api-key.repository.js';
import { BaseRepository } from '../repositories/base.repository.js';
import { GlobalConfigRepository } from '../repositories/global-config.repository.js';
import { MigrationRepository } from '../repositories/migration.repository.js';
import { RecordingRepository } from '../repositories/recording.repository.js';
import { RoomRepository } from '../repositories/room.repository.js';
import { UserRepository } from '../repositories/user.repository.js';
/*
* Services should be imported in order of use, starting with services
* without dependencies and then the services that depend on others. This
* helps avoid dependency cycles and ensures constructors receive the
* dependencies already registered in the container.
*/
import { LoggerService } from '../services/logger.service.js';
import { RedisService } from '../services/redis.service.js';
import { DistributedEventService } from '../services/distributed-event.service.js';
import { MutexService } from '../services/mutex.service.js';
import { TaskSchedulerService } from '../services/task-scheduler.service.js';
import { BaseUrlService } from '../services/base-url.service.js';
import { RequestSessionService } from '../services/request-session.service.js';
import { TokenService } from '../services/token.service.js';
import { UserService } from '../services/user.service.js';
import { ApiKeyService } from '../services/api-key.service.js';
import { GlobalConfigService } from '../services/global-config.service.js';
import { S3Service } from '../services/storage/providers/s3/s3.service.js';
import { S3KeyBuilder } from '../services/storage/providers/s3/s3-storage-key.builder.js';
import { S3StorageProvider } from '../services/storage/providers/s3/s3-storage.provider.js';
import { ABSService } from '../services/storage/providers/abs/abs.service.js';
import { ABSStorageProvider } from '../services/storage/providers/abs/abs-storage.provider.js';
import { GCSService } from '../services/storage/providers/gcp/gcs.service.js';
import { GCSStorageProvider } from '../services/storage/providers/gcp/gcs-storage.provider.js';
import { MongoDBService } from '../services/storage/mongodb.service.js';
import { StorageInitService } from '../services/storage/storage-init.service.js';
import { StorageKeyBuilder, StorageProvider } from '../services/storage/storage.interface.js';
import { StorageFactory } from '../services/storage/storage.factory.js';
import { BlobStorageService } from '../services/storage/blob-storage.service.js';
import { LegacyStorageService } from '../services/storage/legacy-storage.service.js';
import { MigrationService } from '../services/migration.service.js';
import { LiveKitService } from '../services/livekit.service.js';
import { FrontendEventService } from '../services/frontend-event.service.js';
import { RecordingService } from '../services/recording.service.js';
import { RoomService } from '../services/room.service.js';
import { ParticipantNameService } from '../services/participant-name.service.js';
import { RoomMemberService } from '../services/room-member.service.js';
import { OpenViduWebhookService } from '../services/openvidu-webhook.service.js';
import { LivekitWebhookService } from '../services/livekit-webhook.service.js';
import { AnalyticsService } from '../services/analytics.service.js';
export const container: Container = new Container();

View File

@ -1,2 +0,0 @@
export * from './dependency-injector.config.js';
export * from './internal-config.js';

View File

@ -1,7 +1,8 @@
import { Request, Response } from 'express';
import { container } from '../config/index.js';
import { container } from '../config/dependency-injector.config.js';
import { handleError } from '../models/error.model.js';
import { AnalyticsService, LoggerService } from '../services/index.js';
import { AnalyticsService } from '../services/analytics.service.js';
import { LoggerService } from '../services/logger.service.js';
export const getAnalytics = async (req: Request, res: Response): Promise<void> => {
const logger = container.get(LoggerService);

View File

@ -1,7 +1,8 @@
import { Request, Response } from 'express';
import { container } from '../config/index.js';
import { container } from '../config/dependency-injector.config.js';
import { handleError } from '../models/error.model.js';
import { ApiKeyService, LoggerService } from '../services/index.js';
import { ApiKeyService } from '../services/api-key.service.js';
import { LoggerService } from '../services/logger.service.js';
export const createApiKey = async (_req: Request, res: Response) => {
const logger = container.get(LoggerService);

View File

@ -1,6 +1,6 @@
import { Request, Response } from 'express';
import { ClaimGrants } from 'livekit-server-sdk';
import { container } from '../config/index.js';
import { container } from '../config/dependency-injector.config.js';
import {
errorInvalidCredentials,
errorInvalidRefreshToken,
@ -9,8 +9,10 @@ import {
handleError,
rejectRequestFromMeetError
} from '../models/error.model.js';
import { LoggerService, TokenService, UserService } from '../services/index.js';
import { getRefreshToken } from '../utils/index.js';
import { LoggerService } from '../services/logger.service.js';
import { TokenService } from '../services/token.service.js';
import { UserService } from '../services/user.service.js';
import { getRefreshToken } from '../utils/token.utils.js';
export const login = async (req: Request, res: Response) => {
const logger = container.get(LoggerService);

View File

@ -1,8 +1,9 @@
import { MeetAppearanceConfig } from '@openvidu-meet/typings';
import { Request, Response } from 'express';
import { container } from '../../config/index.js';
import { container } from '../../config/dependency-injector.config.js';
import { handleError } from '../../models/error.model.js';
import { GlobalConfigService, LoggerService } from '../../services/index.js';
import { GlobalConfigService } from '../../services/global-config.service.js';
import { LoggerService } from '../../services/logger.service.js';
export const updateRoomsAppearanceConfig = async (req: Request, res: Response) => {
const logger = container.get(LoggerService);

View File

@ -1,8 +1,9 @@
import { SecurityConfig } from '@openvidu-meet/typings';
import { Request, Response } from 'express';
import { container } from '../../config/index.js';
import { container } from '../../config/dependency-injector.config.js';
import { handleError } from '../../models/error.model.js';
import { GlobalConfigService, LoggerService } from '../../services/index.js';
import { GlobalConfigService } from '../../services/global-config.service.js';
import { LoggerService } from '../../services/logger.service.js';
export const updateSecurityConfig = async (req: Request, res: Response) => {
const logger = container.get(LoggerService);

View File

@ -1,8 +1,10 @@
import { WebhookConfig } from '@openvidu-meet/typings';
import { Request, Response } from 'express';
import { container } from '../../config/index.js';
import { container } from '../../config/dependency-injector.config.js';
import { handleError } from '../../models/error.model.js';
import { GlobalConfigService, LoggerService, OpenViduWebhookService } from '../../services/index.js';
import { GlobalConfigService } from '../../services/global-config.service.js';
import { LoggerService } from '../../services/logger.service.js';
import { OpenViduWebhookService } from '../../services/openvidu-webhook.service.js';
export const updateWebhookConfig = async (req: Request, res: Response) => {
const logger = container.get(LoggerService);

View File

@ -1,12 +0,0 @@
export * from './auth.controller.js';
export * from './api-key.controller.js';
export * from './user.controller.js';
export * from './room.controller.js';
export * from './meeting.controller.js';
export * from './recording.controller.js';
export * from './livekit-webhook.controller.js';
export * from './analytics.controller.js';
export * from './global-config/appearance-config.controller.js';
export * from './global-config/webhook-config.controller.js';
export * from './global-config/security-config.controller.js';

View File

@ -1,7 +1,8 @@
import { Request, Response } from 'express';
import { WebhookEvent } from 'livekit-server-sdk';
import { container } from '../config/index.js';
import { LivekitWebhookService, LoggerService } from '../services/index.js';
import { container } from '../config/dependency-injector.config.js';
import { LivekitWebhookService } from '../services/livekit-webhook.service.js';
import { LoggerService } from '../services/logger.service.js';
export const lkWebhookHandler = async (req: Request, res: Response) => {
const logger = container.get(LoggerService);

View File

@ -1,7 +1,10 @@
import { Request, Response } from 'express';
import { container } from '../config/index.js';
import { container } from '../config/dependency-injector.config.js';
import { handleError } from '../models/error.model.js';
import { LiveKitService, LoggerService, RoomMemberService, RoomService } from '../services/index.js';
import { LiveKitService } from '../services/livekit.service.js';
import { LoggerService } from '../services/logger.service.js';
import { RoomMemberService } from '../services/room-member.service.js';
import { RoomService } from '../services/room.service.js';
export const endMeeting = async (req: Request, res: Response) => {
const logger = container.get(LoggerService);

View File

@ -1,9 +1,9 @@
import archiver from 'archiver';
import { Request, Response } from 'express';
import { Readable } from 'stream';
import { container } from '../config/index.js';
import { container } from '../config/dependency-injector.config.js';
import { INTERNAL_CONFIG } from '../config/internal-config.js';
import { RecordingHelper } from '../helpers/index.js';
import { RecordingHelper } from '../helpers/recording.helper.js';
import {
errorRecordingNotFound,
errorRecordingsNotFromSameRoom,
@ -11,9 +11,11 @@ import {
internalError,
rejectRequestFromMeetError
} from '../models/error.model.js';
import { RecordingRepository } from '../repositories/index.js';
import { LoggerService, RecordingService, RequestSessionService } from '../services/index.js';
import { getBaseUrl } from '../utils/index.js';
import { RecordingRepository } from '../repositories/recording.repository.js';
import { LoggerService } from '../services/logger.service.js';
import { RecordingService } from '../services/recording.service.js';
import { RequestSessionService } from '../services/request-session.service.js';
import { getBaseUrl } from '../utils/url.utils.js';
export const startRecording = async (req: Request, res: Response) => {
const logger = container.get(LoggerService);

View File

@ -9,11 +9,13 @@ import {
MeetRoomOptions
} from '@openvidu-meet/typings';
import { Request, Response } from 'express';
import { container } from '../config/index.js';
import { container } from '../config/dependency-injector.config.js';
import { INTERNAL_CONFIG } from '../config/internal-config.js';
import { handleError } from '../models/error.model.js';
import { LoggerService, RoomMemberService, RoomService } from '../services/index.js';
import { getBaseUrl } from '../utils/index.js';
import { LoggerService } from '../services/logger.service.js';
import { RoomMemberService } from '../services/room-member.service.js';
import { RoomService } from '../services/room.service.js';
import { getBaseUrl } from '../utils/url.utils.js';
export const createRoom = async (req: Request, res: Response) => {
const logger = container.get(LoggerService);

View File

@ -1,9 +1,10 @@
import { Request, Response } from 'express';
import { container } from '../config/index.js';
import { container } from '../config/dependency-injector.config.js';
import { errorUnauthorized, handleError, rejectRequestFromMeetError } from '../models/error.model.js';
import { RequestSessionService, UserService } from '../services/index.js';
import { RequestSessionService } from '../services/request-session.service.js';
import { UserService } from '../services/user.service.js';
export const getProfile = (req: Request, res: Response) => {
export const getProfile = (_req: Request, res: Response) => {
const requestSessionService = container.get(RequestSessionService);
const user = requestSessionService.getUser();

View File

@ -1,6 +0,0 @@
export * from './utils.helper.js';
export * from './password.helper.js';
export * from './redis.helper.js';
export * from './room.helper.js';
export * from './recording.helper.js';
export * from './ov-components-adapter.helper.js';

View File

@ -1,6 +1,10 @@
import { MeetRecordingInfo, MeetRecordingStatus } from '@openvidu-meet/typings';
import { SendDataOptions } from 'livekit-server-sdk';
import { OpenViduComponentsDataTopic, RecordingSignalPayload, RoomStatusSignalPayload } from '../models/index.js';
import {
OpenViduComponentsDataTopic,
RecordingSignalPayload,
RoomStatusSignalPayload
} from '../models/ov-components-signal.model.js';
export class OpenViduComponentsAdapterHelper {
private constructor() {

View File

@ -2,8 +2,8 @@ import { EgressStatus } from '@livekit/protocol';
import { MeetRecordingInfo, MeetRecordingStatus } from '@openvidu-meet/typings';
import { EgressInfo } from 'livekit-server-sdk';
import { uid as secureUid } from 'uid/secure';
import { container } from '../config/index.js';
import { RoomService } from '../services/index.js';
import { container } from '../config/dependency-injector.config.js';
import { RoomService } from '../services/room.service.js';
export class RecordingHelper {
private constructor() {

View File

@ -3,27 +3,25 @@ import { NextFunction, Request, RequestHandler, Response } from 'express';
import rateLimit from 'express-rate-limit';
import { ClaimGrants } from 'livekit-server-sdk';
import ms from 'ms';
import { container } from '../config/index.js';
import { container } from '../config/dependency-injector.config.js';
import { INTERNAL_CONFIG } from '../config/internal-config.js';
import {
OpenViduMeetError,
errorInsufficientPermissions,
errorInvalidApiKey,
errorInvalidRoomMemberToken,
errorInvalidToken,
errorInvalidTokenSubject,
errorUnauthorized,
OpenViduMeetError,
rejectRequestFromMeetError
} from '../models/index.js';
import {
ApiKeyService,
LoggerService,
RequestSessionService,
RoomMemberService,
TokenService,
UserService
} from '../services/index.js';
import { getAccessToken, getRoomMemberToken } from '../utils/index.js';
} from '../models/error.model.js';
import { ApiKeyService } from '../services/api-key.service.js';
import { LoggerService } from '../services/logger.service.js';
import { RequestSessionService } from '../services/request-session.service.js';
import { RoomMemberService } from '../services/room-member.service.js';
import { TokenService } from '../services/token.service.js';
import { UserService } from '../services/user.service.js';
import { getAccessToken, getRoomMemberToken } from '../utils/token.utils.js';
/**
* Interface for authentication validators.

View File

@ -1,6 +1,6 @@
import { NextFunction, Request, Response } from 'express';
import { container } from '../config/dependency-injector.config.js';
import { BaseUrlService } from '../services/index.js';
import { BaseUrlService } from '../services/base-url.service.js';
export const setBaseUrlMiddleware = (req: Request, _res: Response, next: NextFunction) => {
if (req.path === '/livekit/webhook') {

View File

@ -1,14 +0,0 @@
export * from './content-type.middleware.js';
export * from './base-url.middleware.js';
export * from './request-context.middleware.js';
export * from './auth.middleware.js';
export * from './room.middleware.js';
export * from './participant.middleware.js';
export * from './recording.middleware.js';
export * from './request-validators/auth-validator.middleware.js';
export * from './request-validators/user-validator.middleware.js';
export * from './request-validators/room-validator.middleware.js';
export * from './request-validators/participant-validator.middleware.js';
export * from './request-validators/recording-validator.middleware.js';
export * from './request-validators/config-validator.middleware.js';

View File

@ -1,8 +1,10 @@
import { AuthMode, MeetRoomMemberRole, MeetRoomMemberTokenOptions, MeetUserRole } from '@openvidu-meet/typings';
import { NextFunction, Request, Response } from 'express';
import { container } from '../config/index.js';
import { container } from '../config/dependency-injector.config.js';
import { errorInsufficientPermissions, handleError, rejectRequestFromMeetError } from '../models/error.model.js';
import { GlobalConfigService, RequestSessionService, RoomMemberService } from '../services/index.js';
import { GlobalConfigService } from '../services/global-config.service.js';
import { RequestSessionService } from '../services/request-session.service.js';
import { RoomMemberService } from '../services/room-member.service.js';
import { allowAnonymous, tokenAndRoleValidator, withAuth } from './auth.middleware.js';
/**

View File

@ -1,7 +1,7 @@
import { MeetRoom, MeetUserRole } from '@openvidu-meet/typings';
import { NextFunction, Request, Response } from 'express';
import { container } from '../config/index.js';
import { RecordingHelper } from '../helpers/index.js';
import { container } from '../config/dependency-injector.config.js';
import { RecordingHelper } from '../helpers/recording.helper.js';
import {
errorInsufficientPermissions,
errorInvalidRecordingSecret,
@ -10,8 +10,10 @@ import {
handleError,
rejectRequestFromMeetError
} from '../models/error.model.js';
import { RecordingRepository } from '../repositories/index.js';
import { LoggerService, RequestSessionService, RoomService } from '../services/index.js';
import { RecordingRepository } from '../repositories/recording.repository.js';
import { LoggerService } from '../services/logger.service.js';
import { RequestSessionService } from '../services/request-session.service.js';
import { RoomService } from '../services/room.service.js';
import {
allowAnonymous,
apiKeyValidator,

View File

@ -1,6 +1,6 @@
import { NextFunction, Request, Response } from 'express';
import { container } from '../config/index.js';
import { RequestSessionService } from '../services/index.js';
import { container } from '../config/dependency-injector.config.js';
import { RequestSessionService } from '../services/request-session.service.js';
/**
* Middleware that initializes the AsyncLocalStorage context for each HTTP request.

View File

@ -1,6 +1,6 @@
import { NextFunction, Request, Response } from 'express';
import { rejectUnprocessableRequest } from '../../models/error.model.js';
import { LoginRequestSchema } from '../../models/zod-schemas/index.js';
import { LoginRequestSchema } from '../../models/zod-schemas/auth.schema.js';
export const validateLoginRequest = (req: Request, res: Response, next: NextFunction) => {
const { success, error, data } = LoginRequestSchema.safeParse(req.body);

View File

@ -5,7 +5,7 @@ import {
SecurityConfigSchema,
WebhookConfigSchema,
WebhookTestSchema
} from '../../models/zod-schemas/index.js';
} from '../../models/zod-schemas/global-config.schema.js';
export const validateWebhookConfig = (req: Request, res: Response, next: NextFunction) => {
const { success, error, data } = WebhookConfigSchema.safeParse(req.body);

View File

@ -1,7 +1,8 @@
import { MeetRoomMemberTokenMetadata } from '@openvidu-meet/typings';
import { NextFunction, Request, Response } from 'express';
import { rejectUnprocessableRequest } from '../../models/error.model.js';
import { RoomMemberTokenMetadataSchema, UpdateParticipantRequestSchema } from '../../models/zod-schemas/index.js';
import { UpdateParticipantRequestSchema } from '../../models/zod-schemas/meeting.schema.js';
import { RoomMemberTokenMetadataSchema } from '../../models/zod-schemas/room.schema.js';
export const validateUpdateParticipantRequest = (req: Request, res: Response, next: NextFunction) => {
const { success, error, data } = UpdateParticipantRequestSchema.safeParse(req.body);

View File

@ -8,7 +8,7 @@ import {
MultipleRecordingIdsSchema,
nonEmptySanitizedRecordingId,
StartRecordingRequestSchema
} from '../../models/zod-schemas/index.js';
} from '../../models/zod-schemas/recording.schema.js';
export const withValidStartRecordingRequest = (req: Request, res: Response, next: NextFunction) => {
const { success, error, data } = StartRecordingRequestSchema.safeParse(req.body);

View File

@ -9,7 +9,7 @@ import {
RoomRequestOptionsSchema,
UpdateRoomConfigSchema,
UpdateRoomStatusSchema
} from '../../models/zod-schemas/index.js';
} from '../../models/zod-schemas/room.schema.js';
export const withValidRoomOptions = (req: Request, res: Response, next: NextFunction) => {
const { success, error, data } = RoomRequestOptionsSchema.safeParse(req.body);

View File

@ -1,6 +1,6 @@
import { NextFunction, Request, Response } from 'express';
import { rejectUnprocessableRequest } from '../../models/error.model.js';
import { ChangePasswordRequestSchema } from '../../models/zod-schemas/index.js';
import { ChangePasswordRequestSchema } from '../../models/zod-schemas/user.schema.js';
export const validateChangePasswordRequest = (req: Request, res: Response, next: NextFunction) => {
const { success, error, data } = ChangePasswordRequestSchema.safeParse(req.body);

View File

@ -1,7 +1,7 @@
import { NextFunction, Request, Response } from 'express';
import { container } from '../config/index.js';
import { container } from '../config/dependency-injector.config.js';
import { errorInsufficientPermissions, rejectRequestFromMeetError } from '../models/error.model.js';
import { RequestSessionService } from '../services/index.js';
import { RequestSessionService } from '../services/request-session.service.js';
/**
* Middleware that configures authorization for accessing a specific room.

View File

@ -1,5 +1,5 @@
import { ISchemaMigration } from '../models/migration.model.js';
import { MeetApiKeyDocument } from '../models/mongoose-schemas/index.js';
import { MeetApiKeyDocument } from '../models/mongoose-schemas/api-key.schema.js';
/**
* All migrations for the MeetApiKey collection in chronological order.

View File

@ -1,5 +1,5 @@
import { ISchemaMigration } from '../models/migration.model.js';
import { MeetGlobalConfigDocument } from '../models/mongoose-schemas/index.js';
import { MeetGlobalConfigDocument } from '../models/mongoose-schemas/global-config.schema.js';
/**
* All migrations for the MeetGlobalConfig collection in chronological order.

View File

@ -1,7 +0,0 @@
export * from './base-migration.js';
export * from './migration-registry.js';
export * from './room-migrations.js';
export * from './recording-migrations.js';
export * from './user-migrations.js';
export * from './api-key-migrations.js';
export * from './global-config-migrations.js';

View File

@ -1,17 +1,13 @@
import { INTERNAL_CONFIG } from '../config/internal-config.js';
import { CollectionMigrationRegistry } from '../models/migration.model.js';
import { meetApiKeyCollectionName, MeetApiKeyModel } from '../models/mongoose-schemas/api-key.schema.js';
import {
MeetApiKeyModel,
MeetGlobalConfigModel,
MeetRecordingModel,
MeetRoomModel,
MeetUserModel,
meetApiKeyCollectionName,
meetGlobalConfigCollectionName,
meetRecordingCollectionName,
meetRoomCollectionName,
meetUserCollectionName
} from '../models/mongoose-schemas/index.js';
MeetGlobalConfigModel
} from '../models/mongoose-schemas/global-config.schema.js';
import { meetRecordingCollectionName, MeetRecordingModel } from '../models/mongoose-schemas/recording.schema.js';
import { meetRoomCollectionName, MeetRoomModel } from '../models/mongoose-schemas/room.schema.js';
import { meetUserCollectionName, MeetUserModel } from '../models/mongoose-schemas/user.schema.js';
import { apiKeyMigrations } from './api-key-migrations.js';
import { globalConfigMigrations } from './global-config-migrations.js';
import { recordingMigrations } from './recording-migrations.js';

View File

@ -1,5 +1,5 @@
import { ISchemaMigration } from '../models/migration.model.js';
import { MeetRecordingDocument } from '../models/mongoose-schemas/index.js';
import { MeetRecordingDocument } from '../models/mongoose-schemas/recording.schema.js';
/**
* All migrations for the MeetRecording collection in chronological order.

View File

@ -1,5 +1,5 @@
import { ISchemaMigration } from '../models/migration.model.js';
import { MeetRoomDocument } from '../models/mongoose-schemas/index.js';
import { MeetRoomDocument } from '../models/mongoose-schemas/room.schema.js';
/**
* All migrations for the MeetRoom collection in chronological order.

View File

@ -1,5 +1,5 @@
import { ISchemaMigration } from '../models/migration.model.js';
import { MeetUserDocument } from '../models/mongoose-schemas/index.js';
import { MeetUserDocument } from '../models/mongoose-schemas/user.schema.js';
/**
* All migrations for the MeetUser collection in chronological order.

View File

@ -1,8 +1,8 @@
import { MeetRoomDeletionErrorCode } from '@openvidu-meet/typings';
import { Response } from 'express';
import { z } from 'zod';
import { container } from '../config/index.js';
import { LoggerService } from '../services/index.js';
import { container } from '../config/dependency-injector.config.js';
import { LoggerService } from '../services/logger.service.js';
type StatusError = 400 | 401 | 402 | 403 | 404 | 409 | 415 | 416 | 422 | 500 | 503;
export class OpenViduMeetError extends Error {

View File

@ -1,8 +0,0 @@
export * from './error.model.js';
export * from './redis.model.js';
export * from './distributed-event.model.js';
export * from './migration.model.js';
export * from './ov-components-signal.model.js';
export * from './db-pagination.model.js';
export * from './task-scheduler.model.js';
export * from './request-context.model.js';

View File

@ -1,6 +0,0 @@
export * from './migration.schema.js';
export * from './global-config.schema.js';
export * from './api-key.schema.js';
export * from './user.schema.js';
export * from './room.schema.js';
export * from './recording.schema.js';

View File

@ -1,5 +1,5 @@
import { Document, model, Schema } from 'mongoose';
import { MeetMigration, MigrationName, MigrationStatus } from '../index.js';
import { MeetMigration, MigrationName, MigrationStatus } from '../migration.model.js';
/**
* Mongoose Document interface for MeetMigration.

View File

@ -1,6 +0,0 @@
export * from './global-config.schema.js';
export * from './auth.schema.js';
export * from './user.schema.js';
export * from './room.schema.js';
export * from './recording.schema.js';
export * from './meeting.schema.js';

View File

@ -22,7 +22,7 @@ import {
import ms from 'ms';
import { z } from 'zod';
import { INTERNAL_CONFIG } from '../../config/internal-config.js';
import { MeetRoomHelper } from '../../helpers/index.js';
import { MeetRoomHelper } from '../../helpers/room.helper.js';
export const nonEmptySanitizedRoomId = (fieldName: string) =>
z

View File

@ -1,6 +1,6 @@
import { MeetApiKey } from '@openvidu-meet/typings';
import { inject, injectable } from 'inversify';
import { MeetApiKeyDocument, MeetApiKeyModel } from '../models/mongoose-schemas/index.js';
import { MeetApiKeyDocument, MeetApiKeyModel } from '../models/mongoose-schemas/api-key.schema.js';
import { LoggerService } from '../services/logger.service.js';
import { BaseRepository } from './base.repository.js';

View File

@ -1,6 +1,6 @@
import { inject, injectable, unmanaged } from 'inversify';
import { Document, FilterQuery, Model, UpdateQuery } from 'mongoose';
import { PaginatedFindOptions, PaginatedResult, PaginationCursor } from '../models/index.js';
import { PaginatedFindOptions, PaginatedResult, PaginationCursor } from '../models/db-pagination.model.js';
import { LoggerService } from '../services/logger.service.js';
/**

View File

@ -1,6 +1,6 @@
import { GlobalConfig } from '@openvidu-meet/typings';
import { inject, injectable } from 'inversify';
import { MeetGlobalConfigDocument, MeetGlobalConfigModel } from '../models/mongoose-schemas/index.js';
import { MeetGlobalConfigDocument, MeetGlobalConfigModel } from '../models/mongoose-schemas/global-config.schema.js';
import { LoggerService } from '../services/logger.service.js';
import { BaseRepository } from './base.repository.js';

View File

@ -1,7 +0,0 @@
export * from './base.repository.js';
export * from './room.repository.js';
export * from './user.repository.js';
export * from './api-key.repository.js';
export * from './global-config.repository.js';
export * from './recording.repository.js';
export * from './migration.repository.js';

View File

@ -1,6 +1,6 @@
import { inject, injectable } from 'inversify';
import { MeetMigration, MigrationName, MigrationStatus } from '../models/index.js';
import { MeetMigrationDocument, MeetMigrationModel } from '../models/mongoose-schemas/index.js';
import { MeetMigration, MigrationName, MigrationStatus } from '../models/migration.model.js';
import { MeetMigrationDocument, MeetMigrationModel } from '../models/mongoose-schemas/migration.schema.js';
import { LoggerService } from '../services/logger.service.js';
import { BaseRepository } from './base.repository.js';

View File

@ -1,7 +1,7 @@
import { 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/index.js';
import { MeetRecordingDocument, MeetRecordingModel } from '../models/mongoose-schemas/recording.schema.js';
import { LoggerService } from '../services/logger.service.js';
import { BaseRepository } from './base.repository.js';

View File

@ -1,6 +1,6 @@
import { MeetRoom } from '@openvidu-meet/typings';
import { inject, injectable } from 'inversify';
import { MeetRoomDocument, MeetRoomModel } from '../models/mongoose-schemas/index.js';
import { MeetRoomDocument, MeetRoomModel } from '../models/mongoose-schemas/room.schema.js';
import { LoggerService } from '../services/logger.service.js';
import { getBaseUrl } from '../utils/url.utils.js';
import { BaseRepository } from './base.repository.js';

View File

@ -1,6 +1,6 @@
import { MeetUser } from '@openvidu-meet/typings';
import { inject, injectable } from 'inversify';
import { MeetUserDocument, MeetUserModel } from '../models/mongoose-schemas/index.js';
import { MeetUserDocument, MeetUserModel } from '../models/mongoose-schemas/user.schema.js';
import { LoggerService } from '../services/logger.service.js';
import { BaseRepository } from './base.repository.js';

View File

@ -2,7 +2,7 @@ import { MeetUserRole } from '@openvidu-meet/typings';
import bodyParser from 'body-parser';
import { Router } from 'express';
import * as analyticsCtrl from '../controllers/analytics.controller.js';
import { tokenAndRoleValidator, withAuth } from '../middlewares/index.js';
import { tokenAndRoleValidator, withAuth } from '../middlewares/auth.middleware.js';
export const analyticsRouter: Router = Router();
analyticsRouter.use(bodyParser.urlencoded({ extended: true }));

View File

@ -2,7 +2,7 @@ import { MeetUserRole } from '@openvidu-meet/typings';
import bodyParser from 'body-parser';
import { Router } from 'express';
import * as apiKeyCtrl from '../controllers/api-key.controller.js';
import { tokenAndRoleValidator, withAuth } from '../middlewares/index.js';
import { tokenAndRoleValidator, withAuth } from '../middlewares/auth.middleware.js';
export const apiKeyRouter: Router = Router();
apiKeyRouter.use(bodyParser.urlencoded({ extended: true }));

View File

@ -1,7 +1,8 @@
import bodyParser from 'body-parser';
import { Router } from 'express';
import * as authCtrl from '../controllers/auth.controller.js';
import { validateLoginRequest, withLoginLimiter } from '../middlewares/index.js';
import { withLoginLimiter } from '../middlewares/auth.middleware.js';
import { validateLoginRequest } from '../middlewares/request-validators/auth-validator.middleware.js';
export const authRouter: Router = Router();
authRouter.use(bodyParser.urlencoded({ extended: true }));

View File

@ -4,15 +4,13 @@ import { Router } from 'express';
import * as appearanceConfigCtrl from '../controllers/global-config/appearance-config.controller.js';
import * as securityConfigCtrl from '../controllers/global-config/security-config.controller.js';
import * as webhookConfigCtrl from '../controllers/global-config/webhook-config.controller.js';
import { allowAnonymous, tokenAndRoleValidator, withAuth } from '../middlewares/auth.middleware.js';
import {
allowAnonymous,
tokenAndRoleValidator,
validateRoomsAppearanceConfig,
validateSecurityConfig,
validateWebhookConfig,
withAuth,
withValidWebhookTestRequest
} from '../middlewares/index.js';
} from '../middlewares/request-validators/config-validator.middleware.js';
export const configRouter: Router = Router();
configRouter.use(bodyParser.urlencoded({ extended: true }));

View File

@ -1,9 +0,0 @@
export * from './global-config.routes.js';
export * from './auth.routes.js';
export * from './api-key.routes.js';
export * from './user.routes.js';
export * from './room.routes.js';
export * from './meeting.routes.js';
export * from './recording.routes.js';
export * from './livekit.routes.js';
export * from './analytics.routes.js';

View File

@ -1,13 +1,10 @@
import bodyParser from 'body-parser';
import { Router } from 'express';
import * as meetingCtrl from '../controllers/meeting.controller.js';
import {
roomMemberTokenValidator,
validateUpdateParticipantRequest,
withAuth,
withModeratorPermissions,
withValidRoomId
} from '../middlewares/index.js';
import { roomMemberTokenValidator, withAuth } from '../middlewares/auth.middleware.js';
import { withModeratorPermissions } from '../middlewares/participant.middleware.js';
import { validateUpdateParticipantRequest } from '../middlewares/request-validators/participant-validator.middleware.js';
import { withValidRoomId } from '../middlewares/request-validators/room-validator.middleware.js';
export const internalMeetingRouter: Router = Router();
internalMeetingRouter.use(bodyParser.urlencoded({ extended: true }));

View File

@ -4,14 +4,18 @@ import { Router } from 'express';
import * as recordingCtrl from '../controllers/recording.controller.js';
import {
apiKeyValidator,
configureRecordingAuth,
roomMemberTokenValidator,
tokenAndRoleValidator,
withAuth,
withAuth
} from '../middlewares/auth.middleware.js';
import {
configureRecordingAuth,
withCanDeleteRecordingsPermission,
withCanRecordPermission,
withCanRetrieveRecordingsPermission,
withRecordingEnabled,
withRecordingEnabled
} from '../middlewares/recording.middleware.js';
import {
withValidGetRecordingMediaRequest,
withValidGetRecordingRequest,
withValidGetRecordingUrlRequest,
@ -19,7 +23,7 @@ import {
withValidRecordingFiltersRequest,
withValidRecordingId,
withValidStartRecordingRequest
} from '../middlewares/index.js';
} from '../middlewares/request-validators/recording-validator.middleware.js';
export const recordingRouter: Router = Router();
recordingRouter.use(bodyParser.urlencoded({ extended: true }));

View File

@ -5,11 +5,12 @@ import * as roomCtrl from '../controllers/room.controller.js';
import {
allowAnonymous,
apiKeyValidator,
configureRoomAuthorization,
configureRoomMemberTokenAuth,
roomMemberTokenValidator,
tokenAndRoleValidator,
withAuth,
withAuth
} from '../middlewares/auth.middleware.js';
import { configureRoomMemberTokenAuth } from '../middlewares/participant.middleware.js';
import {
withValidRoomBulkDeleteRequest,
withValidRoomConfig,
withValidRoomDeleteRequest,
@ -18,7 +19,8 @@ import {
withValidRoomMemberTokenRequest,
withValidRoomOptions,
withValidRoomStatus
} from '../middlewares/index.js';
} from '../middlewares/request-validators/room-validator.middleware.js';
import { configureRoomAuthorization } from '../middlewares/room.middleware.js';
export const roomRouter: Router = Router();
roomRouter.use(bodyParser.urlencoded({ extended: true }));

View File

@ -2,7 +2,8 @@ import { MeetUserRole } from '@openvidu-meet/typings';
import bodyParser from 'body-parser';
import { Router } from 'express';
import * as userCtrl from '../controllers/user.controller.js';
import { tokenAndRoleValidator, validateChangePasswordRequest, withAuth } from '../middlewares/index.js';
import { tokenAndRoleValidator, withAuth } from '../middlewares/auth.middleware.js';
import { validateChangePasswordRequest } from '../middlewares/request-validators/user-validator.middleware.js';
export const userRouter: Router = Router();
userRouter.use(bodyParser.urlencoded({ extended: true }));

View File

@ -2,23 +2,21 @@ import chalk from 'chalk';
import cookieParser from 'cookie-parser';
import cors from 'cors';
import express, { Express, Request, Response } from 'express';
import { initializeEagerServices, registerDependencies } from './config/index.js';
import { initializeEagerServices, registerDependencies } from './config/dependency-injector.config.js';
import { INTERNAL_CONFIG } from './config/internal-config.js';
import { MEET_ENV, logEnvVars } from './environment.js';
import { initRequestContext, jsonSyntaxErrorHandler, setBaseUrlMiddleware } from './middlewares/index.js';
import {
analyticsRouter,
apiKeyRouter,
authRouter,
configRouter,
internalMeetingRouter,
internalRecordingRouter,
internalRoomRouter,
livekitWebhookRouter,
recordingRouter,
roomRouter,
userRouter
} from './routes/index.js';
import { setBaseUrlMiddleware } from './middlewares/base-url.middleware.js';
import { jsonSyntaxErrorHandler } from './middlewares/content-type.middleware.js';
import { initRequestContext } from './middlewares/request-context.middleware.js';
import { analyticsRouter } from './routes/analytics.routes.js';
import { apiKeyRouter } from './routes/api-key.routes.js';
import { authRouter } from './routes/auth.routes.js';
import { configRouter } from './routes/global-config.routes.js';
import { livekitWebhookRouter } from './routes/livekit.routes.js';
import { internalMeetingRouter } from './routes/meeting.routes.js';
import { internalRecordingRouter, recordingRouter } from './routes/recording.routes.js';
import { internalRoomRouter, roomRouter } from './routes/room.routes.js';
import { userRouter } from './routes/user.routes.js';
import {
frontendDirectoryPath,
frontendHtmlPath,

View File

@ -1,7 +1,8 @@
import { MeetAnalytics } from '@openvidu-meet/typings';
import { inject, injectable } from 'inversify';
import { RecordingRepository, RoomRepository } from '../repositories/index.js';
import { LoggerService } from './index.js';
import { RecordingRepository } from '../repositories/recording.repository.js';
import { RoomRepository } from '../repositories/room.repository.js';
import { LoggerService } from './logger.service.js';
/**
* Service for retrieving analytics data about OpenVidu Meet usage.

View File

@ -1,10 +1,11 @@
import { MeetApiKey } from '@openvidu-meet/typings';
import { inject, injectable } from 'inversify';
import { MEET_ENV } from '../environment.js';
import { PasswordHelper } from '../helpers/index.js';
import { PasswordHelper } from '../helpers/password.helper.js';
import { errorApiKeyNotConfigured } from '../models/error.model.js';
import { ApiKeyRepository } from '../repositories/index.js';
import { LoggerService, UserService } from './index.js';
import { ApiKeyRepository } from '../repositories/api-key.repository.js';
import { LoggerService } from './logger.service.js';
import { UserService } from './user.service.js';
@injectable()
export class ApiKeyService {

View File

@ -1,7 +1,8 @@
import { EventEmitter } from 'events';
import { inject, injectable } from 'inversify';
import { DistributedEventPayload, DistributedEventType } from '../models/distributed-event.model.js';
import { LoggerService, RedisService } from './index.js';
import { LoggerService } from './logger.service.js';
import { RedisService } from './redis.service.js';
/**
* Service for managing distributed events using Redis pub/sub pattern.

View File

@ -9,9 +9,10 @@ import {
} from '@openvidu-meet/typings';
import { inject, injectable } from 'inversify';
import { SendDataOptions } from 'livekit-server-sdk';
import { OpenViduComponentsAdapterHelper } from '../helpers/index.js';
import { OpenViduComponentsSignalPayload } from '../models/index.js';
import { LiveKitService, LoggerService } from './index.js';
import { OpenViduComponentsAdapterHelper } from '../helpers/ov-components-adapter.helper.js';
import { OpenViduComponentsSignalPayload } from '../models/ov-components-signal.model.js';
import { LiveKitService } from './livekit.service.js';
import { LoggerService } from './logger.service.js';
/**
* Service responsible for all communication with the frontend

View File

@ -1,8 +1,8 @@
import { AuthMode, AuthType, GlobalConfig } from '@openvidu-meet/typings';
import { inject, injectable } from 'inversify';
import { MEET_ENV } from '../environment.js';
import { GlobalConfigRepository } from '../repositories/index.js';
import { LoggerService } from './index.js';
import { GlobalConfigRepository } from '../repositories/global-config.repository.js';
import { LoggerService } from './logger.service.js';
/**
* Service for managing global configuration.

View File

@ -1,25 +0,0 @@
export * from './logger.service.js';
export * from './redis.service.js';
export * from './distributed-event.service.js';
export * from './mutex.service.js';
export * from './task-scheduler.service.js';
export * from './base-url.service.js';
export * from './request-session.service.js';
export * from './token.service.js';
export * from './user.service.js';
export * from './api-key.service.js';
export * from './global-config.service.js';
export * from './storage/index.js';
// export * from './migration.service.js';
export * from './livekit.service.js';
export * from './frontend-event.service.js';
export * from './recording.service.js';
export * from './room.service.js';
export * from './participant-name.service.js';
export * from './room-member.service.js';
export * from './openvidu-webhook.service.js';
export * from './livekit-webhook.service.js';
export * from './analytics.service.js';

View File

@ -3,20 +3,21 @@ import { inject, injectable } from 'inversify';
import { EgressInfo, ParticipantInfo, Room, WebhookEvent, WebhookReceiver } from 'livekit-server-sdk';
import ms from 'ms';
import { MEET_ENV } from '../environment.js';
import { MeetLock, MeetRoomHelper, RecordingHelper } from '../helpers/index.js';
import { RecordingHelper } from '../helpers/recording.helper.js';
import { MeetLock } from '../helpers/redis.helper.js';
import { MeetRoomHelper } from '../helpers/room.helper.js';
import { DistributedEventType } from '../models/distributed-event.model.js';
import { RecordingRepository, RoomRepository } from '../repositories/index.js';
import { RecordingRepository } from '../repositories/recording.repository.js';
import { RoomRepository } from '../repositories/room.repository.js';
import { DistributedEventService } from './distributed-event.service.js';
import { FrontendEventService } from './frontend-event.service.js';
import {
DistributedEventService,
LiveKitService,
LoggerService,
MutexService,
OpenViduWebhookService,
RecordingService,
RoomMemberService,
RoomService
} from './index.js';
import { LiveKitService } from './livekit.service.js';
import { LoggerService } from './logger.service.js';
import { MutexService } from './mutex.service.js';
import { OpenViduWebhookService } from './openvidu-webhook.service.js';
import { RecordingService } from './recording.service.js';
import { RoomMemberService } from './room-member.service.js';
import { RoomService } from './room.service.js';
@injectable()
export class LivekitWebhookService {

View File

@ -15,7 +15,7 @@ import {
StreamOutput
} from 'livekit-server-sdk';
import { MEET_ENV } from '../environment.js';
import { RecordingHelper } from '../helpers/index.js';
import { RecordingHelper } from '../helpers/recording.helper.js';
import {
errorLivekitNotAvailable,
errorParticipantNotFound,
@ -23,8 +23,8 @@ import {
internalError,
OpenViduMeetError
} from '../models/error.model.js';
import { chunkArray } from '../utils/index.js';
import { LoggerService } from './index.js';
import { chunkArray } from '../utils/array.utils.js';
import { LoggerService } from './logger.service.js';
@injectable()
export class LiveKitService {

View File

@ -1,24 +1,24 @@
import { inject, injectable } from 'inversify';
import { Model } from 'mongoose';
import ms from 'ms';
import { MeetLock } from '../helpers/index.js';
import { migrationRegistry } from '../migrations/index.js';
import { MeetLock } from '../helpers/redis.helper.js';
import { migrationRegistry } from '../migrations/migration-registry.js';
import {
CollectionMigrationRegistry,
generateSchemaMigrationName,
ISchemaMigration,
MigrationContext,
MigrationName
} from '../models/index.js';
import {
ApiKeyRepository,
GlobalConfigRepository,
MigrationRepository,
RecordingRepository,
RoomRepository,
UserRepository
} from '../repositories/index.js';
import { LegacyStorageService, LoggerService, MutexService } from './index.js';
} from '../models/migration.model.js';
import { ApiKeyRepository } from '../repositories/api-key.repository.js';
import { GlobalConfigRepository } from '../repositories/global-config.repository.js';
import { MigrationRepository } from '../repositories/migration.repository.js';
import { RecordingRepository } from '../repositories/recording.repository.js';
import { RoomRepository } from '../repositories/room.repository.js';
import { UserRepository } from '../repositories/user.repository.js';
import { LoggerService } from './logger.service.js';
import { MutexService } from './mutex.service.js';
import { LegacyStorageService } from './storage/legacy-storage.service.js';
@injectable()
export class MigrationService {
@ -369,7 +369,9 @@ export class MigrationService {
}
// Get access secrets from legacy storage
const secrets = await this.legacyStorageService.getRecordingAccessSecrets(recording.recordingId);
const secrets = await this.legacyStorageService.getRecordingAccessSecrets(
recording.recordingId
);
// Prepare recording document with access secrets
const recordingWithSecrets = {

View File

@ -1,8 +1,9 @@
import { Lock, Redlock } from '@sesamecare-oss/redlock';
import { inject, injectable } from 'inversify';
import ms from 'ms';
import { Redlock, Lock } from '@sesamecare-oss/redlock';
import { MeetLock } from '../helpers/index.js';
import { LoggerService, RedisService } from './index.js';
import { MeetLock } from '../helpers/redis.helper.js';
import { LoggerService } from './logger.service.js';
import { RedisService } from './redis.service.js';
export type RedisLock = Lock;
@injectable()

View File

@ -14,7 +14,9 @@ import {
errorInvalidWebhookUrl,
OpenViduMeetError
} from '../models/error.model.js';
import { ApiKeyService, GlobalConfigService, LoggerService } from './index.js';
import { ApiKeyService } from './api-key.service.js';
import { GlobalConfigService } from './global-config.service.js';
import { LoggerService } from './logger.service.js';
@injectable()
export class OpenViduWebhookService {

View File

@ -1,8 +1,9 @@
import { inject, injectable } from 'inversify';
import { RedisKeyName } from '../models/redis.model.js';
import { LoggerService, RedisService } from './index.js';
import ms from 'ms';
import { INTERNAL_CONFIG } from '../config/internal-config.js';
import { RedisKeyName } from '../models/redis.model.js';
import { LoggerService } from './logger.service.js';
import { RedisService } from './redis.service.js';
@injectable()
export class ParticipantNameService {
@ -319,7 +320,7 @@ export class ParticipantNameService {
/**
* Extracts the base name from a participant name that may have a numeric suffix.
* This prevents infinite concatenation of suffixes (e.g., "BOB_1_1_1...").
*
*
* Examples:
* - "BOB" -> { baseName: "BOB", originalCaseBase: "BOB" }
* - "BOB_1" -> { baseName: "BOB", originalCaseBase: "BOB" }

View File

@ -6,9 +6,11 @@ import { Readable } from 'stream';
import { uid } from 'uid';
import { INTERNAL_CONFIG } from '../config/internal-config.js';
import { MEET_ENV } from '../environment.js';
import { MeetLock, RecordingHelper, UtilsHelper } from '../helpers/index.js';
import { RecordingHelper } from '../helpers/recording.helper.js';
import { MeetLock } from '../helpers/redis.helper.js';
import { UtilsHelper } from '../helpers/utils.helper.js';
import { DistributedEventType } from '../models/distributed-event.model.js';
import {
DistributedEventType,
errorRecordingAlreadyStarted,
errorRecordingAlreadyStopped,
errorRecordingCannotBeStoppedWhileStarting,
@ -17,23 +19,21 @@ import {
errorRecordingStartTimeout,
errorRoomHasNoParticipants,
errorRoomNotFound,
IScheduledTask,
isErrorRecordingAlreadyStopped,
isErrorRecordingCannotBeStoppedWhileStarting,
isErrorRecordingNotFound,
OpenViduMeetError
} from '../models/index.js';
import { RecordingRepository, RoomRepository } from '../repositories/index.js';
import {
BlobStorageService,
DistributedEventService,
FrontendEventService,
LiveKitService,
LoggerService,
MutexService,
RedisLock,
TaskSchedulerService
} from './index.js';
} from '../models/error.model.js';
import { IScheduledTask } from '../models/task-scheduler.model.js';
import { RecordingRepository } from '../repositories/recording.repository.js';
import { RoomRepository } from '../repositories/room.repository.js';
import { DistributedEventService } from './distributed-event.service.js';
import { FrontendEventService } from './frontend-event.service.js';
import { LiveKitService } from './livekit.service.js';
import { LoggerService } from './logger.service.js';
import { MutexService, RedisLock } from './mutex.service.js';
import { BlobStorageService } from './storage/blob-storage.service.js';
import { TaskSchedulerService } from './task-scheduler.service.js';
@injectable()
export class RecordingService {

View File

@ -4,8 +4,9 @@ import { inject, injectable } from 'inversify';
import { Redis, RedisOptions, SentinelAddress } from 'ioredis';
import ms from 'ms';
import { checkModuleEnabled, MEET_ENV } from '../environment.js';
import { DistributedEventPayload, internalError } from '../models/index.js';
import { LoggerService } from './index.js';
import { DistributedEventPayload } from '../models/distributed-event.model.js';
import { internalError } from '../models/error.model.js';
import { LoggerService } from './logger.service.js';
@injectable()
export class RedisService extends EventEmitter {

View File

@ -1,7 +1,7 @@
import { LiveKitPermissions, MeetPermissions, MeetRoomMemberRole, MeetUser } from '@openvidu-meet/typings';
import { AsyncLocalStorage } from 'async_hooks';
import { injectable } from 'inversify';
import { RequestContext } from '../models/index.js';
import { RequestContext } from '../models/request-context.model.js';
/**
* Service that manages request-scoped session data using Node.js AsyncLocalStorage.

View File

@ -10,16 +10,14 @@ import { inject, injectable } from 'inversify';
import { ParticipantInfo } from 'livekit-server-sdk';
import { uid } from 'uid/single';
import { MeetRoomHelper } from '../helpers/room.helper.js';
import { validateRoomMemberTokenMetadata } from '../middlewares/index.js';
import { validateRoomMemberTokenMetadata } from '../middlewares/request-validators/participant-validator.middleware.js';
import { errorInvalidRoomSecret, errorParticipantNotFound, errorRoomClosed } from '../models/error.model.js';
import {
FrontendEventService,
LiveKitService,
LoggerService,
ParticipantNameService,
RoomService,
TokenService
} from './index.js';
import { FrontendEventService } from './frontend-event.service.js';
import { LiveKitService } from './livekit.service.js';
import { LoggerService } from './logger.service.js';
import { ParticipantNameService } from './participant-name.service.js';
import { RoomService } from './room.service.js';
import { TokenService } from './token.service.js';
/**
* Service for managing room members and meeting participants.

View File

@ -18,7 +18,8 @@ import { uid as secureUid } from 'uid/secure';
import { uid } from 'uid/single';
import { INTERNAL_CONFIG } from '../config/internal-config.js';
import { MEET_ENV } from '../environment.js';
import { MeetRoomHelper, UtilsHelper } from '../helpers/index.js';
import { MeetRoomHelper } from '../helpers/room.helper.js';
import { UtilsHelper } from '../helpers/utils.helper.js';
import {
errorDeletingRoom,
errorRoomActiveMeeting,
@ -26,16 +27,14 @@ import {
internalError,
OpenViduMeetError
} from '../models/error.model.js';
import { IScheduledTask } from '../models/index.js';
import { RoomRepository } from '../repositories/index.js';
import {
FrontendEventService,
LiveKitService,
LoggerService,
RecordingService,
RequestSessionService,
TaskSchedulerService
} from './index.js';
import { IScheduledTask } from '../models/task-scheduler.model.js';
import { RoomRepository } from '../repositories/room.repository.js';
import { FrontendEventService } from './frontend-event.service.js';
import { LiveKitService } from './livekit.service.js';
import { LoggerService } from './logger.service.js';
import { RecordingService } from './recording.service.js';
import { RequestSessionService } from './request-session.service.js';
import { TaskSchedulerService } from './task-scheduler.service.js';
/**
* Service for managing OpenVidu Meet rooms.

View File

@ -1,14 +0,0 @@
export * from './providers/s3/s3.service.js';
export * from './providers/s3/s3-storage-key.builder.js';
export * from './providers/s3/s3-storage.provider.js';
export * from './providers/abs/abs.service.js';
export * from './providers/abs/abs-storage.provider.js';
export * from './providers/gcp/gcs.service.js';
export * from './providers/gcp/gcs-storage.provider.js';
export * from './mongodb.service.js';
export * from './storage-init.service.js';
export * from './storage.interface.js';
export * from './storage.factory.js';
export * from './blob-storage.service.js';
export * from './legacy-storage.service.js';

View File

@ -1,7 +1,9 @@
import { GlobalConfig, MeetApiKey, MeetRecordingInfo, MeetRoom, MeetUser } from '@openvidu-meet/typings';
import { inject, injectable } from 'inversify';
import { OpenViduMeetError, RedisKeyName } from '../../models/index.js';
import { LoggerService, RedisService } from '../index.js';
import { OpenViduMeetError } from '../../models/error.model.js';
import { RedisKeyName } from '../../models/redis.model.js';
import { LoggerService } from '../logger.service.js';
import { RedisService } from '../redis.service.js';
import { StorageFactory } from './storage.factory.js';
import { StorageKeyBuilder, StorageProvider } from './storage.interface.js';

View File

@ -1,7 +1,7 @@
import { inject, injectable } from 'inversify';
import mongoose from 'mongoose';
import { MEET_ENV } from '../../environment.js';
import { LoggerService } from '../index.js';
import { LoggerService } from '../logger.service.js';
/**
* Service responsible for managing MongoDB connection lifecycle.

View File

@ -1,7 +1,8 @@
import { inject, injectable } from 'inversify';
import { Readable } from 'stream';
import { ABSService, LoggerService } from '../../../index.js';
import { LoggerService } from '../../../logger.service.js';
import { StorageProvider } from '../../storage.interface.js';
import { ABSService } from './abs.service.js';
/**
* Basic Azure Blob Storage provider that implements only primitive storage operations.

View File

@ -9,7 +9,7 @@ import { inject, injectable } from 'inversify';
import { Readable } from 'stream';
import { MEET_ENV } from '../../../../environment.js';
import { errorAzureNotAvailable, internalError } from '../../../../models/error.model.js';
import { LoggerService } from '../../../index.js';
import { LoggerService } from '../../../logger.service.js';
@injectable()
export class ABSService {

View File

@ -1,7 +1,8 @@
import { inject, injectable } from 'inversify';
import { Readable } from 'stream';
import { GCSService, LoggerService } from '../../../index.js';
import { LoggerService } from '../../../logger.service.js';
import { StorageProvider } from '../../storage.interface.js';
import { GCSService } from './gcs.service.js';
/**
* Basic GCS storage provider that implements only primitive storage operations.

View File

@ -4,7 +4,7 @@ import { Readable } from 'stream';
import { INTERNAL_CONFIG } from '../../../../config/internal-config.js';
import { MEET_ENV } from '../../../../environment.js';
import { errorS3NotAvailable, internalError } from '../../../../models/error.model.js';
import { LoggerService } from '../../../index.js';
import { LoggerService } from '../../../logger.service.js';
@injectable()
export class GCSService {

View File

@ -1,7 +1,8 @@
import { inject, injectable } from 'inversify';
import { Readable } from 'stream';
import { LoggerService, S3Service } from '../../../index.js';
import { LoggerService } from '../../../logger.service.js';
import { StorageProvider } from '../../storage.interface.js';
import { S3Service } from './s3.service.js';
/**
* Basic S3 storage provider that implements only primitive storage operations.

View File

@ -17,7 +17,7 @@ import { Readable } from 'stream';
import { INTERNAL_CONFIG } from '../../../../config/internal-config.js';
import { MEET_ENV } from '../../../../environment.js';
import { errorS3NotAvailable, internalError } from '../../../../models/error.model.js';
import { LoggerService } from '../../../index.js';
import { LoggerService } from '../../../logger.service.js';
@injectable()
export class S3Service {

View File

@ -1,10 +1,14 @@
import { inject, injectable } from 'inversify';
import ms from 'ms';
import { MEET_ENV } from '../../environment.js';
import { MeetLock } from '../../helpers/index.js';
import { internalError } from '../../models/index.js';
import { GlobalConfigRepository } from '../../repositories/index.js';
import { ApiKeyService, GlobalConfigService, LoggerService, MutexService, UserService } from '../index.js';
import { MeetLock } from '../../helpers/redis.helper.js';
import { internalError } from '../../models/error.model.js';
import { GlobalConfigRepository } from '../../repositories/global-config.repository.js';
import { ApiKeyService } from '../api-key.service.js';
import { GlobalConfigService } from '../global-config.service.js';
import { LoggerService } from '../logger.service.js';
import { MutexService } from '../mutex.service.js';
import { UserService } from '../user.service.js';
/**
* Service responsible for storage initialization.

View File

@ -1,6 +1,6 @@
import { inject, injectable } from 'inversify';
import { container, STORAGE_TYPES } from '../../config/dependency-injector.config.js';
import { LoggerService } from '../index.js';
import { LoggerService } from '../logger.service.js';
import { StorageKeyBuilder, StorageProvider } from './storage.interface.js';
/**

View File

@ -2,9 +2,11 @@ import { CronJob } from 'cron';
import { inject, injectable } from 'inversify';
import ms from 'ms';
import { INTERNAL_CONFIG } from '../config/internal-config.js';
import { MeetLock } from '../helpers/index.js';
import { IScheduledTask } from '../models/index.js';
import { DistributedEventService, LoggerService, MutexService } from './index.js';
import { MeetLock } from '../helpers/redis.helper.js';
import { IScheduledTask } from '../models/task-scheduler.model.js';
import { DistributedEventService } from './distributed-event.service.js';
import { LoggerService } from './logger.service.js';
import { MutexService } from './mutex.service.js';
@injectable()
export class TaskSchedulerService {

View File

@ -9,7 +9,7 @@ import { jwtDecode } from 'jwt-decode';
import { AccessToken, AccessTokenOptions, ClaimGrants, TokenVerifier, VideoGrant } from 'livekit-server-sdk';
import { INTERNAL_CONFIG } from '../config/internal-config.js';
import { MEET_ENV } from '../environment.js';
import { LoggerService } from './index.js';
import { LoggerService } from './logger.service.js';
@injectable()
export class TokenService {

View File

@ -4,8 +4,8 @@ import { INTERNAL_CONFIG } from '../config/internal-config.js';
import { MEET_ENV } from '../environment.js';
import { PasswordHelper } from '../helpers/password.helper.js';
import { errorInvalidPassword, internalError } from '../models/error.model.js';
import { UserRepository } from '../repositories/index.js';
import { LoggerService } from './index.js';
import { UserRepository } from '../repositories/user.repository.js';
import { LoggerService } from './logger.service.js';
@injectable()
export class UserService {

View File

@ -1,4 +0,0 @@
export * from './array.utils.js';
export * from './token.utils.js';
export * from './url.utils.js';
export * from './path.utils.js';

View File

@ -1,9 +1,4 @@
import { expect } from '@jest/globals';
import { Response } from 'supertest';
import { container } from '../../src/config/dependency-injector.config';
import { INTERNAL_CONFIG } from '../../src/config/internal-config';
import { TokenService } from '../../src/services';
import {
MeetingEndAction,
MeetRecordingAccess,
@ -18,6 +13,10 @@ import {
MeetRoomMemberRole,
MeetRoomStatus
} from '@openvidu-meet/typings';
import { Response } from 'supertest';
import { container } from '../../src/config/dependency-injector.config';
import { INTERNAL_CONFIG } from '../../src/config/internal-config';
import { TokenService } from '../../src/services/token.service';
export const expectErrorResponse = (
response: Response,

View File

@ -1,6 +1,6 @@
import { container } from '../../src/config/index.js';
import { DistributedEventType } from '../../src/models';
import { DistributedEventService } from '../../src/services';
import { container } from '../../src/config/dependency-injector.config';
import { DistributedEventType } from '../../src/models/distributed-event.model';
import { DistributedEventService } from '../../src/services/distributed-event.service';
export const eventController = {
systemEventService: undefined as unknown as DistributedEventService,

View File

@ -21,11 +21,14 @@ import { ChildProcess, spawn } from 'child_process';
import { Express } from 'express';
import ms, { StringValue } from 'ms';
import request, { Response } from 'supertest';
import { container, initializeEagerServices } from '../../src/config/index.js';
import { container, initializeEagerServices } from '../../src/config/dependency-injector.config.js';
import { INTERNAL_CONFIG } from '../../src/config/internal-config.js';
import { MEET_ENV } from '../../src/environment.js';
import { createApp, registerDependencies } from '../../src/server.js';
import { ApiKeyService, GlobalConfigService, RecordingService, RoomService } from '../../src/services/index.js';
import { ApiKeyService } from '../../src/services/api-key.service.js';
import { GlobalConfigService } from '../../src/services/global-config.service.js';
import { RecordingService } from '../../src/services/recording.service.js';
import { RoomService } from '../../src/services/room.service.js';
const CREDENTIALS = {
admin: {

View File

@ -2,7 +2,7 @@ import { MeetRoom, MeetRoomConfig } from '@openvidu-meet/typings';
import express, { Request, Response } from 'express';
import http from 'http';
import { StringValue } from 'ms';
import { MeetRoomHelper } from '../../src/helpers';
import { MeetRoomHelper } from '../../src/helpers/room.helper';
import { expectValidStartRecordingResponse } from './assertion-helpers';
import {
createRoom,

View File

@ -1,7 +1,7 @@
import { afterAll, beforeAll, describe, expect, it } from '@jest/globals';
import { container } from '../../../../src/config/index.js';
import { container } from '../../../../src/config/dependency-injector.config.js';
import { OpenViduMeetError } from '../../../../src/models/error.model.js';
import { LiveKitService } from '../../../../src/services/index.js';
import { LiveKitService } from '../../../../src/services/livekit.service.js';
import {
deleteAllRooms,
deleteRoom,

View File

@ -1,7 +1,7 @@
import { afterAll, beforeAll, beforeEach, describe, expect, it } from '@jest/globals';
import { container } from '../../../../src/config/index.js';
import { container } from '../../../../src/config/dependency-injector.config.js';
import { OpenViduMeetError } from '../../../../src/models/error.model.js';
import { LiveKitService } from '../../../../src/services/index.js';
import { LiveKitService } from '../../../../src/services/livekit.service.js';
import {
deleteAllRooms,
deleteRoom,

Some files were not shown because too many files have changed in this diff Show More