Saving a mostly working Jitsi update

This commit is contained in:
Scott Idem
2025-12-12 16:03:30 -05:00
parent 2a5b46883f
commit fcc2811dc7
3 changed files with 56 additions and 50 deletions

10
src/app.d.ts vendored
View File

@@ -14,12 +14,4 @@ declare global {
namespace App {
interface Platform {}
}
interface ImportMetaEnv {
VITE_NOVI_API_KEY: string;
VITE_NOVI_MOD_GROUP_GUID: string;
VITE_JITSI_TOKEN_ENDPOINT: string;
}
interface ImportMeta {
readonly env: ImportMetaEnv;
}
}
}

View File

@@ -1,5 +1,6 @@
<script lang="ts">
import { onMount, onDestroy } from 'svelte';
import { ae_loc } from '$lib/stores/ae_stores';
interface Props {
data: any;
@@ -16,7 +17,7 @@
room_name: string,
user_id: string
) {
const token_endpoint = import.meta.env.VITE_JITSI_TOKEN_ENDPOINT;
const token_endpoint = $ae_loc.site_cfg_json?.jitsi_token_endpoint;
const payload = {
name: display_name,
@@ -88,7 +89,7 @@
}
// --- Fetch dynamic data from Novi API ---
const novi_api_key = import.meta.env.VITE_NOVI_API_KEY;
const novi_api_key = $ae_loc.site_cfg_json?.novi_idaa_api_key;
const novi_api_headers = new Headers();
novi_api_headers.append('Authorization', `Basic ${novi_api_key}`);
const requestOptions = {
@@ -99,48 +100,59 @@
try {
// Fetch the list of moderators from the Novi group
const mod_group_guid = import.meta.env.VITE_NOVI_MOD_GROUP_GUID;
const mod_list_url = `https://www.idaa.org/api/groups/${mod_group_guid}/members?pageSize=200`;
console.log(`Fetching moderator list from Novi API: ${mod_list_url}`);
const mods_response = await fetch(mod_list_url, requestOptions);
const novi_idaa_group_guid_li = $ae_loc.site_cfg_json?.novi_idaa_group_guid_li ?? [];
let allModeratorsRaw: any[] = [];
if (mods_response.ok) {
const moderatorsRaw = await mods_response.json();
console.log('Fetched moderators raw:', moderatorsRaw);
if (novi_idaa_group_guid_li.length === 0) {
console.warn('Jitsi: novi_idaa_group_guid_li is empty. No moderator groups to check.');
}
// Normalise the payload: support both Array and { Results: Array } shapes
let modList: any[] = [];
if (Array.isArray(moderatorsRaw)) {
modList = moderatorsRaw;
} else if (Array.isArray(moderatorsRaw.Results)) {
modList = moderatorsRaw.Results;
} else if (Array.isArray(moderatorsRaw.Members)) {
modList = moderatorsRaw.Members;
for (const group_guid of novi_idaa_group_guid_li) {
const mod_list_url = `https://www.idaa.org/api/groups/${group_guid}/members?pageSize=200`;
console.log(`Jitsi: Fetching moderator list from Novi API for group: ${group_guid}`);
const mods_response = await fetch(mod_list_url, requestOptions);
if (mods_response.ok) {
const groupModeratorsRaw = await mods_response.json();
// Normalise the payload and combine
let groupModList: any[] = [];
if (Array.isArray(groupModeratorsRaw)) {
groupModList = groupModeratorsRaw;
} else if (Array.isArray(groupModeratorsRaw.Results)) {
groupModList = groupModeratorsRaw.Results;
} else if (Array.isArray(groupModeratorsRaw.Members)) {
groupModList = groupModeratorsRaw.Members;
} else {
console.warn(`Jitsi: Moderator list format is unexpected for group ${group_guid}. Falling back to empty list for this group.`, groupModeratorsRaw);
}
allModeratorsRaw = allModeratorsRaw.concat(groupModList);
console.log(`Jitsi: Fetched ${groupModList.length} moderators from group ${group_guid}. Total: ${allModeratorsRaw.length}`);
} else {
console.warn('Moderator list format is unexpected. Falling back to empty list.', moderatorsRaw);
modList = [];
console.warn(`Jitsi: Could not fetch moderator list from Novi API for group: ${group_guid}. Status: ${mods_response.status}`);
}
}
// Build a set of normalized IDs from a few possible fields
const modIdSet = new Set(
modList
.map((m: any) => (m?.UniqueID ?? m?.UniqueId ?? m?.DuesPayerUniqueID ?? m?.id ?? ''))
.filter(Boolean)
.map((id: string) => id.toLowerCase().trim())
);
if (allModeratorsRaw.length === 0) {
console.warn('Jitsi: No moderators fetched across all specified Novi groups. Falling back to empty list.');
}
console.log('Jitsi: Fetched all moderators raw (combined):', allModeratorsRaw);
const normalizedUserId = String(user_id ?? '').toLowerCase().trim();
// Build a set of normalized IDs from a few possible fields using allModeratorsRaw
const modIdSet = new Set(
allModeratorsRaw
.map((m: any) => (m?.UniqueID ?? m?.UniqueId ?? m?.DuesPayerUniqueID ?? m?.id ?? ''))
.filter(Boolean)
.map((id: string) => id.toLowerCase().trim())
);
console.log(`Moderator IDs (${modIdSet.size}) sample:`, Array.from(modIdSet).slice(0, 10));
if (normalizedUserId && modIdSet.has(normalizedUserId)) {
is_moderator = true;
console.log(`User ${user_id} is a moderator (matched by UniqueID).`);
} else {
// Also check by matching name/email if needed (optional)
console.log(`User ${user_id} is not a moderator.`);
}
const normalizedUserId = String(user_id ?? '').toLowerCase().trim();
console.log(`Jitsi: Moderator IDs (${modIdSet.size}) sample:`, Array.from(modIdSet).slice(0, 10));
if (normalizedUserId && modIdSet.has(normalizedUserId)) {
is_moderator = true;
console.log(`Jitsi: User ${user_id} is a moderator (matched by UniqueID).`);
} else {
console.warn('Could not fetch moderator list from Novi API.');
console.log(`Jitsi: User ${user_id} is not a moderator.`);
}
} catch (error) {
console.error('Jitsi: Error fetching data from Novi API:', error);