fix(idaa): audit and harden IDAA module components and types
- Updated ae_types.ts with missing IDAA-specific fields for Archives and Events (topic_name, archive_on, contact_li_json, etc.) using snake_case. - Refactored bulletin board post filter to safely handle null archive_on dates. - Fixed missing 'data' prop assignment in bulletin board list component to resolve type error. - Corrected core_func.download_export__obj_type method name in recovery meetings export. - Hardened safety checks for contact_li_json in recovery meetings view logic to prevent null property access. - Mapped Jitsi meeting event data to internal snake_case variables and fixed input type assignments. - Updated project documentation (TODO, GEMINI.md, .ae_brief) to reflect IDAA hardening progress.
This commit is contained in:
@@ -33,7 +33,7 @@
|
||||
let domain: null | string = $state(null);
|
||||
|
||||
// Jitsi API & Sound Settings
|
||||
let jitsi_api: any = null;
|
||||
let jitsi_api: any = $state(null);
|
||||
const jitsi_container_id = 'jitsi_meet_external_api_container';
|
||||
let disable_incoming_msg_sound: boolean = $state(true);
|
||||
let disable_participant_joined_sound: boolean = $state(false);
|
||||
@@ -114,10 +114,13 @@
|
||||
|
||||
function add_jitsi_event_listeners(api: any) {
|
||||
// --- Meeting/Participant State Changes ---
|
||||
api.on('videoConferenceJoined', async (data: { id: string; displayName: string; roomName: string }) => {
|
||||
console.log('Jitsi Event: videoConferenceJoined', data);
|
||||
api.on('videoConferenceJoined', async (jitsi_data: { id: string; displayName: string; roomName: string }) => {
|
||||
// Map Jitsi's camelCase to our internal snake_case
|
||||
const { id: participant_id, displayName: participant_name, roomName: jitsi_room_name } = jitsi_data;
|
||||
|
||||
console.log('Jitsi Event: videoConferenceJoined', jitsi_data);
|
||||
meeting_start_time = new Date();
|
||||
if (jitsi_meeting_id === null) jitsi_meeting_id = `${data.roomName}-${Date.now()}`;
|
||||
if (jitsi_meeting_id === null) jitsi_meeting_id = `${jitsi_room_name}-${Date.now()}`;
|
||||
|
||||
// Start duration timer
|
||||
if (duration_timer_id) clearInterval(duration_timer_id);
|
||||
@@ -133,7 +136,7 @@
|
||||
}, 1000);
|
||||
|
||||
// Populate initial participant list
|
||||
meeting_participants.set(data.id, { id: data.id, displayName: data.displayName, role: 'participant' });
|
||||
meeting_participants.set(participant_id, { id: participant_id, displayName: participant_name, role: 'participant' });
|
||||
api.getParticipantsInfo().forEach((p: { participantId: string; displayName: string }) => {
|
||||
if (!meeting_participants.has(p.participantId)) {
|
||||
meeting_participants.set(p.participantId, { id: p.participantId, displayName: p.displayName, role: 'participant' });
|
||||
@@ -371,8 +374,8 @@
|
||||
}
|
||||
|
||||
// Set initial value for the profile editor inputs
|
||||
name_input = display_name;
|
||||
email_input = email;
|
||||
name_input = display_name ?? '';
|
||||
email_input = email ?? '';
|
||||
|
||||
// --- All data fetched, now initialize Jitsi ---
|
||||
await init_jitsi();
|
||||
|
||||
Reference in New Issue
Block a user