diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/components/index.ts deleted file mode 100644 index b5c74941..00000000 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -export * from './console-nav/console-nav.component'; -export * from './dialogs/basic-dialog/dialog.component'; -export * from './dialogs/delete-room-dialog/delete-room-dialog.component'; -export * from './dialogs/share-recording-dialog/share-recording-dialog.component'; -export * from './logo-selector/logo-selector.component'; -export * from './pro-feature-badge/pro-feature-badge.component'; -export * from './recording-lists/recording-lists.component'; -export * from './recording-video-player/recording-video-player.component'; -export * from './rooms-lists/rooms-lists.component'; -export * from './selectable-card/selectable-card.component'; -export * from './share-meeting-link/share-meeting-link.component'; -export * from './spinner/spinner.component'; -export * from './step-indicator/step-indicator.component'; -export * from './wizard-nav/wizard-nav.component'; - -// Meeting modular components -export * from './meeting-lobby/meeting-lobby.component'; -export * from './meeting-share-link-overlay/meeting-share-link-overlay.component'; - - -// Meeting components -export * from './hidden-participants-indicator/hidden-participants-indicator.component'; -export * from './meeting-lobby/meeting-lobby.component'; -export * from './meeting-share-link-overlay/meeting-share-link-overlay.component'; - diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/index.ts deleted file mode 100644 index 742094d5..00000000 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './components/index'; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/auth/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/auth/index.ts new file mode 100644 index 00000000..0c4aea54 --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/auth/index.ts @@ -0,0 +1,4 @@ +export * from './interceptor-handlers'; +export * from './pages'; +export * from './services'; + diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/auth/interceptor-handlers/README.md b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/auth/interceptor-handlers/README.md new file mode 100644 index 00000000..909c5881 --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/auth/interceptor-handlers/README.md @@ -0,0 +1,46 @@ +# Interceptor Handlers - Auth Domain + +Este directorio contiene los handlers que gestionan la lógica de dominio relacionada con errores HTTP de autenticación. + +## Propósito + +Separar la lógica de negocio del interceptor HTTP principal, siguiendo el principio de responsabilidad única y la arquitectura de dominios. + +## Componentes + +### `AuthErrorHandlerService` + +Servicio responsable de manejar errores 401 relacionados con tokens de acceso expirados. + +**Responsabilidades:** +- Refrescar el access token cuando expira +- Reintrentar la petición original con el nuevo token +- Manejar errores de refresh token (logout si es necesario) + +**NO es responsable de:** +- Decidir cuándo debe ejecutarse (eso lo hace el interceptor) +- Conocer sobre tokens de room members (eso es del dominio rooms) +- Agregar headers a las peticiones (eso lo hace el interceptor) + +## Arquitectura + +``` +HTTP Interceptor (detecta error 401) + ↓ + Notifica → HttpErrorNotifierService + ↓ + Decide qué handler ejecutar según contexto + ↓ +AuthErrorHandlerService.createRetryStrategy() + ↓ + Ejecuta lógica de dominio (refresh token) + ↓ + Retorna Observable para reintentar la petición +``` + +## Uso + +El servicio se inyecta automáticamente en el interceptor HTTP y se invoca cuando: +- Se recibe un error 401 +- No es un error de token de room member +- No estamos en la página de login O existe un refresh token disponible diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/auth/interceptor-handlers/auth-error-handler.service.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/auth/interceptor-handlers/auth-error-handler.service.ts new file mode 100644 index 00000000..23a922b8 --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/auth/interceptor-handlers/auth-error-handler.service.ts @@ -0,0 +1,108 @@ +import { HttpErrorResponse, HttpEvent } from '@angular/common/http'; +import { Injectable, inject } from '@angular/core'; +import { Router } from '@angular/router'; +import { Observable, catchError, from, switchMap } from 'rxjs'; +import { HttpErrorContext, HttpErrorHandler, HttpErrorNotifierService } from '../../../shared/services/http-error-notifier.service'; +import { TokenStorageService } from '../../../shared/services/token-storage.service'; +import { AuthService } from '../services/auth.service'; + +/** + * Handler for authentication-related HTTP errors. + * Registers itself with HttpErrorNotifierService to autonomously handle access token refresh. + * The interceptor doesn't know about this service - it discovers itself via registration. + */ +@Injectable({ + providedIn: 'root' +}) +export class AuthInterceptorErrorHandlerService implements HttpErrorHandler { + private readonly authService = inject(AuthService); + private readonly tokenStorageService = inject(TokenStorageService); + private readonly router = inject(Router); + private readonly httpErrorNotifier = inject(HttpErrorNotifierService); + + /** + * Registers this handler with the error notifier service + */ + init(): void { + this.httpErrorNotifier.register(this); + } + + /** + * Determines if this handler can handle the given error context + */ + canHandle(context: HttpErrorContext): boolean { + const { error, pageUrl } = context; + + // Only handle 401 errors + if (error.status !== 401) { + return false; + } + + // Don't handle if it's already a token refresh endpoint error (avoid infinite loop) + if (error.url?.includes('/auth/refresh')) { + return false; + } + + // Special case: room member token generation failed, need to refresh access token first + if (error.url?.includes('/token')) { + return true; + } + + // Handle if not on login page OR if there's a refresh token available + return !pageUrl.startsWith('/login') || !!this.tokenStorageService.getRefreshToken(); + } + + /** + * Handles the error and returns a recovery Observable + */ + handle(context: HttpErrorContext): Observable> { + const { error } = context; + + // Special case: room member token generation failed + if (error.url?.includes('/token')) { + console.log('Generating room member token failed. Refreshing access token first...'); + } + + return this.refreshAccessToken(context); + } + + /** + * Refreshes the access token and retries the original request + */ + private refreshAccessToken(context: HttpErrorContext): Observable> { + const { request: originalRequest, error: originalError, pageUrl, next } = context; + console.log('Refreshing access token...'); + + return from(this.authService.refreshToken()).pipe( + switchMap(() => { + console.log('Access token refreshed'); + // Update the request with the new token + const newToken = this.tokenStorageService.getAccessToken(); + const updatedRequest = newToken + ? originalRequest.clone({ + setHeaders: { + authorization: `Bearer ${newToken}` + } + }) + : originalRequest; + + return next(updatedRequest); + }), + catchError(async (error: HttpErrorResponse) => { + if (error.url?.includes('/auth/refresh')) { + console.error('Error refreshing access token'); + + // If the original request was not to the profile endpoint, logout and redirect to the login page + if (!originalRequest.url.includes('/profile')) { + console.log('Logging out...'); + await this.authService.logout(pageUrl); + } + + throw originalError; + } + + throw error; + }) + ); + } +} diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/auth/interceptor-handlers/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/auth/interceptor-handlers/index.ts new file mode 100644 index 00000000..c358c04a --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/auth/interceptor-handlers/index.ts @@ -0,0 +1 @@ +export * from './auth-error-handler.service'; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/auth/pages/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/auth/pages/index.ts new file mode 100644 index 00000000..7e7f2769 --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/auth/pages/index.ts @@ -0,0 +1 @@ +export * from './login/login.component'; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/login/login.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/auth/pages/login/login.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/login/login.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/auth/pages/login/login.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/login/login.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/auth/pages/login/login.component.scss similarity index 98% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/login/login.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/auth/pages/login/login.component.scss index 4067a06a..fe5dba2c 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/login/login.component.scss +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/auth/pages/login/login.component.scss @@ -1,4 +1,4 @@ -@use '../../../../../../src/assets/styles/design-tokens'; +@use '../../../../../../../../src/assets/styles/design-tokens'; // Login Page Container - Full height centered layout .ov-page-container { diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/login/login.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/auth/pages/login/login.component.ts similarity index 94% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/login/login.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/auth/pages/login/login.component.ts index 361be876..704f66f8 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/login/login.component.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/auth/pages/login/login.component.ts @@ -8,7 +8,8 @@ import { MatIconModule } from '@angular/material/icon'; import { MatInputModule } from '@angular/material/input'; import { MatTooltipModule } from '@angular/material/tooltip'; import { ActivatedRoute, RouterModule } from '@angular/router'; -import { AuthService, NavigationService } from '../../services'; +import { NavigationService } from '../../../../shared'; +import { AuthService } from '../../services/auth.service'; @Component({ selector: 'ov-login', diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/auth.service.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/auth/services/auth.service.ts similarity index 99% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/services/auth.service.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/auth/services/auth.service.ts index 031730bc..07c11415 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/auth.service.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/auth/services/auth.service.ts @@ -1,7 +1,7 @@ import { HttpErrorResponse } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { MeetUserDTO, MeetUserRole } from '@openvidu-meet/typings'; -import { HttpService, NavigationService, TokenStorageService } from '../services'; +import { HttpService, NavigationService, TokenStorageService } from '../../../shared/services'; @Injectable({ providedIn: 'root' @@ -9,7 +9,6 @@ import { HttpService, NavigationService, TokenStorageService } from '../services export class AuthService { protected readonly AUTH_API = `${HttpService.INTERNAL_API_PATH_PREFIX}/auth`; protected readonly USERS_API = `${HttpService.INTERNAL_API_PATH_PREFIX}/users`; - protected hasCheckAuth = false; protected user: MeetUserDTO | null = null; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/auth/services/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/auth/services/index.ts new file mode 100644 index 00000000..2a719d15 --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/auth/services/index.ts @@ -0,0 +1 @@ +export * from './auth.service'; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/console-nav/console-nav.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/components/console-nav/console-nav.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/console-nav/console-nav.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/components/console-nav/console-nav.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/console-nav/console-nav.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/components/console-nav/console-nav.component.scss similarity index 93% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/console-nav/console-nav.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/components/console-nav/console-nav.component.scss index deb6b892..436dea35 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/console-nav/console-nav.component.scss +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/components/console-nav/console-nav.component.scss @@ -1,4 +1,4 @@ -@use '../../../../../../src/assets/styles/design-tokens'; +@use '../../../../../../../../src/assets/styles/design-tokens'; #dashboard-container, mat-sidenav-container { diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/console-nav/console-nav.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/components/console-nav/console-nav.component.ts similarity index 88% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/console-nav/console-nav.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/components/console-nav/console-nav.component.ts index 629e3fec..fd26e977 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/console-nav/console-nav.component.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/components/console-nav/console-nav.component.ts @@ -7,8 +7,7 @@ import { MatSidenav, MatSidenavModule } from '@angular/material/sidenav'; import { MatToolbarModule } from '@angular/material/toolbar'; import { MatTooltipModule } from '@angular/material/tooltip'; import { RouterModule } from '@angular/router'; -import { ConsoleNavLink } from '../../models'; -import { AppDataService, ThemeService } from '../../services'; +import { AppDataService, ConsoleNavLink, ThemeService } from '../../../../shared'; @Component({ selector: 'ov-console-nav', @@ -41,7 +40,7 @@ export class ConsoleNavComponent { private appDataService: AppDataService, private themeService: ThemeService ) { - this.version = `v${this.appDataService.getVersion()} (${this.appDataService.getEdition()})`; + this.version = `v${this.appDataService.version()} (${this.appDataService.edition()})`; this.isDarkMode = this.themeService.isDark; } diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/components/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/components/index.ts new file mode 100644 index 00000000..6b8190aa --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/components/index.ts @@ -0,0 +1 @@ +export * from './console-nav/console-nav.component'; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/logo-selector/logo-selector.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/components/logo-selector/logo-selector.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/logo-selector/logo-selector.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/components/logo-selector/logo-selector.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/logo-selector/logo-selector.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/components/logo-selector/logo-selector.component.scss similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/logo-selector/logo-selector.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/components/logo-selector/logo-selector.component.scss diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/logo-selector/logo-selector.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/components/logo-selector/logo-selector.component.ts similarity index 86% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/logo-selector/logo-selector.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/components/logo-selector/logo-selector.component.ts index 8ea7345d..b711b224 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/logo-selector/logo-selector.component.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/components/logo-selector/logo-selector.component.ts @@ -1,7 +1,7 @@ import { Component } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; import { MatIconModule } from '@angular/material/icon'; -import { ProFeatureBadgeComponent } from '../../components'; +import { ProFeatureBadgeComponent } from '../../../../shared'; @Component({ selector: 'ov-logo-selector', diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/index.ts new file mode 100644 index 00000000..e3be5653 --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/index.ts @@ -0,0 +1,3 @@ +export * from './components'; +export * from './pages'; + diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/about/about.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/about/about.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/about/about.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/about/about.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/about/about.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/about/about.component.scss similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/about/about.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/about/about.component.scss diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/about/about.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/about/about.component.ts similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/about/about.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/about/about.component.ts diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/config/config.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/config/config.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/config/config.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/config/config.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/config/config.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/config/config.component.scss similarity index 98% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/config/config.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/config/config.component.scss index 7a096dc8..0245b140 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/config/config.component.scss +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/config/config.component.scss @@ -1,4 +1,4 @@ -@use '../../../../../../../src/assets/styles/design-tokens'; +@use '../../../../../../../../src/assets/styles/design-tokens'; .ov-page-container { button { diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/config/config.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/config/config.component.ts similarity index 99% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/config/config.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/config/config.component.ts index 525329d8..aa92a5d5 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/config/config.component.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/config/config.component.ts @@ -12,8 +12,8 @@ import { MatSlideToggleChange, MatSlideToggleModule } from '@angular/material/sl import { MatTooltipModule } from '@angular/material/tooltip'; import { MeetAppearanceConfig, MeetRoomTheme, MeetRoomThemeMode } from '@openvidu-meet/typings'; import { OPENVIDU_COMPONENTS_DARK_THEME, OPENVIDU_COMPONENTS_LIGHT_THEME } from 'openvidu-components-angular'; -import { ColorField, ThemeColors } from '../../../models'; -import { GlobalConfigService, NotificationService } from '../../../services'; +import { ColorField, ThemeColors } from '../../../../shared/models'; +import { GlobalConfigService, NotificationService } from '../../../../shared/services'; @Component({ selector: 'ov-config', diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/console.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/console/console.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/console.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/console/console.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/console.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/console/console.component.scss similarity index 66% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/console.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/console/console.component.scss index 0c1f193a..90a5ed8e 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/console.component.scss +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/console/console.component.scss @@ -1,5 +1,5 @@ -@use '../../../../../../src/assets/styles/design-tokens'; +@use '../../../../../../../../src/assets/styles/design-tokens'; ::ng-deep { mat-slide-toggle { diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/console.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/console/console.component.ts similarity index 90% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/console.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/console/console.component.ts index 0e106860..eb7cd2bd 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/console.component.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/console/console.component.ts @@ -1,7 +1,7 @@ import { Component } from '@angular/core'; +import { ConsoleNavLink } from '../../../../shared'; +import { AuthService } from '../../../auth/services/auth.service'; import { ConsoleNavComponent } from '../../components'; -import { ConsoleNavLink } from '../../models'; -import { AuthService } from '../../services'; @Component({ selector: 'ov-console', diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/embedded/embedded.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/embedded/embedded.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/embedded/embedded.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/embedded/embedded.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/embedded/embedded.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/embedded/embedded.component.scss similarity index 97% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/embedded/embedded.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/embedded/embedded.component.scss index da000cf5..cee001bc 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/embedded/embedded.component.scss +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/embedded/embedded.component.scss @@ -1,4 +1,4 @@ -@use '../../../../../../../src/assets/styles/design-tokens'; +@use '../../../../../../../../src/assets/styles/design-tokens'; .ov-page-container { button { diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/embedded/embedded.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/embedded/embedded.component.ts similarity index 99% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/embedded/embedded.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/embedded/embedded.component.ts index aef584ef..8530b03c 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/embedded/embedded.component.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/embedded/embedded.component.ts @@ -9,8 +9,8 @@ import { MatInputModule } from '@angular/material/input'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatSlideToggleModule } from '@angular/material/slide-toggle'; import { MatTooltipModule } from '@angular/material/tooltip'; -import { ApiKeyService, GlobalConfigService, NotificationService } from '../../../services'; import { MeetApiKey } from '@openvidu-meet/typings'; +import { ApiKeyService, GlobalConfigService, NotificationService } from '../../../../shared'; @Component({ selector: 'ov-embedded', diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/error/error.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/error/error.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/error/error.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/error/error.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/error/error.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/error/error.component.scss similarity index 98% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/error/error.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/error/error.component.scss index 303c0e8c..602d1882 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/error/error.component.scss +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/error/error.component.scss @@ -1,4 +1,4 @@ -@use '../../../../../../src/assets/styles/design-tokens'; +@use '../../../../../../../../src/assets/styles/design-tokens'; .error-page { @include design-tokens.ov-theme-transition; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/error/error.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/error/error.component.ts similarity index 78% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/error/error.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/error/error.component.ts index be9cf1f2..05ce0a6c 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/error/error.component.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/error/error.component.ts @@ -3,8 +3,10 @@ import { MatButtonModule } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; import { MatIconModule } from '@angular/material/icon'; import { ActivatedRoute } from '@angular/router'; -import { ErrorReason } from '../../models'; -import { AppDataService, AuthService, NavigationService, WebComponentManagerService } from '../../services'; +import { AppDataService, NavigationService, } from '../../../../shared'; +import { NavigationErrorReason } from '../../../../shared/models/navigation.model'; +import { AuthService } from '../../../auth/services/auth.service'; +import { MeetingWebComponentManagerService } from '../../../meeting/services'; @Component({ selector: 'ov-error', @@ -24,7 +26,7 @@ export class ErrorComponent implements OnInit { protected authService: AuthService, protected navService: NavigationService, protected appDataService: AppDataService, - protected wcManagerService: WebComponentManagerService + protected wcManagerService: MeetingWebComponentManagerService ) {} ngOnInit() { @@ -48,51 +50,51 @@ export class ErrorComponent implements OnInit { * Maps technical error reasons to user-friendly names and messages */ private mapReasonToNameAndMessage(reason: string): { title: string; message: string } { - const reasonMap: { [key in ErrorReason]: { title: string; message: string } } = { - [ErrorReason.CLOSED_ROOM]: { + const reasonMap: { [key in NavigationErrorReason]: { title: string; message: string } } = { + [NavigationErrorReason.CLOSED_ROOM]: { title: 'Closed room', message: 'The room you are trying to access is closed' }, - [ErrorReason.MISSING_ROOM_SECRET]: { + [NavigationErrorReason.MISSING_ROOM_SECRET]: { title: 'Invalid link', message: 'The link you used to access this room is not valid. Please ask the moderator to share the correct link using the share buttons available in the room. Note: Sharing the URL from the browser address bar is not valid' }, - [ErrorReason.MISSING_RECORDING_SECRET]: { + [NavigationErrorReason.MISSING_RECORDING_SECRET]: { title: 'Invalid link', message: 'The link you used to access this recording is not valid' }, - [ErrorReason.INVALID_ROOM_SECRET]: { + [NavigationErrorReason.INVALID_ROOM_SECRET]: { title: 'Invalid link', message: 'The link you used to access this room is not valid. Please ask the moderator to share the correct link using the share buttons available in the room. Note: Sharing the URL from the browser address bar is not valid' }, - [ErrorReason.INVALID_RECORDING_SECRET]: { + [NavigationErrorReason.INVALID_RECORDING_SECRET]: { title: 'Invalid link', message: 'The link you used to access this recording is not valid' }, - [ErrorReason.INVALID_ROOM]: { + [NavigationErrorReason.INVALID_ROOM]: { title: 'Invalid room', message: 'The room you are trying to access does not exist or has been deleted' }, - [ErrorReason.INVALID_RECORDING]: { + [NavigationErrorReason.INVALID_RECORDING]: { title: 'Invalid recording', message: 'The recording you are trying to access does not exist or has been deleted' }, - [ErrorReason.UNAUTHORIZED_RECORDING_ACCESS]: { + [NavigationErrorReason.UNAUTHORIZED_RECORDING_ACCESS]: { title: 'Unauthorized recording access', message: 'You are not authorized to access the recordings in this room' }, - [ErrorReason.INTERNAL_ERROR]: { + [NavigationErrorReason.INTERNAL_ERROR]: { title: 'Internal error', message: 'An unexpected error occurred, please try again later' } }; - const normalizedReason = Object.values(ErrorReason).find((enumValue) => enumValue === reason) as - | ErrorReason + const normalizedReason = Object.values(NavigationErrorReason).find((enumValue) => enumValue === reason) as + | NavigationErrorReason | undefined; - return reasonMap[normalizedReason ?? ErrorReason.INTERNAL_ERROR]; + return reasonMap[normalizedReason ?? NavigationErrorReason.INTERNAL_ERROR]; } /** diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/index.ts new file mode 100644 index 00000000..99a2f7ee --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/index.ts @@ -0,0 +1,7 @@ +export * from './about/about.component'; +export * from './config/config.component'; +export * from './console/console.component'; +export * from './embedded/embedded.component'; +export * from './overview/overview.component'; +export * from './users-permissions/users-permissions.component'; + diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/overview/overview.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/overview/overview.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/overview/overview.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/overview/overview.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/overview/overview.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/overview/overview.component.scss similarity index 98% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/overview/overview.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/overview/overview.component.scss index 88510c41..97a99991 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/overview/overview.component.scss +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/overview/overview.component.scss @@ -1,4 +1,4 @@ -@use '../../../../../../../src/assets/styles/design-tokens'; +@use '../../../../../../../../src/assets/styles/design-tokens'; // Welcome State Styles .welcome-content { diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/overview/overview.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/overview/overview.component.ts similarity index 95% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/overview/overview.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/overview/overview.component.ts index 02a0c6f0..fab04478 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/overview/overview.component.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/overview/overview.component.ts @@ -4,7 +4,7 @@ import { MatCardModule } from '@angular/material/card'; import { MatGridListModule } from '@angular/material/grid-list'; import { MatIconModule } from '@angular/material/icon'; import { MeetAnalytics } from '@openvidu-meet/typings'; -import { AnalyticsService, NavigationService } from '../../../services'; +import { AnalyticsService, NavigationService } from '../../../../shared'; @Component({ selector: 'ov-overview', diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/users-permissions/users-permissions.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/users-permissions/users-permissions.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/users-permissions/users-permissions.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/users-permissions/users-permissions.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/users-permissions/users-permissions.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/users-permissions/users-permissions.component.scss similarity index 97% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/users-permissions/users-permissions.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/users-permissions/users-permissions.component.scss index 87db3ffa..5d9f1adc 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/users-permissions/users-permissions.component.scss +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/users-permissions/users-permissions.component.scss @@ -1,4 +1,4 @@ -@use '../../../../../../../src/assets/styles/design-tokens'; +@use '../../../../../../../../src/assets/styles/design-tokens'; .form-field-header { position: relative; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/users-permissions/users-permissions.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/users-permissions/users-permissions.component.ts similarity index 98% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/users-permissions/users-permissions.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/users-permissions/users-permissions.component.ts index 63a1e6d2..4d885b5c 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/users-permissions/users-permissions.component.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/console/pages/users-permissions/users-permissions.component.ts @@ -18,8 +18,9 @@ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatSelectModule } from '@angular/material/select'; import { MatTooltipModule } from '@angular/material/tooltip'; // import { ProFeatureBadgeComponent } from '../components'; -import { AuthService, GlobalConfigService, NotificationService } from '../../../services'; import { AuthMode } from '@openvidu-meet/typings'; +import { GlobalConfigService, NotificationService } from '../../../../shared'; +import { AuthService } from '../../../auth/services/auth.service'; @Component({ selector: 'ov-users-permissions', diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/hidden-participants-indicator/hidden-participants-indicator.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/components/hidden-participants-indicator/hidden-participants-indicator.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/hidden-participants-indicator/hidden-participants-indicator.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/components/hidden-participants-indicator/hidden-participants-indicator.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/hidden-participants-indicator/hidden-participants-indicator.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/components/hidden-participants-indicator/hidden-participants-indicator.component.scss similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/hidden-participants-indicator/hidden-participants-indicator.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/components/hidden-participants-indicator/hidden-participants-indicator.component.scss diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/hidden-participants-indicator/hidden-participants-indicator.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/components/hidden-participants-indicator/hidden-participants-indicator.component.ts similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/hidden-participants-indicator/hidden-participants-indicator.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/components/hidden-participants-indicator/hidden-participants-indicator.component.ts diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/components/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/components/index.ts new file mode 100644 index 00000000..0630ad23 --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/components/index.ts @@ -0,0 +1,5 @@ +export * from './hidden-participants-indicator/hidden-participants-indicator.component'; +export * from './meeting-lobby/meeting-lobby.component'; +export * from './meeting-share-link-overlay/meeting-share-link-overlay.component'; +export * from './share-meeting-link/share-meeting-link.component'; + diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/meeting-lobby/meeting-lobby.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/components/meeting-lobby/meeting-lobby.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/meeting-lobby/meeting-lobby.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/components/meeting-lobby/meeting-lobby.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/meeting-lobby/meeting-lobby.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/components/meeting-lobby/meeting-lobby.component.scss similarity index 99% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/meeting-lobby/meeting-lobby.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/components/meeting-lobby/meeting-lobby.component.scss index 9bca5652..6a1a4b28 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/meeting-lobby/meeting-lobby.component.scss +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/components/meeting-lobby/meeting-lobby.component.scss @@ -1,4 +1,4 @@ -@use '../../../../../../src/assets/styles/design-tokens'; +@use '../../../../../../../../src/assets/styles/design-tokens'; // Room Access Container - Main layout using design tokens .room-access-container { diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/meeting-lobby/meeting-lobby.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/components/meeting-lobby/meeting-lobby.component.ts similarity index 94% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/meeting-lobby/meeting-lobby.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/components/meeting-lobby/meeting-lobby.component.ts index db212337..e64520ed 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/meeting-lobby/meeting-lobby.component.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/components/meeting-lobby/meeting-lobby.component.ts @@ -7,8 +7,8 @@ import { MatFormFieldModule } from '@angular/material/form-field'; import { MatIconModule } from '@angular/material/icon'; import { MatInputModule } from '@angular/material/input'; import { ShareMeetingLinkComponent } from '../../components'; -import { MeetingLobbyService } from '../../services/meeting/meeting-lobby.service'; -import { MeetingService } from '../../services/meeting/meeting.service'; +import { MeetingLobbyService } from '../../services/meeting-lobby.service'; +import { MeetingService } from '../../services/meeting.service'; /** * Reusable component for the meeting lobby page. diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/meeting-share-link-overlay/meeting-share-link-overlay.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/components/meeting-share-link-overlay/meeting-share-link-overlay.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/meeting-share-link-overlay/meeting-share-link-overlay.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/components/meeting-share-link-overlay/meeting-share-link-overlay.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/meeting-share-link-overlay/meeting-share-link-overlay.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/components/meeting-share-link-overlay/meeting-share-link-overlay.component.scss similarity index 89% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/meeting-share-link-overlay/meeting-share-link-overlay.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/components/meeting-share-link-overlay/meeting-share-link-overlay.component.scss index 66a58a92..04c46674 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/meeting-share-link-overlay/meeting-share-link-overlay.component.scss +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/components/meeting-share-link-overlay/meeting-share-link-overlay.component.scss @@ -1,4 +1,4 @@ -@use '../../../../../../src/assets/styles/design-tokens'; +@use '../../../../../../../../src/assets/styles/design-tokens'; .main-share-meeting-link-container { background-color: var(--ov-surface-color); // Use ov-components variable diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/meeting-share-link-overlay/meeting-share-link-overlay.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/components/meeting-share-link-overlay/meeting-share-link-overlay.component.ts similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/meeting-share-link-overlay/meeting-share-link-overlay.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/components/meeting-share-link-overlay/meeting-share-link-overlay.component.ts diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/share-meeting-link/share-meeting-link.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/components/share-meeting-link/share-meeting-link.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/share-meeting-link/share-meeting-link.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/components/share-meeting-link/share-meeting-link.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/share-meeting-link/share-meeting-link.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/components/share-meeting-link/share-meeting-link.component.scss similarity index 97% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/share-meeting-link/share-meeting-link.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/components/share-meeting-link/share-meeting-link.component.scss index 62cb7466..9bc06253 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/share-meeting-link/share-meeting-link.component.scss +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/components/share-meeting-link/share-meeting-link.component.scss @@ -1,4 +1,4 @@ -@use '../../../../../../src/assets/styles/design-tokens'; +@use '../../../../../../../../src/assets/styles/design-tokens'; .meeting-url-badge { margin: var(--ov-meet-spacing-sm) auto; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/share-meeting-link/share-meeting-link.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/components/share-meeting-link/share-meeting-link.component.ts similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/share-meeting-link/share-meeting-link.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/components/share-meeting-link/share-meeting-link.component.ts diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/index.ts similarity index 99% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/index.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/index.ts index db3e37f5..cd6ad358 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/index.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/index.ts @@ -1,7 +1,8 @@ -export * from './meeting-toolbar-leave-button/meeting-toolbar-leave-button.component'; -export * from './meeting-toolbar-extra-buttons/meeting-toolbar-extra-buttons.component'; +export * from './meeting-custom-layout/meeting-custom-layout.component'; export * from './meeting-invite-panel/meeting-invite-panel.component'; export * from './meeting-participant-item/meeting-participant-item.component'; -export * from './meeting-custom-layout/meeting-custom-layout.component'; export * from './meeting-settings-extensions/meeting-settings-extensions.component'; +export * from './meeting-toolbar-extra-buttons/meeting-toolbar-extra-buttons.component'; +export * from './meeting-toolbar-leave-button/meeting-toolbar-leave-button.component'; export * from './meeting-toolbar-more-options-menu/meeting-toolbar-more-options-menu.component'; + diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-custom-layout/meeting-custom-layout.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-custom-layout/meeting-custom-layout.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-custom-layout/meeting-custom-layout.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-custom-layout/meeting-custom-layout.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-custom-layout/meeting-custom-layout.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-custom-layout/meeting-custom-layout.component.scss similarity index 96% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-custom-layout/meeting-custom-layout.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-custom-layout/meeting-custom-layout.component.scss index 792f45b2..13da4604 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-custom-layout/meeting-custom-layout.component.scss +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-custom-layout/meeting-custom-layout.component.scss @@ -1,4 +1,4 @@ -@use '../../../../../../../src/assets/styles/design-tokens'; +@use '../../../../../../../../src/assets/styles/design-tokens'; .remote-participant { height: -webkit-fill-available; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-custom-layout/meeting-custom-layout.component.spec.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-custom-layout/meeting-custom-layout.component.spec.ts similarity index 97% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-custom-layout/meeting-custom-layout.component.spec.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-custom-layout/meeting-custom-layout.component.spec.ts index c8547bc9..394f423a 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-custom-layout/meeting-custom-layout.component.spec.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-custom-layout/meeting-custom-layout.component.spec.ts @@ -1,20 +1,20 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { Subject } from 'rxjs'; import { Participant } from 'livekit-client'; import { - ParticipantModel, LoggerService, - ParticipantService, - OpenViduService + OpenViduService, + ParticipantModel, + ParticipantService } from 'openvidu-components-angular'; +import { Subject } from 'rxjs'; +import { MeetLayoutMode } from '../../models/layout.model'; +import { MeetingLayoutService } from '../../services/meeting-layout.service'; import { MeetingCustomLayoutComponent } from './meeting-custom-layout.component'; -import { MeetLayoutService } from '../../../services/layout.service'; -import { MeetLayoutMode } from '../../../models/layout.model'; describe('MeetingLayoutComponent', () => { let component: MeetingCustomLayoutComponent; let fixture: ComponentFixture; - let mockLayoutService: jasmine.SpyObj; + let mockLayoutService: jasmine.SpyObj; let mockParticipantService: jasmine.SpyObj; let mockOpenViduService: jasmine.SpyObj; let mockLoggerService: jasmine.SpyObj; @@ -58,7 +58,7 @@ describe('MeetingLayoutComponent', () => { await TestBed.configureTestingModule({ imports: [MeetingCustomLayoutComponent], providers: [ - { provide: MeetLayoutService, useValue: mockLayoutService }, + { provide: MeetingLayoutService, useValue: mockLayoutService }, { provide: ParticipantService, useValue: mockParticipantService }, { provide: OpenViduService, useValue: mockOpenViduService }, { provide: LoggerService, useValue: mockLoggerService } diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-custom-layout/meeting-custom-layout.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-custom-layout/meeting-custom-layout.component.ts similarity index 97% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-custom-layout/meeting-custom-layout.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-custom-layout/meeting-custom-layout.component.ts index 4f7cbad2..c0630e5f 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-custom-layout/meeting-custom-layout.component.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-custom-layout/meeting-custom-layout.component.ts @@ -1,9 +1,9 @@ import { CommonModule } from '@angular/common'; import { Component, computed, effect, inject, signal, untracked } from '@angular/core'; import { ILogger, LoggerService, OpenViduComponentsUiModule, PanelService, PanelType, ParticipantModel } from 'openvidu-components-angular'; -import { HiddenParticipantsIndicatorComponent, ShareMeetingLinkComponent } from '../../../components'; -import { CustomParticipantModel } from '../../../models'; -import { MeetingContextService, MeetingService, MeetLayoutService } from '../../../services'; +import { HiddenParticipantsIndicatorComponent, ShareMeetingLinkComponent } from '../../components'; +import { CustomParticipantModel } from '../../models'; +import { MeetingContextService, MeetingLayoutService, MeetingService } from '../../services'; @Component({ selector: 'ov-meeting-custom-layout', @@ -18,7 +18,7 @@ import { MeetingContextService, MeetingService, MeetLayoutService } from '../../ }) export class MeetingCustomLayoutComponent { private readonly logger: ILogger = inject(LoggerService).get('MeetingCustomLayoutComponent'); - protected readonly layoutService = inject(MeetLayoutService); + protected readonly layoutService = inject(MeetingLayoutService); protected readonly meetingContextService = inject(MeetingContextService); protected readonly meetingService = inject(MeetingService); protected readonly panelService = inject(PanelService); diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-invite-panel/meeting-invite-panel.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-invite-panel/meeting-invite-panel.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-invite-panel/meeting-invite-panel.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-invite-panel/meeting-invite-panel.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-invite-panel/meeting-invite-panel.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-invite-panel/meeting-invite-panel.component.scss similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-invite-panel/meeting-invite-panel.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-invite-panel/meeting-invite-panel.component.scss diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-invite-panel/meeting-invite-panel.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-invite-panel/meeting-invite-panel.component.ts similarity index 82% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-invite-panel/meeting-invite-panel.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-invite-panel/meeting-invite-panel.component.ts index 80ec3874..858871f3 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-invite-panel/meeting-invite-panel.component.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-invite-panel/meeting-invite-panel.component.ts @@ -1,9 +1,9 @@ import { CommonModule } from '@angular/common'; import { Component, computed, inject } from '@angular/core'; -import { ShareMeetingLinkComponent } from '../../../components/share-meeting-link/share-meeting-link.component'; -import { MeetingContextService } from '../../../services/meeting/meeting-context.service'; -import { MeetingService } from '../../../services/meeting/meeting.service'; import { LoggerService } from 'openvidu-components-angular'; +import { ShareMeetingLinkComponent } from '../../components/share-meeting-link/share-meeting-link.component'; +import { MeetingContextService } from '../../services/meeting-context.service'; +import { MeetingService } from '../../services/meeting.service'; /** * Reusable component for displaying the share meeting link panel diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-participant-item/meeting-participant-item.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-participant-item/meeting-participant-item.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-participant-item/meeting-participant-item.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-participant-item/meeting-participant-item.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-participant-item/meeting-participant-item.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-participant-item/meeting-participant-item.component.scss similarity index 86% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-participant-item/meeting-participant-item.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-participant-item/meeting-participant-item.component.scss index 5577b076..9e481969 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-participant-item/meeting-participant-item.component.scss +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-participant-item/meeting-participant-item.component.scss @@ -1,4 +1,4 @@ -@use '../../../../../../../src/assets/styles/design-tokens'; +@use '../../../../../../../../src/assets/styles/design-tokens'; .participant-item-container { width: 100%; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-participant-item/meeting-participant-item.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-participant-item/meeting-participant-item.component.ts similarity index 97% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-participant-item/meeting-participant-item.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-participant-item/meeting-participant-item.component.ts index 5f335621..c5712e0a 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-participant-item/meeting-participant-item.component.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-participant-item/meeting-participant-item.component.ts @@ -3,10 +3,10 @@ import { Component, TemplateRef, ViewChild, inject } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; import { MatIconModule } from '@angular/material/icon'; import { MatTooltipModule } from '@angular/material/tooltip'; -import { LoggerService, OpenViduComponentsUiModule } from 'openvidu-components-angular'; -import { CustomParticipantModel } from '../../../models'; -import { MeetingService } from '../../../services/meeting/meeting.service'; import { MeetRoomMemberRole } from '@openvidu-meet/typings'; +import { LoggerService, OpenViduComponentsUiModule } from 'openvidu-components-angular'; +import { CustomParticipantModel } from '../../models'; +import { MeetingService } from '../../services/meeting.service'; /** * Interface for computed participant display properties diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-settings-extensions/meeting-settings-extensions.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-settings-extensions/meeting-settings-extensions.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-settings-extensions/meeting-settings-extensions.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-settings-extensions/meeting-settings-extensions.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-settings-extensions/meeting-settings-extensions.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-settings-extensions/meeting-settings-extensions.component.scss similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-settings-extensions/meeting-settings-extensions.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-settings-extensions/meeting-settings-extensions.component.scss diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-settings-extensions/meeting-settings-extensions.component.spec.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-settings-extensions/meeting-settings-extensions.component.spec.ts similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-settings-extensions/meeting-settings-extensions.component.spec.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-settings-extensions/meeting-settings-extensions.component.spec.ts diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-settings-extensions/meeting-settings-extensions.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-settings-extensions/meeting-settings-extensions.component.ts similarity index 89% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-settings-extensions/meeting-settings-extensions.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-settings-extensions/meeting-settings-extensions.component.ts index 82ec070a..41dc8717 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-settings-extensions/meeting-settings-extensions.component.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-settings-extensions/meeting-settings-extensions.component.ts @@ -1,15 +1,15 @@ -import { Component, computed, inject } from '@angular/core'; import { CommonModule } from '@angular/common'; +import { Component, computed, inject } from '@angular/core'; +import { FormsModule } from '@angular/forms'; +import { MatFormFieldModule } from '@angular/material/form-field'; import { MatIconModule } from '@angular/material/icon'; import { MatListModule } from '@angular/material/list'; import { MatRadioModule } from '@angular/material/radio'; -import { MatSliderModule } from '@angular/material/slider'; -import { MatFormFieldModule } from '@angular/material/form-field'; import { MatSelectModule } from '@angular/material/select'; -import { FormsModule } from '@angular/forms'; -import { MeetLayoutMode } from '../../../models/layout.model'; -import { MeetLayoutService } from '../../../services/layout.service'; -import { MeetingContextService } from '../../../services/meeting/meeting-context.service'; +import { MatSliderModule } from '@angular/material/slider'; +import { MeetLayoutMode } from '../../models/layout.model'; +import { MeetingContextService } from '../../services/meeting-context.service'; +import { MeetingLayoutService } from '../../services/meeting-layout.service'; /** * Component for additional settings in the Settings Panel. @@ -30,7 +30,7 @@ import { MeetingContextService } from '../../../services/meeting/meeting-context styleUrl: './meeting-settings-extensions.component.scss' }) export class MeetingSettingsExtensionsComponent { - private readonly layoutService = inject(MeetLayoutService); + private readonly layoutService = inject(MeetingLayoutService); protected readonly meetingContextService = inject(MeetingContextService); /** diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-toolbar-extra-buttons/meeting-toolbar-extra-buttons.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-toolbar-extra-buttons/meeting-toolbar-extra-buttons.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-toolbar-extra-buttons/meeting-toolbar-extra-buttons.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-toolbar-extra-buttons/meeting-toolbar-extra-buttons.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-toolbar-extra-buttons/meeting-toolbar-extra-buttons.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-toolbar-extra-buttons/meeting-toolbar-extra-buttons.component.scss similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-toolbar-extra-buttons/meeting-toolbar-extra-buttons.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-toolbar-extra-buttons/meeting-toolbar-extra-buttons.component.scss diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-toolbar-extra-buttons/meeting-toolbar-extra-buttons.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-toolbar-extra-buttons/meeting-toolbar-extra-buttons.component.ts similarity index 88% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-toolbar-extra-buttons/meeting-toolbar-extra-buttons.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-toolbar-extra-buttons/meeting-toolbar-extra-buttons.component.ts index 81945ae8..ee856d9e 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-toolbar-extra-buttons/meeting-toolbar-extra-buttons.component.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-toolbar-extra-buttons/meeting-toolbar-extra-buttons.component.ts @@ -1,12 +1,12 @@ -import { Component, inject, computed } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { MatMenuModule } from '@angular/material/menu'; +import { Component, computed, inject } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; import { MatIconModule } from '@angular/material/icon'; +import { MatMenuModule } from '@angular/material/menu'; import { MatTooltipModule } from '@angular/material/tooltip'; -import { MeetingContextService } from '../../../services/meeting/meeting-context.service'; -import { MeetingService } from '../../../services/meeting/meeting.service'; import { LoggerService } from 'openvidu-components-angular'; +import { MeetingContextService } from '../../services/meeting-context.service'; +import { MeetingService } from '../../services/meeting.service'; /** * Component for extra toolbar buttons (like copy meeting link). diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-toolbar-leave-button/meeting-toolbar-leave-button.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-toolbar-leave-button/meeting-toolbar-leave-button.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-toolbar-leave-button/meeting-toolbar-leave-button.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-toolbar-leave-button/meeting-toolbar-leave-button.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-toolbar-leave-button/meeting-toolbar-leave-button.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-toolbar-leave-button/meeting-toolbar-leave-button.component.scss similarity index 84% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-toolbar-leave-button/meeting-toolbar-leave-button.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-toolbar-leave-button/meeting-toolbar-leave-button.component.scss index 8401a707..269f14c7 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-toolbar-leave-button/meeting-toolbar-leave-button.component.scss +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-toolbar-leave-button/meeting-toolbar-leave-button.component.scss @@ -1,4 +1,4 @@ -@use '../../../../../../../src/assets/styles/design-tokens'; +@use '../../../../../../../../src/assets/styles/design-tokens'; .button-text { margin-left: 8px; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-toolbar-leave-button/meeting-toolbar-leave-button.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-toolbar-leave-button/meeting-toolbar-leave-button.component.ts similarity index 89% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-toolbar-leave-button/meeting-toolbar-leave-button.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-toolbar-leave-button/meeting-toolbar-leave-button.component.ts index 7a00ed36..2bd4afb0 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-toolbar-leave-button/meeting-toolbar-leave-button.component.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-toolbar-leave-button/meeting-toolbar-leave-button.component.ts @@ -1,13 +1,13 @@ -import { Component, inject, computed } from '@angular/core'; import { CommonModule } from '@angular/common'; +import { Component, computed, inject } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; import { MatDividerModule } from '@angular/material/divider'; import { MatIconModule } from '@angular/material/icon'; import { MatMenuModule } from '@angular/material/menu'; import { MatTooltipModule } from '@angular/material/tooltip'; -import { MeetingContextService } from '../../../services/meeting/meeting-context.service'; -import { MeetingService } from '../../../services/meeting/meeting.service'; import { LoggerService, OpenViduService } from 'openvidu-components-angular'; +import { MeetingContextService } from '../../services/meeting-context.service'; +import { MeetingService } from '../../services/meeting.service'; /** * Reusable component for meeting toolbar Leave button. diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-toolbar-more-options-menu/meeting-toolbar-more-options-menu.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-toolbar-more-options-menu/meeting-toolbar-more-options-menu.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-toolbar-more-options-menu/meeting-toolbar-more-options-menu.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-toolbar-more-options-menu/meeting-toolbar-more-options-menu.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-toolbar-more-options-menu/meeting-toolbar-more-options-menu.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-toolbar-more-options-menu/meeting-toolbar-more-options-menu.component.scss similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-toolbar-more-options-menu/meeting-toolbar-more-options-menu.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-toolbar-more-options-menu/meeting-toolbar-more-options-menu.component.scss diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-toolbar-more-options-menu/meeting-toolbar-more-options-menu.component.spec.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-toolbar-more-options-menu/meeting-toolbar-more-options-menu.component.spec.ts similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-toolbar-more-options-menu/meeting-toolbar-more-options-menu.component.spec.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-toolbar-more-options-menu/meeting-toolbar-more-options-menu.component.spec.ts diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-toolbar-more-options-menu/meeting-toolbar-more-options-menu.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-toolbar-more-options-menu/meeting-toolbar-more-options-menu.component.ts similarity index 93% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-toolbar-more-options-menu/meeting-toolbar-more-options-menu.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-toolbar-more-options-menu/meeting-toolbar-more-options-menu.component.ts index 25c235d3..07df3f47 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/customization/components/meeting-toolbar-more-options-menu/meeting-toolbar-more-options-menu.component.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/customization/meeting-toolbar-more-options-menu/meeting-toolbar-more-options-menu.component.ts @@ -1,11 +1,11 @@ -import { Component, computed, inject } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { MatIconModule } from '@angular/material/icon'; +import { Component, computed, inject } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; +import { MatIconModule } from '@angular/material/icon'; import { MatMenuModule } from '@angular/material/menu'; import { MatTooltipModule } from '@angular/material/tooltip'; -import { PanelService, ViewportService, PanelType } from 'openvidu-components-angular'; -import { MeetingContextService } from '../../../services/meeting/meeting-context.service'; +import { PanelService, PanelType, ViewportService } from 'openvidu-components-angular'; +import { MeetingContextService } from '../../services/meeting-context.service'; /** * Component for additional menu items in the toolbar's "More Options" menu. diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/index.ts new file mode 100644 index 00000000..0267083a --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/index.ts @@ -0,0 +1,5 @@ +export * from './components'; +export * from './customization'; +export * from './models'; +export * from './pages'; +export * from './services'; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/models/custom-participant.model.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/models/custom-participant.model.ts similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/models/custom-participant.model.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/models/custom-participant.model.ts diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/models/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/models/index.ts new file mode 100644 index 00000000..418e23ae --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/models/index.ts @@ -0,0 +1,3 @@ +export * from './custom-participant.model'; +export * from './layout.model'; +export * from './lobby.model'; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/models/layout.model.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/models/layout.model.ts similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/models/layout.model.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/models/layout.model.ts diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/models/lobby.model.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/models/lobby.model.ts similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/models/lobby.model.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/models/lobby.model.ts diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/meeting/end-meeting/end-meeting.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/pages/end-meeting/end-meeting.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/meeting/end-meeting/end-meeting.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/pages/end-meeting/end-meeting.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/meeting/end-meeting/end-meeting.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/pages/end-meeting/end-meeting.component.scss similarity index 98% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/meeting/end-meeting/end-meeting.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/pages/end-meeting/end-meeting.component.scss index b0a298e5..24e1c52a 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/meeting/end-meeting/end-meeting.component.scss +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/pages/end-meeting/end-meeting.component.scss @@ -1,4 +1,4 @@ -@use '../../../../../../../src/assets/styles/design-tokens'; +@use '../../../../../../../../src/assets/styles/design-tokens'; .disconnected-container { @include design-tokens.ov-theme-transition; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/meeting/end-meeting/end-meeting.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/pages/end-meeting/end-meeting.component.ts similarity index 93% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/meeting/end-meeting/end-meeting.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/pages/end-meeting/end-meeting.component.ts index 074489b6..56128f08 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/meeting/end-meeting/end-meeting.component.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/pages/end-meeting/end-meeting.component.ts @@ -4,8 +4,10 @@ import { MatButtonModule } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; import { MatIconModule } from '@angular/material/icon'; import { ActivatedRoute } from '@angular/router'; -import { AppDataService, AuthService, NavigationService, WebComponentManagerService } from '../../../services'; import { LeftEventReason } from '@openvidu-meet/typings'; +import { AppDataService, NavigationService, } from '../../../../shared'; +import { AuthService } from '../../../auth/services/auth.service'; +import { MeetingWebComponentManagerService } from '../../services'; @Component({ selector: 'ov-end-meeting', @@ -25,7 +27,7 @@ export class EndMeetingComponent implements OnInit { protected authService: AuthService, protected navService: NavigationService, protected appDataService: AppDataService, - protected wcManagerService: WebComponentManagerService + protected wcManagerService: MeetingWebComponentManagerService ) {} ngOnInit() { diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/pages/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/pages/index.ts new file mode 100644 index 00000000..6225345c --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/pages/index.ts @@ -0,0 +1,4 @@ +export * from './end-meeting/end-meeting.component'; +export * from './meeting/meeting.component'; + + diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/meeting/meeting.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/pages/meeting/meeting.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/meeting/meeting.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/pages/meeting/meeting.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/meeting/meeting.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/pages/meeting/meeting.component.scss similarity index 68% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/meeting/meeting.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/pages/meeting/meeting.component.scss index b868940a..9858391c 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/meeting/meeting.component.scss +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/pages/meeting/meeting.component.scss @@ -1,4 +1,4 @@ -@use '../../../../../../src/assets/styles/design-tokens'; +@use '../../../../../../../../src/assets/styles/design-tokens'; .prejoin-loading-container, .prejoin-error-container { diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/meeting/meeting.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/pages/meeting/meeting.component.ts similarity index 95% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/meeting/meeting.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/pages/meeting/meeting.component.ts index 66f132f9..0dea6f49 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/meeting/meeting.component.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/pages/meeting/meeting.component.ts @@ -13,20 +13,16 @@ import { ViewportService } from 'openvidu-components-angular'; import { Subject } from 'rxjs'; -import { MeetingLobbyComponent } from '../../components/meeting-lobby/meeting-lobby.component'; -import { MeetingParticipantItemComponent } from '../../customization'; -import { ApplicationFeatures } from '../../models/app.model'; import { + ApplicationFeatures, FeatureConfigurationService, GlobalConfigService, - MeetingContextService, - MeetingEventHandlerService, - MeetingLobbyService, - MeetingService, - NotificationService, - RoomMemberService, - WebComponentManagerService -} from '../../services'; + NotificationService +} from '../../../../shared'; +import { RoomMemberService, } from '../../../rooms/services'; +import { MeetingLobbyComponent } from '../../components/meeting-lobby/meeting-lobby.component'; +import { MeetingParticipantItemComponent } from '../../customization'; +import { MeetingContextService, MeetingEventHandlerService, MeetingLobbyService, MeetingService, MeetingWebComponentManagerService } from '../../services'; @Component({ selector: 'ov-meeting', @@ -64,7 +60,7 @@ export class MeetingComponent implements OnInit { protected meetingService = inject(MeetingService); protected participantService = inject(RoomMemberService); protected featureConfService = inject(FeatureConfigurationService); - protected wcManagerService = inject(WebComponentManagerService); + protected wcManagerService = inject(MeetingWebComponentManagerService); protected openviduService = inject(OpenViduService); protected viewportService = inject(ViewportService); protected ovThemeService = inject(OpenViduThemeService); diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/services/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/services/index.ts new file mode 100644 index 00000000..f5be6baa --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/services/index.ts @@ -0,0 +1,7 @@ +export * from './meeting-context.service'; +export * from './meeting-event-handler.service'; +export * from './meeting-layout.service'; +export * from './meeting-lobby.service'; +export * from './meeting-webcomponent-manager.service'; +export * from './meeting.service'; + diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/meeting/meeting-context.service.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/services/meeting-context.service.ts similarity index 96% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/services/meeting/meeting-context.service.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/services/meeting-context.service.ts index 4a55cf71..e6fe225e 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/meeting/meeting-context.service.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/services/meeting-context.service.ts @@ -2,9 +2,9 @@ import { computed, DestroyRef, effect, inject, Injectable, signal } from '@angul import { MeetRoom } from 'node_modules/@openvidu-meet/typings/dist/room'; import { ParticipantService, Room, ViewportService } from 'openvidu-components-angular'; -import { CustomParticipantModel } from '../../models'; -import { FeatureConfigurationService } from '../feature-configuration.service'; -import { SessionStorageService } from '../session-storage.service'; +import { FeatureConfigurationService } from '../../../shared/services/feature-configuration.service'; +import { SessionStorageService } from '../../../shared/services/session-storage.service'; +import { CustomParticipantModel } from '../models'; /** * Central service for managing meeting context and state during the MEETING PHASE. diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/meeting/meeting-event-handler.service.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/services/meeting-event-handler.service.ts similarity index 97% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/services/meeting/meeting-event-handler.service.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/services/meeting-event-handler.service.ts index 75111fa2..9582d4c9 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/meeting/meeting-event-handler.service.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/services/meeting-event-handler.service.ts @@ -18,17 +18,15 @@ import { Room, RoomEvent } from 'openvidu-components-angular'; -import { CustomParticipantModel } from '../../models'; +import { MeetingContextService, MeetingWebComponentManagerService } from '.'; import { FeatureConfigurationService, - MeetingContextService, NavigationService, - RecordingService, - RoomMemberService, SessionStorageService, - TokenStorageService, - WebComponentManagerService -} from '../../services'; + TokenStorageService +} from '../../../shared'; +import { RecordingService } from '../../recordings/services'; +import { RoomMemberService } from '../../rooms/services'; /** * Service that handles all LiveKit/OpenVidu room events. @@ -44,7 +42,7 @@ export class MeetingEventHandlerService { protected roomMemberService = inject(RoomMemberService); protected sessionStorageService = inject(SessionStorageService); protected tokenStorageService = inject(TokenStorageService); - protected wcManagerService = inject(WebComponentManagerService); + protected wcManagerService = inject(MeetingWebComponentManagerService); protected navigationService = inject(NavigationService); // ============================================ diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/layout.service.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/services/meeting-layout.service.ts similarity index 99% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/services/layout.service.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/services/meeting-layout.service.ts index bda29daf..126419f4 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/layout.service.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/services/meeting-layout.service.ts @@ -1,11 +1,11 @@ import { computed, DestroyRef, effect, inject, Injectable, signal } from '@angular/core'; import { Participant, Room } from 'livekit-client'; import { LayoutService, LoggerService, ViewportService } from 'openvidu-components-angular'; -import { MeetStorageService } from '.'; +import { MeetStorageService } from '../../../shared'; import { MeetLayoutMode } from '../models'; @Injectable({ providedIn: 'root' }) -export class MeetLayoutService extends LayoutService { +export class MeetingLayoutService extends LayoutService { private readonly destroyRef = inject(DestroyRef); private readonly INITIAL_SPEAKERS_COUNT = 4; readonly MIN_REMOTE_SPEAKERS = 1; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/meeting/meeting-lobby.service.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/services/meeting-lobby.service.ts similarity index 92% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/services/meeting/meeting-lobby.service.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/services/meeting-lobby.service.ts index 53965cbe..71b939e1 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/meeting/meeting-lobby.service.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/services/meeting-lobby.service.ts @@ -4,18 +4,20 @@ import { ActivatedRoute } from '@angular/router'; import { MeetRoomStatus } from '@openvidu-meet/typings'; import { LoggerService } from 'openvidu-components-angular'; import { - AppDataService, - AuthService, MeetingContextService, MeetingService, - NavigationService, - RecordingService, + + MeetingWebComponentManagerService +} from '.'; +import { AppDataService, NavigationService } from '../../../shared'; +import { NavigationErrorReason } from '../../../shared/models/navigation.model'; +import { AuthService } from '../../auth/services/auth.service'; +import { RecordingService } from '../../recordings/services'; +import { RoomMemberService, RoomService, - WebComponentManagerService -} from '..'; -import { ErrorReason } from '../../models'; -import { LobbyState } from '../../models/lobby.model'; +} from '../../rooms/services'; +import { LobbyState } from '../models/lobby.model'; /** * Service that manages the meeting lobby phase state and operations. @@ -51,7 +53,7 @@ export class MeetingLobbyService { protected roomMemberService: RoomMemberService = inject(RoomMemberService); protected navigationService: NavigationService = inject(NavigationService); protected appDataService: AppDataService = inject(AppDataService); - protected wcManagerService: WebComponentManagerService = inject(WebComponentManagerService); + protected wcManagerService: MeetingWebComponentManagerService = inject(MeetingWebComponentManagerService); protected loggerService = inject(LoggerService); protected log = this.loggerService.get('OpenVidu Meet - MeetingLobbyService'); protected route: ActivatedRoute = inject(ActivatedRoute); @@ -366,18 +368,18 @@ export class MeetingLobbyService { switch (error.status) { case 400: // Invalid secret - await this.navigationService.redirectToErrorPage(ErrorReason.INVALID_ROOM_SECRET, true); + await this.navigationService.redirectToErrorPage(NavigationErrorReason.INVALID_ROOM_SECRET, true); break; case 404: // Room not found - await this.navigationService.redirectToErrorPage(ErrorReason.INVALID_ROOM, true); + await this.navigationService.redirectToErrorPage(NavigationErrorReason.INVALID_ROOM, true); break; case 409: // Room is closed - await this.navigationService.redirectToErrorPage(ErrorReason.CLOSED_ROOM, true); + await this.navigationService.redirectToErrorPage(NavigationErrorReason.CLOSED_ROOM, true); break; default: - await this.navigationService.redirectToErrorPage(ErrorReason.INTERNAL_ERROR, true); + await this.navigationService.redirectToErrorPage(NavigationErrorReason.INTERNAL_ERROR, true); } throw new Error('Error generating room member token'); diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/webcomponent-manager.service.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/services/meeting-webcomponent-manager.service.ts similarity index 91% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/services/webcomponent-manager.service.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/services/meeting-webcomponent-manager.service.ts index 0f7af349..2bb39d8f 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/webcomponent-manager.service.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/services/meeting-webcomponent-manager.service.ts @@ -1,4 +1,5 @@ -import { inject, Injectable } from '@angular/core'; +import { effect, inject, Injectable } from '@angular/core'; +import { AppDataService } from '@openvidu-meet/shared-components'; import { WebComponentCommand, WebComponentEvent, @@ -6,7 +7,8 @@ import { WebComponentOutboundEventMessage } from '@openvidu-meet/typings'; import { LoggerService, OpenViduService } from 'openvidu-components-angular'; -import { MeetingContextService, MeetingService, RoomMemberService } from '../services'; +import { MeetingContextService, MeetingService } from '.'; +import { RoomMemberService } from '../../rooms/services'; /** * Service to manage the commands from OpenVidu Meet WebComponent/Iframe. @@ -16,9 +18,8 @@ import { MeetingContextService, MeetingService, RoomMemberService } from '../ser @Injectable({ providedIn: 'root' }) -export class WebComponentManagerService { +export class MeetingWebComponentManagerService { protected isInitialized = false; - protected parentDomain: string = ''; protected boundHandleMessage: (event: MessageEvent) => Promise; @@ -28,10 +29,16 @@ export class WebComponentManagerService { protected readonly openviduService = inject(OpenViduService); protected readonly meetingService = inject(MeetingService); protected readonly loggerService = inject(LoggerService); + protected readonly appDataService = inject(AppDataService); constructor() { this.log = this.loggerService.get('OpenVidu Meet - WebComponentManagerService'); this.boundHandleMessage = this.handleMessage.bind(this); + effect(() => { + if (this.appDataService.isEmbeddedMode()) { + this.initialize(); + } + }); } initialize() { diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/meeting/meeting.service.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/services/meeting.service.ts similarity index 94% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/services/meeting/meeting.service.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/services/meeting.service.ts index b117d4c1..9dacd59f 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/meeting/meeting.service.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/services/meeting.service.ts @@ -1,9 +1,9 @@ -import { inject, Injectable } from '@angular/core'; import { Clipboard } from '@angular/cdk/clipboard'; -import { LoggerService } from 'openvidu-components-angular'; -import { HttpService } from '../http.service'; +import { inject, Injectable } from '@angular/core'; import { MeetRoom } from 'node_modules/@openvidu-meet/typings/dist/room'; -import { NotificationService } from '../notification.service'; +import { LoggerService } from 'openvidu-components-angular'; +import { HttpService } from '../../../shared/services/http.service'; +import { NotificationService } from '../../../shared/services/notification.service'; @Injectable({ providedIn: 'root' diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/components/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/components/index.ts new file mode 100644 index 00000000..311a30a9 --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/components/index.ts @@ -0,0 +1,4 @@ +export * from './recording-lists/recording-lists.component'; +export * from './recording-share-dialog/recording-share-dialog.component'; +export * from './recording-video-player/recording-video-player.component'; + diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/recording-lists/recording-lists.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/components/recording-lists/recording-lists.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/recording-lists/recording-lists.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/components/recording-lists/recording-lists.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/recording-lists/recording-lists.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/components/recording-lists/recording-lists.component.scss similarity index 99% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/recording-lists/recording-lists.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/components/recording-lists/recording-lists.component.scss index 3c8565f6..21d564ba 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/recording-lists/recording-lists.component.scss +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/components/recording-lists/recording-lists.component.scss @@ -1,4 +1,4 @@ -@use '../../../../../../src/assets/styles/design-tokens'; +@use '../../../../../../../../src/assets/styles/design-tokens'; // === MOBILE CARDS VIEW === .cards-container { diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/recording-lists/recording-lists.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/components/recording-lists/recording-lists.component.ts similarity index 99% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/recording-lists/recording-lists.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/components/recording-lists/recording-lists.component.ts index 2dfdf46b..4c90eeb4 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/recording-lists/recording-lists.component.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/components/recording-lists/recording-lists.component.ts @@ -27,7 +27,7 @@ import { MatToolbarModule } from '@angular/material/toolbar'; import { MatTooltipModule } from '@angular/material/tooltip'; import { MeetRecordingInfo, MeetRecordingStatus } from '@openvidu-meet/typings'; import { ViewportService } from 'openvidu-components-angular'; -import { formatBytes, formatDurationToHMS } from '../../utils'; +import { formatBytes, formatDurationToHMS } from '../../../../shared'; export interface RecordingTableAction { recordings: MeetRecordingInfo[]; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/dialogs/share-recording-dialog/share-recording-dialog.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/components/recording-share-dialog/recording-share-dialog.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/dialogs/share-recording-dialog/share-recording-dialog.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/components/recording-share-dialog/recording-share-dialog.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/dialogs/share-recording-dialog/share-recording-dialog.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/components/recording-share-dialog/recording-share-dialog.component.scss similarity index 99% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/dialogs/share-recording-dialog/share-recording-dialog.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/components/recording-share-dialog/recording-share-dialog.component.scss index 47e691d1..b4ffe605 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/dialogs/share-recording-dialog/share-recording-dialog.component.scss +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/components/recording-share-dialog/recording-share-dialog.component.scss @@ -1,4 +1,4 @@ -@use '../../../../../../../src/assets/styles/design-tokens'; +@use '../../../../../../../../src/assets/styles/design-tokens'; .share-recording-dialog { @include design-tokens.ov-theme-transition; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/dialogs/share-recording-dialog/share-recording-dialog.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/components/recording-share-dialog/recording-share-dialog.component.ts similarity index 91% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/dialogs/share-recording-dialog/share-recording-dialog.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/components/recording-share-dialog/recording-share-dialog.component.ts index b9f37717..ede7563a 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/dialogs/share-recording-dialog/share-recording-dialog.component.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/components/recording-share-dialog/recording-share-dialog.component.ts @@ -15,7 +15,7 @@ import { MatInputModule } from '@angular/material/input'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatRadioModule } from '@angular/material/radio'; import { MatTooltipModule } from '@angular/material/tooltip'; -import { RecordingService } from '../../../services'; +import { RecordingService } from '../../services'; @Component({ selector: 'ov-share-recording-dialog', @@ -33,10 +33,10 @@ import { RecordingService } from '../../../services'; MatTooltipModule, MatProgressSpinnerModule ], - templateUrl: './share-recording-dialog.component.html', - styleUrl: './share-recording-dialog.component.scss' + templateUrl: './recording-share-dialog.component.html', + styleUrl: './recording-share-dialog.component.scss' }) -export class ShareRecordingDialogComponent implements OnInit { +export class RecordingShareDialogComponent implements OnInit { accessType: 'private' | 'public' = 'public'; recordingUrl?: string; private initialRecordingUrl?: string; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/recording-video-player/recording-video-player.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/components/recording-video-player/recording-video-player.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/recording-video-player/recording-video-player.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/components/recording-video-player/recording-video-player.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/recording-video-player/recording-video-player.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/components/recording-video-player/recording-video-player.component.scss similarity index 98% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/recording-video-player/recording-video-player.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/components/recording-video-player/recording-video-player.component.scss index 8128df68..8f720ec9 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/recording-video-player/recording-video-player.component.scss +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/components/recording-video-player/recording-video-player.component.scss @@ -1,4 +1,4 @@ -@use '../../../../../../src/assets/styles/design-tokens'; +@use '../../../../../../../../src/assets/styles/design-tokens'; // === VIDEO PLAYER WRAPPER === diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/recording-video-player/recording-video-player.component.spec.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/components/recording-video-player/recording-video-player.component.spec.ts similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/recording-video-player/recording-video-player.component.spec.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/components/recording-video-player/recording-video-player.component.spec.ts diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/recording-video-player/recording-video-player.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/components/recording-video-player/recording-video-player.component.ts similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/recording-video-player/recording-video-player.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/components/recording-video-player/recording-video-player.component.ts diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/guards/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/guards/index.ts new file mode 100644 index 00000000..db69384f --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/guards/index.ts @@ -0,0 +1 @@ +export * from './recording-validate-access.guard'; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/guards/recording-validate-access.guard.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/guards/recording-validate-access.guard.ts new file mode 100644 index 00000000..c80e00dd --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/guards/recording-validate-access.guard.ts @@ -0,0 +1,47 @@ +import { inject } from '@angular/core'; +import { ActivatedRouteSnapshot, CanActivateFn, RouterStateSnapshot } from '@angular/router'; +import { NavigationErrorReason } from '../../../shared/models/navigation.model'; +import { NavigationService } from '../../../shared/services'; +import { RecordingService } from '../services'; + +/** + * Guard to validate access to a recording by checking the recording secret. + */ +export const validateRecordingAccessGuard: CanActivateFn = async ( + route: ActivatedRouteSnapshot, + state: RouterStateSnapshot +) => { + const recordingService = inject(RecordingService); + const navigationService = inject(NavigationService); + + const recordingId = route.params['recording-id']; + const secret = route.queryParams['secret']; + + if (!secret) { + // If no secret is provided, redirect to the error page + return navigationService.redirectToErrorPage(NavigationErrorReason.MISSING_RECORDING_SECRET); + } + + try { + // Attempt to access the recording to check if the secret is valid + await recordingService.getRecording(recordingId, secret); + return true; + } catch (error: any) { + console.error('Error checking recording access:', error); + switch (error.status) { + case 400: + // Invalid secret + return navigationService.redirectToErrorPage(NavigationErrorReason.INVALID_RECORDING_SECRET); + case 401: + // Unauthorized access + // Redirect to the login page with query param to redirect back to the recording + return navigationService.redirectToLoginPage(state.url); + case 404: + // Recording not found + return navigationService.redirectToErrorPage(NavigationErrorReason.INVALID_RECORDING); + default: + // Internal error + return navigationService.redirectToErrorPage(NavigationErrorReason.INTERNAL_ERROR); + } + } +}; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/index.ts new file mode 100644 index 00000000..949eb7e4 --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/index.ts @@ -0,0 +1,6 @@ +export * from './components'; +// export * from './models'; +export * from './guards'; +export * from './pages'; +export * from './services'; + diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/pages/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/pages/index.ts new file mode 100644 index 00000000..75341d22 --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/pages/index.ts @@ -0,0 +1,3 @@ +export * from './recordings/recordings.component'; +export * from './view-recording/view-recording.component'; + diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/recordings/recordings.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/pages/recordings/recordings.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/recordings/recordings.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/pages/recordings/recordings.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/recordings/recordings.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/pages/recordings/recordings.component.scss similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/recordings/recordings.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/pages/recordings/recordings.component.scss diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/recordings/recordings.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/pages/recordings/recordings.component.ts similarity index 96% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/recordings/recordings.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/pages/recordings/recordings.component.ts index 04e43b9a..593a1662 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/recordings/recordings.component.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/pages/recordings/recordings.component.ts @@ -2,10 +2,11 @@ import { Component, OnInit, signal } from '@angular/core'; import { MatIconModule } from '@angular/material/icon'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { ActivatedRoute } from '@angular/router'; -import { MeetRecordingFilters, MeetRecordingInfo, MeetRecordingStatus } from '@openvidu-meet/typings'; +import { MeetRecordingFilters, MeetRecordingInfo } from '@openvidu-meet/typings'; import { ILogger, LoggerService } from 'openvidu-components-angular'; -import { RecordingListsComponent, RecordingTableAction, RecordingTableFilter } from '../../../components'; -import { NotificationService, RecordingService } from '../../../services'; +import { NotificationService } from '../../../../shared'; +import { RecordingListsComponent, RecordingTableAction, RecordingTableFilter } from '../../components'; +import { RecordingService } from '../../services'; @Component({ selector: 'ov-recordings', diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/view-recording/view-recording.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/pages/view-recording/view-recording.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/view-recording/view-recording.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/pages/view-recording/view-recording.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/view-recording/view-recording.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/pages/view-recording/view-recording.component.scss similarity index 99% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/view-recording/view-recording.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/pages/view-recording/view-recording.component.scss index 4dda3541..823043d2 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/view-recording/view-recording.component.scss +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/pages/view-recording/view-recording.component.scss @@ -1,4 +1,4 @@ -@use '../../../../../../src/assets/styles/design-tokens'; +@use '../../../../../../../../src/assets/styles/design-tokens'; // === MOBILE RESPONSIVE EXPERIENCE === diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/view-recording/view-recording.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/pages/view-recording/view-recording.component.ts similarity index 96% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/view-recording/view-recording.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/pages/view-recording/view-recording.component.ts index b1dd516a..c49bc212 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/view-recording/view-recording.component.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/pages/view-recording/view-recording.component.ts @@ -7,11 +7,11 @@ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatSnackBarModule } from '@angular/material/snack-bar'; import { MatTooltipModule } from '@angular/material/tooltip'; import { ActivatedRoute, Router } from '@angular/router'; -import { RecordingVideoPlayerComponent } from '../../components'; -import { NotificationService, RecordingService } from '../../services'; import { MeetRecordingInfo, MeetRecordingStatus } from '@openvidu-meet/typings'; -import { formatDurationToTime } from '../../utils'; import { ViewportService } from 'openvidu-components-angular'; +import { formatDurationToTime, NotificationService } from '../../../../shared'; +import { RecordingVideoPlayerComponent } from '../../components'; +import { RecordingService } from '../../services'; @Component({ selector: 'ov-view-recording', diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/services/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/services/index.ts new file mode 100644 index 00000000..b03cb9f9 --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/services/index.ts @@ -0,0 +1 @@ +export * from './recording.service'; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/recording.service.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/services/recording.service.ts similarity index 97% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/services/recording.service.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/services/recording.service.ts index 5e35677a..c653da19 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/recording.service.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/recordings/services/recording.service.ts @@ -2,14 +2,14 @@ import { Injectable } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; import { MeetRecordingFilters, MeetRecordingInfo } from '@openvidu-meet/typings'; import { LoggerService } from 'openvidu-components-angular'; -import { ShareRecordingDialogComponent } from '../components'; import { - AuthService, FeatureConfigurationService, GlobalConfigService, HttpService, TokenStorageService -} from '../services'; +} from '../../../shared/services'; +import { AuthService } from '../../auth/services/auth.service'; +import { RecordingShareDialogComponent } from '../components'; @Injectable({ providedIn: 'root' @@ -267,7 +267,7 @@ export class RecordingService { * @param recordingUrl - Optional URL of the recording to share */ openShareRecordingDialog(recordingId: string, recordingUrl?: string) { - this.dialog.open(ShareRecordingDialogComponent, { + this.dialog.open(RecordingShareDialogComponent, { width: '450px', data: { recordingId, diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/components/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/components/index.ts new file mode 100644 index 00000000..8ed3e8cd --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/components/index.ts @@ -0,0 +1,4 @@ +export * from './rooms-lists/rooms-lists.component'; +export * from './step-indicator/step-indicator.component'; +export * from './wizard-nav/wizard-nav.component'; + diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/rooms-lists/rooms-lists.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/components/rooms-lists/rooms-lists.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/rooms-lists/rooms-lists.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/components/rooms-lists/rooms-lists.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/rooms-lists/rooms-lists.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/components/rooms-lists/rooms-lists.component.scss similarity index 98% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/rooms-lists/rooms-lists.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/components/rooms-lists/rooms-lists.component.scss index 47344d0f..80350a95 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/rooms-lists/rooms-lists.component.scss +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/components/rooms-lists/rooms-lists.component.scss @@ -1,4 +1,4 @@ -@use '../../../../../../src/assets/styles/design-tokens'; +@use '../../../../../../../../src/assets/styles/design-tokens'; // Use utility classes for rooms toolbar .rooms-toolbar { diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/rooms-lists/rooms-lists.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/components/rooms-lists/rooms-lists.component.ts similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/rooms-lists/rooms-lists.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/components/rooms-lists/rooms-lists.component.ts diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/step-indicator/step-indicator.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/components/step-indicator/step-indicator.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/step-indicator/step-indicator.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/components/step-indicator/step-indicator.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/step-indicator/step-indicator.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/components/step-indicator/step-indicator.component.scss similarity index 98% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/step-indicator/step-indicator.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/components/step-indicator/step-indicator.component.scss index 416a3a9c..39f9bf4c 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/step-indicator/step-indicator.component.scss +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/components/step-indicator/step-indicator.component.scss @@ -1,4 +1,4 @@ -@use '../../../../../../src/assets/styles/design-tokens'; +@use '../../../../../../../../src/assets/styles/design-tokens'; .step-indicator-wrapper { width: 100%; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/step-indicator/step-indicator.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/components/step-indicator/step-indicator.component.ts similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/step-indicator/step-indicator.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/components/step-indicator/step-indicator.component.ts diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/wizard-nav/wizard-nav.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/components/wizard-nav/wizard-nav.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/wizard-nav/wizard-nav.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/components/wizard-nav/wizard-nav.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/wizard-nav/wizard-nav.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/components/wizard-nav/wizard-nav.component.scss similarity index 98% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/wizard-nav/wizard-nav.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/components/wizard-nav/wizard-nav.component.scss index b1f48458..5b7adae6 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/wizard-nav/wizard-nav.component.scss +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/components/wizard-nav/wizard-nav.component.scss @@ -1,4 +1,4 @@ -@use '../../../../../../src/assets/styles/design-tokens'; +@use '../../../../../../../../src/assets/styles/design-tokens'; .wizard-navigation { width: 100%; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/wizard-nav/wizard-nav.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/components/wizard-nav/wizard-nav.component.ts similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/wizard-nav/wizard-nav.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/components/wizard-nav/wizard-nav.component.ts diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/guards/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/guards/index.ts new file mode 100644 index 00000000..66205e16 --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/guards/index.ts @@ -0,0 +1,2 @@ +export * from './room-edit-check.guard'; +export * from './room-validate-access.guard'; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/guards/check-room-edit.guard.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/guards/room-edit-check.guard.ts similarity index 94% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/guards/check-room-edit.guard.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/guards/room-edit-check.guard.ts index 7e437cf3..8501f1eb 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/guards/check-room-edit.guard.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/guards/room-edit-check.guard.ts @@ -1,7 +1,7 @@ import { inject } from '@angular/core'; import { CanActivateFn, Router } from '@angular/router'; import { MeetRoomStatus } from '@openvidu-meet/typings'; -import { RoomService } from '../services/room.service'; +import { RoomService } from '../services'; /** * Guard that prevents editing a room when there's an active meeting. diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/guards/validate-access.guard.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/guards/room-validate-access.guard.ts similarity index 53% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/guards/validate-access.guard.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/guards/room-validate-access.guard.ts index 401cb969..7ce77e9b 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/guards/validate-access.guard.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/guards/room-validate-access.guard.ts @@ -1,7 +1,9 @@ import { inject } from '@angular/core'; import { ActivatedRouteSnapshot, CanActivateFn, RouterStateSnapshot } from '@angular/router'; -import { ErrorReason } from '../models'; -import { MeetingContextService, NavigationService, RecordingService, RoomMemberService } from '../services'; +import { NavigationErrorReason } from '../../../shared/models/navigation.model'; +import { NavigationService } from '../../../shared/services'; +import { MeetingContextService } from '../../meeting/services'; +import { RoomMemberService } from '../services'; /** * Guard to validate access to a room by generating a room member token. @@ -38,12 +40,12 @@ const validateRoomAccessInternal = async (pageUrl: string, validateRecordingPerm const roomId = meetingContextService.roomId(); if (!roomId) { console.error('Cannot validate room access: room ID is undefined'); - return navigationService.redirectToErrorPage(ErrorReason.INVALID_ROOM); + return navigationService.redirectToErrorPage(NavigationErrorReason.INVALID_ROOM); } const secret = meetingContextService.roomSecret(); if (!secret) { console.error('Cannot validate room access: room secret is undefined'); - return navigationService.redirectToErrorPage(ErrorReason.MISSING_ROOM_SECRET); + return navigationService.redirectToErrorPage(NavigationErrorReason.MISSING_ROOM_SECRET); } try { @@ -56,7 +58,7 @@ const validateRoomAccessInternal = async (pageUrl: string, validateRecordingPerm if (validateRecordingPermissions) { if (!roomMemberService.canRetrieveRecordings()) { // If the user does not have permission to retrieve recordings, redirect to the error page - return navigationService.redirectToErrorPage(ErrorReason.UNAUTHORIZED_RECORDING_ACCESS); + return navigationService.redirectToErrorPage(NavigationErrorReason.UNAUTHORIZED_RECORDING_ACCESS); } } @@ -66,58 +68,17 @@ const validateRoomAccessInternal = async (pageUrl: string, validateRecordingPerm switch (error.status) { case 400: // Invalid secret - return navigationService.redirectToErrorPage(ErrorReason.INVALID_ROOM_SECRET); + return navigationService.redirectToErrorPage(NavigationErrorReason.INVALID_ROOM_SECRET); case 401: // Unauthorized access // Redirect to the login page with query param to redirect back to the page return navigationService.redirectToLoginPage(pageUrl); case 404: // Room not found - return navigationService.redirectToErrorPage(ErrorReason.INVALID_ROOM); + return navigationService.redirectToErrorPage(NavigationErrorReason.INVALID_ROOM); default: - return navigationService.redirectToErrorPage(ErrorReason.INTERNAL_ERROR); + return navigationService.redirectToErrorPage(NavigationErrorReason.INTERNAL_ERROR); } } }; -/** - * Guard to validate access to a recording by checking the recording secret. - */ -export const validateRecordingAccessGuard: CanActivateFn = async ( - route: ActivatedRouteSnapshot, - state: RouterStateSnapshot -) => { - const recordingService = inject(RecordingService); - const navigationService = inject(NavigationService); - - const recordingId = route.params['recording-id']; - const secret = route.queryParams['secret']; - - if (!secret) { - // If no secret is provided, redirect to the error page - return navigationService.redirectToErrorPage(ErrorReason.MISSING_RECORDING_SECRET); - } - - try { - // Attempt to access the recording to check if the secret is valid - await recordingService.getRecording(recordingId, secret); - return true; - } catch (error: any) { - console.error('Error checking recording access:', error); - switch (error.status) { - case 400: - // Invalid secret - return navigationService.redirectToErrorPage(ErrorReason.INVALID_RECORDING_SECRET); - case 401: - // Unauthorized access - // Redirect to the login page with query param to redirect back to the recording - return navigationService.redirectToLoginPage(state.url); - case 404: - // Recording not found - return navigationService.redirectToErrorPage(ErrorReason.INVALID_RECORDING); - default: - // Internal error - return navigationService.redirectToErrorPage(ErrorReason.INTERNAL_ERROR); - } - } -}; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/index.ts new file mode 100644 index 00000000..7f14f027 --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/index.ts @@ -0,0 +1,7 @@ +export * from './components'; +export * from './guards'; +export * from './interceptor-handlers'; +export * from './models'; +export * from './pages'; +export * from './services'; + diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/interceptor-handlers/README.md b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/interceptor-handlers/README.md new file mode 100644 index 00000000..82a6940f --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/interceptor-handlers/README.md @@ -0,0 +1,47 @@ +# Interceptor Handlers - Rooms Domain + +Este directorio contiene los handlers que gestionan la lógica de dominio relacionada con errores HTTP de room members. + +## Propósito + +Separar la lógica de negocio del interceptor HTTP principal, siguiendo el principio de responsabilidad única y la arquitectura de dominios. + +## Componentes + +### `RoomMemberErrorHandlerService` + +Servicio responsable de manejar errores 401 relacionados con tokens de room member expirados. + +**Responsabilidades:** +- Refrescar el room member token cuando expira +- Reintrentar la petición original con el nuevo token +- Obtener el contexto necesario (roomId, secret, participant info) + +**NO es responsable de:** +- Decidir cuándo debe ejecutarse (eso lo hace el interceptor) +- Conocer sobre access tokens (eso es del dominio auth) +- Agregar headers a las peticiones (eso lo hace el interceptor) + +## Arquitectura + +``` +HTTP Interceptor (detecta error 401 en página /room/*) + ↓ + Notifica → HttpErrorNotifierService + ↓ + Decide qué handler ejecutar según contexto + ↓ +RoomMemberErrorHandlerService.createRetryStrategy() + ↓ + Ejecuta lógica de dominio (refresh room member token) + ↓ + Retorna Observable para reintentar la petición +``` + +## Uso + +El servicio se inyecta automáticamente en el interceptor HTTP y se invoca cuando: +- Se recibe un error 401 +- Estamos en una página que empieza con `/room/` +- No es una petición al endpoint `/profile` +- No es un error al generar el token (endpoint `/token`) diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/interceptor-handlers/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/interceptor-handlers/index.ts new file mode 100644 index 00000000..37126406 --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/interceptor-handlers/index.ts @@ -0,0 +1 @@ +export * from './room-member-error-handler.service'; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/interceptor-handlers/room-member-error-handler.service.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/interceptor-handlers/room-member-error-handler.service.ts new file mode 100644 index 00000000..a275b858 --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/interceptor-handlers/room-member-error-handler.service.ts @@ -0,0 +1,112 @@ +import { HttpErrorResponse, HttpEvent } from '@angular/common/http'; +import { Injectable, inject } from '@angular/core'; +import { Observable, catchError, from, switchMap, throwError } from 'rxjs'; +import { HttpErrorContext, HttpErrorHandler, HttpErrorNotifierService } from '../../../shared/services/http-error-notifier.service'; +import { TokenStorageService } from '../../../shared/services/token-storage.service'; +import { MeetingContextService } from '../../meeting/services/meeting-context.service'; +import { RoomMemberService } from '../services/room-member.service'; + +/** + * Handler for room member token-related HTTP errors. + * Registers itself with HttpErrorNotifierService to autonomously handle room member token refresh. + * The interceptor doesn't know about this service - it discovers itself via registration. + */ +@Injectable({ + providedIn: 'root' +}) +export class RoomMemberInterceptorErrorHandlerService implements HttpErrorHandler { + private readonly roomMemberService = inject(RoomMemberService); + private readonly meetingContextService = inject(MeetingContextService); + private readonly tokenStorageService = inject(TokenStorageService); + private readonly httpErrorNotifier = inject(HttpErrorNotifierService); + + /** + * Registers this handler with the error notifier service + */ + init(): void { + this.httpErrorNotifier.register(this); + } + + /** + * Determines if this handler can handle the given error context + */ + canHandle(context: HttpErrorContext): boolean { + const { error, request, pageUrl } = context; + + // Only handle 401 errors + if (error.status !== 401) { + return false; + } + + // Don't handle token generation errors here (let auth handler do it first) + if (error.url?.includes('/token')) { + return false; + } + + // Only handle errors that occur in room pages (excluding profile endpoint) + return pageUrl.startsWith('/room/') && !request.url.includes('/profile'); + } + + /** + * Handles the error and returns a recovery Observable + */ + handle(context: HttpErrorContext): Observable> { + return this.refreshRoomMemberToken(context); + } + + /** + * Refreshes the room member token and retries the original request + */ + private refreshRoomMemberToken(context: HttpErrorContext): Observable> { + const { request: originalRequest, error: originalError, next } = context; + console.log('Refreshing room member token...'); + + const roomId = this.meetingContextService.roomId(); + if (!roomId) { + console.error('Cannot refresh room member token: room ID is undefined'); + return throwError(() => originalError); + } + + const secret = this.meetingContextService.roomSecret(); + if (!secret) { + console.error('Cannot refresh room member token: room secret is undefined'); + return throwError(() => originalError); + } + + const participantName = this.roomMemberService.getParticipantName(); + const participantIdentity = this.roomMemberService.getParticipantIdentity(); + const grantJoinMeetingPermission = !!participantIdentity; // Grant join permission if identity is set + + return from( + this.roomMemberService.generateToken(roomId, { + secret, + grantJoinMeetingPermission, + participantName, + participantIdentity + }) + ).pipe( + switchMap(() => { + console.log('Room member token refreshed'); + // Update the request with the new token + const newToken = this.tokenStorageService.getRoomMemberToken(); + const updatedRequest = newToken + ? originalRequest.clone({ + setHeaders: { + 'x-room-member-token': `Bearer ${newToken}` + } + }) + : originalRequest; + + return next(updatedRequest); + }), + catchError((error: HttpErrorResponse) => { + if (error.url?.includes('/token')) { + console.error('Error refreshing room member token'); + return throwError(() => originalError); + } + + return throwError(() => error); + }) + ); + } +} diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/models/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/models/index.ts new file mode 100644 index 00000000..55e362d1 --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/models/index.ts @@ -0,0 +1 @@ +export * from './wizard.model'; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/models/wizard.model.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/models/wizard.model.ts similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/models/wizard.model.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/models/wizard.model.ts diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/index.ts new file mode 100644 index 00000000..39844896 --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/index.ts @@ -0,0 +1,5 @@ +export * from './room-basic-creation/room-basic-creation.component'; +export * from './room-recordings/room-recordings.component'; +export * from './room-wizard/room-wizard.component'; +export * from './rooms/rooms.component'; + diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-basic-creation/room-basic-creation.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-basic-creation/room-basic-creation.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-basic-creation/room-basic-creation.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-basic-creation/room-basic-creation.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-basic-creation/room-basic-creation.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-basic-creation/room-basic-creation.component.scss similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-basic-creation/room-basic-creation.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-basic-creation/room-basic-creation.component.scss diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-basic-creation/room-basic-creation.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-basic-creation/room-basic-creation.component.ts similarity index 97% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-basic-creation/room-basic-creation.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-basic-creation/room-basic-creation.component.ts index 9fe7c2c1..8b2eb6c4 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-basic-creation/room-basic-creation.component.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-basic-creation/room-basic-creation.component.ts @@ -5,9 +5,9 @@ import { MatFormFieldModule } from '@angular/material/form-field'; import { MatIconModule } from '@angular/material/icon'; import { MatInputModule } from '@angular/material/input'; import { MatTooltipModule } from '@angular/material/tooltip'; -import { RoomWizardStateService } from '../../../../services'; import { MeetRoomOptions } from '@openvidu-meet/typings'; import { Subject, takeUntil } from 'rxjs'; +import { RoomWizardStateService } from '../../services'; @Component({ selector: 'ov-room-basic-creation', diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/room-recordings/room-recordings.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-recordings/room-recordings.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/room-recordings/room-recordings.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-recordings/room-recordings.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/room-recordings/room-recordings.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-recordings/room-recordings.component.scss similarity index 98% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/room-recordings/room-recordings.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-recordings/room-recordings.component.scss index 544c9d3b..6be06f30 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/room-recordings/room-recordings.component.scss +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-recordings/room-recordings.component.scss @@ -1,4 +1,4 @@ -@use '../../../../../../src/assets/styles/design-tokens'; +@use '../../../../../../../../src/assets/styles/design-tokens'; .ov-page-container { height: 100vh; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/room-recordings/room-recordings.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-recordings/room-recordings.component.ts similarity index 96% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/room-recordings/room-recordings.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-recordings/room-recordings.component.ts index 46e1d8e8..060d810a 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/room-recordings/room-recordings.component.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-recordings/room-recordings.component.ts @@ -6,14 +6,11 @@ import { MatToolbarModule } from '@angular/material/toolbar'; import { ActivatedRoute } from '@angular/router'; import { MeetRecordingFilters, MeetRecordingInfo } from '@openvidu-meet/typings'; import { ILogger, LoggerService } from 'openvidu-components-angular'; -import { RecordingListsComponent, RecordingTableAction, RecordingTableFilter } from '../../components'; -import { - MeetingContextService, - NavigationService, - NotificationService, - RecordingService, - RoomMemberService -} from '../../services'; +import { NavigationService, NotificationService } from '../../../../shared'; +import { MeetingContextService } from '../../../meeting/services'; +import { RecordingListsComponent, RecordingTableAction, RecordingTableFilter } from '../../../recordings/components'; +import { RecordingService } from '../../../recordings/services'; +import { RoomMemberService } from '../../services'; @Component({ selector: 'ov-room-recordings', diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/room-wizard.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/room-wizard.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/room-wizard.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/room-wizard.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/room-wizard.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/room-wizard.component.scss similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/room-wizard.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/room-wizard.component.scss diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/room-wizard.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/room-wizard.component.ts similarity index 96% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/room-wizard.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/room-wizard.component.ts index d5294a8c..f86fb544 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/room-wizard.component.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/room-wizard.component.ts @@ -5,9 +5,10 @@ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatSlideToggleModule } from '@angular/material/slide-toggle'; import { ActivatedRoute } from '@angular/router'; import { MeetRoomOptions } from '@openvidu-meet/typings'; -import { StepIndicatorComponent, WizardNavComponent } from '../../../../components'; -import { WizardNavigationConfig, WizardStep } from '../../../../models'; -import { NavigationService, NotificationService, RoomService, RoomWizardStateService } from '../../../../services'; +import { NavigationService, NotificationService, } from '../../../../shared'; +import { StepIndicatorComponent, WizardNavComponent } from '../../components'; +import { WizardNavigationConfig, WizardStep } from '../../models'; +import { RoomService, RoomWizardStateService } from '../../services'; import { RoomBasicCreationComponent } from '../room-basic-creation/room-basic-creation.component'; import { RecordingConfigComponent } from './steps/recording-config/recording-config.component'; import { RecordingLayoutComponent } from './steps/recording-layout/recording-layout.component'; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/steps/recording-config/recording-config.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/steps/recording-config/recording-config.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/steps/recording-config/recording-config.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/steps/recording-config/recording-config.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/steps/recording-config/recording-config.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/steps/recording-config/recording-config.component.scss similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/steps/recording-config/recording-config.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/steps/recording-config/recording-config.component.scss diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/steps/recording-config/recording-config.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/steps/recording-config/recording-config.component.ts similarity index 94% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/steps/recording-config/recording-config.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/steps/recording-config/recording-config.component.ts index 93476691..ab5a8ba7 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/steps/recording-config/recording-config.component.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/steps/recording-config/recording-config.component.ts @@ -8,8 +8,8 @@ import { MatRadioModule } from '@angular/material/radio'; import { MatSelectModule } from '@angular/material/select'; import { MeetRecordingAccess, MeetRoomOptions } from '@openvidu-meet/typings'; import { Subject, takeUntil } from 'rxjs'; -import { SelectableCardComponent, SelectableOption, SelectionEvent } from '../../../../../../components'; -import { RoomWizardStateService } from '../../../../../../services'; +import { SelectableCardComponent, SelectableCardOption, SelectionCardEvent } from '../../../../../../shared'; +import { RoomWizardStateService } from '../../../../services'; interface RecordingAccessOption { value: MeetRecordingAccess; @@ -38,7 +38,7 @@ export class RecordingConfigComponent implements OnDestroy { // Store the previous E2EE state before recording disables it private e2eeStateBeforeRecording: boolean | null = null; - recordingOptions: SelectableOption[] = [ + recordingOptions: SelectableCardOption[] = [ { id: 'enabled', title: 'Allow Recording', @@ -100,7 +100,7 @@ export class RecordingConfigComponent implements OnDestroy { this.wizardState.updateStepData('recording', stepData); } - onOptionSelect(event: SelectionEvent): void { + onOptionSelect(event: SelectionCardEvent): void { const previouslyEnabled = this.isRecordingEnabled; const willBeEnabled = event.optionId === 'enabled'; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/steps/recording-layout/recording-layout.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/steps/recording-layout/recording-layout.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/steps/recording-layout/recording-layout.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/steps/recording-layout/recording-layout.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/steps/recording-layout/recording-layout.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/steps/recording-layout/recording-layout.component.scss similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/steps/recording-layout/recording-layout.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/steps/recording-layout/recording-layout.component.scss diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/steps/recording-layout/recording-layout.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/steps/recording-layout/recording-layout.component.ts similarity index 90% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/steps/recording-layout/recording-layout.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/steps/recording-layout/recording-layout.component.ts index 20077b39..9016361c 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/steps/recording-layout/recording-layout.component.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/steps/recording-layout/recording-layout.component.ts @@ -6,8 +6,8 @@ import { MatCardModule } from '@angular/material/card'; import { MatIconModule } from '@angular/material/icon'; import { MatRadioModule } from '@angular/material/radio'; import { MeetRecordingLayout } from '@openvidu-meet/typings'; -import { SelectableCardComponent, SelectableOption, SelectionEvent } from '../../../../../../components'; -import { RoomWizardStateService, ThemeService } from '../../../../../../services'; +import { SelectableCardComponent, SelectableCardOption, SelectionCardEvent, ThemeService } from '../../../../../../shared'; +import { RoomWizardStateService } from '../../../../services'; @Component({ selector: 'ov-recording-layout', @@ -27,7 +27,7 @@ export class RecordingLayoutComponent { private wizardService = inject(RoomWizardStateService); protected theme = this.themeService.currentTheme; layoutForm: FormGroup; - layoutOptions: Signal = computed(() => { + layoutOptions: Signal = computed(() => { return [ { id: MeetRecordingLayout.GRID, @@ -87,7 +87,7 @@ export class RecordingLayoutComponent { } } - onOptionSelect(event: SelectionEvent): void { + onOptionSelect(event: SelectionCardEvent): void { this.layoutForm.patchValue({ layout: event.optionId }); diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/steps/recording-trigger/recording-trigger.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/steps/recording-trigger/recording-trigger.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/steps/recording-trigger/recording-trigger.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/steps/recording-trigger/recording-trigger.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/steps/recording-trigger/recording-trigger.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/steps/recording-trigger/recording-trigger.component.scss similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/steps/recording-trigger/recording-trigger.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/steps/recording-trigger/recording-trigger.component.scss diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/steps/recording-trigger/recording-trigger.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/steps/recording-trigger/recording-trigger.component.ts similarity index 89% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/steps/recording-trigger/recording-trigger.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/steps/recording-trigger/recording-trigger.component.ts index bba3b0d2..06d24be0 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/steps/recording-trigger/recording-trigger.component.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/steps/recording-trigger/recording-trigger.component.ts @@ -5,9 +5,9 @@ import { MatButtonModule } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; import { MatIconModule } from '@angular/material/icon'; import { MatRadioModule } from '@angular/material/radio'; -import { SelectableCardComponent, SelectableOption, SelectionEvent } from '../../../../../../components'; -import { RoomWizardStateService } from '../../../../../../services'; import { Subject, takeUntil } from 'rxjs'; +import { SelectableCardComponent, SelectableCardOption, SelectionCardEvent } from '../../../../../../shared'; +import { RoomWizardStateService } from '../../../../services'; @Component({ selector: 'ov-recording-trigger', @@ -24,7 +24,7 @@ import { Subject, takeUntil } from 'rxjs'; }) export class RecordingTriggerComponent implements OnDestroy { triggerForm: FormGroup; - triggerOptions: SelectableOption[] = [ + triggerOptions: SelectableCardOption[] = [ { id: 'manual', title: 'Manual Recording', @@ -74,7 +74,7 @@ export class RecordingTriggerComponent implements OnDestroy { /** * Handle option selection from the SelectableCardComponent */ - onOptionChange(event: SelectionEvent): void { + onOptionChange(event: SelectionCardEvent): void { this.triggerForm.patchValue({ triggerType: event.optionId }); diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/steps/room-config/room-config.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/steps/room-config/room-config.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/steps/room-config/room-config.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/steps/room-config/room-config.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/steps/room-config/room-config.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/steps/room-config/room-config.component.scss similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/steps/room-config/room-config.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/steps/room-config/room-config.component.scss diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/steps/room-config/room-config.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/steps/room-config/room-config.component.ts similarity index 97% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/steps/room-config/room-config.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/steps/room-config/room-config.component.ts index d10934e1..24a2a773 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/steps/room-config/room-config.component.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/steps/room-config/room-config.component.ts @@ -3,8 +3,8 @@ import { FormGroup, ReactiveFormsModule } from '@angular/forms'; import { MatCardModule } from '@angular/material/card'; import { MatIconModule } from '@angular/material/icon'; import { MatSlideToggleModule } from '@angular/material/slide-toggle'; -import { RoomWizardStateService } from '../../../../../../services'; import { Subject, takeUntil } from 'rxjs'; +import { RoomWizardStateService } from '../../../../services'; @Component({ selector: 'ov-room-config', diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/steps/room-details/room-details.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/steps/room-details/room-details.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/steps/room-details/room-details.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/steps/room-details/room-details.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/steps/room-details/room-details.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/steps/room-details/room-details.component.scss similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/steps/room-details/room-details.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/steps/room-details/room-details.component.scss diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/steps/room-details/room-details.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/steps/room-details/room-details.component.ts similarity index 98% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/steps/room-details/room-details.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/steps/room-details/room-details.component.ts index 891693d5..dfd3492b 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/room-wizard/steps/room-details/room-details.component.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/room-wizard/steps/room-details/room-details.component.ts @@ -8,7 +8,6 @@ import { MatIconModule } from '@angular/material/icon'; import { MatInputModule } from '@angular/material/input'; import { MatSelectModule } from '@angular/material/select'; import { MatTooltipModule } from '@angular/material/tooltip'; -import { RoomWizardStateService } from '../../../../../../services'; import { MeetRoomAutoDeletionPolicy, MeetRoomDeletionPolicyWithMeeting, @@ -16,6 +15,7 @@ import { MeetRoomOptions } from '@openvidu-meet/typings'; import { Subject, takeUntil } from 'rxjs'; +import { RoomWizardStateService } from '../../../../services'; @Component({ selector: 'ov-room-details', diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/rooms.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/rooms/rooms.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/rooms.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/rooms/rooms.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/rooms.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/rooms/rooms.component.scss similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/rooms.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/rooms/rooms.component.scss diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/rooms.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/rooms/rooms.component.ts similarity index 98% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/rooms.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/rooms/rooms.component.ts index 14e19c26..e39bb6f6 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/console/rooms/rooms.component.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/pages/rooms/rooms.component.ts @@ -25,9 +25,9 @@ import { MeetRoomStatus } from '@openvidu-meet/typings'; import { ILogger, LoggerService } from 'openvidu-components-angular'; -import { DeleteRoomDialogComponent, RoomsListsComponent, RoomTableAction, RoomTableFilter } from '../../../components'; -import { DeleteRoomDialogOptions } from '../../../models'; -import { NavigationService, NotificationService, RoomService } from '../../../services'; +import { DeleteRoomDialogComponent, DeleteRoomDialogOptions, NavigationService, NotificationService } from '../../../../shared'; +import { RoomsListsComponent, RoomTableAction, RoomTableFilter } from '../../components'; +import { RoomService } from '../../services'; @Component({ selector: 'ov-rooms', diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/services/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/services/index.ts new file mode 100644 index 00000000..52e85c25 --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/services/index.ts @@ -0,0 +1,3 @@ +export * from './room-member.service'; +export * from './room.service'; +export * from './wizard-state.service'; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/room-member.service.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/services/room-member.service.ts similarity index 98% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/services/room-member.service.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/services/room-member.service.ts index ea499ddc..9817aa04 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/room-member.service.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/services/room-member.service.ts @@ -6,8 +6,7 @@ import { MeetRoomMemberTokenOptions } from '@openvidu-meet/typings'; import { E2eeService, LoggerService } from 'openvidu-components-angular'; -import { FeatureConfigurationService, HttpService, TokenStorageService } from '.'; -import { getValidDecodedToken } from '../utils'; +import { FeatureConfigurationService, HttpService, TokenStorageService, getValidDecodedToken } from '../../../shared'; @Injectable({ providedIn: 'root' diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/room.service.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/services/room.service.ts similarity index 93% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/services/room.service.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/services/room.service.ts index b10eba15..68639bd8 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/room.service.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/services/room.service.ts @@ -1,4 +1,4 @@ -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { MeetRoom, MeetRoomConfig, @@ -10,8 +10,8 @@ import { MeetRoomOptions, MeetRoomStatus } from '@openvidu-meet/typings'; -import { LoggerService } from 'openvidu-components-angular'; -import { FeatureConfigurationService, HttpService } from '../services'; +import { ILogger, LoggerService } from 'openvidu-components-angular'; +import { FeatureConfigurationService, HttpService } from '../../../shared'; /** * RoomService - Persistence Layer for Room Data @@ -30,14 +30,11 @@ import { FeatureConfigurationService, HttpService } from '../services'; export class RoomService { protected readonly ROOMS_API = `${HttpService.API_PATH_PREFIX}/rooms`; protected readonly INTERNAL_ROOMS_API = `${HttpService.INTERNAL_API_PATH_PREFIX}/rooms`; - protected log; - constructor( - protected loggerService: LoggerService, - protected httpService: HttpService, - protected featureConfService: FeatureConfigurationService - ) { - this.log = this.loggerService.get('OpenVidu Meet - RoomService'); - } + protected httpService: HttpService = inject(HttpService); + protected loggerService: LoggerService = inject(LoggerService); + protected featureConfService: FeatureConfigurationService = inject(FeatureConfigurationService); + protected log: ILogger = this.loggerService.get('OpenVidu Meet - RoomService'); + constructor() {} /** * Creates a new room with the specified options. diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/wizard-state.service.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/services/wizard-state.service.ts similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/services/wizard-state.service.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/services/wizard-state.service.ts diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/interceptors/http.interceptor.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/interceptors/http.interceptor.ts deleted file mode 100644 index cbbc5ce4..00000000 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/interceptors/http.interceptor.ts +++ /dev/null @@ -1,135 +0,0 @@ -import { HttpErrorResponse, HttpEvent, HttpHandlerFn, HttpInterceptorFn, HttpRequest } from '@angular/common/http'; -import { inject } from '@angular/core'; -import { Router } from '@angular/router'; -import { catchError, from, Observable, switchMap } from 'rxjs'; -import { AuthService, MeetingContextService, RoomMemberService, RoomService, TokenStorageService } from '../services'; - -/** - * Adds all necessary authorization headers to the request based on available tokens - * - authorization: Bearer token for access token (from localStorage) - * - x-room-member-token: Bearer token for room member token (from sessionStorage) - */ -const addAuthHeadersIfNeeded = ( - req: HttpRequest, - tokenStorageService: TokenStorageService -): HttpRequest => { - const headers: { [key: string]: string } = {}; - - // Add access token header if available - const accessToken = tokenStorageService.getAccessToken(); - if (accessToken) { - headers['authorization'] = `Bearer ${accessToken}`; - } - - // Add room member token header if available - const roomMemberToken = tokenStorageService.getRoomMemberToken(); - if (roomMemberToken) { - headers['x-room-member-token'] = `Bearer ${roomMemberToken}`; - } - - // Clone request with all headers at once if any were added - return Object.keys(headers).length > 0 ? req.clone({ setHeaders: headers }) : req; -}; - -export const httpInterceptor: HttpInterceptorFn = (req: HttpRequest, next: HttpHandlerFn) => { - const router: Router = inject(Router); - const authService: AuthService = inject(AuthService); - const meetingContextService = inject(MeetingContextService); - const roomMemberService = inject(RoomMemberService); - const tokenStorageService = inject(TokenStorageService); - - const pageUrl = router.currentNavigation()?.finalUrl?.toString() || router.url; - const requestUrl = req.url; - - // Add all authorization headers if tokens exist - req = addAuthHeadersIfNeeded(req, tokenStorageService); - - const refreshAccessToken = (firstError: HttpErrorResponse) => { - console.log('Refreshing access token...'); - return from(authService.refreshToken()).pipe( - switchMap(() => { - console.log('Access token refreshed'); - req = addAuthHeadersIfNeeded(req, tokenStorageService); - return next(req); - }), - catchError(async (error: HttpErrorResponse) => { - if (error.url?.includes('/auth/refresh')) { - console.error('Error refreshing access token'); - - // If the original request was not to the profile endpoint, logout and redirect to the login page - if (!requestUrl.includes('/profile')) { - console.log('Logging out...'); - await authService.logout(pageUrl); - } - - throw firstError; - } - - throw error; - }) - ); - }; - - const refreshRoomMemberToken = (firstError: HttpErrorResponse): Observable> => { - console.log('Refreshing room member token...'); - const roomId = meetingContextService.roomId(); - if (!roomId) throw new Error('Cannot refresh room member token: room ID is undefined'); - const secret = meetingContextService.roomSecret(); - if (!secret) throw new Error('Cannot refresh room member token: room secret is undefined'); - const participantName = roomMemberService.getParticipantName(); - const participantIdentity = roomMemberService.getParticipantIdentity(); - const grantJoinMeetingPermission = !!participantIdentity; // Grant join permission if identity is set - - return from( - roomMemberService.generateToken(roomId, { - secret, - grantJoinMeetingPermission, - participantName, - participantIdentity - }) - ).pipe( - switchMap(() => { - console.log('Room member token refreshed'); - req = addAuthHeadersIfNeeded(req, tokenStorageService); - return next(req); - }), - catchError((error: HttpErrorResponse) => { - if (error.url?.includes('/token')) { - console.error('Error refreshing room member token'); - throw firstError; - } - - throw error; - }) - ); - }; - - return next(req).pipe( - catchError((error: HttpErrorResponse) => { - if (error.status === 401) { - // Error refreshing room member token - if (error.url?.includes('/token')) { - console.log('Generating room member token failed. Refreshing access token first...'); - // This means that first we need to refresh the access token and then the room member token - return refreshAccessToken(error); - } - - // Expired room member token - if (pageUrl.startsWith('/room/') && !requestUrl.includes('/profile')) { - // If the error occurred in a room page and the request is not to the profile endpoint, - // refresh the room member token - return refreshRoomMemberToken(error); - } - - // Expired access token - if (!pageUrl.startsWith('/login') || !!tokenStorageService.getRefreshToken()) { - // If the error occurred in a page that is not the login page, - // or if there is a refresh token available, refresh the access token - return refreshAccessToken(error); - } - } - - throw error; - }) - ); -}; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/models/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/models/index.ts deleted file mode 100644 index a47f244c..00000000 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/models/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -export * from './app.model'; -export * from './config.model'; -export * from './custom-participant.model'; -export * from './layout.model'; -export * from './lobby.model'; -export * from './navigation.model'; -export * from './notification.model'; -export * from './sidenav.model'; -export * from './wizard.model'; - diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/index.ts deleted file mode 100644 index 31823335..00000000 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/pages/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -export * from './console/console.component'; -export * from './console/about/about.component'; -export * from './console/embedded/embedded.component'; -export * from './console/overview/overview.component'; -export * from './console/recordings/recordings.component'; -export * from './console/rooms/rooms.component'; -export * from './console/rooms/room-wizard/room-wizard.component'; -export * from './console/users-permissions/users-permissions.component'; -export * from './console/config/config.component'; -export * from './meeting/end-meeting/end-meeting.component'; -export * from './error/error.component'; -export * from './login/login.component'; -export * from './room-recordings/room-recordings.component'; -export * from './meeting/meeting.component'; -export * from './view-recording/view-recording.component'; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/app-data.service.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/services/app-data.service.ts deleted file mode 100644 index 38d1c993..00000000 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/app-data.service.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { Injectable } from '@angular/core'; -import { AppData, ApplicationMode, Edition } from '../models'; -import { WebComponentManagerService } from '../services'; - -@Injectable({ - providedIn: 'root' -}) -export class AppDataService { - protected appData: AppData = { - mode: ApplicationMode.STANDALONE, - edition: Edition.CE, - version: '' - }; - - constructor(protected wcManagerService: WebComponentManagerService) { - this.setApplicationMode(); - } - - private setApplicationMode(): void { - const isRequestedFromIframe = window.self !== window.top; - const appMode = isRequestedFromIframe ? ApplicationMode.EMBEDDED : ApplicationMode.STANDALONE; - this.appData.mode = appMode; - console.log(`Starting application in ${appMode} mode`); - - if (this.isEmbeddedMode()) { - // Initialize the WebComponentManagerService only in embedded mode - this.wcManagerService.initialize(); - } - } - - isEmbeddedMode(): boolean { - return this.appData.mode === ApplicationMode.EMBEDDED; - } - - isStandaloneMode(): boolean { - return this.appData.mode === ApplicationMode.STANDALONE; - } - - setEdition(edition: Edition): void { - this.appData.edition = edition; - } - - getEdition(): Edition { - return this.appData.edition; - } - - setVersion(version: string): void { - this.appData.version = version; - } - - getVersion(): string { - return this.appData.version; - } -} diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/services/index.ts deleted file mode 100644 index cad2d4b4..00000000 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/index.ts +++ /dev/null @@ -1,23 +0,0 @@ -export * from './app-data.service'; -export * from './http.service'; -export * from './auth.service'; -export * from './api-key.service'; -export * from './global-config.service'; -export * from './room.service'; -export * from './room-member.service'; -export * from './meeting/meeting.service'; -export * from './meeting/meeting-lobby.service'; -export * from './meeting/meeting-event-handler.service'; -export * from './meeting/meeting-context.service'; -export * from './feature-configuration.service'; -export * from './recording.service'; -export * from './webcomponent-manager.service'; -export * from './navigation.service'; -export * from './notification.service'; -export * from './session-storage.service'; -export * from './theme.service'; -export * from './token-storage.service'; -export * from './wizard-state.service'; -export * from './analytics.service'; -export * from './layout.service'; -export * from './storage.service'; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/dialogs/basic-dialog/dialog.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/components/dialogs/basic-dialog/dialog.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/dialogs/basic-dialog/dialog.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/components/dialogs/basic-dialog/dialog.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/dialogs/basic-dialog/dialog.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/components/dialogs/basic-dialog/dialog.component.scss similarity index 98% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/dialogs/basic-dialog/dialog.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/components/dialogs/basic-dialog/dialog.component.scss index 4174a3c4..c3bd7696 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/dialogs/basic-dialog/dialog.component.scss +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/components/dialogs/basic-dialog/dialog.component.scss @@ -1,5 +1,5 @@ // Import design system utilities -@use '../../../../../../../src/assets/styles/design-tokens'; +@use '../../../../../../../../src/assets/styles/design-tokens'; // === DIALOG CONTAINER === ::ng-deep { diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/dialogs/basic-dialog/dialog.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/components/dialogs/basic-dialog/dialog.component.ts similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/dialogs/basic-dialog/dialog.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/components/dialogs/basic-dialog/dialog.component.ts diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/dialogs/delete-room-dialog/delete-room-dialog.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/components/dialogs/delete-room-dialog/delete-room-dialog.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/dialogs/delete-room-dialog/delete-room-dialog.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/components/dialogs/delete-room-dialog/delete-room-dialog.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/dialogs/delete-room-dialog/delete-room-dialog.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/components/dialogs/delete-room-dialog/delete-room-dialog.component.scss similarity index 99% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/dialogs/delete-room-dialog/delete-room-dialog.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/components/dialogs/delete-room-dialog/delete-room-dialog.component.scss index 3e208222..83aa3a43 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/dialogs/delete-room-dialog/delete-room-dialog.component.scss +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/components/dialogs/delete-room-dialog/delete-room-dialog.component.scss @@ -1,5 +1,5 @@ // Import design system utilities -@use '../../../../../../../src/assets/styles/design-tokens'; +@use '../../../../../../../../src/assets/styles/design-tokens'; // === DIALOG CONTAINER === ::ng-deep { diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/dialogs/delete-room-dialog/delete-room-dialog.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/components/dialogs/delete-room-dialog/delete-room-dialog.component.ts similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/dialogs/delete-room-dialog/delete-room-dialog.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/components/dialogs/delete-room-dialog/delete-room-dialog.component.ts diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/components/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/components/index.ts new file mode 100644 index 00000000..58d51b9e --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/components/index.ts @@ -0,0 +1,6 @@ +export * from './dialogs/basic-dialog/dialog.component'; +export * from './dialogs/delete-room-dialog/delete-room-dialog.component'; +export * from './pro-feature-badge/pro-feature-badge.component'; +export * from './selectable-card/selectable-card.component'; +export * from './spinner/spinner.component'; + diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/pro-feature-badge/pro-feature-badge.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/components/pro-feature-badge/pro-feature-badge.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/pro-feature-badge/pro-feature-badge.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/components/pro-feature-badge/pro-feature-badge.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/pro-feature-badge/pro-feature-badge.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/components/pro-feature-badge/pro-feature-badge.component.scss similarity index 90% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/pro-feature-badge/pro-feature-badge.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/components/pro-feature-badge/pro-feature-badge.component.scss index b7a0e204..e10c3832 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/pro-feature-badge/pro-feature-badge.component.scss +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/components/pro-feature-badge/pro-feature-badge.component.scss @@ -1,4 +1,4 @@ -@use '../../../../../../src/assets/styles/design-tokens'; +@use '../../../../../../../src/assets/styles/design-tokens'; .pro-badge { position: absolute; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/pro-feature-badge/pro-feature-badge.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/components/pro-feature-badge/pro-feature-badge.component.ts similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/pro-feature-badge/pro-feature-badge.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/components/pro-feature-badge/pro-feature-badge.component.ts diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/selectable-card/selectable-card.component.html b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/components/selectable-card/selectable-card.component.html similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/selectable-card/selectable-card.component.html rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/components/selectable-card/selectable-card.component.html diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/selectable-card/selectable-card.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/components/selectable-card/selectable-card.component.scss similarity index 98% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/selectable-card/selectable-card.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/components/selectable-card/selectable-card.component.scss index 255d3b23..c6ea42d6 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/selectable-card/selectable-card.component.scss +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/components/selectable-card/selectable-card.component.scss @@ -1,4 +1,4 @@ -@use '../../../../../../src/assets/styles/design-tokens'; +@use '../../../../../../../src/assets/styles/design-tokens'; .option-card { @include design-tokens.ov-card; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/selectable-card/selectable-card.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/components/selectable-card/selectable-card.component.ts similarity index 92% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/selectable-card/selectable-card.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/components/selectable-card/selectable-card.component.ts index 96b294c7..d1e1bb89 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/selectable-card/selectable-card.component.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/components/selectable-card/selectable-card.component.ts @@ -1,12 +1,12 @@ import { CommonModule } from '@angular/common'; import { Component, EventEmitter, Input, Output } from '@angular/core'; import { MatIconModule } from '@angular/material/icon'; -import { ProFeatureBadgeComponent } from '../../components'; +import { ProFeatureBadgeComponent } from '../'; /** * Interface for selectable card option data */ -export interface SelectableOption { +export interface SelectableCardOption { id: string; title: string; description: string; @@ -21,9 +21,9 @@ export interface SelectableOption { /** * Event emitted when an option is selected */ -export interface SelectionEvent { +export interface SelectionCardEvent { optionId: string; - option: SelectableOption; + option: SelectableCardOption; previousSelection?: string | string[]; } @@ -37,7 +37,7 @@ export class SelectableCardComponent { /** * The option data to display in the card */ - @Input({ required: true }) option!: SelectableOption; + @Input({ required: true }) option!: SelectableCardOption; /** * Currently selected value(s) @@ -119,12 +119,12 @@ export class SelectableCardComponent { /** * Event emitted when an option is selected */ - @Output() optionSelected = new EventEmitter(); + @Output() optionSelected = new EventEmitter(); /** * Event emitted when the card is hovered */ - @Output() cardHover = new EventEmitter<{ option: SelectableOption; isHovering: boolean }>(); + @Output() cardHover = new EventEmitter<{ option: SelectableCardOption; isHovering: boolean }>(); /** * Check if the current option is selected @@ -156,7 +156,7 @@ export class SelectableCardComponent { } // Emit selection event - const selectionEvent: SelectionEvent = { + const selectionEvent: SelectionCardEvent = { optionId, option: this.option, previousSelection: this.selectedValue diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/spinner/spinner.component.scss b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/components/spinner/spinner.component.scss similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/spinner/spinner.component.scss rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/components/spinner/spinner.component.scss diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/components/spinner/spinner.component.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/components/spinner/spinner.component.ts similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/components/spinner/spinner.component.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/components/spinner/spinner.component.ts diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/guards/auth.guard.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/guards/auth.guard.ts similarity index 90% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/guards/auth.guard.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/guards/auth.guard.ts index 659b75a1..9c828df7 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/guards/auth.guard.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/guards/auth.guard.ts @@ -1,6 +1,7 @@ import { inject } from '@angular/core'; import { ActivatedRouteSnapshot, CanActivateFn, RouterStateSnapshot } from '@angular/router'; -import { AuthService, NavigationService } from '../services'; +import { AuthService } from '../../domains/auth/services/auth.service'; +import { NavigationService } from '../services'; export const checkUserAuthenticatedGuard: CanActivateFn = async ( _route: ActivatedRouteSnapshot, diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/guards/extract-query-params.guard.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/guards/extract-query-params.guard.ts similarity index 90% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/guards/extract-query-params.guard.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/guards/extract-query-params.guard.ts index c14036eb..a9269451 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/guards/extract-query-params.guard.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/guards/extract-query-params.guard.ts @@ -1,14 +1,10 @@ import { inject } from '@angular/core'; import { ActivatedRouteSnapshot, CanActivateFn } from '@angular/router'; import { WebComponentProperty } from '@openvidu-meet/typings'; -import { ErrorReason } from '../models'; -import { - AppDataService, - MeetingContextService, - NavigationService, - RoomMemberService, - SessionStorageService -} from '../services'; +import { MeetingContextService } from '../../domains/meeting/services'; +import { RoomMemberService } from '../../domains/rooms/services'; +import { NavigationErrorReason } from '../models/navigation.model'; +import { AppDataService, NavigationService, SessionStorageService } from '../services'; export const extractRoomQueryParamsGuard: CanActivateFn = (route: ActivatedRouteSnapshot) => { const navigationService = inject(NavigationService); @@ -32,7 +28,7 @@ export const extractRoomQueryParamsGuard: CanActivateFn = (route: ActivatedRoute if (!secret) { // If no secret is provided, redirect to the error page - return navigationService.redirectToErrorPage(ErrorReason.MISSING_ROOM_SECRET); + return navigationService.redirectToErrorPage(NavigationErrorReason.MISSING_ROOM_SECRET); } meetingContextService.setRoomId(roomId); @@ -64,7 +60,7 @@ export const extractRecordingQueryParamsGuard: CanActivateFn = (route: Activated if (!secret) { // If no secret is provided, redirect to the error page - return navigationService.redirectToErrorPage(ErrorReason.MISSING_ROOM_SECRET); + return navigationService.redirectToErrorPage(NavigationErrorReason.MISSING_ROOM_SECRET); } meetingContextService.setRoomId(roomId); diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/guards/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/guards/index.ts similarity index 65% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/guards/index.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/guards/index.ts index c5214044..81574f9a 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/guards/index.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/guards/index.ts @@ -1,6 +1,5 @@ export * from './auth.guard'; -export * from './check-room-edit.guard'; export * from './extract-query-params.guard'; export * from './remove-query-params.guard'; export * from './run-serially.guard'; -export * from './validate-access.guard'; + diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/guards/remove-query-params.guard.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/guards/remove-query-params.guard.ts similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/guards/remove-query-params.guard.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/guards/remove-query-params.guard.ts diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/guards/run-serially.guard.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/guards/run-serially.guard.ts similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/guards/run-serially.guard.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/guards/run-serially.guard.ts diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/index.ts new file mode 100644 index 00000000..b62d6734 --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/index.ts @@ -0,0 +1,8 @@ +export * from './components/index'; +export * from './guards/index'; +export * from './interceptors/index'; +export * from './models/index'; +export * from './routes/base-routes'; +export * from './services/index'; +export * from './utils/index'; + diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/interceptors/http.interceptor.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/interceptors/http.interceptor.ts new file mode 100644 index 00000000..2ac45294 --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/interceptors/http.interceptor.ts @@ -0,0 +1,71 @@ +import { HttpErrorResponse, HttpHandlerFn, HttpInterceptorFn, HttpRequest } from '@angular/common/http'; +import { inject } from '@angular/core'; +import { Router } from '@angular/router'; +import { catchError, throwError } from 'rxjs'; +import { HttpErrorNotifierService, TokenStorageService } from '../services'; + +/** + * Adds all necessary authorization headers to the request based on available tokens + * - authorization: Bearer token for access token (from localStorage) + * - x-room-member-token: Bearer token for room member token (from sessionStorage) + */ +const addAuthHeadersIfNeeded = ( + req: HttpRequest, + tokenStorageService: TokenStorageService +): HttpRequest => { + const headers: { [key: string]: string } = {}; + + // Add access token header if available + const accessToken = tokenStorageService.getAccessToken(); + if (accessToken) { + headers['authorization'] = `Bearer ${accessToken}`; + } + + // Add room member token header if available + const roomMemberToken = tokenStorageService.getRoomMemberToken(); + if (roomMemberToken) { + headers['x-room-member-token'] = `Bearer ${roomMemberToken}`; + } + + // Clone request with all headers at once if any were added + return Object.keys(headers).length > 0 ? req.clone({ setHeaders: headers }) : req; +}; + +/** + * + * This interceptor follows the principle of single responsibility and domain separation. + * It only handles: + * 1. Adding authorization headers to requests + * 2. Detecting HTTP errors + * 3. Delegating error to registered domain handlers + */ +export const httpInterceptor: HttpInterceptorFn = (req: HttpRequest, next: HttpHandlerFn) => { + const router = inject(Router); + const tokenStorageService = inject(TokenStorageService); + const httpErrorNotifier = inject(HttpErrorNotifierService); + + const pageUrl = router.currentNavigation()?.finalUrl?.toString() || router.url; + + // Add all authorization headers if tokens exist + req = addAuthHeadersIfNeeded(req, tokenStorageService); + + return next(req).pipe( + catchError((error: HttpErrorResponse) => { + // Attempt recovery through registered domain handlers + const recovery$ = httpErrorNotifier.handle({ + error, + request: req, + pageUrl, + next + }); + + // If a handler provided a recovery strategy, use it + // Otherwise, rethrow the error + if (recovery$) { + return recovery$; + } + + return throwError(() => error); + }) + ); +}; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/interceptors/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/interceptors/index.ts similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/interceptors/index.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/interceptors/index.ts diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/models/app.model.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/models/app.model.ts similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/models/app.model.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/models/app.model.ts diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/models/config.model.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/models/config.model.ts similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/models/config.model.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/models/config.model.ts diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/models/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/models/index.ts new file mode 100644 index 00000000..eb84215f --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/models/index.ts @@ -0,0 +1,5 @@ +export * from './app.model'; +export * from './config.model'; +export * from './notification.model'; +export * from './sidenav.model'; +export * from './storage.model'; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/models/navigation.model.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/models/navigation.model.ts similarity index 91% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/models/navigation.model.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/models/navigation.model.ts index ae9e667b..30a1ca0b 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/models/navigation.model.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/models/navigation.model.ts @@ -1,4 +1,4 @@ -export enum ErrorReason { +export enum NavigationErrorReason { CLOSED_ROOM = 'closed-room', MISSING_ROOM_SECRET = 'missing-room-secret', MISSING_RECORDING_SECRET = 'missing-recording-secret', diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/models/notification.model.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/models/notification.model.ts similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/models/notification.model.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/models/notification.model.ts diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/models/sidenav.model.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/models/sidenav.model.ts similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/models/sidenav.model.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/models/sidenav.model.ts diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/models/storage.model.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/models/storage.model.ts similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/models/storage.model.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/models/storage.model.ts diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/routes/base-routes.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/routes/base-routes.ts similarity index 76% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/routes/base-routes.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/routes/base-routes.ts index 4b360325..b0a363aa 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/routes/base-routes.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/routes/base-routes.ts @@ -1,33 +1,30 @@ import { Routes } from '@angular/router'; import { WebComponentProperty } from '@openvidu-meet/typings'; +import { LoginComponent } from '../../domains/auth/pages/login/login.component'; +import { + ConfigComponent, + ConsoleComponent, + EmbeddedComponent, + OverviewComponent, + UsersPermissionsComponent +} from '../../domains/console/pages'; +import { ErrorComponent } from '../../domains/console/pages/error/error.component'; +import { EndMeetingComponent, MeetingComponent } from '../../domains/meeting/pages'; +import { validateRecordingAccessGuard } from '../../domains/recordings/guards'; +import { RecordingsComponent, ViewRecordingComponent } from '../../domains/recordings/pages'; +import { + checkEditableRoomGuard, validateRoomAccessGuard, + validateRoomRecordingsAccessGuard +} from '../../domains/rooms/guards'; +import { RoomRecordingsComponent, RoomsComponent, RoomWizardComponent } from '../../domains/rooms/pages'; import { - checkEditableRoomGuard, checkUserAuthenticatedGuard, checkUserNotAuthenticatedGuard, extractRecordingQueryParamsGuard, extractRoomQueryParamsGuard, removeQueryParamsGuard, runGuardsSerially, - validateRecordingAccessGuard, - validateRoomAccessGuard, - validateRoomRecordingsAccessGuard } from '../guards'; -import { - ConfigComponent, - ConsoleComponent, - EmbeddedComponent, - EndMeetingComponent, - ErrorComponent, - LoginComponent, - MeetingComponent, - OverviewComponent, - RecordingsComponent, - RoomRecordingsComponent, - RoomsComponent, - RoomWizardComponent, - UsersPermissionsComponent, - ViewRecordingComponent -} from '../pages'; export const baseRoutes: Routes = [ { diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/analytics.service.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/services/analytics.service.ts similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/services/analytics.service.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/services/analytics.service.ts diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/api-key.service.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/services/api-key.service.ts similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/services/api-key.service.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/services/api-key.service.ts diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/services/app-data.service.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/services/app-data.service.ts new file mode 100644 index 00000000..4968f55a --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/services/app-data.service.ts @@ -0,0 +1,40 @@ +import { Injectable, WritableSignal, computed, signal } from '@angular/core'; +import { ApplicationMode, Edition } from '../models'; + +@Injectable({ + providedIn: 'root' +}) +export class AppDataService { + private readonly _mode: WritableSignal = signal(ApplicationMode.STANDALONE); + private readonly _edition: WritableSignal = signal(Edition.CE); + private readonly _version: WritableSignal = signal(''); + + readonly mode = computed(() => this._mode()); + readonly edition = computed(() => this._edition()); + readonly version = computed(() => this._version()); + readonly isEmbeddedMode = computed(() => this._mode() === ApplicationMode.EMBEDDED); + readonly isStandaloneMode = computed(() => this._mode() === ApplicationMode.STANDALONE); + readonly appData = computed(() => ({ + mode: this._mode(), + edition: this._edition(), + version: this._version() + })); + + constructor() { + this.detectMode(); + console.log(`Starting application in ${this._mode()} mode`); + } + + private detectMode() { + const isRequestedFromIframe = window.self !== window.top; + this._mode.set(isRequestedFromIframe ? ApplicationMode.EMBEDDED : ApplicationMode.STANDALONE); + } + + setEdition(edition: Edition): void { + this._edition.set(edition); + } + + setVersion(version: string): void { + this._version.set(version); + } +} diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/feature-configuration.service.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/services/feature-configuration.service.ts similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/services/feature-configuration.service.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/services/feature-configuration.service.ts diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/global-config.service.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/services/global-config.service.ts similarity index 97% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/services/global-config.service.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/services/global-config.service.ts index 67fad025..aedf0d9b 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/global-config.service.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/services/global-config.service.ts @@ -1,7 +1,7 @@ import { inject, Injectable } from '@angular/core'; import { AuthMode, MeetAppearanceConfig, SecurityConfig, WebhookConfig } from '@openvidu-meet/typings'; import { ILogger, LoggerService } from 'openvidu-components-angular'; -import { FeatureConfigurationService, HttpService } from '../services'; +import { FeatureConfigurationService, HttpService } from '.'; @Injectable({ providedIn: 'root' diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/services/http-error-notifier.service.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/services/http-error-notifier.service.ts new file mode 100644 index 00000000..68120c0e --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/services/http-error-notifier.service.ts @@ -0,0 +1,69 @@ +import { HttpErrorResponse, HttpEvent, HttpHandlerFn, HttpRequest } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { EMPTY, Observable } from 'rxjs'; + +/** + * Context information about an HTTP error + */ +export interface HttpErrorContext { + /** The HTTP error response */ + error: HttpErrorResponse; + /** The original HTTP request that caused the error */ + request: HttpRequest; + /** The current page URL where the error occurred */ + pageUrl: string; + /** The next handler function to retry the request */ + next: HttpHandlerFn; +} + +/** + * Function type for error recovery handlers + * Returns an Observable to retry the request if the handler can recover from the error, null otherwise + */ +// export type ErrorRecoveryHandler = (context: HttpErrorContext) => Observable> | null; +export interface HttpErrorHandler { + /** Determines if this handler can handle the given error context */ + canHandle(context: HttpErrorContext): boolean; + /** Handles the error and returns a recovery Observable */ + handle(context: HttpErrorContext): Observable>; +} + +/** + * Service responsible for coordinating HTTP error recovery across domains. + * This allows the interceptor to remain completely agnostic of domain logic. + * + * Domain handlers register themselves and provide recovery strategies when they can handle an error. + */ +@Injectable({ + providedIn: 'root' +}) +export class HttpErrorNotifierService { + private handlers: HttpErrorHandler[] = []; + + /** + * Registers a new HTTP error handler + * + * @param handler The error handler to register + */ + public register(handler: HttpErrorHandler): void { + this.handlers.push(handler); + } + + /** + * Attempts to recover from an HTTP error by consulting registered handlers. + * Returns an Observable from the first handler that can recover, or EMPTY if none can handle it. + * + * @param context The error context + * @returns Observable to retry the request, or EMPTY if no handler can recover + */ + public handle(context: HttpErrorContext): Observable> { + for (const handler of this.handlers) { + if (handler.canHandle(context)) { + return handler.handle(context); + } + } + + // No handler could handle this error + return EMPTY; + } +} diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/http.service.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/services/http.service.ts similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/services/http.service.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/services/http.service.ts diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/services/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/services/index.ts new file mode 100644 index 00000000..a94ffef1 --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/services/index.ts @@ -0,0 +1,14 @@ +export * from './analytics.service'; +export * from './api-key.service'; +export * from './app-data.service'; +export * from './feature-configuration.service'; +export * from './global-config.service'; +export * from './http-error-notifier.service'; +export * from './http.service'; +export * from './navigation.service'; +export * from './notification.service'; +export * from './session-storage.service'; +export * from './storage.service'; +export * from './theme.service'; +export * from './token-storage.service'; + diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/navigation.service.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/services/navigation.service.ts similarity index 96% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/services/navigation.service.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/services/navigation.service.ts index 2c905b7c..f1c65b94 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/navigation.service.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/services/navigation.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; import { Params, Router, UrlTree } from '@angular/router'; -import { ErrorReason } from '../models'; -import { AppDataService, SessionStorageService } from '../services'; +import { AppDataService, SessionStorageService } from '.'; +import { NavigationErrorReason } from '../models/navigation.model'; @Injectable({ providedIn: 'root' @@ -104,7 +104,7 @@ export class NavigationService { * @param navigate - If true, navigates to the generated UrlTree * @returns The UrlTree for the error page */ - async redirectToErrorPage(reason: ErrorReason, navigate = false): Promise { + async redirectToErrorPage(reason: NavigationErrorReason, navigate = false): Promise { const urlTree = this.createRedirectionTo('error', { reason }); if (navigate) { diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/notification.service.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/services/notification.service.ts similarity index 92% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/services/notification.service.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/services/notification.service.ts index 67fa5638..182d43e2 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/notification.service.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/services/notification.service.ts @@ -3,8 +3,7 @@ import { ComponentPortal } from '@angular/cdk/portal'; import { Injectable } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; import { MatSnackBar } from '@angular/material/snack-bar'; -import { DialogComponent, SpinnerComponent } from '../components'; -import { DialogOptions } from '../models'; +import { DialogComponent, DialogOptions, SpinnerComponent } from '..'; @Injectable({ providedIn: 'root' diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/session-storage.service.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/services/session-storage.service.ts similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/services/session-storage.service.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/services/session-storage.service.ts diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/storage.service.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/services/storage.service.ts similarity index 90% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/services/storage.service.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/services/storage.service.ts index dd4bf22d..392f141a 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/storage.service.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/services/storage.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; import { LoggerService, StorageService } from 'openvidu-components-angular'; -import { MeetLayoutMode } from '../models/layout.model'; -import { STORAGE_PREFIX, MeetStorageKeys } from '../models/storage.model'; +import { MeetLayoutMode } from '../../domains/meeting/models/layout.model'; +import { MeetStorageKeys, STORAGE_PREFIX } from '../models/storage.model'; @Injectable({ providedIn: 'root' diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/theme.service.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/services/theme.service.ts similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/services/theme.service.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/services/theme.service.ts diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/services/token-storage.service.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/services/token-storage.service.ts similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/services/token-storage.service.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/services/token-storage.service.ts diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/utils/format.utils.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/utils/format.utils.ts similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/utils/format.utils.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/utils/format.utils.ts diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/utils/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/utils/index.ts similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/utils/index.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/utils/index.ts diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/utils/token.utils.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/utils/token.utils.ts similarity index 100% rename from meet-ce/frontend/projects/shared-meet-components/src/lib/utils/token.utils.ts rename to meet-ce/frontend/projects/shared-meet-components/src/lib/shared/utils/token.utils.ts diff --git a/meet-ce/frontend/projects/shared-meet-components/src/public-api.ts b/meet-ce/frontend/projects/shared-meet-components/src/public-api.ts index 0e26e74d..22c1d5f9 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/public-api.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/public-api.ts @@ -1,12 +1,12 @@ /* * Public API Surface of shared-meet-components */ -export * from './lib/components/index'; -export * from './lib/services/index'; -export * from './lib/models/index'; -export * from './lib/pages/index'; -export * from './lib/interceptors/index'; -export * from './lib/guards/index'; -export * from './lib/routes/base-routes'; -export * from './lib/utils/index'; -export * from './lib/customization/index'; +export * from './lib/domains/auth'; +export * from './lib/domains/console'; +export * from './lib/domains/meeting'; +export * from './lib/domains/recordings'; +export * from './lib/domains/rooms'; + + +export * from './lib/shared/index'; + diff --git a/meet-ce/frontend/src/app/app.config.ts b/meet-ce/frontend/src/app/app.config.ts index b2a0948a..d922d02d 100644 --- a/meet-ce/frontend/src/app/app.config.ts +++ b/meet-ce/frontend/src/app/app.config.ts @@ -3,16 +3,28 @@ import { provideHttpClient, withInterceptors } from '@angular/common/http'; import { ApplicationConfig, importProvidersFrom, - provideZoneChangeDetection, inject, - provideAppInitializer + provideAppInitializer, + provideZoneChangeDetection } from '@angular/core'; import { provideAnimationsAsync } from '@angular/platform-browser/animations/async'; import { provideRouter } from '@angular/router'; import { ceRoutes } from '@app/app.routes'; import { environment } from '@environment/environment'; -import { CustomParticipantModel, httpInterceptor, MeetLayoutService, ThemeService } from '@openvidu-meet/shared-components'; -import { LayoutService, OpenViduComponentsConfig, OpenViduComponentsModule, ParticipantProperties } from 'openvidu-components-angular'; +import { + AuthInterceptorErrorHandlerService, + CustomParticipantModel, + httpInterceptor, + MeetingLayoutService, + RoomMemberInterceptorErrorHandlerService, + ThemeService +} from '@openvidu-meet/shared-components'; +import { + LayoutService, + OpenViduComponentsConfig, + OpenViduComponentsModule, + ParticipantProperties +} from 'openvidu-components-angular'; const ovComponentsconfig: OpenViduComponentsConfig = { production: environment.production, @@ -28,8 +40,10 @@ export const appConfig: ApplicationConfig = { )(inject(ThemeService)); return initializerFn(); }), + provideAppInitializer(() => inject(AuthInterceptorErrorHandlerService).init()), + provideAppInitializer(() => inject(RoomMemberInterceptorErrorHandlerService).init()), importProvidersFrom(OpenViduComponentsModule.forRoot(ovComponentsconfig)), - { provide: LayoutService, useClass: MeetLayoutService }, + { provide: LayoutService, useClass: MeetingLayoutService }, provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(ceRoutes), provideAnimationsAsync(), diff --git a/meet-ce/frontend/src/app/customization/index.ts b/meet-ce/frontend/src/app/customization/index.ts index b371a53e..7688aebc 100644 --- a/meet-ce/frontend/src/app/customization/index.ts +++ b/meet-ce/frontend/src/app/customization/index.ts @@ -1 +1 @@ -export * from './meeting-ce.providers'; +export * from './pages/app-ce-meeting/app-ce-meeting.component';