import { HttpClient, HttpHeaders } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { MeetRoom, MeetRoomOptions } from 'projects/shared-meet-components/src/lib/typings/ce/room'; import { GlobalPreferences, ParticipantRole, MeetRoomPreferences, SecurityPreferencesDTO, TokenOptions, User } from '@lib/typings/ce'; import { RecordingInfo } from 'openvidu-components-angular'; import { lastValueFrom } from 'rxjs'; @Injectable({ providedIn: 'root' }) export class HttpService { // private baseHref: string; protected API_PATH_PREFIX = 'meet/api'; protected INTERNAL_API_PATH_PREFIX = 'meet/internal-api'; protected API_V1_VERSION = 'v1'; constructor(protected http: HttpClient) {} createRoom(options: MeetRoomOptions): Promise { return this.postRequest(`${this.API_PATH_PREFIX}/${this.API_V1_VERSION}/rooms`, options); } deleteRoom(roomId: string): Promise { return this.deleteRequest(`${this.API_PATH_PREFIX}/${this.API_V1_VERSION}/rooms/${roomId}`); } listRooms(fields?: string): Promise { let path = `${this.API_PATH_PREFIX}/${this.API_V1_VERSION}/rooms/`; if (fields) { path += `?fields=${encodeURIComponent(fields)}`; } return this.getRequest(path); } getRoom(roomId: string): Promise { let path = `${this.API_PATH_PREFIX}/${this.API_V1_VERSION}/rooms/${roomId}`; return this.getRequest(path); } getParticipantRole(roomId: string, secret: string): Promise { return this.getRequest( `${this.INTERNAL_API_PATH_PREFIX}/${this.API_V1_VERSION}/rooms/${roomId}/participant-role?secret=${secret}` ); } generateParticipantToken(tokenOptions: TokenOptions): Promise<{ token: string }> { return this.postRequest( `${this.INTERNAL_API_PATH_PREFIX}/${this.API_V1_VERSION}/participants/token`, tokenOptions ); } refreshParticipantToken(tokenOptions: TokenOptions): Promise<{ token: string }> { return this.postRequest( `${this.INTERNAL_API_PATH_PREFIX}/${this.API_V1_VERSION}/participants/token/refresh`, tokenOptions ); } /** * Retrieves security preferences. * * @returns {Promise} A promise that resolves to the global preferences. */ getSecurityPreferences(): Promise { return this.getRequest(`${this.INTERNAL_API_PATH_PREFIX}/${this.API_V1_VERSION}/preferences/security`); } /** * TODO: Delete this method * Retrieves the room preferences. * * @returns {Promise} A promise that resolves to the room preferences. */ getRoomPreferences(): Promise { return this.getRequest(`${this.API_PATH_PREFIX}/${this.API_V1_VERSION}/preferences/room`); } /** * Saves the room preferences. * * @param preferences - The room preferences to be saved. * @returns A promise that resolves when the preferences have been successfully saved. */ updateRoomPreferences(roomId: string, preferences: MeetRoomPreferences): Promise { return this.putRequest(`${this.INTERNAL_API_PATH_PREFIX}/room/${roomId}`, preferences); } login(body: { username: string; password: string }): Promise<{ message: string }> { return this.postRequest(`${this.INTERNAL_API_PATH_PREFIX}/${this.API_V1_VERSION}/auth/login`, body); } logout(): Promise<{ message: string }> { return this.postRequest(`${this.INTERNAL_API_PATH_PREFIX}/${this.API_V1_VERSION}/auth/logout`); } refreshToken(): Promise<{ message: string }> { return this.postRequest(`${this.INTERNAL_API_PATH_PREFIX}/${this.API_V1_VERSION}/auth/refresh`); } getProfile(): Promise { return this.getRequest(`${this.INTERNAL_API_PATH_PREFIX}/${this.API_V1_VERSION}/auth/profile`); } getRecordings(continuationToken?: string): Promise<{ recordings: RecordingInfo[]; continuationToken: string }> { let path = `${this.API_PATH_PREFIX}/${this.API_V1_VERSION}/recordings`; if (continuationToken) { path += `?continuationToken=${continuationToken}`; } return this.getRequest(path); } startRecording(roomId: string): Promise { return this.postRequest(`${this.INTERNAL_API_PATH_PREFIX}/${this.API_V1_VERSION}/recordings`, { roomId }); } stopRecording(recordingId: string): Promise { return this.postRequest(`${this.INTERNAL_API_PATH_PREFIX}/${this.API_V1_VERSION}/recordings/${recordingId}/stop`); } deleteRecording(recordingId: string): Promise { return this.deleteRequest(`${this.API_PATH_PREFIX}/${this.API_V1_VERSION}/recordings/${recordingId}`); } protected getRequest(path: string): Promise { return lastValueFrom(this.http.get(path)); } protected postRequest(path: string, body: any = {}): Promise { return lastValueFrom(this.http.post(path, body)); } protected putRequest(path: string, body: any = {}): Promise { return lastValueFrom(this.http.put(path, body)); } protected deleteRequest(path: string): Promise { return lastValueFrom(this.http.delete(path)); } }