page-assist/src/libs/get-screenshot.ts
2025-02-08 23:06:09 +05:30

47 lines
1.3 KiB
TypeScript

const captureVisibleTab = () => {
const result = new Promise<string>((resolve) => {
if (import.meta.env.BROWSER === "chrome" || import.meta.env.BROWSER === "edge") {
chrome.tabs.query({ active: true, currentWindow: true }, async (tabs) => {
const tab = tabs[0]
chrome.tabs.captureVisibleTab(null, { format: "png" }, (dataUrl) => {
resolve(dataUrl)
})
})
} else {
browser.tabs
.query({ active: true, currentWindow: true })
.then(async (tabs) => {
const dataUrl = (await Promise.race([
browser.tabs.captureVisibleTab(null, { format: "png" }),
new Promise((_, reject) =>
setTimeout(
() => reject(new Error("Screenshot capture timed out")),
10000
)
)
])) as string
resolve(dataUrl)
})
}
})
return result
}
export const getScreenshotFromCurrentTab = async () => {
try {
const screenshotDataUrl = await captureVisibleTab()
return {
success: true,
screenshot: screenshotDataUrl,
error: null
}
} catch (error) {
return {
success: false,
screenshot: null,
error:
error instanceof Error ? error.message : "Failed to capture screenshot"
}
}
}