()
| 5 | * Capture current browser session data |
| 6 | */ |
| 7 | export async function captureSessionData() { |
| 8 | const sessionData = { |
| 9 | cookies: [], |
| 10 | localStorage: {}, |
| 11 | sessionStorage: {}, |
| 12 | url: '' |
| 13 | }; |
| 14 | |
| 15 | try { |
| 16 | // Get current tab |
| 17 | const [tab] = await chrome.tabs.query({active: true, currentWindow: true}); |
| 18 | if (!tab) return sessionData; |
| 19 | |
| 20 | sessionData.url = tab.url; |
| 21 | |
| 22 | // Get cookies for the current domain |
| 23 | const url = new URL(tab.url); |
| 24 | const cookies = await chrome.cookies.getAll({ domain: url.hostname }); |
| 25 | sessionData.cookies = cookies.map(cookie => ({ |
| 26 | name: cookie.name, |
| 27 | value: cookie.value, |
| 28 | domain: cookie.domain, |
| 29 | path: cookie.path, |
| 30 | secure: cookie.secure, |
| 31 | httpOnly: cookie.httpOnly, |
| 32 | sameSite: cookie.sameSite |
| 33 | })); |
| 34 | |
| 35 | // Get localStorage and sessionStorage via content script injection |
| 36 | const storageData = await chrome.tabs.sendMessage(tab.id, { |
| 37 | type: 'GET_STORAGE_DATA' |
| 38 | }).catch(() => null); |
| 39 | |
| 40 | if (storageData) { |
| 41 | sessionData.localStorage = storageData.localStorage || {}; |
| 42 | sessionData.sessionStorage = storageData.sessionStorage || {}; |
| 43 | } |
| 44 | |
| 45 | } catch (error) { |
| 46 | console.error('Failed to capture session data:', error); |
| 47 | } |
| 48 | |
| 49 | return sessionData; |
| 50 | } |
| 51 | |
| 52 | /** |
| 53 | * Capture comprehensive auth data from all domains visited during recording |
no outgoing calls
no test coverage detected