backend: Reorganize imports

This commit is contained in:
juancarmore 2025-04-24 14:59:46 +02:00
parent 2c1657a58d
commit 5e11be08b4
55 changed files with 278 additions and 308 deletions

View File

@ -1,19 +1,19 @@
import { Container } from 'inversify'; import { Container } from 'inversify';
import { import {
AuthService, AuthService,
MeetStorageService,
StorageFactory,
LiveKitService, LiveKitService,
LivekitWebhookService, LivekitWebhookService,
LoggerService, LoggerService,
MeetStorageService,
MutexService, MutexService,
OpenViduWebhookService, OpenViduWebhookService,
ParticipantService, ParticipantService,
RecordingService, RecordingService,
RedisService, RedisService,
RoomService, RoomService,
S3StorageProvider,
S3Service, S3Service,
S3StorageProvider,
StorageFactory,
SystemEventService, SystemEventService,
TaskSchedulerService, TaskSchedulerService,
TokenService, TokenService,
@ -60,5 +60,3 @@ export const initializeEagerServices = async () => {
container.get(RecordingService); container.get(RecordingService);
await container.get(MeetStorageService).initializeGlobalPreferences(); await container.get(MeetStorageService).initializeGlobalPreferences();
}; };
export { injectable, inject } from 'inversify';

View File

@ -1,16 +1,10 @@
import { container } from '../config/dependency-injector.config.js';
import { Request, Response } from 'express'; import { Request, Response } from 'express';
import { AuthService } from '../services/auth.service.js';
import { TokenService } from '../services/token.service.js';
import { LoggerService } from '../services/logger.service.js';
import {
MEET_ACCESS_TOKEN_EXPIRATION,
MEET_REFRESH_TOKEN_EXPIRATION,
} from '../environment.js';
import { ClaimGrants } from 'livekit-server-sdk'; import { ClaimGrants } from 'livekit-server-sdk';
import { getCookieOptions } from '../utils/cookie-utils.js'; import { container } from '../config/index.js';
import { UserService } from '../services/user.service.js';
import INTERNAL_CONFIG from '../config/internal-config.js'; import INTERNAL_CONFIG from '../config/internal-config.js';
import { MEET_ACCESS_TOKEN_EXPIRATION, MEET_REFRESH_TOKEN_EXPIRATION } from '../environment.js';
import { AuthService, LoggerService, TokenService, UserService } from '../services/index.js';
import { getCookieOptions } from '../utils/cookie-utils.js';
export const login = async (req: Request, res: Response) => { export const login = async (req: Request, res: Response) => {
const logger = container.get(LoggerService); const logger = container.get(LoggerService);
@ -29,7 +23,11 @@ export const login = async (req: Request, res: Response) => {
const tokenService = container.get(TokenService); const tokenService = container.get(TokenService);
const accessToken = await tokenService.generateAccessToken(user); const accessToken = await tokenService.generateAccessToken(user);
const refreshToken = await tokenService.generateRefreshToken(user); const refreshToken = await tokenService.generateRefreshToken(user);
res.cookie(INTERNAL_CONFIG.ACCESS_TOKEN_COOKIE_NAME, accessToken, getCookieOptions('/', MEET_ACCESS_TOKEN_EXPIRATION)); res.cookie(
INTERNAL_CONFIG.ACCESS_TOKEN_COOKIE_NAME,
accessToken,
getCookieOptions('/', MEET_ACCESS_TOKEN_EXPIRATION)
);
res.cookie( res.cookie(
INTERNAL_CONFIG.REFRESH_TOKEN_COOKIE_NAME, INTERNAL_CONFIG.REFRESH_TOKEN_COOKIE_NAME,
refreshToken, refreshToken,
@ -82,7 +80,11 @@ export const refreshToken = async (req: Request, res: Response) => {
try { try {
const accessToken = await tokenService.generateAccessToken(user); const accessToken = await tokenService.generateAccessToken(user);
res.cookie(INTERNAL_CONFIG.ACCESS_TOKEN_COOKIE_NAME, accessToken, getCookieOptions('/', MEET_ACCESS_TOKEN_EXPIRATION)); res.cookie(
INTERNAL_CONFIG.ACCESS_TOKEN_COOKIE_NAME,
accessToken,
getCookieOptions('/', MEET_ACCESS_TOKEN_EXPIRATION)
);
logger.info(`Token refreshed for user ${username}`); logger.info(`Token refreshed for user ${username}`);
return res.status(200).json({ message: 'Token refreshed' }); return res.status(200).json({ message: 'Token refreshed' });
} catch (error) { } catch (error) {

View File

@ -1,9 +1,8 @@
import { container } from '../../config/dependency-injector.config.js';
import { Request, Response } from 'express';
import { LoggerService } from '../../services/logger.service.js';
import { MeetStorageService } from '../../services/storage/index.js';
import { OpenViduMeetError } from '../../models/error.model.js';
import { SecurityPreferencesDTO, UpdateSecurityPreferencesDTO } from '@typings-ce'; import { SecurityPreferencesDTO, UpdateSecurityPreferencesDTO } from '@typings-ce';
import { Request, Response } from 'express';
import { container } from '../../config/index.js';
import { OpenViduMeetError } from '../../models/error.model.js';
import { LoggerService, MeetStorageService } from '../../services/index.js';
export const updateSecurityPreferences = async (req: Request, res: Response) => { export const updateSecurityPreferences = async (req: Request, res: Response) => {
const logger = container.get(LoggerService); const logger = container.get(LoggerService);

View File

@ -1,9 +1,8 @@
import { container } from '../../config/dependency-injector.config.js';
import { Request, Response } from 'express';
import { LoggerService } from '../../services/logger.service.js';
import { MeetStorageService } from '../../services/storage/index.js';
import { OpenViduMeetError } from '../../models/error.model.js';
import { WebhookPreferences } from '@typings-ce'; import { WebhookPreferences } from '@typings-ce';
import { Request, Response } from 'express';
import { container } from '../../config/index.js';
import { OpenViduMeetError } from '../../models/error.model.js';
import { LoggerService, MeetStorageService } from '../../services/index.js';
export const updateWebhookPreferences = async (req: Request, res: Response) => { export const updateWebhookPreferences = async (req: Request, res: Response) => {
const logger = container.get(LoggerService); const logger = container.get(LoggerService);

View File

@ -1,8 +1,8 @@
export * from './auth.controller.js'; export * from './auth.controller.js';
export * from './recording.controller.js';
export * from './room.controller.js'; export * from './room.controller.js';
export * from './meeting.controller.js'; export * from './meeting.controller.js';
export * from './participant.controller.js'; export * from './participant.controller.js';
export * from './recording.controller.js';
export * from './livekit-webhook.controller.js'; export * from './livekit-webhook.controller.js';
export * from './global-preferences/appearance-preferences.controller.js'; export * from './global-preferences/appearance-preferences.controller.js';

View File

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

View File

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

View File

@ -1,14 +1,11 @@
import { container } from '../config/dependency-injector.config.js';
import { Request, Response } from 'express';
import { LoggerService } from '../services/logger.service.js';
import { ParticipantOptions } from '@typings-ce'; import { ParticipantOptions } from '@typings-ce';
import { OpenViduMeetError } from '../models/index.js'; import { Request, Response } from 'express';
import { ParticipantService } from '../services/participant.service.js'; import { container } from '../config/index.js';
import { MEET_PARTICIPANT_TOKEN_EXPIRATION } from '../environment.js';
import { getCookieOptions } from '../utils/cookie-utils.js';
import { TokenService } from '../services/token.service.js';
import { RoomService } from '../services/room.service.js';
import INTERNAL_CONFIG from '../config/internal-config.js'; import INTERNAL_CONFIG from '../config/internal-config.js';
import { MEET_PARTICIPANT_TOKEN_EXPIRATION } from '../environment.js';
import { OpenViduMeetError } from '../models/error.model.js';
import { LoggerService, ParticipantService, RoomService, TokenService } from '../services/index.js';
import { getCookieOptions } from '../utils/cookie-utils.js';
export const generateParticipantToken = async (req: Request, res: Response) => { export const generateParticipantToken = async (req: Request, res: Response) => {
const logger = container.get(LoggerService); const logger = container.get(LoggerService);

View File

@ -1,9 +1,8 @@
import { Request, Response } from 'express'; import { Request, Response } from 'express';
import { LoggerService } from '../services/logger.service.js'; import { container } from '../config/index.js';
import { OpenViduMeetError } from '../models/error.model.js';
import { RecordingService } from '../services/recording.service.js';
import { container } from '../config/dependency-injector.config.js';
import INTERNAL_CONFIG from '../config/internal-config.js'; import INTERNAL_CONFIG from '../config/internal-config.js';
import { OpenViduMeetError } from '../models/error.model.js';
import { LoggerService, RecordingService } from '../services/index.js';
export const startRecording = async (req: Request, res: Response) => { export const startRecording = async (req: Request, res: Response) => {
const logger = container.get(LoggerService); const logger = container.get(LoggerService);

View File

@ -1,10 +1,9 @@
import { container } from '../config/dependency-injector.config.js';
import { Request, Response } from 'express';
import { LoggerService } from '../services/logger.service.js';
import { OpenViduMeetError } from '../models/error.model.js';
import { RoomService, ParticipantService } from '../services/index.js';
import { MeetRoomFilters, MeetRoomOptions, MeetRoomRoleAndPermissions, ParticipantRole } from '@typings-ce'; import { MeetRoomFilters, MeetRoomOptions, MeetRoomRoleAndPermissions, ParticipantRole } from '@typings-ce';
import { Request, Response } from 'express';
import { container } from '../config/index.js';
import INTERNAL_CONFIG from '../config/internal-config.js'; import INTERNAL_CONFIG from '../config/internal-config.js';
import { OpenViduMeetError } from '../models/error.model.js';
import { LoggerService, ParticipantService, RoomService } from '../services/index.js';
export const createRoom = async (req: Request, res: Response) => { export const createRoom = async (req: Request, res: Response) => {
const logger = container.get(LoggerService); const logger = container.get(LoggerService);

View File

@ -1,5 +1,5 @@
import dotenv from 'dotenv';
import chalk from 'chalk'; import chalk from 'chalk';
import dotenv from 'dotenv';
let envPath: string | undefined; let envPath: string | undefined;

View File

@ -1,5 +1,6 @@
export * from './recording.helper.js'; export * from './utils.helper.js';
export * from './ov-components-adapter.helper.js';
export * from './room.helper.js';
export * from './password.helper.js'; export * from './password.helper.js';
export * from './redis.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,6 @@
import { EgressInfo } from 'livekit-server-sdk';
import { MeetRecordingInfo, MeetRecordingStatus } from '@typings-ce';
import { EgressStatus } from '@livekit/protocol'; import { EgressStatus } from '@livekit/protocol';
import { MeetRecordingInfo, MeetRecordingStatus } from '@typings-ce';
import { EgressInfo } from 'livekit-server-sdk';
import INTERNAL_CONFIG from '../config/internal-config.js'; import INTERNAL_CONFIG from '../config/internal-config.js';
export class RecordingHelper { export class RecordingHelper {

View File

@ -1,20 +1,20 @@
import { NextFunction, Request, RequestHandler, Response } from 'express';
import { LoggerService, TokenService, UserService } from '../services/index.js';
import { MEET_API_KEY } from '../environment.js';
import { container } from '../config/dependency-injector.config.js';
import { ClaimGrants } from 'livekit-server-sdk';
import { User, UserRole } from '@typings-ce'; import { User, UserRole } from '@typings-ce';
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 INTERNAL_CONFIG from '../config/internal-config.js';
import { MEET_API_KEY } from '../environment.js';
import { import {
errorUnauthorized,
errorInvalidToken,
errorInvalidTokenSubject,
errorInsufficientPermissions, errorInsufficientPermissions,
errorInvalidApiKey, errorInvalidApiKey,
errorInvalidToken,
errorInvalidTokenSubject,
errorUnauthorized,
OpenViduMeetError OpenViduMeetError
} from '../models/index.js'; } from '../models/index.js';
import rateLimit from 'express-rate-limit'; import { LoggerService, TokenService, UserService } from '../services/index.js';
import ms from 'ms';
import INTERNAL_CONFIG from '../config/internal-config.js';
/** /**
* This middleware allows to chain multiple validators to check if the request is authorized. * This middleware allows to chain multiple validators to check if the request is authorized.

View File

@ -1,4 +1,4 @@
import { Request, Response, NextFunction } from 'express'; import { NextFunction, Request, Response } from 'express';
export const mediaTypeValidatorMiddleware = (req: Request, res: Response, next: NextFunction) => { export const mediaTypeValidatorMiddleware = (req: Request, res: Response, next: NextFunction) => {
if (req.method === 'GET') { if (req.method === 'GET') {

View File

@ -1,10 +1,11 @@
export * from './content-type.middleware.js';
export * from './auth.middleware.js'; export * from './auth.middleware.js';
export * from './room.middleware.js'; export * from './room.middleware.js';
export * from './participant.middleware.js'; export * from './participant.middleware.js';
export * from './recording.middleware.js'; export * from './recording.middleware.js';
export * from './content-type.middleware.js';
export * from './request-validators/auth-validator.middleware.js'; export * from './request-validators/auth-validator.middleware.js';
export * from './request-validators/participant-validator.middleware.js';
export * from './request-validators/preferences-validator.middleware.js';
export * from './request-validators/room-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/recording-validator.middleware.js';
export * from './request-validators/preferences-validator.middleware.js';

View File

@ -1,7 +1,7 @@
import { Request, Response, NextFunction } from 'express'; import { AuthMode, ParticipantOptions, ParticipantRole, UserRole } from '@typings-ce';
import { AuthMode, ParticipantRole, UserRole, ParticipantOptions } from '@typings-ce'; import { NextFunction, Request, Response } from 'express';
import { container } from '../config/dependency-injector.config.js'; import { container } from '../config/index.js';
import { MeetStorageService, LoggerService, RoomService } from '../services/index.js'; import { LoggerService, MeetStorageService, RoomService } from '../services/index.js';
import { allowAnonymous, tokenAndRoleValidator, withAuth } from './auth.middleware.js'; import { allowAnonymous, tokenAndRoleValidator, withAuth } from './auth.middleware.js';
/** /**

View File

@ -1,10 +1,9 @@
import { container } from '../config/dependency-injector.config.js'; import { MeetRoom, OpenViduMeetPermissions } from '@typings-ce';
import { Request, Response, NextFunction } from 'express'; import { NextFunction, Request, Response } from 'express';
import { OpenViduMeetPermissions, MeetRoom } from '@typings-ce'; import { container } from '../config/index.js';
import { LoggerService } from '../services/logger.service.js'; import { RecordingHelper } from '../helpers/index.js';
import { RoomService } from '../services/room.service.js'; import { OpenViduMeetError } from '../models/error.model.js';
import { RecordingHelper } from '../helpers/recording.helper.js'; import { LoggerService, RoomService } from '../services/index.js';
import { OpenViduMeetError } from '../models/index.js';
const extractRoomIdFromRequest = (req: Request): string => { const extractRoomIdFromRequest = (req: Request): string => {
if (req.body.roomId) { if (req.body.roomId) {

View File

@ -1,4 +1,4 @@
import { Request, Response, NextFunction } from 'express'; import { NextFunction, Request, Response } from 'express';
import { z } from 'zod'; import { z } from 'zod';
const LoginRequestSchema = z.object({ const LoginRequestSchema = z.object({

View File

@ -1,5 +1,5 @@
import { ParticipantOptions } from '@typings-ce'; import { ParticipantOptions } from '@typings-ce';
import { Request, Response, NextFunction } from 'express'; import { NextFunction, Request, Response } from 'express';
import { z } from 'zod'; import { z } from 'zod';
import { nonEmptySanitizedRoomId } from './room-validator.middleware.js'; import { nonEmptySanitizedRoomId } from './room-validator.middleware.js';

View File

@ -8,7 +8,7 @@ import {
ValidAuthMethodDTO, ValidAuthMethodDTO,
WebhookPreferences WebhookPreferences
} from '@typings-ce'; } from '@typings-ce';
import { Request, Response, NextFunction } from 'express'; import { NextFunction, Request, Response } from 'express';
import { z } from 'zod'; import { z } from 'zod';
const WebhookPreferencesSchema: z.ZodType<WebhookPreferences> = z.object({ const WebhookPreferencesSchema: z.ZodType<WebhookPreferences> = z.object({

View File

@ -1,5 +1,5 @@
import { MeetRecordingFilters } from '@typings-ce'; import { MeetRecordingFilters } from '@typings-ce';
import { Request, Response, NextFunction } from 'express'; import { NextFunction, Request, Response } from 'express';
import { z } from 'zod'; import { z } from 'zod';
import { nonEmptySanitizedRoomId } from './room-validator.middleware.js'; import { nonEmptySanitizedRoomId } from './room-validator.middleware.js';

View File

@ -1,9 +1,8 @@
import { container } from '../config/dependency-injector.config.js';
import { NextFunction, Request, Response } from 'express';
import { LoggerService } from '../services/logger.service.js';
import { MeetStorageService } from '../services/index.js';
import { allowAnonymous, apiKeyValidator, tokenAndRoleValidator, withAuth } from './auth.middleware.js';
import { AuthMode, ParticipantRole, UserRole } from '@typings-ce'; import { AuthMode, ParticipantRole, UserRole } from '@typings-ce';
import { NextFunction, Request, Response } from 'express';
import { container } from '../config/index.js';
import { LoggerService, MeetStorageService } from '../services/index.js';
import { allowAnonymous, apiKeyValidator, tokenAndRoleValidator, withAuth } from './auth.middleware.js';
/** /**
* Middleware that configures authentication for creating a room based on global settings. * Middleware that configures authentication for creating a room based on global settings.

View File

@ -76,11 +76,7 @@ export const errorRecordingAlreadyStarted = (roomId: string): OpenViduMeetError
}; };
export const errorRecordingStartTimeout = (roomId: string): OpenViduMeetError => { export const errorRecordingStartTimeout = (roomId: string): OpenViduMeetError => {
return new OpenViduMeetError( return new OpenViduMeetError('Recording Error', `Recording in room '${roomId}' timed out while starting`, 503);
'Recording Error',
`Recording in room '${roomId}' timed out while starting`,
503
);
}; };
export const errorRoomHasNoParticipants = (roomId: string): OpenViduMeetError => { export const errorRoomHasNoParticipants = (roomId: string): OpenViduMeetError => {

View File

@ -1,2 +1,3 @@
export * from './error.model.js'; export * from './error.model.js';
export * from './redis.model.js'; export * from './redis.model.js';
export * from './system-event.model.js';

View File

@ -4,7 +4,7 @@ export const enum RedisKeyPrefix {
export const enum RedisKeyName { export const enum RedisKeyName {
GLOBAL_PREFERENCES = `${RedisKeyPrefix.BASE}global_preferences`, GLOBAL_PREFERENCES = `${RedisKeyPrefix.BASE}global_preferences`,
ROOM = `${RedisKeyPrefix.BASE}room:`, ROOM = `${RedisKeyPrefix.BASE}room:`
} }
export const enum RedisLockPrefix { export const enum RedisLockPrefix {
@ -16,5 +16,5 @@ export const enum RedisLockName {
ROOM_GARBAGE_COLLECTOR = 'room_garbage_collector', ROOM_GARBAGE_COLLECTOR = 'room_garbage_collector',
RECORDING_ACTIVE = 'recording_active', RECORDING_ACTIVE = 'recording_active',
SCHEDULED_TASK = 'scheduled_task', SCHEDULED_TASK = 'scheduled_task',
GLOBAL_PREFERENCES = 'global_preferences', GLOBAL_PREFERENCES = 'global_preferences'
} }

View File

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

View File

@ -1,15 +1,15 @@
import { Router } from 'express'; import { UserRole } from '@typings-ce';
import bodyParser from 'body-parser'; import bodyParser from 'body-parser';
import { Router } from 'express';
import * as appearancePrefCtrl from '../controllers/global-preferences/appearance-preferences.controller.js'; import * as appearancePrefCtrl from '../controllers/global-preferences/appearance-preferences.controller.js';
import * as webhookPrefCtrl from '../controllers/global-preferences/webhook-preferences.controller.js';
import * as securityPrefCtrl from '../controllers/global-preferences/security-preferences.controller.js'; import * as securityPrefCtrl from '../controllers/global-preferences/security-preferences.controller.js';
import * as webhookPrefCtrl from '../controllers/global-preferences/webhook-preferences.controller.js';
import { import {
tokenAndRoleValidator,
validateSecurityPreferences, validateSecurityPreferences,
validateWebhookPreferences, validateWebhookPreferences,
withAuth, withAuth
tokenAndRoleValidator
} from '../middlewares/index.js'; } from '../middlewares/index.js';
import { UserRole } from '@typings-ce';
export const preferencesRouter = Router(); export const preferencesRouter = Router();
preferencesRouter.use(bodyParser.urlencoded({ extended: true })); preferencesRouter.use(bodyParser.urlencoded({ extended: true }));

View File

@ -1,7 +1,7 @@
export * from './recording.routes.js';
export * from './global-preferences.routes.js'; export * from './global-preferences.routes.js';
export * from './room.routes.js';
export * from './auth.routes.js'; export * from './auth.routes.js';
export * from './livekit.routes.js'; export * from './room.routes.js';
export * from './participant.routes.js';
export * from './meeting.routes.js'; export * from './meeting.routes.js';
export * from './participant.routes.js';
export * from './recording.routes.js';
export * from './livekit.routes.js';

View File

@ -1,8 +1,8 @@
import { Router } from 'express';
import bodyParser from 'body-parser'; import bodyParser from 'body-parser';
import { Router } from 'express';
import * as meetingCtrl from '../controllers/meeting.controller.js'; import * as meetingCtrl from '../controllers/meeting.controller.js';
import * as participantCtrl from '../controllers/participant.controller.js'; import * as participantCtrl from '../controllers/participant.controller.js';
import { withModeratorPermissions, participantTokenValidator, withAuth } from '../middlewares/index.js'; import { participantTokenValidator, withAuth, withModeratorPermissions } from '../middlewares/index.js';
export const internalMeetingRouter = Router(); export const internalMeetingRouter = Router();
internalMeetingRouter.use(bodyParser.urlencoded({ extended: true })); internalMeetingRouter.use(bodyParser.urlencoded({ extended: true }));

View File

@ -1,7 +1,7 @@
import { Router } from 'express';
import bodyParser from 'body-parser'; import bodyParser from 'body-parser';
import { Router } from 'express';
import * as participantCtrl from '../controllers/participant.controller.js'; import * as participantCtrl from '../controllers/participant.controller.js';
import { validateParticipantTokenRequest, configureTokenAuth } from '../middlewares/index.js'; import { configureTokenAuth, validateParticipantTokenRequest } from '../middlewares/index.js';
export const internalParticipantRouter = Router(); export const internalParticipantRouter = Router();
internalParticipantRouter.use(bodyParser.urlencoded({ extended: true })); internalParticipantRouter.use(bodyParser.urlencoded({ extended: true }));

View File

@ -1,18 +1,18 @@
import { Router } from 'express';
import bodyParser from 'body-parser';
import * as recordingCtrl from '../controllers/recording.controller.js';
import { UserRole } from '@typings-ce'; import { UserRole } from '@typings-ce';
import bodyParser from 'body-parser';
import { Router } from 'express';
import * as recordingCtrl from '../controllers/recording.controller.js';
import { import {
withAuth, apiKeyValidator,
participantTokenValidator, participantTokenValidator,
tokenAndRoleValidator, tokenAndRoleValidator,
withRecordingEnabled, withAuth,
withCanRecordPermission, withCanRecordPermission,
withValidRecordingFiltersRequest, withRecordingEnabled,
withValidRecordingBulkDeleteRequest, withValidRecordingBulkDeleteRequest,
withValidRecordingFiltersRequest,
withValidRecordingId, withValidRecordingId,
withValidStartRecordingRequest, withValidStartRecordingRequest
apiKeyValidator
} from '../middlewares/index.js'; } from '../middlewares/index.js';
export const recordingRouter = Router(); export const recordingRouter = Router();

View File

@ -1,21 +1,21 @@
import { Router } from 'express'; import { UserRole } from '@typings-ce';
import bodyParser from 'body-parser'; import bodyParser from 'body-parser';
import { Router } from 'express';
import * as roomCtrl from '../controllers/room.controller.js'; import * as roomCtrl from '../controllers/room.controller.js';
import { import {
withAuth,
tokenAndRoleValidator,
apiKeyValidator, apiKeyValidator,
participantTokenValidator,
withValidRoomFiltersRequest,
withValidRoomOptions,
configureCreateRoomAuth, configureCreateRoomAuth,
configureRoomAuthorization, configureRoomAuthorization,
withValidRoomPreferences, participantTokenValidator,
tokenAndRoleValidator,
withAuth,
withValidRoomBulkDeleteRequest, withValidRoomBulkDeleteRequest,
withValidRoomDeleteRequest,
withValidRoomFiltersRequest,
withValidRoomId, withValidRoomId,
withValidRoomDeleteRequest withValidRoomOptions,
withValidRoomPreferences
} from '../middlewares/index.js'; } from '../middlewares/index.js';
import { UserRole } from '@typings-ce';
export const roomRouter = Router(); export const roomRouter = Router();
roomRouter.use(bodyParser.urlencoded({ extended: true })); roomRouter.use(bodyParser.urlencoded({ extended: true }));

View File

@ -1,15 +1,11 @@
import express, { Request, Response, Express } from 'express';
import cors from 'cors';
import chalk from 'chalk'; import chalk from 'chalk';
import { registerDependencies, initializeEagerServices } from './config/dependency-injector.config.js'; import cookieParser from 'cookie-parser';
import { SERVER_PORT, SERVER_CORS_ORIGIN, logEnvVars } from './environment.js'; import cors from 'cors';
import { import express, { Express, Request, Response } from 'express';
publicApiHtmlFilePath, import { initializeEagerServices, registerDependencies } from './config/index.js';
indexHtmlPath, import INTERNAL_CONFIG from './config/internal-config.js';
publicFilesPath, import { SERVER_CORS_ORIGIN, SERVER_PORT, logEnvVars } from './environment.js';
webcomponentBundlePath, import { jsonSyntaxErrorHandler } from './middlewares/index.js';
internalApiHtmlFilePath
} from './utils/path-utils.js';
import { import {
authRouter, authRouter,
internalMeetingRouter, internalMeetingRouter,
@ -21,9 +17,13 @@ import {
recordingRouter, recordingRouter,
roomRouter roomRouter
} from './routes/index.js'; } from './routes/index.js';
import cookieParser from 'cookie-parser'; import {
import { jsonSyntaxErrorHandler } from './middlewares/content-type.middleware.js'; indexHtmlPath,
import INTERNAL_CONFIG from './config/internal-config.js'; internalApiHtmlFilePath,
publicApiHtmlFilePath,
publicFilesPath,
webcomponentBundlePath
} from './utils/path-utils.js';
const createApp = () => { const createApp = () => {
const app: Express = express(); const app: Express = express();
@ -115,4 +115,4 @@ if (isMainModule()) {
await initializeEagerServices(); await initializeEagerServices();
} }
export { registerDependencies, createApp }; export { createApp, registerDependencies };

View File

@ -1,10 +1,8 @@
import { MEET_ADMIN_SECRET, MEET_ADMIN_USER } from '../environment.js';
import { inject, injectable } from '../config/dependency-injector.config.js';
import { User } from '@typings-ce'; import { User } from '@typings-ce';
import { UserService } from './user.service.js'; import { inject, injectable } from 'inversify';
import { MeetStorageService } from './storage/storage.service.js'; import { MEET_ADMIN_SECRET, MEET_ADMIN_USER } from '../environment.js';
import { LoggerService } from './logger.service.js'; import { PasswordHelper } from '../helpers/index.js';
import { PasswordHelper } from '../helpers/password.helper.js'; import { LoggerService, MeetStorageService, UserService } from './index.js';
@injectable() @injectable()
export class AuthService { export class AuthService {

View File

@ -1,20 +1,20 @@
import { inject, injectable } from '../config/dependency-injector.config.js';
import { EgressInfo, ParticipantInfo, Room, WebhookEvent, WebhookReceiver } from 'livekit-server-sdk';
import { RecordingHelper } from '../helpers/recording.helper.js';
import { LiveKitService } from './livekit.service.js';
import { MeetRecordingInfo, MeetRecordingStatus } from '@typings-ce'; import { MeetRecordingInfo, MeetRecordingStatus } from '@typings-ce';
import { inject, injectable } from 'inversify';
import { EgressInfo, ParticipantInfo, Room, WebhookEvent, WebhookReceiver } from 'livekit-server-sdk';
import { LIVEKIT_API_KEY, LIVEKIT_API_SECRET, MEET_NAME_ID } from '../environment.js'; import { LIVEKIT_API_KEY, LIVEKIT_API_SECRET, MEET_NAME_ID } from '../environment.js';
import { LoggerService } from './logger.service.js'; import { RecordingHelper } from '../helpers/index.js';
import { RoomService } from './room.service.js';
import { S3Service } from './s3.service.js';
import { RecordingService } from './recording.service.js';
import { OpenViduWebhookService } from './openvidu-webhook.service.js';
import { MutexService } from './mutex.service.js';
import { SystemEventService } from './system-event.service.js';
import { SystemEventType } from '../models/system-event.model.js'; import { SystemEventType } from '../models/system-event.model.js';
import { MeetRoomHelper } from '../helpers/room.helper.js'; import {
import INTERNAL_CONFIG from '../config/internal-config.js'; LiveKitService,
import { MeetStorageService } from './storage/storage.service.js'; LoggerService,
MeetStorageService,
MutexService,
OpenViduWebhookService,
RecordingService,
RoomService,
S3Service,
SystemEventService
} from './index.js';
@injectable() @injectable()
export class LivekitWebhookService { export class LivekitWebhookService {

View File

@ -1,4 +1,4 @@
import { inject, injectable } from '../config/dependency-injector.config.js'; import { inject, injectable } from 'inversify';
import { import {
CreateOptions, CreateOptions,
DataPacket_Kind, DataPacket_Kind,
@ -15,7 +15,7 @@ import {
StreamOutput StreamOutput
} from 'livekit-server-sdk'; } from 'livekit-server-sdk';
import { LIVEKIT_API_KEY, LIVEKIT_API_SECRET, LIVEKIT_URL_PRIVATE } from '../environment.js'; import { LIVEKIT_API_KEY, LIVEKIT_API_SECRET, LIVEKIT_URL_PRIVATE } from '../environment.js';
import { LoggerService } from './logger.service.js'; import { RecordingHelper } from '../helpers/index.js';
import { import {
errorLivekitIsNotAvailable, errorLivekitIsNotAvailable,
errorParticipantNotFound, errorParticipantNotFound,
@ -23,7 +23,7 @@ import {
internalError, internalError,
OpenViduMeetError OpenViduMeetError
} from '../models/error.model.js'; } from '../models/error.model.js';
import { RecordingHelper } from '../helpers/recording.helper.js'; import { LoggerService } from './index.js';
@injectable() @injectable()
export class LiveKitService { export class LiveKitService {

View File

@ -1,4 +1,4 @@
import { injectable } from '../config/dependency-injector.config.js'; import { injectable } from 'inversify';
import winston from 'winston'; import winston from 'winston';
import { MEET_LOG_LEVEL } from '../environment.js'; import { MEET_LOG_LEVEL } from '../environment.js';

View File

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

View File

@ -1,16 +1,15 @@
import crypto from 'crypto';
import { inject, injectable } from '../config/dependency-injector.config.js';
import { Room } from 'livekit-server-sdk';
import { LoggerService } from './logger.service.js';
import { MEET_API_KEY } from '../environment.js';
import { import {
MeetRecordingInfo,
MeetWebhookEvent, MeetWebhookEvent,
MeetWebhookEventType, MeetWebhookEventType,
MeetRecordingInfo,
MeetWebhookPayload, MeetWebhookPayload,
WebhookPreferences WebhookPreferences
} from '@typings-ce'; } from '@typings-ce';
import { MeetStorageService } from './storage/storage.service.js'; import crypto from 'crypto';
import { inject, injectable } from 'inversify';
import { Room } from 'livekit-server-sdk';
import { MEET_API_KEY } from '../environment.js';
import { LoggerService, MeetStorageService } from './index.js';
@injectable() @injectable()
export class OpenViduWebhookService { export class OpenViduWebhookService {

View File

@ -1,7 +1,7 @@
import { injectable, inject } from 'inversify'; import { ParticipantOptions, ParticipantPermissions, ParticipantRole } from '@typings-ce';
import { ParticipantPermissions, ParticipantRole, ParticipantOptions } from '@typings-ce'; import { inject, injectable } from 'inversify';
import { ParticipantInfo } from 'livekit-server-sdk'; import { ParticipantInfo } from 'livekit-server-sdk';
import { errorParticipantAlreadyExists, errorParticipantNotFound } from '../models/index.js'; import { errorParticipantAlreadyExists, errorParticipantNotFound } from '../models/error.model.js';
import { LiveKitService, LoggerService, RoomService, TokenService } from './index.js'; import { LiveKitService, LoggerService, RoomService, TokenService } from './index.js';
@injectable() @injectable()

View File

@ -1,8 +1,12 @@
import { MeetRecordingFilters, MeetRecordingInfo, MeetRecordingStatus } from '@typings-ce';
import { inject, injectable } from 'inversify';
import { EgressStatus, EncodedFileOutput, EncodedFileType, RoomCompositeOptions } from 'livekit-server-sdk'; import { EgressStatus, EncodedFileOutput, EncodedFileType, RoomCompositeOptions } from 'livekit-server-sdk';
import { uid } from 'uid';
import ms from 'ms'; import ms from 'ms';
import { Readable } from 'stream'; import { Readable } from 'stream';
import { LiveKitService } from './livekit.service.js'; import { uid } from 'uid';
import INTERNAL_CONFIG from '../config/internal-config.js';
import { MEET_S3_BUCKET, MEET_S3_SUBBUCKET } from '../environment.js';
import { MeetLock, OpenViduComponentsAdapterHelper, RecordingHelper, UtilsHelper } from '../helpers/index.js';
import { import {
errorRecordingAlreadyStarted, errorRecordingAlreadyStarted,
errorRecordingAlreadyStopped, errorRecordingAlreadyStopped,
@ -16,23 +20,20 @@ import {
isErrorRecordingAlreadyStopped, isErrorRecordingAlreadyStopped,
isErrorRecordingCannotBeStoppedWhileStarting, isErrorRecordingCannotBeStoppedWhileStarting,
isErrorRecordingNotFound, isErrorRecordingNotFound,
OpenViduMeetError OpenViduMeetError,
} from '../models/error.model.js'; SystemEventType
import { S3Service } from './s3.service.js'; } from '../models/index.js';
import { LoggerService } from './logger.service.js'; import {
import { MeetRecordingFilters, MeetRecordingInfo, MeetRecordingStatus } from '@typings-ce'; IScheduledTask,
import { RecordingHelper } from '../helpers/recording.helper.js'; LiveKitService,
import { MEET_S3_BUCKET, MEET_S3_SUBBUCKET } from '../environment.js'; LoggerService,
import { RoomService } from './room.service.js'; MutexService,
import { inject, injectable } from '../config/dependency-injector.config.js'; RedisLock,
import { MutexService, RedisLock } from './mutex.service.js'; RoomService,
import { OpenViduComponentsAdapterHelper } from '../helpers/ov-components-adapter.helper.js'; S3Service,
import { MeetLock } from '../helpers/redis.helper.js'; SystemEventService,
import { IScheduledTask, TaskSchedulerService } from './task-scheduler.service.js'; TaskSchedulerService
import { SystemEventService } from './system-event.service.js'; } from './index.js';
import { SystemEventType } from '../models/system-event.model.js';
import { UtilsHelper } from '../helpers/utils.helper.js';
import INTERNAL_CONFIG from '../config/internal-config.js';
@injectable() @injectable()
export class RecordingService { export class RecordingService {

View File

@ -1,22 +1,21 @@
import { inject, injectable } from '../config/dependency-injector.config.js'; import { EventEmitter } from 'events';
import * as config from '../environment.js'; import { inject, injectable } from 'inversify';
import { Redis, RedisOptions, SentinelAddress } from 'ioredis'; import { Redis, RedisOptions, SentinelAddress } from 'ioredis';
import ms from 'ms';
import Redlock from 'redlock';
import { import {
checkModuleEnabled,
REDIS_DB, REDIS_DB,
REDIS_HOST, REDIS_HOST,
REDIS_PASSWORD, REDIS_PASSWORD,
REDIS_PORT, REDIS_PORT,
REDIS_SENTINEL_MASTER_NAME,
REDIS_SENTINEL_HOST_LIST, REDIS_SENTINEL_HOST_LIST,
REDIS_SENTINEL_MASTER_NAME,
REDIS_SENTINEL_PASSWORD, REDIS_SENTINEL_PASSWORD,
REDIS_USERNAME REDIS_USERNAME
} from '../environment.js'; } from '../environment.js';
import { internalError } from '../models/error.model.js'; import { internalError, SystemEventPayload } from '../models/index.js';
import { LoggerService } from './logger.service.js'; import { LoggerService } from './index.js';
import { EventEmitter } from 'events';
import Redlock from 'redlock';
import ms from 'ms';
import { SystemEventPayload } from '../models/system-event.model.js';
@injectable() @injectable()
export class RedisService extends EventEmitter { export class RedisService extends EventEmitter {
@ -249,7 +248,7 @@ export class RedisService extends EventEmitter {
private loadRedisConfig(): RedisOptions { private loadRedisConfig(): RedisOptions {
// Check if openviduCall module is enabled. If not, exit the process // Check if openviduCall module is enabled. If not, exit the process
config.checkModuleEnabled(); checkModuleEnabled();
//Check if Redis Sentinel is configured //Check if Redis Sentinel is configured
if (REDIS_SENTINEL_HOST_LIST) { if (REDIS_SENTINEL_HOST_LIST) {

View File

@ -12,22 +12,21 @@ import {
S3Client, S3Client,
S3ClientConfig S3ClientConfig
} from '@aws-sdk/client-s3'; } from '@aws-sdk/client-s3';
import { inject, injectable } from 'inversify';
import { Readable } from 'stream';
import { import {
MEET_S3_ACCESS_KEY,
MEET_AWS_REGION, MEET_AWS_REGION,
MEET_S3_ACCESS_KEY,
MEET_S3_BUCKET, MEET_S3_BUCKET,
MEET_S3_SERVICE_ENDPOINT,
MEET_S3_SECRET_KEY,
MEET_S3_WITH_PATH_STYLE_ACCESS,
MEET_S3_MAX_RETRIES_ATTEMPTS_ON_SAVE_ERROR,
MEET_S3_INITIAL_RETRY_DELAY_MS, MEET_S3_INITIAL_RETRY_DELAY_MS,
MEET_S3_SUBBUCKET MEET_S3_MAX_RETRIES_ATTEMPTS_ON_SAVE_ERROR,
MEET_S3_SECRET_KEY,
MEET_S3_SERVICE_ENDPOINT,
MEET_S3_SUBBUCKET,
MEET_S3_WITH_PATH_STYLE_ACCESS
} from '../environment.js'; } from '../environment.js';
import { errorS3NotAvailable, internalError } from '../models/error.model.js'; import { errorS3NotAvailable, internalError } from '../models/error.model.js';
import { Readable } from 'stream'; import { LoggerService } from './index.js';
import { LoggerService } from './logger.service.js';
import { inject, injectable } from '../config/dependency-injector.config.js';
@injectable() @injectable()
export class S3Service { export class S3Service {

View File

@ -1,13 +1,9 @@
import { GlobalPreferences, MeetRoom } from '@typings-ce';
import { StorageProvider } from '../storage.interface.js';
import { S3Service } from '../../s3.service.js';
import { LoggerService } from '../../logger.service.js';
import { RedisService } from '../../redis.service.js';
import { OpenViduMeetError } from '../../../models/error.model.js';
import { inject, injectable } from '../../../config/dependency-injector.config.js';
import { RedisKeyName } from '../../../models/redis.model.js';
import { PutObjectCommandOutput } from '@aws-sdk/client-s3'; import { PutObjectCommandOutput } from '@aws-sdk/client-s3';
import { GlobalPreferences, MeetRoom } from '@typings-ce';
import { inject, injectable } from 'inversify';
import INTERNAL_CONFIG from '../../../config/internal-config.js'; import INTERNAL_CONFIG from '../../../config/internal-config.js';
import { OpenViduMeetError, RedisKeyName } from '../../../models/index.js';
import { LoggerService, RedisService, S3Service, StorageProvider } from '../../index.js';
/** /**
* Implementation of the StorageProvider interface using AWS S3 for persistent storage * Implementation of the StorageProvider interface using AWS S3 for persistent storage

View File

@ -1,8 +1,6 @@
import { StorageProvider } from './storage.interface.js'; import { inject, injectable } from 'inversify';
import { S3StorageProvider } from './providers/s3-storage.provider.js';
import { MEET_PREFERENCES_STORAGE_MODE } from '../../environment.js'; import { MEET_PREFERENCES_STORAGE_MODE } from '../../environment.js';
import { inject, injectable } from '../../config/dependency-injector.config.js'; import { LoggerService, S3StorageProvider, StorageProvider } from '../index.js';
import { LoggerService } from '../logger.service.js';
/** /**
* Factory class responsible for creating the appropriate storage provider based on configuration. * Factory class responsible for creating the appropriate storage provider based on configuration.

View File

@ -1,14 +1,10 @@
import { AuthMode, AuthType, GlobalPreferences, MeetRoom } from '@typings-ce'; import { AuthMode, AuthType, GlobalPreferences, MeetRoom } from '@typings-ce';
import { LoggerService } from '../logger.service.js'; import { inject, injectable } from 'inversify';
import { StorageProvider } from './storage.interface.js';
import { StorageFactory } from './storage.factory.js';
import { errorRoomNotFound, OpenViduMeetError } from '../../models/error.model.js';
import { MEET_NAME_ID, MEET_SECRET, MEET_USER, MEET_WEBHOOK_ENABLED, MEET_WEBHOOK_URL } from '../../environment.js';
import { injectable, inject } from '../../config/dependency-injector.config.js';
import { PasswordHelper } from '../../helpers/password.helper.js';
import { MutexService } from '../mutex.service.js';
import { MeetLock } from '../../helpers/redis.helper.js';
import ms from 'ms'; import ms from 'ms';
import { MEET_NAME_ID, MEET_SECRET, MEET_USER, MEET_WEBHOOK_ENABLED, MEET_WEBHOOK_URL } from '../../environment.js';
import { MeetLock, PasswordHelper } from '../../helpers/index.js';
import { errorRoomNotFound, OpenViduMeetError } from '../../models/error.model.js';
import { LoggerService, MutexService, StorageFactory, StorageProvider } from '../index.js';
/** /**
* A service for managing storage operations related to OpenVidu Meet rooms and preferences. * A service for managing storage operations related to OpenVidu Meet rooms and preferences.
@ -125,7 +121,6 @@ export class MeetStorageService<G extends GlobalPreferences = GlobalPreferences,
return this.storageProvider.getArchivedRoomMetadata(roomId) as Promise<Partial<R> | null>; return this.storageProvider.getArchivedRoomMetadata(roomId) as Promise<Partial<R> | null>;
} }
async archiveRoomMetadata(roomId: string): Promise<void> { async archiveRoomMetadata(roomId: string): Promise<void> {
return this.storageProvider.archiveRoomMetadata(roomId); return this.storageProvider.archiveRoomMetadata(roomId);
} }

View File

@ -1,8 +1,7 @@
import { inject, injectable } from 'inversify';
import { RedisService } from './redis.service.js';
import { LoggerService } from './logger.service.js';
import { EventEmitter } from 'events'; import { EventEmitter } from 'events';
import { inject, injectable } from 'inversify';
import { SystemEventPayload, SystemEventType } from '../models/system-event.model.js'; import { SystemEventPayload, SystemEventType } from '../models/system-event.model.js';
import { LoggerService, RedisService } from './index.js';
@injectable() @injectable()
export class SystemEventService { export class SystemEventService {

View File

@ -1,11 +1,9 @@
import { inject, injectable } from 'inversify';
import { LoggerService } from './index.js';
import { SystemEventService } from './system-event.service.js';
import { CronJob } from 'cron'; import { CronJob } from 'cron';
import { MutexService } from './mutex.service.js'; import { inject, injectable } from 'inversify';
import { MeetLock } from '../helpers/redis.helper.js';
import ms from 'ms'; import ms from 'ms';
import INTERNAL_CONFIG from '../config/internal-config.js'; import INTERNAL_CONFIG from '../config/internal-config.js';
import { MeetLock } from '../helpers/index.js';
import { LoggerService, MutexService, SystemEventService } from './index.js';
export type TaskType = 'cron' | 'timeout'; export type TaskType = 'cron' | 'timeout';

View File

@ -1,14 +1,14 @@
import { ParticipantOptions, ParticipantPermissions, ParticipantRole, User } from '@typings-ce';
import { inject, injectable } from 'inversify';
import { AccessToken, AccessTokenOptions, ClaimGrants, TokenVerifier, VideoGrant } from 'livekit-server-sdk';
import { import {
MEET_ACCESS_TOKEN_EXPIRATION,
MEET_REFRESH_TOKEN_EXPIRATION,
LIVEKIT_API_KEY, LIVEKIT_API_KEY,
LIVEKIT_API_SECRET, LIVEKIT_API_SECRET,
LIVEKIT_URL,
MEET_ACCESS_TOKEN_EXPIRATION,
MEET_PARTICIPANT_TOKEN_EXPIRATION, MEET_PARTICIPANT_TOKEN_EXPIRATION,
LIVEKIT_URL MEET_REFRESH_TOKEN_EXPIRATION
} from '../environment.js'; } from '../environment.js';
import { inject, injectable } from '../config/dependency-injector.config.js';
import { AccessToken, AccessTokenOptions, ClaimGrants, TokenVerifier, VideoGrant } from 'livekit-server-sdk';
import { ParticipantPermissions, ParticipantRole, ParticipantOptions, User } from '@typings-ce';
import { LoggerService } from './index.js'; import { LoggerService } from './index.js';
@injectable() @injectable()

View File

@ -1,8 +1,7 @@
import { SingleUserAuth, SingleUserCredentials, User, UserRole } from '@typings-ce';
import { inject, injectable } from 'inversify';
import { MEET_ADMIN_USER } from '../environment.js'; import { MEET_ADMIN_USER } from '../environment.js';
import { inject, injectable } from '../config/dependency-injector.config.js'; import { LoggerService, MeetStorageService } from './index.js';
import { UserRole, SingleUserAuth, User, SingleUserCredentials } from '@typings-ce';
import { LoggerService } from './logger.service.js';
import { MeetStorageService } from './storage/storage.service.js';
@injectable() @injectable()
export class UserService { export class UserService {

View File

@ -1,5 +1,5 @@
import { fileURLToPath } from 'url';
import path from 'path'; import path from 'path';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url); const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename); const __dirname = path.dirname(__filename);

View File

@ -1,11 +1,12 @@
export * from './global-preferences.js';
export * from './auth-preferences.js'; export * from './auth-preferences.js';
export * from './room-preferences.js'; export * from './global-preferences.js';
export * from './participant.js';
export * from './room.js';
export * from './recording.model.js';
export * from './webhook.model.js';
export * from './user.js';
export * from './permissions/livekit-permissions.js'; export * from './permissions/livekit-permissions.js';
export * from './permissions/openvidu-permissions.js'; export * from './permissions/openvidu-permissions.js';
export * from './participant.js';
export * from './user.js';
export * from './room-preferences.js';
export * from './room.js';
export * from './recording.model.js';
export * from './webhook.model.js';

View File

@ -5,7 +5,7 @@ export const enum MeetRecordingStatus {
COMPLETE = 'COMPLETE', COMPLETE = 'COMPLETE',
FAILED = 'FAILED', FAILED = 'FAILED',
ABORTED = 'ABORTED', ABORTED = 'ABORTED',
LIMIT_REACHED = 'LIMIT_REACHED', LIMIT_REACHED = 'LIMIT_REACHED'
} }
// export const enum MeetRecordingOutputMode { // export const enum MeetRecordingOutputMode {