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 index 0267083a..a3962816 100644 --- 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 @@ -2,4 +2,6 @@ export * from './components'; export * from './customization'; export * from './models'; export * from './pages'; +export * from './providers'; export * from './services'; + diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/providers/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/providers/index.ts new file mode 100644 index 00000000..31149417 --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/providers/index.ts @@ -0,0 +1 @@ +export * from './meeting-context-adapter.provider'; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/providers/meeting-context-adapter.provider.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/providers/meeting-context-adapter.provider.ts new file mode 100644 index 00000000..a20be7cd --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/meeting/providers/meeting-context-adapter.provider.ts @@ -0,0 +1,12 @@ +import { Provider } from '@angular/core'; +import { MEETING_CONTEXT_ADAPTER } from '../../../shared/adapters'; +import { MeetingContextService } from '../services/meeting-context.service'; + +/** + * Provides the MeetingContextAdapter using the existing MeetingContextService. + * This allows shared guards to use the adapter interface without depending on domain services. + */ +export const MEETING_CONTEXT_ADAPTER_PROVIDER: Provider = { + provide: MEETING_CONTEXT_ADAPTER, + useExisting: MeetingContextService +}; 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 index 7f14f027..07f676b5 100644 --- 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 @@ -3,5 +3,6 @@ export * from './guards'; export * from './interceptor-handlers'; export * from './models'; export * from './pages'; +export * from './providers'; export * from './services'; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/providers/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/providers/index.ts new file mode 100644 index 00000000..8d78d59a --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/providers/index.ts @@ -0,0 +1 @@ +export * from './room-member-adapter.provider'; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/providers/room-member-adapter.provider.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/providers/room-member-adapter.provider.ts new file mode 100644 index 00000000..edd9dbe8 --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/domains/rooms/providers/room-member-adapter.provider.ts @@ -0,0 +1,12 @@ +import { Provider } from '@angular/core'; +import { ROOM_MEMBER_ADAPTER } from '../../../shared/adapters'; +import { RoomMemberService } from '../services/room-member.service'; + +/** + * Provides the RoomMemberAdapter using the existing RoomMemberService. + * This allows shared guards to use the adapter interface without depending on domain services. + */ +export const ROOM_MEMBER_ADAPTER_PROVIDER: Provider = { + provide: ROOM_MEMBER_ADAPTER, + useExisting: RoomMemberService +}; diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/adapters/index.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/adapters/index.ts new file mode 100644 index 00000000..70ff8dcd --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/adapters/index.ts @@ -0,0 +1,3 @@ +export * from './meeting-context.adapter'; +export * from './room-member.adapter'; + diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/adapters/meeting-context.adapter.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/adapters/meeting-context.adapter.ts new file mode 100644 index 00000000..93e56ce0 --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/adapters/meeting-context.adapter.ts @@ -0,0 +1,27 @@ +import { InjectionToken } from '@angular/core'; + +/** + * Adapter interface for meeting context operations. + * This allows shared guards to interact with meeting context without directly depending on domain services. + */ +export interface MeetingContextAdapter { + /** + * Sets the room ID for the current meeting context + */ + setRoomId(roomId: string): void; + + /** + * Sets the room secret for the current meeting context + */ + setRoomSecret(secret: string, persistInStorage?: boolean): void; + + /** + * Sets the E2EE encryption key for the current meeting + */ + setE2eeKey(key: string): void; +} + +/** + * Injection token for the MeetingContextAdapter + */ +export const MEETING_CONTEXT_ADAPTER = new InjectionToken('MEETING_CONTEXT_ADAPTER'); diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/adapters/room-member.adapter.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/adapters/room-member.adapter.ts new file mode 100644 index 00000000..d1ef9739 --- /dev/null +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/adapters/room-member.adapter.ts @@ -0,0 +1,17 @@ +import { InjectionToken } from '@angular/core'; + +/** + * Adapter interface for room member operations. + * This allows shared guards to interact with room member context without directly depending on domain services. + */ +export interface RoomMemberAdapter { + /** + * Sets the participant name for the current room member + */ + setParticipantName(name: string): void; +} + +/** + * Injection token for the RoomMemberAdapter + */ +export const ROOM_MEMBER_ADAPTER = new InjectionToken('ROOM_MEMBER_ADAPTER'); diff --git a/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/guards/extract-query-params.guard.ts b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/guards/extract-query-params.guard.ts index 72fc01fb..bd9e2694 100644 --- a/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/guards/extract-query-params.guard.ts +++ b/meet-ce/frontend/projects/shared-meet-components/src/lib/shared/guards/extract-query-params.guard.ts @@ -1,8 +1,7 @@ import { inject } from '@angular/core'; import { ActivatedRouteSnapshot, CanActivateFn } from '@angular/router'; import { WebComponentProperty } from '@openvidu-meet/typings'; -import { MeetingContextService } from '../../domains/meeting/services/meeting-context.service'; -import { RoomMemberService } from '../../domains/rooms/services/room-member.service'; +import { MEETING_CONTEXT_ADAPTER, ROOM_MEMBER_ADAPTER } from '../adapters'; import { NavigationErrorReason } from '../models/navigation.model'; import { AppDataService } from '../services/app-data.service'; import { NavigationService } from '../services/navigation.service'; @@ -10,8 +9,8 @@ import { SessionStorageService } from '../services/session-storage.service'; export const extractRoomQueryParamsGuard: CanActivateFn = (route: ActivatedRouteSnapshot) => { const navigationService = inject(NavigationService); - const meetingContextService = inject(MeetingContextService); - const roomMemberService = inject(RoomMemberService); + const meetingContextAdapter = inject(MEETING_CONTEXT_ADAPTER); + const roomMemberAdapter = inject(ROOM_MEMBER_ADAPTER); const sessionStorageService = inject(SessionStorageService); const { @@ -33,15 +32,15 @@ export const extractRoomQueryParamsGuard: CanActivateFn = (route: ActivatedRoute return navigationService.redirectToErrorPage(NavigationErrorReason.MISSING_ROOM_SECRET); } - meetingContextService.setRoomId(roomId); - meetingContextService.setRoomSecret(secret, true); + meetingContextAdapter.setRoomId(roomId); + meetingContextAdapter.setRoomSecret(secret, true); if (e2eeKey) { - meetingContextService.setE2eeKey(e2eeKey); + meetingContextAdapter.setE2eeKey(e2eeKey); } if (participantName) { - roomMemberService.setParticipantName(participantName); + roomMemberAdapter.setParticipantName(participantName); } if (showOnlyRecordings === 'true') { @@ -54,7 +53,7 @@ export const extractRoomQueryParamsGuard: CanActivateFn = (route: ActivatedRoute export const extractRecordingQueryParamsGuard: CanActivateFn = (route: ActivatedRouteSnapshot) => { const navigationService = inject(NavigationService); - const meetingContextService = inject(MeetingContextService); + const meetingContextAdapter = inject(MEETING_CONTEXT_ADAPTER); const sessionStorageService = inject(SessionStorageService); const { roomId, secret: querySecret } = extractParams(route); @@ -65,8 +64,8 @@ export const extractRecordingQueryParamsGuard: CanActivateFn = (route: Activated return navigationService.redirectToErrorPage(NavigationErrorReason.MISSING_ROOM_SECRET); } - meetingContextService.setRoomId(roomId); - meetingContextService.setRoomSecret(secret, true); + meetingContextAdapter.setRoomId(roomId); + meetingContextAdapter.setRoomSecret(secret, true); return true; }; 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 index 71033066..8d4f15ca 100644 --- 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 @@ -1,3 +1,4 @@ +export * from './adapters'; export * from './components'; export * from './guards'; export * from './interceptors'; diff --git a/meet-ce/frontend/src/app/app.config.ts b/meet-ce/frontend/src/app/app.config.ts index d922d02d..37b0e99a 100644 --- a/meet-ce/frontend/src/app/app.config.ts +++ b/meet-ce/frontend/src/app/app.config.ts @@ -15,7 +15,9 @@ import { AuthInterceptorErrorHandlerService, CustomParticipantModel, httpInterceptor, + MEETING_CONTEXT_ADAPTER_PROVIDER, MeetingLayoutService, + ROOM_MEMBER_ADAPTER_PROVIDER, RoomMemberInterceptorErrorHandlerService, ThemeService } from '@openvidu-meet/shared-components'; @@ -44,6 +46,8 @@ export const appConfig: ApplicationConfig = { provideAppInitializer(() => inject(RoomMemberInterceptorErrorHandlerService).init()), importProvidersFrom(OpenViduComponentsModule.forRoot(ovComponentsconfig)), { provide: LayoutService, useClass: MeetingLayoutService }, + MEETING_CONTEXT_ADAPTER_PROVIDER, + ROOM_MEMBER_ADAPTER_PROVIDER, provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(ceRoutes), provideAnimationsAsync(),