Fix overlay fixture data not being received by iframe

- Add await to initializeOverlayController() in player.js to ensure proper initialization order
- Add better logging to overlay-controller.js for debugging postMessage communication
- Add sessionStorage check to getAuthToken() for more robust token retrieval
- Add error handling and logging to fetchFixtureData() and apiRequest() methods

This fixes the issue where the overlay iframe was requesting fixture data but not receiving it from the parent window.
parent fe60dc41
...@@ -105,6 +105,7 @@ class WebOverlayController { ...@@ -105,6 +105,7 @@ class WebOverlayController {
// Set up message listener for iframe communication // Set up message listener for iframe communication
window.addEventListener('message', this.onIframeMessage.bind(this)); window.addEventListener('message', this.onIframeMessage.bind(this));
this.log('Message listener set up for iframe communication');
// Set up resize observer for overlay scaling // Set up resize observer for overlay scaling
this.setupResizeObserver(); this.setupResizeObserver();
...@@ -573,11 +574,14 @@ class WebOverlayController { ...@@ -573,11 +574,14 @@ class WebOverlayController {
*/ */
async fetchFixtureData() { async fetchFixtureData() {
try { try {
console.log('[OverlayController] Fetching fixture data from API...');
const response = await this.apiRequest('/fixtures'); const response = await this.apiRequest('/fixtures');
console.log('[OverlayController] Fixture data API response:', response);
this.fixtureData = response; this.fixtureData = response;
return response; return response;
} catch (error) { } catch (error) {
console.error('[OverlayController] Failed to fetch fixture data:', error); console.error('[OverlayController] Failed to fetch fixture data:', error);
console.error('[OverlayController] Error details:', error.message, error.stack);
return []; return [];
} }
} }
...@@ -649,20 +653,31 @@ class WebOverlayController { ...@@ -649,20 +653,31 @@ class WebOverlayController {
getAuthToken() { getAuthToken() {
// First check if we have a token set directly // First check if we have a token set directly
if (this.authToken) { if (this.authToken) {
this.log('Using directly set auth token');
return this.authToken; return this.authToken;
} }
// Check localStorage (where app.js stores it) // Check localStorage (where app.js stores it)
const storedToken = localStorage.getItem('authToken'); const storedToken = localStorage.getItem('authToken');
if (storedToken) { if (storedToken) {
this.log('Found auth token in localStorage, length:', storedToken.length);
return storedToken; return storedToken;
} }
// Check global authToken variable (from app.js) // Check global authToken variable (from app.js)
if (typeof authToken !== 'undefined' && authToken) { if (typeof authToken !== 'undefined' && authToken) {
this.log('Found auth token in global variable');
return authToken; return authToken;
} }
// Also check for token in sessionStorage
const sessionToken = sessionStorage.getItem('authToken');
if (sessionToken) {
this.log('Found auth token in sessionStorage, length:', sessionToken.length);
return sessionToken;
}
this.log('No auth token found in any location');
return null; return null;
} }
...@@ -684,18 +699,34 @@ class WebOverlayController { ...@@ -684,18 +699,34 @@ class WebOverlayController {
const token = this.getAuthToken(); const token = this.getAuthToken();
if (token) { if (token) {
headers['Authorization'] = `Bearer ${token}`; headers['Authorization'] = `Bearer ${token}`;
console.log('[OverlayController] API request to:', endpoint, 'with auth token');
} else {
console.warn('[OverlayController] API request to:', endpoint, 'WITHOUT auth token - may fail if endpoint requires authentication');
} }
console.log('[OverlayController] Making API request to:', url);
try {
const response = await fetch(url, { const response = await fetch(url, {
...options, ...options,
headers headers
}); });
console.log('[OverlayController] API response status:', response.status, response.statusText);
if (!response.ok) { if (!response.ok) {
const errorText = await response.text();
console.error('[OverlayController] API error response:', errorText);
throw new Error(`API request failed: ${response.status} ${response.statusText}`); throw new Error(`API request failed: ${response.status} ${response.statusText}`);
} }
return await response.json(); const data = await response.json();
console.log('[OverlayController] API response data:', data);
return data;
} catch (error) {
console.error('[OverlayController] API request error:', error);
throw error;
}
} }
/** /**
...@@ -726,11 +757,15 @@ class WebOverlayController { ...@@ -726,11 +757,15 @@ class WebOverlayController {
} }
console.log('[OverlayController] Received iframe message:', message.type, 'from origin:', event.origin); console.log('[OverlayController] Received iframe message:', message.type, 'from origin:', event.origin);
console.log('[OverlayController] Message source is our iframe:', event.source === this.overlayIframe?.contentWindow);
console.log('[OverlayController] Overlay iframe exists:', !!this.overlayIframe);
console.log('[OverlayController] Overlay iframe contentWindow exists:', !!this.overlayIframe?.contentWindow);
// Handle different message types from iframe // Handle different message types from iframe
switch (message.type) { switch (message.type) {
case 'requestInitialData': case 'requestInitialData':
// Send current overlay data to iframe // Send current overlay data to iframe
console.log('[OverlayController] Processing requestInitialData');
this.sendMessageToOverlay('initialData', { this.sendMessageToOverlay('initialData', {
overlayData: this.overlayData, overlayData: this.overlayData,
timerState: this.timerState, timerState: this.timerState,
...@@ -739,8 +774,15 @@ class WebOverlayController { ...@@ -739,8 +774,15 @@ class WebOverlayController {
break; break;
case 'requestFixtureData': case 'requestFixtureData':
console.log('[OverlayController] Processing requestFixtureData');
try {
const fixtureData = await this.fetchFixtureData(); const fixtureData = await this.fetchFixtureData();
console.log('[OverlayController] Fetched fixture data:', fixtureData ? fixtureData.length + ' fixtures' : 'null');
this.sendMessageToOverlay('fixtureData', { fixtures: fixtureData }); this.sendMessageToOverlay('fixtureData', { fixtures: fixtureData });
} catch (error) {
console.error('[OverlayController] Error fetching fixture data:', error);
this.sendMessageToOverlay('fixtureData', { fixtures: [] });
}
break; break;
case 'requestTimerState': case 'requestTimerState':
......
...@@ -442,7 +442,7 @@ document.addEventListener('DOMContentLoaded', async () => { ...@@ -442,7 +442,7 @@ document.addEventListener('DOMContentLoaded', async () => {
loadPlayerData(); loadPlayerData();
loadMatches(); loadMatches();
initializeAndStartStream(); initializeAndStartStream();
initializeOverlayController(); await initializeOverlayController();
} else { } else {
// Redirect to login if no token // Redirect to login if no token
window.location.href = 'index.html'; window.location.href = 'index.html';
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment