Rename moderatorRoomUrl and speakerRoomUrl to moderatorUrl and speakerUrl across the codebase

This commit is contained in:
juancarmore 2025-08-22 12:22:59 +02:00
parent f1fc2e0ba4
commit 5b2b26fef9
18 changed files with 89 additions and 91 deletions

View File

@ -6,4 +6,4 @@ description: >
required: false
schema:
type: string
example: 'roomId,moderatorRoomUrl'
example: 'roomId,moderatorUrl'

View File

@ -18,8 +18,8 @@ content:
enabled: false
virtualBackgroundPreferences:
enabled: true
moderatorRoomURL: 'http://localhost:6080/room/room-123?secret=123456'
speakerRoomURL: 'http://localhost:6080/room/room-123?secret=654321'
moderatorUrl: 'http://localhost:6080/room/room-123?secret=123456'
speakerUrl: 'http://localhost:6080/room/room-123?secret=654321'
fields=roomId:
summary: Response with only the roomId
@ -41,8 +41,8 @@ content:
virtualBackgroundPreferences:
enabled: true
fields=moderatorRoomURL,speakerRoomURL:
fields=moderatorUrl,speakerUrl:
summary: Response containing only moderator and speaker URLs
value:
moderatorRoomURL: 'http://localhost:6080/room/room-123?secret=123456'
speakerRoomURL: 'http://localhost:6080/room/room-123?secret=654321'
moderatorUrl: 'http://localhost:6080/room/room-123?secret=123456'
speakerUrl: 'http://localhost:6080/room/room-123?secret=654321'

View File

@ -27,8 +27,8 @@ content:
enabled: false
virtualBackgroundPreferences:
enabled: true
moderatorRoomURL: 'http://localhost:6080/room/room-123?secret=123456'
speakerRoomURL: 'http://localhost:6080/room/room-123?secret=654321'
moderatorUrl: 'http://localhost:6080/room/room-123?secret=123456'
speakerUrl: 'http://localhost:6080/room/room-123?secret=654321'
- roomId: 'room-456'
roomName: 'room'
creationDate: 1620001000000
@ -40,8 +40,8 @@ content:
enabled: true
virtualBackgroundPreferences:
enabled: false
moderatorRoomURL: 'http://localhost:6080/room/room-456?secret=789012'
speakerRoomURL: 'http://localhost:6080/room/room-456?secret=210987'
moderatorUrl: 'http://localhost:6080/room/room-456?secret=789012'
speakerUrl: 'http://localhost:6080/room/room-456?secret=210987'
pagination:
isTruncated: false
maxItems: 10
@ -86,14 +86,14 @@ content:
nextPageToken: 'abc123'
maxItems: 10
fields=moderatorRoomURL,speakerRoomURL:
fields=moderatorUrl,speakerUrl:
summary: Response containing only moderator and speaker URLs
value:
rooms:
- moderatorRoomURL: 'http://localhost:6080/room/room-123?secret=123456'
speakerRoomURL: 'http://localhost:6080/room/room-123?secret=654321'
- moderatorRoomURL: 'http://localhost:6080/room/room-456?secret=789012'
speakerRoomURL: 'http://localhost:6080/room/room-456?secret=210987'
- moderatorUrl: 'http://localhost:6080/room/room-123?secret=123456'
speakerUrl: 'http://localhost:6080/room/room-123?secret=654321'
- moderatorUrl: 'http://localhost:6080/room/room-456?secret=789012'
speakerUrl: 'http://localhost:6080/room/room-456?secret=210987'
pagination:
isTruncated: false
maxItems: 10

View File

@ -39,13 +39,13 @@ properties:
# description: >
# The maximum number of participants allowed in the room. If the number of participants exceeds
# this limit, new participants will not be allowed to join.
moderatorRoomURL:
moderatorUrl:
type: string
example: 'http://localhost:6080/room/room-123?secret=123456'
description: >
The URL for the moderator participants to join the room. The moderator role has special permissions to manage the
room and participants.
speakerRoomURL:
speakerUrl:
type: string
example: 'http://localhost:6080/room/room-123?secret=654321'
description: >

View File

@ -896,9 +896,9 @@
}
},
"node_modules/@aws-sdk/util-locate-window": {
"version": "3.804.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.804.0.tgz",
"integrity": "sha512-zVoRfpmBVPodYlnMjgVjfGoEZagyRF5IPn3Uo6ZvOZp24chnW/FRstH7ESDHDDRga4z3V+ElUQHKpFDXWyBW5A==",
"version": "3.873.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.873.0.tgz",
"integrity": "sha512-xcVhZF6svjM5Rj89T1WzkjQmrTF6dpR2UvIHPMTnSZoNe6CixejPZ6f0JJ2kAhO8H+dUHwNBlsUgOTIKiK/Syg==",
"license": "Apache-2.0",
"dependencies": {
"tslib": "^2.6.2"
@ -6227,9 +6227,9 @@
}
},
"node_modules/browserslist": {
"version": "4.25.2",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.2.tgz",
"integrity": "sha512-0si2SJK3ooGzIawRu61ZdPCO1IncZwS8IzuX73sPZsXW6EQ/w/DAfPyKI8l1ETTCr2MnvqWitmlCUxgdul45jA==",
"version": "4.25.3",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.3.tgz",
"integrity": "sha512-cDGv1kkDI4/0e5yON9yM5G/0A5u8sf5TnmdX5C9qHzI9PPu++sQ9zjm1k9NiOrf3riY4OkK0zSGqfvJyJsgCBQ==",
"dev": true,
"funding": [
{
@ -6247,8 +6247,8 @@
],
"license": "MIT",
"dependencies": {
"caniuse-lite": "^1.0.30001733",
"electron-to-chromium": "^1.5.199",
"caniuse-lite": "^1.0.30001735",
"electron-to-chromium": "^1.5.204",
"node-releases": "^2.0.19",
"update-browserslist-db": "^1.1.3"
},
@ -6434,9 +6434,9 @@
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001735",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001735.tgz",
"integrity": "sha512-EV/laoX7Wq2J9TQlyIXRxTJqIw4sxfXS4OYgudGxBYRuTv0q7AM6yMEpU/Vo1I94thg9U6EZ2NfZx9GJq83u7w==",
"version": "1.0.30001737",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001737.tgz",
"integrity": "sha512-BiloLiXtQNrY5UyF0+1nSJLXUENuhka2pzy2Fx5pGxqavdrxSCW4U6Pn/PoG3Efspi2frRbHpBV2XsrPE6EDlw==",
"dev": true,
"funding": [
{
@ -7517,9 +7517,9 @@
}
},
"node_modules/electron-to-chromium": {
"version": "1.5.203",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.203.tgz",
"integrity": "sha512-uz4i0vLhfm6dLZWbz/iH88KNDV+ivj5+2SA+utpgjKaj9Q0iDLuwk6Idhe9BTxciHudyx6IvTvijhkPvFGUQ0g==",
"version": "1.5.208",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.208.tgz",
"integrity": "sha512-ozZyibehoe7tOhNaf16lKmljVf+3npZcJIEbJRVftVsmAg5TeA1mGS9dVCZzOwr2xT7xK15V0p7+GZqSPgkuPg==",
"dev": true,
"license": "ISC"
},
@ -9652,9 +9652,9 @@
}
},
"node_modules/istanbul-reports": {
"version": "3.1.7",
"resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz",
"integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==",
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz",
"integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@ -12339,13 +12339,12 @@
}
},
"node_modules/openapi-generate-html/node_modules/@apidevtools/json-schema-ref-parser": {
"version": "14.1.1",
"resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-14.1.1.tgz",
"integrity": "sha512-uGF1YGOzzD50L7HLNWclXmsEhQflw8/zZHIz0/AzkJrKL5r9PceUipZxR/cp/8veTk4TVfdDJLyIwXLjaP5ePg==",
"version": "14.2.0",
"resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-14.2.0.tgz",
"integrity": "sha512-NaGMMWwppbByagq+LwQMq6PMXHFWVu6kSwwx+eJfYTJ5zdpOvb9TIk6ZWxEEeXMUvGdVOZq3JalYsjsTZDvtkA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/json-schema": "^7.0.15",
"js-yaml": "^4.1.0"
},
"engines": {
@ -12353,6 +12352,9 @@
},
"funding": {
"url": "https://github.com/sponsors/philsturgeon"
},
"peerDependencies": {
"@types/json-schema": "^7.0.15"
}
},
"node_modules/openapi-generate-html/node_modules/commander": {
@ -14487,9 +14489,9 @@
}
},
"node_modules/uint8array-extras": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.4.1.tgz",
"integrity": "sha512-+NWHrac9dvilNgme+gP4YrBSumsaMZP0fNBtXXFIf33RLLKEcBUKaQZ7ULUbS0sBfcjxIZ4V96OTRkCbM7hxpw==",
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.5.0.tgz",
"integrity": "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==",
"dev": true,
"license": "MIT",
"engines": {
@ -15043,9 +15045,9 @@
}
},
"node_modules/yoctocolors-cjs": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz",
"integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==",
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz",
"integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==",
"dev": true,
"license": "MIT",
"engines": {

View File

@ -27,18 +27,18 @@ export class MeetRoomHelper {
* This method parses the 'secret' query parameter from both speaker and moderator
* room URLs associated with the meeting room.
*
* @param room - The MeetRoom object containing speakerRoomUrl and moderatorRoomUrl properties
* @param room - The MeetRoom object containing speakerUrl and moderatorUrl properties
* @returns An object containing the extracted secrets with the following properties:
* - speakerSecret: The secret extracted from the speaker room URL
* - moderatorSecret: The secret extracted from the moderator room URL
*/
static extractSecretsFromRoom(room: MeetRoom): { speakerSecret: string; moderatorSecret: string } {
const { speakerRoomUrl, moderatorRoomUrl } = room;
const { speakerUrl, moderatorUrl } = room;
const speakerUrl = new URL(speakerRoomUrl);
const speakerSecret = speakerUrl.searchParams.get('secret') || '';
const moderatorUrl = new URL(moderatorRoomUrl);
const moderatorSecret = moderatorUrl.searchParams.get('secret') || '';
const parsedSpeakerUrl = new URL(speakerUrl);
const speakerSecret = parsedSpeakerUrl.searchParams.get('secret') || '';
const parsedModeratorUrl = new URL(moderatorUrl);
const moderatorSecret = parsedModeratorUrl.searchParams.get('secret') || '';
return { speakerSecret, moderatorSecret };
}

View File

@ -81,8 +81,8 @@ export class RoomService {
// maxParticipants,
autoDeletionDate,
preferences,
moderatorRoomUrl: `${baseUrl}/room/${roomId}?secret=${secureUid(10)}`,
speakerRoomUrl: `${baseUrl}/room/${roomId}?secret=${secureUid(10)}`
moderatorUrl: `${baseUrl}/room/${roomId}?secret=${secureUid(10)}`,
speakerUrl: `${baseUrl}/room/${roomId}?secret=${secureUid(10)}`
};
await this.storageService.saveMeetRoom(meetRoom);
@ -197,9 +197,9 @@ export class RoomService {
const filteredRoom = UtilsHelper.filterObjectFields(meetRoom, fields);
// Remove moderatorRoomUrl if the participant is a speaker to prevent access to moderator links
// Remove moderatorUrl if the participant is a speaker to prevent access to moderator links
if (participantRole === ParticipantRole.SPEAKER) {
delete filteredRoom.moderatorRoomUrl;
delete filteredRoom.moderatorUrl;
}
return filteredRoom as MeetRoom;

View File

@ -311,8 +311,8 @@ export class MeetStorageService<
}
const archivedRoom: Partial<MRoom> = {
moderatorRoomUrl: room.moderatorRoomUrl,
speakerRoomUrl: room.speakerRoomUrl,
moderatorUrl: room.moderatorUrl,
speakerUrl: room.speakerUrl,
preferences: {
recordingPreferences: room.preferences?.recordingPreferences
}

View File

@ -138,10 +138,10 @@ export const expectValidRoom = (
});
}
expect(room.moderatorRoomUrl).toBeDefined();
expect(room.speakerRoomUrl).toBeDefined();
expect(room.moderatorRoomUrl).toContain(room.roomId);
expect(room.speakerRoomUrl).toContain(room.roomId);
expect(room.moderatorUrl).toBeDefined();
expect(room.speakerUrl).toBeDefined();
expect(room.moderatorUrl).toContain(room.roomId);
expect(room.speakerUrl).toContain(room.roomId);
if (markedForDeletion !== undefined) {
expect(room.autoDeletionDate).toBeDefined();

View File

@ -181,14 +181,14 @@ describe('Recording API Tests', () => {
let roomMetadata = await meetStorageService.getArchivedRoomMetadata(room.roomId);
expect(roomMetadata).toBeDefined();
expect(roomMetadata!.moderatorRoomUrl).toContain(room.roomId);
expect(roomMetadata!.speakerRoomUrl).toContain(room.roomId);
expect(roomMetadata!.moderatorUrl).toContain(room.roomId);
expect(roomMetadata!.speakerUrl).toContain(room.roomId);
roomMetadata = await meetStorageService.getArchivedRoomMetadata(room.roomId);
expect(roomMetadata).toBeDefined();
expect(roomMetadata!.moderatorRoomUrl).toContain(room.roomId);
expect(roomMetadata!.speakerRoomUrl).toContain(room.roomId);
expect(roomMetadata!.moderatorUrl).toContain(room.roomId);
expect(roomMetadata!.speakerUrl).toContain(room.roomId);
const response = await startRecording(room.roomId, moderatorCookie);
expectValidStartRecordingResponse(response, room.roomId, room.roomName);

View File

@ -73,8 +73,8 @@ describe('Recording API Tests', () => {
// Check that the room metadata exists after starting the first recording
let roomMetadata = await meetStorageService.getArchivedRoomMetadata(room.roomId);
expect(roomMetadata).toBeDefined();
expect(roomMetadata!.moderatorRoomUrl).toContain(room.roomId);
expect(roomMetadata!.speakerRoomUrl).toContain(room.roomId);
expect(roomMetadata!.moderatorUrl).toContain(room.roomId);
expect(roomMetadata!.speakerUrl).toContain(room.roomId);
// Generate a new recording
const response = await startRecording(room.roomId, moderatorCookie);
@ -90,8 +90,8 @@ describe('Recording API Tests', () => {
roomMetadata = await meetStorageService.getArchivedRoomMetadata(room.roomId);
expect(roomMetadata).toBeDefined();
expect(roomMetadata!.moderatorRoomUrl).toContain(room.roomId);
expect(roomMetadata!.speakerRoomUrl).toContain(room.roomId);
expect(roomMetadata!.moderatorUrl).toContain(room.roomId);
expect(roomMetadata!.speakerUrl).toContain(room.roomId);
// Delete the second recording
deleteResponse = await deleteRecording(secondRecordingId!);

View File

@ -71,8 +71,8 @@ describe('Recording API Tests', () => {
const archivedRoom = await storageService.getArchivedRoomMetadata(room.roomId);
expect(archivedRoom).toBeDefined();
expect(archivedRoom?.moderatorRoomUrl).toBeDefined();
expect(archivedRoom?.speakerRoomUrl).toBeDefined();
expect(archivedRoom?.moderatorUrl).toBeDefined();
expect(archivedRoom?.speakerUrl).toBeDefined();
expect(archivedRoom?.preferences).toBeDefined();
const secretsResponse = await stopRecording(recordingId, moderatorCookie);

View File

@ -97,7 +97,7 @@ describe('Room API Tests', () => {
expectSuccessRoomResponse(response, 'deletion-date', validAutoDeletionDate);
});
it('should retrieve a room without moderatorRoomUrl when participant is speaker', async () => {
it('should retrieve a room without moderatorUrl when participant is speaker', async () => {
const roomData = await setupSingleRoom();
const response = await getRoom(
roomData.room.roomId,
@ -106,7 +106,7 @@ describe('Room API Tests', () => {
ParticipantRole.SPEAKER
);
expect(response.status).toBe(200);
expect(response.body.moderatorRoomUrl).toBeUndefined();
expect(response.body.moderatorUrl).toBeUndefined();
});
it('should return 404 for a non-existent room', async () => {

View File

@ -130,8 +130,8 @@ export class RoomWizardComponent implements OnInit {
async createRoom(roomName?: string) {
try {
// Call the room service to create a new room
const { moderatorRoomUrl } = await this.roomService.createRoom({ roomName });
await this.navigationService.redirectTo(moderatorRoomUrl);
const { moderatorUrl } = await this.roomService.createRoom({ roomName });
await this.navigationService.redirectTo(moderatorUrl);
} catch (error) {
const errorMessage = `Failed to create room ${roomName}`;
this.notificationService.showSnackbar(errorMessage);
@ -157,8 +157,8 @@ export class RoomWizardComponent implements OnInit {
this.notificationService.showSnackbar('Room updated successfully');
} else {
// Create new room
const { moderatorRoomUrl } = await this.roomService.createRoom(roomOptions);
await this.navigationService.redirectTo(moderatorRoomUrl);
const { moderatorUrl } = await this.roomService.createRoom(roomOptions);
await this.navigationService.redirectTo(moderatorUrl);
}
} catch (error) {
const errorMessage = `Failed to ${this.editMode ? 'update' : 'create'} room`;

View File

@ -233,7 +233,7 @@ export class RoomsComponent implements OnInit {
}
private openRoom(room: MeetRoom) {
window.open(room.moderatorRoomUrl, '_blank');
window.open(room.moderatorUrl, '_blank');
}
private async editRoomPreferences(room: MeetRoom) {
@ -254,12 +254,12 @@ export class RoomsComponent implements OnInit {
}
private copyModeratorLink(room: MeetRoom) {
this.clipboard.copy(room.moderatorRoomUrl);
this.clipboard.copy(room.moderatorUrl);
this.notificationService.showSnackbar('Moderator link copied to clipboard');
}
private copySpeakerLink(room: MeetRoom) {
this.clipboard.copy(room.speakerRoomUrl);
this.clipboard.copy(room.speakerUrl);
this.notificationService.showSnackbar('Speaker link copied to clipboard');
}

View File

@ -519,11 +519,7 @@ export class MeetingComponent implements OnInit {
if (!this.participantService.isModeratorParticipant()) return;
try {
await this.meetingService.changeParticipantRole(
this.roomId,
participant.identity,
ParticipantRole.SPEAKER
);
await this.meetingService.changeParticipantRole(this.roomId, participant.identity, ParticipantRole.SPEAKER);
} catch (error) {
console.error('Error unmaking participant moderator:', error);
this.notificationService.showSnackbar('Failed to unmake participant moderator');
@ -531,12 +527,12 @@ export class MeetingComponent implements OnInit {
}
async copyModeratorLink() {
this.clipboard.copy(this.room!.moderatorRoomUrl);
this.clipboard.copy(this.room!.moderatorUrl);
this.notificationService.showSnackbar('Moderator link copied to clipboard');
}
async copySpeakerLink() {
this.clipboard.copy(this.room!.speakerRoomUrl);
this.clipboard.copy(this.room!.speakerUrl);
this.notificationService.showSnackbar('Speaker link copied to clipboard');
}

View File

@ -68,7 +68,7 @@
<input
type="hidden"
name="roomUrl"
value="{{ moderatorRoomUrl }}"
value="{{ moderatorUrl }}"
/>
<input
type="hidden"
@ -91,7 +91,7 @@
<input
type="hidden"
name="roomUrl"
value="{{ speakerRoomUrl }}"
value="{{ speakerUrl }}"
/>
<input
type="hidden"
@ -115,7 +115,7 @@
<input
type="hidden"
name="roomUrl"
value="{{ moderatorRoomUrl }}"
value="{{ moderatorUrl }}"
/>
<input
type="hidden"

View File

@ -20,8 +20,8 @@ export interface MeetRoom extends BaseRoomOptions {
roomId: string;
roomName: string;
creationDate: number;
moderatorRoomUrl: string;
speakerRoomUrl: string;
moderatorUrl: string;
speakerUrl: string;
markedForDeletion?: boolean;
}