1// Token Manager for handling JWT token refresh 2console.log('TokenManager script loaded'); 3 4class TokenManager { 5 constructor() { 6 this.checkInterval = null; 7 this.init(); 8 } 9 10 init() { 11 // Check token on page load 12 this.checkTokenExpiration(); 13 14 // Set up periodic checks (every 2 minutes) 15 // This is more efficient than 30 seconds for a 5-minute JWT token 16 this.checkInterval = setInterval(() => { 17 //console.log('TokenManager periodic check'); 18 this.checkTokenExpiration(); 19 }, 2 * 60 * 1000); // 2 minutes in milliseconds 20 } 21 22 async checkTokenExpiration() { 23 //console.log('TokenManager checkTokenExpiration called'); 24 try { 25 //console.log('Making request to /api/auth/refresh'); 26 // Call your refresh API endpoint 27 const response = await fetch('/api/auth/refresh', { 28 method: 'POST', 29 headers: { 30 'Content-Type': 'application/json', 31 }, 32 33 }); 34 35 //console.log('Response status:', response.status); 36 //console.log('Response headers:', Object.fromEntries(response.headers.entries())); 37 38 if (!response.ok) { 39 // Try to get error details 40 const errorText = await response.text(); 41 console.log('Error response body:', errorText); 42 43 // Token refresh failed, redirect to login 44 //console.log('Token refresh failed, redirecting to login'); 45 //window.location.href = '/login'; 46 } else { 47 const responseText = await response.text(); 48 //console.log('Success response body:', responseText); 49 //console.log('Token refresh successful'); 50 } 51 } catch (error) { 52 console.error('Error checking token expiration:', error); 53 console.error('Error details:', { 54 message: error.message, 55 stack: error.stack, 56 name: error.name 57 }); 58 } 59 } 60 61 destroy() { 62 if (this.checkInterval) { 63 clearInterval(this.checkInterval); 64 } 65 } 66} 67 68// Initialize token manager when DOM is loaded 69if (typeof window !== 'undefined') { 70 console.log('Window object available, setting up DOMContentLoaded listener'); 71 document.addEventListener('DOMContentLoaded', () => { 72 console.log('DOMContentLoaded fired, creating TokenManager'); 73 window.tokenManager = new TokenManager(); 74 }); 75} else { 76 console.log('Window object not available'); 77}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.