(returnUrl = '')
| 92 | * @param {string} returnUrl - Optional URL to return to after login |
| 93 | */ |
| 94 | export async function openLoginPage(returnUrl = '') { |
| 95 | const loginUrl = new URL(API_CONFIG.AUTH.loginUrl); |
| 96 | |
| 97 | // Add extension callback parameter |
| 98 | loginUrl.searchParams.set('source', 'extension'); |
| 99 | loginUrl.searchParams.set('extension_id', chrome.runtime.id); |
| 100 | |
| 101 | if (returnUrl) { |
| 102 | loginUrl.searchParams.set('return_url', returnUrl); |
| 103 | } |
| 104 | |
| 105 | // Create or focus login tab |
| 106 | const tabs = await chrome.tabs.query({ url: `${API_CONFIG.AUTH.loginUrl}*` }); |
| 107 | |
| 108 | if (tabs.length > 0) { |
| 109 | // Focus existing login tab |
| 110 | await chrome.tabs.update(tabs[0].id, { active: true }); |
| 111 | await chrome.windows.update(tabs[0].windowId, { focused: true }); |
| 112 | } else { |
| 113 | // Open new login tab |
| 114 | await chrome.tabs.create({ url: loginUrl.toString() }); |
| 115 | } |
| 116 | } |
| 117 | |
| 118 | /** |
| 119 | * Listen for auth messages from the website |
no outgoing calls
no test coverage detected