From ecd58f69fdc667615dd0cf4488073a94a0ba4df1 Mon Sep 17 00:00:00 2001 From: Junyi Hou Date: Tue, 9 Dec 2025 13:52:32 +0800 Subject: [PATCH 01/14] settings page --- webapp/_webapp/package.json | 3 +- webapp/_webapp/public/popup.html | 234 +++++++++++++------------ webapp/_webapp/public/settings.html | 214 ++++++++++++++++++++++ webapp/_webapp/src/background.ts | 10 +- webapp/_webapp/src/intermediate.ts | 1 + webapp/_webapp/src/manifest.json | 5 +- webapp/_webapp/src/popup.ts | 40 +++++ webapp/_webapp/src/settings.ts | 177 +++++++++++++++++++ webapp/_webapp/src/shared/constants.ts | 1 + webapp/_webapp/vite.config.ts | 1 + 10 files changed, 572 insertions(+), 114 deletions(-) create mode 100644 webapp/_webapp/public/settings.html create mode 100644 webapp/_webapp/src/popup.ts create mode 100644 webapp/_webapp/src/settings.ts diff --git a/webapp/_webapp/package.json b/webapp/_webapp/package.json index 36700900..5333ddc3 100644 --- a/webapp/_webapp/package.json +++ b/webapp/_webapp/package.json @@ -6,11 +6,12 @@ "scripts": { "dev": "nodemon --watch src --ext ts,js,tsx,jsx,json --exec 'npm run build'", "dev:chat": "vite dev --config vite.config.dev.ts", - "build": "tsc -b && npm run _build:default && npm run _build:background && npm run _build:intermediate", + "build": "tsc -b && npm run _build:default && npm run _build:background && npm run _build:intermediate && npm run _build:settings", "_build": "vite build", "_build:default": "VITE_CONFIG=default npm run _build", "_build:background": "VITE_CONFIG=background npm run _build", "_build:intermediate": "VITE_CONFIG=intermediate npm run _build", + "_build:settings": "VITE_CONFIG=settings npm run _build", "lint": "eslint .", "format": "prettier --write .", "build:local:chrome": "bash -c 'source ./scripts/build-local-chrome.sh'", diff --git a/webapp/_webapp/public/popup.html b/webapp/_webapp/public/popup.html index 68a152fe..365cfd59 100644 --- a/webapp/_webapp/public/popup.html +++ b/webapp/_webapp/public/popup.html @@ -1,114 +1,130 @@ - - - - PaperDebugger - - - + + + + + PaperDebugger + + +
PaperDebugger
-
How to use
-
-
- 1.In - overleaf.com, open any of - your projects. -
-
2.PaperDebugger is in the top left of the project page.
+
How to use
+
+
+ 1.In + overleaf.com, open any of + your projects.
- - - +
2.PaperDebugger is in the top left of the project page.
+
+ + + + + + + + \ No newline at end of file diff --git a/webapp/_webapp/public/settings.html b/webapp/_webapp/public/settings.html new file mode 100644 index 00000000..3d9a1656 --- /dev/null +++ b/webapp/_webapp/public/settings.html @@ -0,0 +1,214 @@ + + + + + + PaperDebugger Settings + + + +
+

PaperDebugger Settings

+

Manage extension permissions and settings

+ +
+
Host Permissions
+
+ Request permissions to access specific websites. These permissions allow the extension to interact with the specified domains. +
+ +
+ + +
+ + +
+ +
+
+
+ + + + + diff --git a/webapp/_webapp/src/background.ts b/webapp/_webapp/src/background.ts index cda95898..24221013 100644 --- a/webapp/_webapp/src/background.ts +++ b/webapp/_webapp/src/background.ts @@ -78,12 +78,20 @@ export const fetchImageHandler: Handler = { }, }; +export const requestHostPermissionHandler: Handler = { + name: HANDLER_NAMES.REQUEST_HOST_PERMISSION, + handler: async (origin, sendResponse) => { + const granted = await chrome.permissions.request({ origins: [origin] }); + sendResponse(granted); + }, +}; + // @ts-expect-error: browser may not be defined in all environments const browserAPI = typeof browser !== "undefined" ? browser : chrome; browserAPI.runtime?.onMessage?.addListener( (request: { action: string; args: unknown }, _: unknown, sendResponse: (response: unknown) => void) => { - const handlers = [getCookiesHandler, getUrlHandler, getOrCreateSessionIdHandler, fetchImageHandler]; + const handlers = [getCookiesHandler, getUrlHandler, getOrCreateSessionIdHandler, fetchImageHandler, requestHostPermissionHandler]; const handler = handlers.find((h) => h.name === request.action) as HandlerAny; if (!handler) { diff --git a/webapp/_webapp/src/intermediate.ts b/webapp/_webapp/src/intermediate.ts index 5c3c5afd..70d2b617 100644 --- a/webapp/_webapp/src/intermediate.ts +++ b/webapp/_webapp/src/intermediate.ts @@ -104,3 +104,4 @@ export { getCookies }; export const getUrl = makeFunction(HANDLER_NAMES.GET_URL); export const getOrCreateSessionId = makeFunction(HANDLER_NAMES.GET_OR_CREATE_SESSION_ID); export const fetchImage = makeFunction(HANDLER_NAMES.FETCH_IMAGE); +export const requestHostPermission = makeFunction(HANDLER_NAMES.REQUEST_HOST_PERMISSION); diff --git a/webapp/_webapp/src/manifest.json b/webapp/_webapp/src/manifest.json index 7ca2c9d1..f97b51f0 100644 --- a/webapp/_webapp/src/manifest.json +++ b/webapp/_webapp/src/manifest.json @@ -11,10 +11,9 @@ "48": "images/logo-1024.png" }, "host_permissions": ["*://*.overleaf.com/"], + "optional_host_permissions": ["*://*/*"], "permissions": ["cookies", "storage"], - "action": { - "default_popup": "popup.html" - }, + "options_page": "settings.html", "background": { "service_worker": "background.js" }, diff --git a/webapp/_webapp/src/popup.ts b/webapp/_webapp/src/popup.ts new file mode 100644 index 00000000..87bcf022 --- /dev/null +++ b/webapp/_webapp/src/popup.ts @@ -0,0 +1,40 @@ +/* + * popup.ts + * + * Script for the extension popup page. + * Handles the request host permission button click. + */ + +// Disable context menu (right-click) to comply with CSP +document.addEventListener('contextmenu', (e) => { + e.preventDefault(); + return false; +}); + +document.getElementById('myButton')?.addEventListener('click', async () => { + const origin = "https://www.google.com/"; + + try { + // 直接调用 background script,类似于 intermediate.ts 中的实现 + const response = await chrome.runtime.sendMessage({ + action: "requestHostPermission", + args: origin, + }); + + if (response?.error) { + console.error("Error requesting permissions:", response.error); + alert(`Permission request failed: ${response.error}`); + } else if (response === true) { + console.log(`Permission granted for ${origin}`); + alert(`Permission granted for ${origin}`); + } else { + console.log(`Permission denied for ${origin}`); + alert(`Permission denied for ${origin}`); + } + } catch (error) { + console.error("Error requesting permissions:", error); + const errorMessage = error instanceof Error ? error.message : String(error); + alert(`Error: ${errorMessage}`); + } +}); + diff --git a/webapp/_webapp/src/settings.ts b/webapp/_webapp/src/settings.ts new file mode 100644 index 00000000..d2efc020 --- /dev/null +++ b/webapp/_webapp/src/settings.ts @@ -0,0 +1,177 @@ +/* + * settings.ts + * + * Script for the extension settings page. + * Handles requesting host permissions and displaying permission status. + */ + +interface PermissionItem { + origin: string; + granted: boolean; +} + +// Get DOM elements +const permissionUrlInput = document.getElementById('permissionUrl') as HTMLInputElement; +const requestPermissionBtn = document.getElementById('requestPermissionBtn') as HTMLButtonElement; +const messageDiv = document.getElementById('message') as HTMLDivElement; +const permissionsListDiv = document.getElementById('permissionsList') as HTMLDivElement; + +// Show message to user +function showMessage(text: string, type: 'success' | 'error' | 'info' = 'info') { + messageDiv.textContent = text; + messageDiv.className = `message ${type}`; + messageDiv.style.display = 'block'; + + // Auto-hide after 5 seconds + setTimeout(() => { + messageDiv.style.display = 'none'; + }, 5000); +} + +// Clear message +function clearMessage() { + messageDiv.style.display = 'none'; + messageDiv.textContent = ''; + messageDiv.className = ''; +} + +// Validate URL format +// Returns { valid: true, origin: string } if valid, or { valid: false, error: string } if invalid +function validateUrl(url: string): { valid: true; origin: string } | { valid: false; error: string } { + if (!url.trim()) { + return { valid: false, error: 'Please enter a URL' }; + } + + try { + const urlObj = new URL(url); + // Ensure it's http or https + if (!['http:', 'https:'].includes(urlObj.protocol)) { + return { valid: false, error: 'URL must start with http:// or https://' }; + } + // Return the origin + return { valid: true, origin: urlObj.origin + '/' }; + } catch (e) { + return { valid: false, error: 'Invalid URL format. Please enter a valid URL (e.g., https://www.example.com/)' }; + } +} + +// Check if permission is granted +async function checkPermission(origin: string): Promise { + try { + return await chrome.permissions.contains({ origins: [origin] }); + } catch (error) { + console.error('Error checking permission:', error); + return false; + } +} + +// Request host permission +async function requestPermission(origin: string): Promise { + try { + const response = await chrome.runtime.sendMessage({ + action: "requestHostPermission", + args: origin, + }); + + if (response?.error) { + throw new Error(response.error); + } + + return response === true; + } catch (error) { + console.error('Error requesting permission:', error); + throw error; + } +} + +// Render permissions list +async function renderPermissionsList() { + // Get all permissions from chrome.permissions.getAll() + try { + const permissions = await chrome.permissions.getAll(); + const origins = permissions.origins || []; + + if (origins.length === 0) { + permissionsListDiv.innerHTML = '

No permissions granted yet.

'; + return; + } + + const items: PermissionItem[] = origins.map(origin => ({ + origin, + granted: true, // If it's in the list, it's granted + })); + + permissionsListDiv.innerHTML = items + .map( + (item) => ` +
+
+
Host Permission
+
${item.origin}
+
+
Granted
+
+ `, + ) + .join(''); + } catch (error) { + console.error('Error rendering permissions list:', error); + permissionsListDiv.innerHTML = '

Error loading permissions.

'; + } +} + +// Handle request permission button click +requestPermissionBtn.addEventListener('click', async () => { + clearMessage(); + requestPermissionBtn.disabled = true; + + const url = permissionUrlInput.value.trim(); + const validation = validateUrl(url); + + if (!validation.valid) { + showMessage(validation.error, 'error'); + requestPermissionBtn.disabled = false; + return; + } + + const origin = validation.origin; + + try { + // Check if already granted + const alreadyGranted = await checkPermission(origin); + if (alreadyGranted) { + showMessage(`Permission for ${origin} is already granted.`, 'info'); + requestPermissionBtn.disabled = false; + await renderPermissionsList(); + return; + } + + // Request permission + const granted = await requestPermission(origin); + + if (granted) { + showMessage(`Permission granted for ${origin}`, 'success'); + await renderPermissionsList(); + } else { + showMessage(`Permission denied for ${origin}`, 'error'); + } + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + showMessage(`Error: ${errorMessage}`, 'error'); + } finally { + requestPermissionBtn.disabled = false; + } +}); + +// Allow Enter key to submit +permissionUrlInput.addEventListener('keypress', (e) => { + if (e.key === 'Enter' && !requestPermissionBtn.disabled) { + requestPermissionBtn.click(); + } +}); + +// Load permissions list on page load +document.addEventListener('DOMContentLoaded', () => { + renderPermissionsList(); +}); + diff --git a/webapp/_webapp/src/shared/constants.ts b/webapp/_webapp/src/shared/constants.ts index 279cda07..37e8ed9c 100644 --- a/webapp/_webapp/src/shared/constants.ts +++ b/webapp/_webapp/src/shared/constants.ts @@ -3,4 +3,5 @@ export const HANDLER_NAMES = { GET_URL: "getUrl", GET_OR_CREATE_SESSION_ID: "getOrCreateSessionId", FETCH_IMAGE: "fetchImage", + REQUEST_HOST_PERMISSION: "requestHostPermission", } as const; diff --git a/webapp/_webapp/vite.config.ts b/webapp/_webapp/vite.config.ts index c398aea8..aa28f1cb 100644 --- a/webapp/_webapp/vite.config.ts +++ b/webapp/_webapp/vite.config.ts @@ -67,6 +67,7 @@ const configs: Record = { }), background: generateConfig("./src/background.ts", "background"), intermediate: generateConfig("./src/intermediate.ts", "intermediate"), + settings: generateConfig("./src/settings.ts", "settings"), }; const viteConfig = process.env.VITE_CONFIG || "default"; From 113447b9d3525af3c3c2f2ea0d723d1165c7f61e Mon Sep 17 00:00:00 2001 From: Junyi Hou Date: Tue, 9 Dec 2025 17:17:35 +0800 Subject: [PATCH 02/14] chore: dynamic content script --- webapp/_webapp/public/settings.html | 205 +----------------- webapp/_webapp/src/background.ts | 3 + webapp/_webapp/src/libs/permissions.ts | 24 ++ webapp/_webapp/src/main.tsx | 2 + webapp/_webapp/src/manifest.json | 16 +- webapp/_webapp/src/settings.ts | 177 --------------- .../components/ExtensionSettings.tsx | 15 ++ .../HostPermissionForm.tsx | 66 ++++++ .../HostPermissionItem.tsx | 20 ++ .../HostPermissionList.tsx | 31 +++ .../HostPermissionWidget.tsx | 39 ++++ .../hostPermissionTypes.ts | 12 + .../useHostPermissionManager.ts | 166 ++++++++++++++ .../src/views/extension-settings/settings.tsx | 28 +++ webapp/_webapp/vite.config.ts | 2 +- 15 files changed, 411 insertions(+), 395 deletions(-) create mode 100644 webapp/_webapp/src/libs/permissions.ts delete mode 100644 webapp/_webapp/src/settings.ts create mode 100644 webapp/_webapp/src/views/extension-settings/components/ExtensionSettings.tsx create mode 100644 webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionForm.tsx create mode 100644 webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionItem.tsx create mode 100644 webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionList.tsx create mode 100644 webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionWidget.tsx create mode 100644 webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/hostPermissionTypes.ts create mode 100644 webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/useHostPermissionManager.ts create mode 100644 webapp/_webapp/src/views/extension-settings/settings.tsx diff --git a/webapp/_webapp/public/settings.html b/webapp/_webapp/public/settings.html index 3d9a1656..17247dca 100644 --- a/webapp/_webapp/public/settings.html +++ b/webapp/_webapp/public/settings.html @@ -4,211 +4,10 @@ PaperDebugger Settings - -
-

PaperDebugger Settings

-

Manage extension permissions and settings

- -
-
Host Permissions
-
- Request permissions to access specific websites. These permissions allow the extension to interact with the specified domains. -
- -
- - -
- - -
- -
-
-
- - +
+ diff --git a/webapp/_webapp/src/background.ts b/webapp/_webapp/src/background.ts index 24221013..556e76ec 100644 --- a/webapp/_webapp/src/background.ts +++ b/webapp/_webapp/src/background.ts @@ -17,6 +17,7 @@ import { getAllCookies } from "./libs/browser"; import { HANDLER_NAMES } from "./shared/constants"; import { blobToBase64 } from "./libs/helpers"; +import { registerContentScripts } from "./libs/permissions"; export type Handler = { name: string; @@ -108,3 +109,5 @@ browserAPI.runtime?.onMessage?.addListener( return true; }, ); + +registerContentScripts(); diff --git a/webapp/_webapp/src/libs/permissions.ts b/webapp/_webapp/src/libs/permissions.ts new file mode 100644 index 00000000..5ff858ff --- /dev/null +++ b/webapp/_webapp/src/libs/permissions.ts @@ -0,0 +1,24 @@ +// can not running in content_script. registerContentScripts can only be called in service_worker. +export async function registerContentScripts() { + const origins = (await chrome.permissions.getAll()).origins || []; + const scriptIds = (await chrome.scripting.getRegisteredContentScripts()).map(script => script.id); + + console.log("[PaperDebugger] Unregistering dynamic content scripts", scriptIds); + await chrome.scripting.unregisterContentScripts({ ids: scriptIds }); + + await chrome.scripting.registerContentScripts([{ + id: "content-script-main", + js: ["paperdebugger.js"], + persistAcrossSessions: true, + matches: origins, + world: "MAIN", + }, { + id: "content-script-intermediate", + js: ["intermediate.js"], + persistAcrossSessions: true, + matches: origins, + runAt: "document_start" + }]) + + console.log("[PaperDebugger] Registration complete", origins); +} diff --git a/webapp/_webapp/src/main.tsx b/webapp/_webapp/src/main.tsx index f8678532..f699ded1 100644 --- a/webapp/_webapp/src/main.tsx +++ b/webapp/_webapp/src/main.tsx @@ -156,6 +156,8 @@ export const Main = () => { ); }; +console.log("[PaperDebugger] PaperDebugger injected, find toolbar-left or ide-redesign-toolbar-menu-bar to add button"); + if (!import.meta.env.DEV) { onElementAppeared(".toolbar-left .toolbar-item, .ide-redesign-toolbar-menu-bar", () => { logInfo("initializing"); diff --git a/webapp/_webapp/src/manifest.json b/webapp/_webapp/src/manifest.json index f97b51f0..6e45a792 100644 --- a/webapp/_webapp/src/manifest.json +++ b/webapp/_webapp/src/manifest.json @@ -12,27 +12,15 @@ }, "host_permissions": ["*://*.overleaf.com/"], "optional_host_permissions": ["*://*/*"], - "permissions": ["cookies", "storage"], + "permissions": ["cookies", "storage", "scripting", "activeTab"], "options_page": "settings.html", "background": { "service_worker": "background.js" }, - "content_scripts": [ - { - "js": ["paperdebugger.js"], - "matches": ["https://*.overleaf.com/project/*"], - "world": "MAIN" - }, - { - "js": ["intermediate.js"], - "matches": ["https://*.overleaf.com/project/*"], - "run_at": "document_start" - } - ], "web_accessible_resources": [ { "resources": ["images/*"], - "matches": ["https://*.overleaf.com/*"] + "matches": ["*://*/*"] } ], "key": "[AUTO-GENERATED]" diff --git a/webapp/_webapp/src/settings.ts b/webapp/_webapp/src/settings.ts deleted file mode 100644 index d2efc020..00000000 --- a/webapp/_webapp/src/settings.ts +++ /dev/null @@ -1,177 +0,0 @@ -/* - * settings.ts - * - * Script for the extension settings page. - * Handles requesting host permissions and displaying permission status. - */ - -interface PermissionItem { - origin: string; - granted: boolean; -} - -// Get DOM elements -const permissionUrlInput = document.getElementById('permissionUrl') as HTMLInputElement; -const requestPermissionBtn = document.getElementById('requestPermissionBtn') as HTMLButtonElement; -const messageDiv = document.getElementById('message') as HTMLDivElement; -const permissionsListDiv = document.getElementById('permissionsList') as HTMLDivElement; - -// Show message to user -function showMessage(text: string, type: 'success' | 'error' | 'info' = 'info') { - messageDiv.textContent = text; - messageDiv.className = `message ${type}`; - messageDiv.style.display = 'block'; - - // Auto-hide after 5 seconds - setTimeout(() => { - messageDiv.style.display = 'none'; - }, 5000); -} - -// Clear message -function clearMessage() { - messageDiv.style.display = 'none'; - messageDiv.textContent = ''; - messageDiv.className = ''; -} - -// Validate URL format -// Returns { valid: true, origin: string } if valid, or { valid: false, error: string } if invalid -function validateUrl(url: string): { valid: true; origin: string } | { valid: false; error: string } { - if (!url.trim()) { - return { valid: false, error: 'Please enter a URL' }; - } - - try { - const urlObj = new URL(url); - // Ensure it's http or https - if (!['http:', 'https:'].includes(urlObj.protocol)) { - return { valid: false, error: 'URL must start with http:// or https://' }; - } - // Return the origin - return { valid: true, origin: urlObj.origin + '/' }; - } catch (e) { - return { valid: false, error: 'Invalid URL format. Please enter a valid URL (e.g., https://www.example.com/)' }; - } -} - -// Check if permission is granted -async function checkPermission(origin: string): Promise { - try { - return await chrome.permissions.contains({ origins: [origin] }); - } catch (error) { - console.error('Error checking permission:', error); - return false; - } -} - -// Request host permission -async function requestPermission(origin: string): Promise { - try { - const response = await chrome.runtime.sendMessage({ - action: "requestHostPermission", - args: origin, - }); - - if (response?.error) { - throw new Error(response.error); - } - - return response === true; - } catch (error) { - console.error('Error requesting permission:', error); - throw error; - } -} - -// Render permissions list -async function renderPermissionsList() { - // Get all permissions from chrome.permissions.getAll() - try { - const permissions = await chrome.permissions.getAll(); - const origins = permissions.origins || []; - - if (origins.length === 0) { - permissionsListDiv.innerHTML = '

No permissions granted yet.

'; - return; - } - - const items: PermissionItem[] = origins.map(origin => ({ - origin, - granted: true, // If it's in the list, it's granted - })); - - permissionsListDiv.innerHTML = items - .map( - (item) => ` -
-
-
Host Permission
-
${item.origin}
-
-
Granted
-
- `, - ) - .join(''); - } catch (error) { - console.error('Error rendering permissions list:', error); - permissionsListDiv.innerHTML = '

Error loading permissions.

'; - } -} - -// Handle request permission button click -requestPermissionBtn.addEventListener('click', async () => { - clearMessage(); - requestPermissionBtn.disabled = true; - - const url = permissionUrlInput.value.trim(); - const validation = validateUrl(url); - - if (!validation.valid) { - showMessage(validation.error, 'error'); - requestPermissionBtn.disabled = false; - return; - } - - const origin = validation.origin; - - try { - // Check if already granted - const alreadyGranted = await checkPermission(origin); - if (alreadyGranted) { - showMessage(`Permission for ${origin} is already granted.`, 'info'); - requestPermissionBtn.disabled = false; - await renderPermissionsList(); - return; - } - - // Request permission - const granted = await requestPermission(origin); - - if (granted) { - showMessage(`Permission granted for ${origin}`, 'success'); - await renderPermissionsList(); - } else { - showMessage(`Permission denied for ${origin}`, 'error'); - } - } catch (error) { - const errorMessage = error instanceof Error ? error.message : String(error); - showMessage(`Error: ${errorMessage}`, 'error'); - } finally { - requestPermissionBtn.disabled = false; - } -}); - -// Allow Enter key to submit -permissionUrlInput.addEventListener('keypress', (e) => { - if (e.key === 'Enter' && !requestPermissionBtn.disabled) { - requestPermissionBtn.click(); - } -}); - -// Load permissions list on page load -document.addEventListener('DOMContentLoaded', () => { - renderPermissionsList(); -}); - diff --git a/webapp/_webapp/src/views/extension-settings/components/ExtensionSettings.tsx b/webapp/_webapp/src/views/extension-settings/components/ExtensionSettings.tsx new file mode 100644 index 00000000..521a2b80 --- /dev/null +++ b/webapp/_webapp/src/views/extension-settings/components/ExtensionSettings.tsx @@ -0,0 +1,15 @@ +import { HostPermissionWidget } from "./HostPermissionWidget/HostPermissionWidget"; + +export const ExtensionSettings = () => { + return ( +
+
+

PaperDebugger Settings

+

Manage extension permissions and settings (saved locally)

+ + +
+
+ ); +}; + diff --git a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionForm.tsx b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionForm.tsx new file mode 100644 index 00000000..ecf76b9d --- /dev/null +++ b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionForm.tsx @@ -0,0 +1,66 @@ +import { Button, Input } from "@heroui/react"; +import React, { useCallback } from "react"; +import { PermissionMessage } from "./hostPermissionTypes"; + +interface HostPermissionFormProps { + value: string; + onChange: (value: string) => void; + onSubmit: () => void; + isSubmitting: boolean; + message: PermissionMessage | null; + messageClassName: (type: PermissionMessage["type"]) => string; +} + +export const HostPermissionForm = ({ + value, + onChange, + onSubmit, + isSubmitting, + message, + messageClassName, +}: HostPermissionFormProps) => { + const handleKeyPress = useCallback( + (e: React.KeyboardEvent) => { + if (e.key === "Enter" && !isSubmitting) { + onSubmit(); + } + }, + [isSubmitting, onSubmit], + ); + + return ( + <> +
+ onChange(e.target.value)} + onKeyPress={handleKeyPress} + classNames={{ + input: "font-mono", + }} + /> +

Example: supported patterns: *://*.overleaf.com/*

+

Example: supported patterns: *://cn.overleaf.com/*

+

Example: supported patterns: *://sharelatex.gwdg.de/*

+
+ +
+ +
+ + {message && ( +
+ {message.text} +
+ )} + + ); +}; + diff --git a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionItem.tsx b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionItem.tsx new file mode 100644 index 00000000..4ed65f08 --- /dev/null +++ b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionItem.tsx @@ -0,0 +1,20 @@ +import { PermissionItem } from "./hostPermissionTypes"; + +interface HostPermissionItemProps { + item: PermissionItem; +} + +export const HostPermissionItem = ({ item }: HostPermissionItemProps) => { + return ( +
+
+
Host Permission
+
{item.origin}
+
+
+ Granted +
+
+ ); +}; + diff --git a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionList.tsx b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionList.tsx new file mode 100644 index 00000000..3e0d78d5 --- /dev/null +++ b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionList.tsx @@ -0,0 +1,31 @@ +import { HostPermissionItem } from "./HostPermissionItem"; +import { PermissionItem } from "./hostPermissionTypes"; + +interface HostPermissionListProps { + permissions: PermissionItem[]; + isLoading: boolean; +} + +export const HostPermissionList = ({ permissions, isLoading }: HostPermissionListProps) => { + if (isLoading) { + return

Loading permissions...

; + } + + if (permissions.length === 0) { + return ( +
+

No permissions granted yet.

+

Please request permission for the website you want to use.

+
+ ); + } + + return ( +
+ {permissions.map((item) => ( + + ))} +
+ ); +}; + diff --git a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionWidget.tsx b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionWidget.tsx new file mode 100644 index 00000000..809644b5 --- /dev/null +++ b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionWidget.tsx @@ -0,0 +1,39 @@ +import { HostPermissionForm } from "./HostPermissionForm"; +import { HostPermissionList } from "./HostPermissionList"; +import { useHostPermissionManager } from "./useHostPermissionManager"; + +export const HostPermissionWidget = () => { + const { + permissionUrl, + setPermissionUrl, + permissions, + isSubmitting, + message, + isLoadingPermissions, + submitPermissionRequest, + getMessageClassName, + } = useHostPermissionManager(); + console.log("HostPermissionBody", permissions); + + return ( +
+
Host Permissions
+

+ Request permissions to access specific websites. These permissions allow the extension to interact with the specified domains. +

+ + +
+ +
+
+ ); +}; + diff --git a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/hostPermissionTypes.ts b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/hostPermissionTypes.ts new file mode 100644 index 00000000..dfbeebee --- /dev/null +++ b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/hostPermissionTypes.ts @@ -0,0 +1,12 @@ +export type MessageType = 'success' | 'error' | 'info'; + +export interface PermissionMessage { + text: string; + type: MessageType; +} + +export interface PermissionItem { + origin: string; + granted: boolean; +} + diff --git a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/useHostPermissionManager.ts b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/useHostPermissionManager.ts new file mode 100644 index 00000000..6da0f318 --- /dev/null +++ b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/useHostPermissionManager.ts @@ -0,0 +1,166 @@ +import { useCallback, useEffect, useState } from "react"; +import { MessageType, PermissionItem, PermissionMessage } from "./hostPermissionTypes"; +import { requestHostPermission } from "../../../../intermediate"; +import { registerContentScripts } from "../../../../background"; + +const DEFAULT_PERMISSION_URL = "*://*.overleaf.com/*"; + +const normalizeWildcardPattern = (url: string) => { + const trimmed = url.trim(); + if (!trimmed) { + return { valid: false as const, error: "Please enter a URL" }; + } + + // Allow Chrome host permission wildcard protocol "*://" + const starSchemeWildcardMatch = trimmed.match(/^\*:\/\/\*\.([^/\s]+)(?:\/\*)?\/?$/i); + if (starSchemeWildcardMatch) { + const host = starSchemeWildcardMatch[1]; + return { valid: true as const, origin: `*://*.${host}/*` }; + } + + const starSchemeHostMatch = trimmed.match(/^\*:\/\/([^/\s]+)(?:\/\*)?\/?$/i); + if (starSchemeHostMatch) { + const host = starSchemeHostMatch[1]; + return { valid: true as const, origin: `*://${host}/*` }; + } + + const wildcardMatch = trimmed.match(/^(https?):\/\/\*\.([^/\s]+)(?:\/\*)?\/?$/i); + if (wildcardMatch) { + const protocol = wildcardMatch[1].toLowerCase(); + const host = wildcardMatch[2]; + return { valid: true as const, origin: `${protocol}://*.${host}/*` }; + } + + try { + const urlObj = new URL(trimmed); + if (!["http:", "https:"].includes(urlObj.protocol)) { + return { valid: false as const, error: "URL must start with http://, https://, or *://" }; + } + return { valid: true as const, origin: `${urlObj.origin}/*` }; + } catch (e) { + return { + valid: false as const, + error: + "Invalid URL. Use a full URL (e.g., https://www.example.com/) or a wildcard host (e.g., https://*.example.com/* or *://*.example.com/*)", + }; + } +}; + +export const useHostPermissionManager = () => { + const [permissionUrl, setPermissionUrl] = useState(DEFAULT_PERMISSION_URL); + const [permissions, setPermissions] = useState([]); + const [isSubmitting, setIsSubmitting] = useState(false); + const [message, setMessage] = useState(null); + const [isLoadingPermissions, setIsLoadingPermissions] = useState(true); + + const checkPermission = useCallback(async (origin: string): Promise => { + try { + return await chrome.permissions.contains({ origins: [origin] }); + } catch (error) { + console.error("Error checking permission:", error); + return false; + } + }, []); + + const loadPermissions = useCallback(async () => { + setIsLoadingPermissions(true); + try { + const chromePermissions = await chrome.permissions.getAll(); + const origins = chromePermissions.origins || []; + + if (origins.length === 0) { + setPermissions([]); + return; + } + + const items: PermissionItem[] = origins.map((origin) => ({ + origin, + granted: true, + })); + console.log("items", items); + setPermissions(items); + } catch (error) { + console.error("Error loading permissions:", error); + setMessage({ text: "Error loading permissions.", type: "error" }); + } finally { + setIsLoadingPermissions(false); + } + }, []); + + const submitPermissionRequest = useCallback(async () => { + setMessage(null); + setIsSubmitting(true); + + const validation = normalizeWildcardPattern(permissionUrl); + + if (!validation.valid) { + setMessage({ text: validation.error, type: "error" }); + setIsSubmitting(false); + return; + } + + const origin = validation.origin; + + try { + const alreadyGranted = await checkPermission(origin); + if (alreadyGranted) { + setMessage({ text: `Permission for ${origin} is already granted.`, type: "info" }); + await loadPermissions(); + return; + } + + const granted = await requestHostPermission(origin); + + if (granted) { + setMessage({ text: `Permission granted for ${origin}`, type: "success" }); + await loadPermissions(); + await registerContentScripts(); + } else { + setMessage({ text: `Permission denied for ${origin}`, type: "error" }); + } + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + setMessage({ text: `Error: ${errorMessage}`, type: "error" }); + } finally { + setIsSubmitting(false); + } + }, [permissionUrl, checkPermission, requestHostPermission, loadPermissions]); + + const getMessageClassName = useCallback((type: MessageType): string => { + switch (type) { + case "success": + return "bg-green-100 text-green-800 border border-green-300"; + case "error": + return "bg-red-100 text-red-800 border border-red-300"; + case "info": + return "bg-blue-100 text-blue-800 border border-blue-300"; + default: + return ""; + } + }, []); + + useEffect(() => { + if (message) { + const timer = setTimeout(() => { + setMessage(null); + }, 5000); + return () => clearTimeout(timer); + } + }, [message]); + + useEffect(() => { + loadPermissions(); + }, [loadPermissions]); + + return { + permissionUrl, + setPermissionUrl, + permissions, + isSubmitting, + message, + isLoadingPermissions, + submitPermissionRequest, + getMessageClassName, + }; +}; + diff --git a/webapp/_webapp/src/views/extension-settings/settings.tsx b/webapp/_webapp/src/views/extension-settings/settings.tsx new file mode 100644 index 00000000..7d876a91 --- /dev/null +++ b/webapp/_webapp/src/views/extension-settings/settings.tsx @@ -0,0 +1,28 @@ +import { StrictMode } from "react"; +import { createRoot } from "react-dom/client"; +import { Providers } from "../../providers"; +import { ExtensionSettings } from "./components/ExtensionSettings"; +import "../../index.css"; + +const rootElement = document.getElementById("root"); +if (!rootElement) { + throw new Error("Root element not found"); +} + +const root = createRoot(rootElement); +root.render( + import.meta.env.DEV ? ( + + + + + + ) : ( + + + + ), +); + + + diff --git a/webapp/_webapp/vite.config.ts b/webapp/_webapp/vite.config.ts index aa28f1cb..852fda66 100644 --- a/webapp/_webapp/vite.config.ts +++ b/webapp/_webapp/vite.config.ts @@ -67,7 +67,7 @@ const configs: Record = { }), background: generateConfig("./src/background.ts", "background"), intermediate: generateConfig("./src/intermediate.ts", "intermediate"), - settings: generateConfig("./src/settings.ts", "settings"), + settings: generateConfig("./src/views/extension-settings/settings.tsx", "settings"), }; const viteConfig = process.env.VITE_CONFIG || "default"; From ac3f2146197585c7b929681dbd6c752ec0b3a62b Mon Sep 17 00:00:00 2001 From: Junyi Hou Date: Tue, 9 Dec 2025 18:12:24 +0800 Subject: [PATCH 03/14] chore: popup window --- webapp/_webapp/package.json | 3 +- webapp/_webapp/public/images/locator.png | Bin 0 -> 240276 bytes webapp/_webapp/public/popup.html | 128 +----------------- webapp/_webapp/src/manifest.json | 28 +++- .../_webapp/src/views/extension-popup/app.css | 83 ++++++++++++ .../_webapp/src/views/extension-popup/app.tsx | 25 ++++ .../components/ExtensionPopup.tsx | 75 ++++++++++ .../extension-popup/components/StepItem.tsx | 14 ++ .../extension-popup/components/Steps.tsx | 22 +++ .../{settings.tsx => app.tsx} | 0 .../components/ExtensionSettings.tsx | 4 +- .../HostPermissionForm.tsx | 5 +- .../HostPermissionWidget.tsx | 2 +- .../useHostPermissionManager.ts | 12 +- webapp/_webapp/vite.config.ts | 3 +- 15 files changed, 264 insertions(+), 140 deletions(-) create mode 100644 webapp/_webapp/public/images/locator.png create mode 100644 webapp/_webapp/src/views/extension-popup/app.css create mode 100644 webapp/_webapp/src/views/extension-popup/app.tsx create mode 100644 webapp/_webapp/src/views/extension-popup/components/ExtensionPopup.tsx create mode 100644 webapp/_webapp/src/views/extension-popup/components/StepItem.tsx create mode 100644 webapp/_webapp/src/views/extension-popup/components/Steps.tsx rename webapp/_webapp/src/views/extension-settings/{settings.tsx => app.tsx} (100%) diff --git a/webapp/_webapp/package.json b/webapp/_webapp/package.json index 5333ddc3..5630d99b 100644 --- a/webapp/_webapp/package.json +++ b/webapp/_webapp/package.json @@ -6,12 +6,13 @@ "scripts": { "dev": "nodemon --watch src --ext ts,js,tsx,jsx,json --exec 'npm run build'", "dev:chat": "vite dev --config vite.config.dev.ts", - "build": "tsc -b && npm run _build:default && npm run _build:background && npm run _build:intermediate && npm run _build:settings", + "build": "tsc -b && npm run _build:default && npm run _build:background && npm run _build:intermediate && npm run _build:settings && npm run _build:popup", "_build": "vite build", "_build:default": "VITE_CONFIG=default npm run _build", "_build:background": "VITE_CONFIG=background npm run _build", "_build:intermediate": "VITE_CONFIG=intermediate npm run _build", "_build:settings": "VITE_CONFIG=settings npm run _build", + "_build:popup": "VITE_CONFIG=popup npm run _build", "lint": "eslint .", "format": "prettier --write .", "build:local:chrome": "bash -c 'source ./scripts/build-local-chrome.sh'", diff --git a/webapp/_webapp/public/images/locator.png b/webapp/_webapp/public/images/locator.png new file mode 100644 index 0000000000000000000000000000000000000000..3fabbdcda0c8b62cf69c1b87edbe88c7de509964 GIT binary patch literal 240276 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 literal 0 HcmV?d00001 diff --git a/webapp/_webapp/public/popup.html b/webapp/_webapp/public/popup.html index 365cfd59..a5554f33 100644 --- a/webapp/_webapp/public/popup.html +++ b/webapp/_webapp/public/popup.html @@ -1,130 +1,12 @@ - - PaperDebugger - - + PaperDebugger Popup - -
    PaperDebugger
    -
    How to use
    -
    -
    - 1.In - overleaf.com, open any of - your projects. -
    -
    2.PaperDebugger is in the top left of the project page.
    -
    - - - - - - + +
    + - \ No newline at end of file + diff --git a/webapp/_webapp/src/manifest.json b/webapp/_webapp/src/manifest.json index 6e45a792..161ac46c 100644 --- a/webapp/_webapp/src/manifest.json +++ b/webapp/_webapp/src/manifest.json @@ -10,18 +10,34 @@ "128": "images/logo-1024.png", "48": "images/logo-1024.png" }, - "host_permissions": ["*://*.overleaf.com/"], - "optional_host_permissions": ["*://*/*"], - "permissions": ["cookies", "storage", "scripting", "activeTab"], + "host_permissions": [ + "*://*.overleaf.com/" + ], + "optional_host_permissions": [ + "*://*/*" + ], + "permissions": [ + "cookies", + "storage", + "scripting", + "activeTab" + ], "options_page": "settings.html", + "action": { + "default_popup": "popup.html" + }, "background": { "service_worker": "background.js" }, "web_accessible_resources": [ { - "resources": ["images/*"], - "matches": ["*://*/*"] + "resources": [ + "images/*" + ], + "matches": [ + "*://*/*" + ] } ], "key": "[AUTO-GENERATED]" -} +} \ No newline at end of file diff --git a/webapp/_webapp/src/views/extension-popup/app.css b/webapp/_webapp/src/views/extension-popup/app.css new file mode 100644 index 00000000..3b6ec029 --- /dev/null +++ b/webapp/_webapp/src/views/extension-popup/app.css @@ -0,0 +1,83 @@ +.popup-shell { + font-family: "Inter", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", + sans-serif; + color: #212529; + background-color: #ffffff; + padding: 14px 12px; + max-width: 700px; + line-height: 1.2; +} + +.title { + margin: 0 0 6px; + font-size: 24px; + font-weight: 800; +} + +.subtitle { + margin: 0 0 18px; + font-size: 14px; + font-weight: 700; + color: #1f2933; +} + +.steps { + display: flex; + flex-direction: column; + gap: 14px; +} + +.step { + display: flex; + align-items: flex-start; + gap: 12px; + padding-left: 14px; + border-left: 4px solid #e5e7eb; +} + +.step-number { + color: #1f7aec; + font-weight: 800; + font-size: 14px; + min-width: 14px; +} + +.step-text { + margin: 0; + font-size: 14px; + color: #1f2933; +} + +.step-link { + color: #1f7aec; + text-decoration: none; +} + +.step-link:hover { + text-decoration: underline; +} + +.cta-button { + margin: 16px 0; + width: 100%; + padding: 12px 14px; + border: none; + border-radius: 10px; + background-color: #1f7aec; + color: #ffffff; + font-size: 16px; + font-weight: 700; + cursor: pointer; + transition: background-color 0.15s ease, transform 0.1s ease; +} + +.cta-button:hover { + background-color: #1664c2; + transform: translateY(-1px); +} + +.footnote { + font-size: 12px; + color: #6c757d; + margin-top: 12px; +} \ No newline at end of file diff --git a/webapp/_webapp/src/views/extension-popup/app.tsx b/webapp/_webapp/src/views/extension-popup/app.tsx new file mode 100644 index 00000000..1894454d --- /dev/null +++ b/webapp/_webapp/src/views/extension-popup/app.tsx @@ -0,0 +1,25 @@ +import { StrictMode } from "react"; +import { createRoot } from "react-dom/client"; +import { Providers } from "../../providers"; +import { ExtensionPopup } from "./components/ExtensionPopup"; +import "./app.css"; + +const rootElement = document.getElementById("root"); +if (!rootElement) { + throw new Error("Root element not found"); +} + +const root = createRoot(rootElement); +root.render( + import.meta.env.DEV ? ( + + + + + + ) : ( + + + + ), +); \ No newline at end of file diff --git a/webapp/_webapp/src/views/extension-popup/components/ExtensionPopup.tsx b/webapp/_webapp/src/views/extension-popup/components/ExtensionPopup.tsx new file mode 100644 index 00000000..5dc86b79 --- /dev/null +++ b/webapp/_webapp/src/views/extension-popup/components/ExtensionPopup.tsx @@ -0,0 +1,75 @@ +import { Steps, Step } from "./Steps"; + +const steps: Step[] = [ + { + number: 1, + content: ( + <> + In{" "} + + overleaf.com + + , open any of your projects. + + ), + }, + { + number: 2, + content: <>PaperDebugger is in the "top left" of the project page., + }, +]; + +export const ExtensionPopup = () => { + const openSettingsPage = () => { + const runtime = typeof chrome !== "undefined" ? chrome.runtime : undefined; + const url = runtime?.getURL?.("settings.html") ?? "/settings.html"; + + if (runtime?.openOptionsPage) { + runtime.openOptionsPage(); + return; + } + + window.open(url, "_blank", "noopener,noreferrer"); + }; + + const settingsUrl = + (typeof chrome !== "undefined" ? chrome.runtime?.getURL?.("settings.html") : undefined) ?? + "/settings.html"; + + return ( +
    +

    PaperDebugger

    +

    How to use

    + + + PaperDebugger Location + +

    + Self-hosted Overleaf?{" "} + { + e.preventDefault(); + openSettingsPage(); + }} + > + Allow PaperDebugger access here. + +

    +
    + ); +}; diff --git a/webapp/_webapp/src/views/extension-popup/components/StepItem.tsx b/webapp/_webapp/src/views/extension-popup/components/StepItem.tsx new file mode 100644 index 00000000..c7b3c1ff --- /dev/null +++ b/webapp/_webapp/src/views/extension-popup/components/StepItem.tsx @@ -0,0 +1,14 @@ +import { ReactNode } from "react"; + +type StepItemProps = { + number: number; + children: ReactNode; +}; + +export const StepItem = ({ number, children }: StepItemProps) => ( +
    + {number}. +

    {children}

    +
    +); + diff --git a/webapp/_webapp/src/views/extension-popup/components/Steps.tsx b/webapp/_webapp/src/views/extension-popup/components/Steps.tsx new file mode 100644 index 00000000..81f2e67e --- /dev/null +++ b/webapp/_webapp/src/views/extension-popup/components/Steps.tsx @@ -0,0 +1,22 @@ +import { ReactNode } from "react"; +import { StepItem } from "./StepItem"; + +export type Step = { + number: number; + content: ReactNode; +}; + +type StepsProps = { + steps: Step[]; +}; + +export const Steps = ({ steps }: StepsProps) => ( +
    + {steps.map((step) => ( + + {step.content} + + ))} +
    +); + diff --git a/webapp/_webapp/src/views/extension-settings/settings.tsx b/webapp/_webapp/src/views/extension-settings/app.tsx similarity index 100% rename from webapp/_webapp/src/views/extension-settings/settings.tsx rename to webapp/_webapp/src/views/extension-settings/app.tsx diff --git a/webapp/_webapp/src/views/extension-settings/components/ExtensionSettings.tsx b/webapp/_webapp/src/views/extension-settings/components/ExtensionSettings.tsx index 521a2b80..daf520d8 100644 --- a/webapp/_webapp/src/views/extension-settings/components/ExtensionSettings.tsx +++ b/webapp/_webapp/src/views/extension-settings/components/ExtensionSettings.tsx @@ -5,7 +5,9 @@ export const ExtensionSettings = () => {

    PaperDebugger Settings

    -

    Manage extension permissions and settings (saved locally)

    +

    + +

    diff --git a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionForm.tsx b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionForm.tsx index ecf76b9d..ef77b674 100644 --- a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionForm.tsx +++ b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionForm.tsx @@ -44,9 +44,8 @@ export const HostPermissionForm = ({ input: "font-mono", }} /> -

    Example: supported patterns: *://*.overleaf.com/*

    -

    Example: supported patterns: *://cn.overleaf.com/*

    -

    Example: supported patterns: *://sharelatex.gwdg.de/*

    +

    Example: *://*.overleaf.com/*

    +

    Example: *://sharelatex.gwdg.de/*

    diff --git a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionWidget.tsx b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionWidget.tsx index 809644b5..838e0142 100644 --- a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionWidget.tsx +++ b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionWidget.tsx @@ -19,7 +19,7 @@ export const HostPermissionWidget = () => {
    Host Permissions

    - Request permissions to access specific websites. These permissions allow the extension to interact with the specified domains. + Add your self-hosted Overleaf domain so PaperDebugger can interact with them.

    { const trimmed = url.trim(); @@ -47,7 +45,7 @@ const normalizeWildcardPattern = (url: string) => { }; export const useHostPermissionManager = () => { - const [permissionUrl, setPermissionUrl] = useState(DEFAULT_PERMISSION_URL); + const [permissionUrl, setPermissionUrl] = useState(""); const [permissions, setPermissions] = useState([]); const [isSubmitting, setIsSubmitting] = useState(false); const [message, setMessage] = useState(null); @@ -88,6 +86,12 @@ export const useHostPermissionManager = () => { }, []); const submitPermissionRequest = useCallback(async () => { + if (!permissionUrl) { + setMessage({ text: "Please enter a URL", type: "error" }); + setIsSubmitting(false); + return; + } + setMessage(null); setIsSubmitting(true); diff --git a/webapp/_webapp/vite.config.ts b/webapp/_webapp/vite.config.ts index 852fda66..eb0b189f 100644 --- a/webapp/_webapp/vite.config.ts +++ b/webapp/_webapp/vite.config.ts @@ -67,7 +67,8 @@ const configs: Record = { }), background: generateConfig("./src/background.ts", "background"), intermediate: generateConfig("./src/intermediate.ts", "intermediate"), - settings: generateConfig("./src/views/extension-settings/settings.tsx", "settings"), + settings: generateConfig("./src/views/extension-settings/app.tsx", "settings"), + popup: generateConfig("./src/views/extension-popup/app.tsx", "popup"), }; const viteConfig = process.env.VITE_CONFIG || "default"; From a096225fa53c34b45f24e440797ee059bdc9aad3 Mon Sep 17 00:00:00 2001 From: Junyi Hou Date: Tue, 9 Dec 2025 18:14:36 +0800 Subject: [PATCH 04/14] chore: optimized popup text --- webapp/_webapp/src/views/extension-popup/app.css | 15 +++++++++++++++ .../extension-popup/components/ExtensionPopup.tsx | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/webapp/_webapp/src/views/extension-popup/app.css b/webapp/_webapp/src/views/extension-popup/app.css index 3b6ec029..6ac3ef6a 100644 --- a/webapp/_webapp/src/views/extension-popup/app.css +++ b/webapp/_webapp/src/views/extension-popup/app.css @@ -80,4 +80,19 @@ font-size: 12px; color: #6c757d; margin-top: 12px; +} + +.noselect { + -webkit-touch-callout: none; + /* iOS Safari */ + -webkit-user-select: none; + /* Safari */ + -khtml-user-select: none; + /* Konqueror HTML */ + -moz-user-select: none; + /* Firefox */ + -ms-user-select: none; + /* Internet Explorer/Edge */ + user-select: none; + /* Non-prefixed version, currently supported by Chrome and Opera */ } \ No newline at end of file diff --git a/webapp/_webapp/src/views/extension-popup/components/ExtensionPopup.tsx b/webapp/_webapp/src/views/extension-popup/components/ExtensionPopup.tsx index 5dc86b79..297e5d38 100644 --- a/webapp/_webapp/src/views/extension-popup/components/ExtensionPopup.tsx +++ b/webapp/_webapp/src/views/extension-popup/components/ExtensionPopup.tsx @@ -42,7 +42,7 @@ export const ExtensionPopup = () => { "/settings.html"; return ( -
    +

    PaperDebugger

    How to use

    From 12eacbe9d2d0f1d340f9045bc3e164431d035b03 Mon Sep 17 00:00:00 2001 From: Junyi Date: Tue, 9 Dec 2025 18:53:48 +0800 Subject: [PATCH 05/14] Update webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/useHostPermissionManager.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../components/HostPermissionWidget/useHostPermissionManager.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/useHostPermissionManager.ts b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/useHostPermissionManager.ts index e2722298..315e01e4 100644 --- a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/useHostPermissionManager.ts +++ b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/useHostPermissionManager.ts @@ -75,7 +75,6 @@ export const useHostPermissionManager = () => { origin, granted: true, })); - console.log("items", items); setPermissions(items); } catch (error) { console.error("Error loading permissions:", error); From 7004c7483d640dd9c73f9ecca5ec43ee5da574b5 Mon Sep 17 00:00:00 2001 From: Junyi Date: Tue, 9 Dec 2025 19:25:18 +0800 Subject: [PATCH 06/14] Update webapp/_webapp/src/popup.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- webapp/_webapp/src/popup.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp/_webapp/src/popup.ts b/webapp/_webapp/src/popup.ts index 87bcf022..9abe9de9 100644 --- a/webapp/_webapp/src/popup.ts +++ b/webapp/_webapp/src/popup.ts @@ -15,7 +15,7 @@ document.getElementById('myButton')?.addEventListener('click', async () => { const origin = "https://www.google.com/"; try { - // 直接调用 background script,类似于 intermediate.ts 中的实现 + // Directly call the background script, similar to the implementation in intermediate.ts const response = await chrome.runtime.sendMessage({ action: "requestHostPermission", args: origin, From a50b52375a2c3dd8e2ee59d35f582480c6626f67 Mon Sep 17 00:00:00 2001 From: Junyi Date: Tue, 9 Dec 2025 19:26:31 +0800 Subject: [PATCH 07/14] Update webapp/_webapp/src/views/extension-settings/app.tsx Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- webapp/_webapp/src/views/extension-settings/app.tsx | 3 --- 1 file changed, 3 deletions(-) diff --git a/webapp/_webapp/src/views/extension-settings/app.tsx b/webapp/_webapp/src/views/extension-settings/app.tsx index 7d876a91..9deeb968 100644 --- a/webapp/_webapp/src/views/extension-settings/app.tsx +++ b/webapp/_webapp/src/views/extension-settings/app.tsx @@ -23,6 +23,3 @@ root.render( ), ); - - - From a37d0e1df8ed9df53c03cddbbc93a5411ee941e6 Mon Sep 17 00:00:00 2001 From: Junyi Date: Tue, 9 Dec 2025 19:29:34 +0800 Subject: [PATCH 08/14] Update webapp/_webapp/src/manifest.json Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- webapp/_webapp/src/manifest.json | 1 + 1 file changed, 1 insertion(+) diff --git a/webapp/_webapp/src/manifest.json b/webapp/_webapp/src/manifest.json index 161ac46c..0b102ace 100644 --- a/webapp/_webapp/src/manifest.json +++ b/webapp/_webapp/src/manifest.json @@ -16,6 +16,7 @@ "optional_host_permissions": [ "*://*/*" ], + "permissions_explanation": "The optional_host_permissions pattern '*://*/*' allows the extension to request access to any website. This is necessary to support self-hosted Overleaf instances and similar use cases. Users will be prompted to grant access only when needed. Please review the extension documentation for details on security and privacy implications.", "permissions": [ "cookies", "storage", From 6cccbc9a4345f51a75cdadcf5f655d56b3e9d09e Mon Sep 17 00:00:00 2001 From: Junyi Date: Tue, 9 Dec 2025 19:35:30 +0800 Subject: [PATCH 09/14] Update webapp/_webapp/src/views/extension-settings/components/ExtensionSettings.tsx Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../views/extension-settings/components/ExtensionSettings.tsx | 4 ---- 1 file changed, 4 deletions(-) diff --git a/webapp/_webapp/src/views/extension-settings/components/ExtensionSettings.tsx b/webapp/_webapp/src/views/extension-settings/components/ExtensionSettings.tsx index daf520d8..cf133c4a 100644 --- a/webapp/_webapp/src/views/extension-settings/components/ExtensionSettings.tsx +++ b/webapp/_webapp/src/views/extension-settings/components/ExtensionSettings.tsx @@ -5,10 +5,6 @@ export const ExtensionSettings = () => {

    PaperDebugger Settings

    -

    - -

    -
    From c11f392a69ba4d9eb71c8e535cfa51904b215ad1 Mon Sep 17 00:00:00 2001 From: Junyi Date: Tue, 9 Dec 2025 19:35:59 +0800 Subject: [PATCH 10/14] Update webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionWidget.tsx Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../components/HostPermissionWidget/HostPermissionWidget.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionWidget.tsx b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionWidget.tsx index 838e0142..381e39a1 100644 --- a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionWidget.tsx +++ b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionWidget.tsx @@ -13,7 +13,6 @@ export const HostPermissionWidget = () => { submitPermissionRequest, getMessageClassName, } = useHostPermissionManager(); - console.log("HostPermissionBody", permissions); return (
    From e6ab4ea4512c551cb44a241d385f8ad36bad6a44 Mon Sep 17 00:00:00 2001 From: Junyi Hou Date: Tue, 9 Dec 2025 19:41:06 +0800 Subject: [PATCH 11/14] bug fix --- webapp/_webapp/src/background.ts | 26 +++++++++- webapp/_webapp/src/libs/permissions.ts | 48 +++++++++++-------- webapp/_webapp/src/popup.ts | 40 ---------------- .../HostPermissionWidget.tsx | 2 +- .../useHostPermissionManager.ts | 4 +- 5 files changed, 56 insertions(+), 64 deletions(-) delete mode 100644 webapp/_webapp/src/popup.ts diff --git a/webapp/_webapp/src/background.ts b/webapp/_webapp/src/background.ts index 556e76ec..dbd79ad9 100644 --- a/webapp/_webapp/src/background.ts +++ b/webapp/_webapp/src/background.ts @@ -79,10 +79,34 @@ export const fetchImageHandler: Handler = { }, }; +const registerContentScriptsIfPermitted = async () => { + try { + const { origins = [] } = await chrome.permissions.getAll(); + if (!origins.length) { + console.log("[PaperDebugger] No origins found, skipping content script registration"); + return; + } + await registerContentScripts(origins); + } catch (error) { + console.error("[PaperDebugger] Unable to register content scripts", error); + } +}; + export const requestHostPermissionHandler: Handler = { name: HANDLER_NAMES.REQUEST_HOST_PERMISSION, handler: async (origin, sendResponse) => { const granted = await chrome.permissions.request({ origins: [origin] }); + if (granted) { + // chrome.permissions.request requires a user gesture context, the requestHostPermissionHandler is in the background script + // and called via async messaging from the settings page. + // Here we must register content scripts because when a message is sent through chrome.runtime.sendMessage, + // the user gesture context is not preserved in the background script handler, + // causing the permission request to fail with "This function must be called during a user gesture." + // The permission request needs to be called directly from the settings page where the user click occurs, + // not delegated to the background script. + // Therefore, we must register content scripts here. + await registerContentScriptsIfPermitted(); + } sendResponse(granted); }, }; @@ -110,4 +134,4 @@ browserAPI.runtime?.onMessage?.addListener( }, ); -registerContentScripts(); +void registerContentScriptsIfPermitted(); diff --git a/webapp/_webapp/src/libs/permissions.ts b/webapp/_webapp/src/libs/permissions.ts index 5ff858ff..7866e945 100644 --- a/webapp/_webapp/src/libs/permissions.ts +++ b/webapp/_webapp/src/libs/permissions.ts @@ -1,24 +1,34 @@ // can not running in content_script. registerContentScripts can only be called in service_worker. -export async function registerContentScripts() { - const origins = (await chrome.permissions.getAll()).origins || []; - const scriptIds = (await chrome.scripting.getRegisteredContentScripts()).map(script => script.id); +export async function registerContentScripts(origins?: string[]) { + try { + const resolvedOrigins = origins ?? (await chrome.permissions.getAll()).origins || []; + if (resolvedOrigins.length === 0) { + console.log("[PaperDebugger] No origins found, skipping content script registration"); + return; + } - console.log("[PaperDebugger] Unregistering dynamic content scripts", scriptIds); - await chrome.scripting.unregisterContentScripts({ ids: scriptIds }); + const scriptIds = (await chrome.scripting.getRegisteredContentScripts()).map(script => script.id); + if (scriptIds.length > 0) { + console.log("[PaperDebugger] Unregistering dynamic content scripts", scriptIds); + await chrome.scripting.unregisterContentScripts({ ids: scriptIds }); + } - await chrome.scripting.registerContentScripts([{ - id: "content-script-main", - js: ["paperdebugger.js"], - persistAcrossSessions: true, - matches: origins, - world: "MAIN", - }, { - id: "content-script-intermediate", - js: ["intermediate.js"], - persistAcrossSessions: true, - matches: origins, - runAt: "document_start" - }]) + await chrome.scripting.registerContentScripts([{ + id: "content-script-main", + js: ["paperdebugger.js"], + persistAcrossSessions: true, + matches: resolvedOrigins, + world: "MAIN", + }, { + id: "content-script-intermediate", + js: ["intermediate.js"], + persistAcrossSessions: true, + matches: resolvedOrigins, + runAt: "document_start" + }]); - console.log("[PaperDebugger] Registration complete", origins); + console.log("[PaperDebugger] Registration complete", resolvedOrigins); + } catch (error) { + console.error("[PaperDebugger] Failed to register content scripts", error); + } } diff --git a/webapp/_webapp/src/popup.ts b/webapp/_webapp/src/popup.ts deleted file mode 100644 index 9abe9de9..00000000 --- a/webapp/_webapp/src/popup.ts +++ /dev/null @@ -1,40 +0,0 @@ -/* - * popup.ts - * - * Script for the extension popup page. - * Handles the request host permission button click. - */ - -// Disable context menu (right-click) to comply with CSP -document.addEventListener('contextmenu', (e) => { - e.preventDefault(); - return false; -}); - -document.getElementById('myButton')?.addEventListener('click', async () => { - const origin = "https://www.google.com/"; - - try { - // Directly call the background script, similar to the implementation in intermediate.ts - const response = await chrome.runtime.sendMessage({ - action: "requestHostPermission", - args: origin, - }); - - if (response?.error) { - console.error("Error requesting permissions:", response.error); - alert(`Permission request failed: ${response.error}`); - } else if (response === true) { - console.log(`Permission granted for ${origin}`); - alert(`Permission granted for ${origin}`); - } else { - console.log(`Permission denied for ${origin}`); - alert(`Permission denied for ${origin}`); - } - } catch (error) { - console.error("Error requesting permissions:", error); - const errorMessage = error instanceof Error ? error.message : String(error); - alert(`Error: ${errorMessage}`); - } -}); - diff --git a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionWidget.tsx b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionWidget.tsx index 838e0142..1a56d2d4 100644 --- a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionWidget.tsx +++ b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionWidget.tsx @@ -19,7 +19,7 @@ export const HostPermissionWidget = () => {
    Host Permissions

    - Add your self-hosted Overleaf domain so PaperDebugger can interact with them. + Add your self-hosted Overleaf domain so PaperDebugger can interact with it.

    { const trimmed = url.trim(); @@ -117,7 +116,6 @@ export const useHostPermissionManager = () => { if (granted) { setMessage({ text: `Permission granted for ${origin}`, type: "success" }); await loadPermissions(); - await registerContentScripts(); } else { setMessage({ text: `Permission denied for ${origin}`, type: "error" }); } @@ -127,7 +125,7 @@ export const useHostPermissionManager = () => { } finally { setIsSubmitting(false); } - }, [permissionUrl, checkPermission, requestHostPermission, loadPermissions]); + }, [permissionUrl, checkPermission, loadPermissions]); const getMessageClassName = useCallback((type: MessageType): string => { switch (type) { From 79aa54da31e286eb08fadcf372fa1075eae5aa53 Mon Sep 17 00:00:00 2001 From: Junyi Hou Date: Tue, 9 Dec 2025 19:45:07 +0800 Subject: [PATCH 12/14] fix: permissions --- webapp/_webapp/src/background.ts | 2 +- webapp/_webapp/src/libs/permissions.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/webapp/_webapp/src/background.ts b/webapp/_webapp/src/background.ts index dbd79ad9..ae8981ac 100644 --- a/webapp/_webapp/src/background.ts +++ b/webapp/_webapp/src/background.ts @@ -134,4 +134,4 @@ browserAPI.runtime?.onMessage?.addListener( }, ); -void registerContentScriptsIfPermitted(); +registerContentScriptsIfPermitted(); diff --git a/webapp/_webapp/src/libs/permissions.ts b/webapp/_webapp/src/libs/permissions.ts index 7866e945..f5b6d524 100644 --- a/webapp/_webapp/src/libs/permissions.ts +++ b/webapp/_webapp/src/libs/permissions.ts @@ -1,7 +1,7 @@ // can not running in content_script. registerContentScripts can only be called in service_worker. export async function registerContentScripts(origins?: string[]) { try { - const resolvedOrigins = origins ?? (await chrome.permissions.getAll()).origins || []; + const resolvedOrigins = origins ?? (await chrome.permissions.getAll()).origins ?? []; if (resolvedOrigins.length === 0) { console.log("[PaperDebugger] No origins found, skipping content script registration"); return; From 122326fac44609ec190ef1e116b2a0550e506e1d Mon Sep 17 00:00:00 2001 From: Junyi Hou Date: Tue, 9 Dec 2025 19:47:24 +0800 Subject: [PATCH 13/14] chore: format --- webapp/_webapp/public/popup.html | 18 +++--- webapp/_webapp/public/settings.html | 19 +++--- webapp/_webapp/src/background.ts | 20 ++++--- webapp/_webapp/src/libs/permissions.ts | 59 ++++++++++--------- webapp/_webapp/src/manifest.json | 25 ++------ .../_webapp/src/views/extension-popup/app.css | 13 +++- .../_webapp/src/views/extension-popup/app.tsx | 2 +- .../components/ExtensionPopup.tsx | 10 +--- .../extension-popup/components/StepItem.tsx | 1 - .../extension-popup/components/Steps.tsx | 1 - .../components/ExtensionSettings.tsx | 17 +++--- .../HostPermissionForm.tsx | 15 +++-- .../HostPermissionItem.tsx | 5 +- .../HostPermissionList.tsx | 1 - .../HostPermissionWidget.tsx | 1 - .../hostPermissionTypes.ts | 3 +- .../useHostPermissionManager.ts | 1 - 17 files changed, 98 insertions(+), 113 deletions(-) diff --git a/webapp/_webapp/public/popup.html b/webapp/_webapp/public/popup.html index a5554f33..3ec37553 100644 --- a/webapp/_webapp/public/popup.html +++ b/webapp/_webapp/public/popup.html @@ -1,12 +1,12 @@ - - - - PaperDebugger Popup - - -
    - - + + + + PaperDebugger Popup + + +
    + + diff --git a/webapp/_webapp/public/settings.html b/webapp/_webapp/public/settings.html index 17247dca..d491382c 100644 --- a/webapp/_webapp/public/settings.html +++ b/webapp/_webapp/public/settings.html @@ -1,13 +1,12 @@ - - - - PaperDebugger Settings - - -
    - - + + + + PaperDebugger Settings + + +
    + + - diff --git a/webapp/_webapp/src/background.ts b/webapp/_webapp/src/background.ts index ae8981ac..74847df2 100644 --- a/webapp/_webapp/src/background.ts +++ b/webapp/_webapp/src/background.ts @@ -97,12 +97,12 @@ export const requestHostPermissionHandler: Handler = { handler: async (origin, sendResponse) => { const granted = await chrome.permissions.request({ origins: [origin] }); if (granted) { - // chrome.permissions.request requires a user gesture context, the requestHostPermissionHandler is in the background script - // and called via async messaging from the settings page. - // Here we must register content scripts because when a message is sent through chrome.runtime.sendMessage, - // the user gesture context is not preserved in the background script handler, - // causing the permission request to fail with "This function must be called during a user gesture." - // The permission request needs to be called directly from the settings page where the user click occurs, + // chrome.permissions.request requires a user gesture context, the requestHostPermissionHandler is in the background script + // and called via async messaging from the settings page. + // Here we must register content scripts because when a message is sent through chrome.runtime.sendMessage, + // the user gesture context is not preserved in the background script handler, + // causing the permission request to fail with "This function must be called during a user gesture." + // The permission request needs to be called directly from the settings page where the user click occurs, // not delegated to the background script. // Therefore, we must register content scripts here. await registerContentScriptsIfPermitted(); @@ -116,7 +116,13 @@ const browserAPI = typeof browser !== "undefined" ? browser : chrome; browserAPI.runtime?.onMessage?.addListener( (request: { action: string; args: unknown }, _: unknown, sendResponse: (response: unknown) => void) => { - const handlers = [getCookiesHandler, getUrlHandler, getOrCreateSessionIdHandler, fetchImageHandler, requestHostPermissionHandler]; + const handlers = [ + getCookiesHandler, + getUrlHandler, + getOrCreateSessionIdHandler, + fetchImageHandler, + requestHostPermissionHandler, + ]; const handler = handlers.find((h) => h.name === request.action) as HandlerAny; if (!handler) { diff --git a/webapp/_webapp/src/libs/permissions.ts b/webapp/_webapp/src/libs/permissions.ts index f5b6d524..fc2d5eeb 100644 --- a/webapp/_webapp/src/libs/permissions.ts +++ b/webapp/_webapp/src/libs/permissions.ts @@ -1,34 +1,37 @@ // can not running in content_script. registerContentScripts can only be called in service_worker. export async function registerContentScripts(origins?: string[]) { - try { - const resolvedOrigins = origins ?? (await chrome.permissions.getAll()).origins ?? []; - if (resolvedOrigins.length === 0) { - console.log("[PaperDebugger] No origins found, skipping content script registration"); - return; - } + try { + const resolvedOrigins = origins ?? (await chrome.permissions.getAll()).origins ?? []; + if (resolvedOrigins.length === 0) { + console.log("[PaperDebugger] No origins found, skipping content script registration"); + return; + } - const scriptIds = (await chrome.scripting.getRegisteredContentScripts()).map(script => script.id); - if (scriptIds.length > 0) { - console.log("[PaperDebugger] Unregistering dynamic content scripts", scriptIds); - await chrome.scripting.unregisterContentScripts({ ids: scriptIds }); - } + const scriptIds = (await chrome.scripting.getRegisteredContentScripts()).map((script) => script.id); + if (scriptIds.length > 0) { + console.log("[PaperDebugger] Unregistering dynamic content scripts", scriptIds); + await chrome.scripting.unregisterContentScripts({ ids: scriptIds }); + } - await chrome.scripting.registerContentScripts([{ - id: "content-script-main", - js: ["paperdebugger.js"], - persistAcrossSessions: true, - matches: resolvedOrigins, - world: "MAIN", - }, { - id: "content-script-intermediate", - js: ["intermediate.js"], - persistAcrossSessions: true, - matches: resolvedOrigins, - runAt: "document_start" - }]); + await chrome.scripting.registerContentScripts([ + { + id: "content-script-main", + js: ["paperdebugger.js"], + persistAcrossSessions: true, + matches: resolvedOrigins, + world: "MAIN", + }, + { + id: "content-script-intermediate", + js: ["intermediate.js"], + persistAcrossSessions: true, + matches: resolvedOrigins, + runAt: "document_start", + }, + ]); - console.log("[PaperDebugger] Registration complete", resolvedOrigins); - } catch (error) { - console.error("[PaperDebugger] Failed to register content scripts", error); - } + console.log("[PaperDebugger] Registration complete", resolvedOrigins); + } catch (error) { + console.error("[PaperDebugger] Failed to register content scripts", error); + } } diff --git a/webapp/_webapp/src/manifest.json b/webapp/_webapp/src/manifest.json index 0b102ace..4d060a4f 100644 --- a/webapp/_webapp/src/manifest.json +++ b/webapp/_webapp/src/manifest.json @@ -10,19 +10,10 @@ "128": "images/logo-1024.png", "48": "images/logo-1024.png" }, - "host_permissions": [ - "*://*.overleaf.com/" - ], - "optional_host_permissions": [ - "*://*/*" - ], + "host_permissions": ["*://*.overleaf.com/"], + "optional_host_permissions": ["*://*/*"], "permissions_explanation": "The optional_host_permissions pattern '*://*/*' allows the extension to request access to any website. This is necessary to support self-hosted Overleaf instances and similar use cases. Users will be prompted to grant access only when needed. Please review the extension documentation for details on security and privacy implications.", - "permissions": [ - "cookies", - "storage", - "scripting", - "activeTab" - ], + "permissions": ["cookies", "storage", "scripting", "activeTab"], "options_page": "settings.html", "action": { "default_popup": "popup.html" @@ -32,13 +23,9 @@ }, "web_accessible_resources": [ { - "resources": [ - "images/*" - ], - "matches": [ - "*://*/*" - ] + "resources": ["images/*"], + "matches": ["*://*/*"] } ], "key": "[AUTO-GENERATED]" -} \ No newline at end of file +} diff --git a/webapp/_webapp/src/views/extension-popup/app.css b/webapp/_webapp/src/views/extension-popup/app.css index 6ac3ef6a..cbaf285f 100644 --- a/webapp/_webapp/src/views/extension-popup/app.css +++ b/webapp/_webapp/src/views/extension-popup/app.css @@ -1,5 +1,10 @@ .popup-shell { - font-family: "Inter", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", + font-family: + "Inter", + system-ui, + -apple-system, + BlinkMacSystemFont, + "Segoe UI", sans-serif; color: #212529; background-color: #ffffff; @@ -68,7 +73,9 @@ font-size: 16px; font-weight: 700; cursor: pointer; - transition: background-color 0.15s ease, transform 0.1s ease; + transition: + background-color 0.15s ease, + transform 0.1s ease; } .cta-button:hover { @@ -95,4 +102,4 @@ /* Internet Explorer/Edge */ user-select: none; /* Non-prefixed version, currently supported by Chrome and Opera */ -} \ No newline at end of file +} diff --git a/webapp/_webapp/src/views/extension-popup/app.tsx b/webapp/_webapp/src/views/extension-popup/app.tsx index 1894454d..63fb185d 100644 --- a/webapp/_webapp/src/views/extension-popup/app.tsx +++ b/webapp/_webapp/src/views/extension-popup/app.tsx @@ -22,4 +22,4 @@ root.render( ), -); \ No newline at end of file +); diff --git a/webapp/_webapp/src/views/extension-popup/components/ExtensionPopup.tsx b/webapp/_webapp/src/views/extension-popup/components/ExtensionPopup.tsx index 297e5d38..11a25638 100644 --- a/webapp/_webapp/src/views/extension-popup/components/ExtensionPopup.tsx +++ b/webapp/_webapp/src/views/extension-popup/components/ExtensionPopup.tsx @@ -6,12 +6,7 @@ const steps: Step[] = [ content: ( <> In{" "} - + overleaf.com , open any of your projects. @@ -38,8 +33,7 @@ export const ExtensionPopup = () => { }; const settingsUrl = - (typeof chrome !== "undefined" ? chrome.runtime?.getURL?.("settings.html") : undefined) ?? - "/settings.html"; + (typeof chrome !== "undefined" ? chrome.runtime?.getURL?.("settings.html") : undefined) ?? "/settings.html"; return (
    diff --git a/webapp/_webapp/src/views/extension-popup/components/StepItem.tsx b/webapp/_webapp/src/views/extension-popup/components/StepItem.tsx index c7b3c1ff..2bf7ec68 100644 --- a/webapp/_webapp/src/views/extension-popup/components/StepItem.tsx +++ b/webapp/_webapp/src/views/extension-popup/components/StepItem.tsx @@ -11,4 +11,3 @@ export const StepItem = ({ number, children }: StepItemProps) => (

    {children}

    ); - diff --git a/webapp/_webapp/src/views/extension-popup/components/Steps.tsx b/webapp/_webapp/src/views/extension-popup/components/Steps.tsx index 81f2e67e..df60b53f 100644 --- a/webapp/_webapp/src/views/extension-popup/components/Steps.tsx +++ b/webapp/_webapp/src/views/extension-popup/components/Steps.tsx @@ -19,4 +19,3 @@ export const Steps = ({ steps }: StepsProps) => ( ))}
    ); - diff --git a/webapp/_webapp/src/views/extension-settings/components/ExtensionSettings.tsx b/webapp/_webapp/src/views/extension-settings/components/ExtensionSettings.tsx index cf133c4a..7db58afb 100644 --- a/webapp/_webapp/src/views/extension-settings/components/ExtensionSettings.tsx +++ b/webapp/_webapp/src/views/extension-settings/components/ExtensionSettings.tsx @@ -1,13 +1,12 @@ import { HostPermissionWidget } from "./HostPermissionWidget/HostPermissionWidget"; export const ExtensionSettings = () => { - return ( -
    -
    -

    PaperDebugger Settings

    - -
    -
    - ); + return ( +
    +
    +

    PaperDebugger Settings

    + +
    +
    + ); }; - diff --git a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionForm.tsx b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionForm.tsx index ef77b674..496e1beb 100644 --- a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionForm.tsx +++ b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionForm.tsx @@ -44,8 +44,12 @@ export const HostPermissionForm = ({ input: "font-mono", }} /> -

    Example: *://*.overleaf.com/*

    -

    Example: *://sharelatex.gwdg.de/*

    +

    + Example: *://*.overleaf.com/*{" "} +

    +

    + Example: *://sharelatex.gwdg.de/*{" "} +

    @@ -54,12 +58,7 @@ export const HostPermissionForm = ({
    - {message && ( -
    - {message.text} -
    - )} + {message &&
    {message.text}
    } ); }; - diff --git a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionItem.tsx b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionItem.tsx index 4ed65f08..315ed961 100644 --- a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionItem.tsx +++ b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionItem.tsx @@ -11,10 +11,7 @@ export const HostPermissionItem = ({ item }: HostPermissionItemProps) => {
    Host Permission
    {item.origin}
    -
    - Granted -
    +
    Granted
    ); }; - diff --git a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionList.tsx b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionList.tsx index 3e0d78d5..29fb5fb0 100644 --- a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionList.tsx +++ b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionList.tsx @@ -28,4 +28,3 @@ export const HostPermissionList = ({ permissions, isLoading }: HostPermissionLis
    ); }; - diff --git a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionWidget.tsx b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionWidget.tsx index a128c538..95fa6b9c 100644 --- a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionWidget.tsx +++ b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionWidget.tsx @@ -35,4 +35,3 @@ export const HostPermissionWidget = () => {
    ); }; - diff --git a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/hostPermissionTypes.ts b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/hostPermissionTypes.ts index dfbeebee..7a9ea52c 100644 --- a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/hostPermissionTypes.ts +++ b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/hostPermissionTypes.ts @@ -1,4 +1,4 @@ -export type MessageType = 'success' | 'error' | 'info'; +export type MessageType = "success" | "error" | "info"; export interface PermissionMessage { text: string; @@ -9,4 +9,3 @@ export interface PermissionItem { origin: string; granted: boolean; } - diff --git a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/useHostPermissionManager.ts b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/useHostPermissionManager.ts index 20b8b769..96e8e287 100644 --- a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/useHostPermissionManager.ts +++ b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/useHostPermissionManager.ts @@ -164,4 +164,3 @@ export const useHostPermissionManager = () => { getMessageClassName, }; }; - From 677ab6be665854757cbd52c8775e52e1b8a7f94a Mon Sep 17 00:00:00 2001 From: Junyi Hou Date: Tue, 9 Dec 2025 20:30:38 +0800 Subject: [PATCH 14/14] chore: use zustand to reduce complexity --- webapp/_webapp/src/libs/manifest.ts | 3 + ...issionForm.tsx => HostPermissionInput.tsx} | 36 ++-- .../HostPermissionList.tsx | 15 +- ...ionItem.tsx => HostPermissionListItem.tsx} | 2 +- .../HostPermissionWidget.tsx | 37 ++-- .../useHostPermissionManager.ts | 166 ------------------ .../useHostPermissionStore.ts | 139 +++++++++++++++ 7 files changed, 177 insertions(+), 221 deletions(-) rename webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/{HostPermissionForm.tsx => HostPermissionInput.tsx} (53%) rename webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/{HostPermissionItem.tsx => HostPermissionListItem.tsx} (87%) delete mode 100644 webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/useHostPermissionManager.ts create mode 100644 webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/useHostPermissionStore.ts diff --git a/webapp/_webapp/src/libs/manifest.ts b/webapp/_webapp/src/libs/manifest.ts index e472aad8..2965ecd0 100644 --- a/webapp/_webapp/src/libs/manifest.ts +++ b/webapp/_webapp/src/libs/manifest.ts @@ -10,6 +10,9 @@ export function getManifest() { // This is the version on github tag. manifestJSON.version = semver.clean(version || "") || "0.0.0"; + // @ts-expect-error we don't use this variable permissions_explanation + delete manifestJSON.permissions_explanation; + if (betaBuild === "true") { manifestJSON.version_name = `v${manifestJSON.version}-${monorepoRevision}-beta`; manifestJSON.name = "PaperDebugger BETA"; diff --git a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionForm.tsx b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionInput.tsx similarity index 53% rename from webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionForm.tsx rename to webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionInput.tsx index 496e1beb..7986d078 100644 --- a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionForm.tsx +++ b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionInput.tsx @@ -1,31 +1,17 @@ import { Button, Input } from "@heroui/react"; import React, { useCallback } from "react"; -import { PermissionMessage } from "./hostPermissionTypes"; +import { getMessageClassName, useHostPermissionStore } from "./useHostPermissionStore"; -interface HostPermissionFormProps { - value: string; - onChange: (value: string) => void; - onSubmit: () => void; - isSubmitting: boolean; - message: PermissionMessage | null; - messageClassName: (type: PermissionMessage["type"]) => string; -} +export const HostPermissionInput = () => { + const { permissionUrl, setPermissionUrl, submitPermissionRequest, isSubmitting, message } = useHostPermissionStore(); -export const HostPermissionForm = ({ - value, - onChange, - onSubmit, - isSubmitting, - message, - messageClassName, -}: HostPermissionFormProps) => { const handleKeyPress = useCallback( (e: React.KeyboardEvent) => { if (e.key === "Enter" && !isSubmitting) { - onSubmit(); + submitPermissionRequest(); } }, - [isSubmitting, onSubmit], + [isSubmitting, submitPermissionRequest], ); return ( @@ -37,9 +23,9 @@ export const HostPermissionForm = ({ color="primary" radius="sm" placeholder="https://www.example.com/ or https://*.example.com/*" - value={value} - onChange={(e) => onChange(e.target.value)} - onKeyPress={handleKeyPress} + value={permissionUrl} + onChange={(e) => setPermissionUrl(e.target.value)} + onKeyDown={handleKeyPress} classNames={{ input: "font-mono", }} @@ -53,12 +39,14 @@ export const HostPermissionForm = ({
-
- {message &&
{message.text}
} + {message && ( +
{message.text}
+ )} ); }; diff --git a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionList.tsx b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionList.tsx index 29fb5fb0..9a7ee55d 100644 --- a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionList.tsx +++ b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionList.tsx @@ -1,13 +1,10 @@ -import { HostPermissionItem } from "./HostPermissionItem"; -import { PermissionItem } from "./hostPermissionTypes"; +import { HostPermissionListItem } from "./HostPermissionListItem"; +import { useHostPermissionStore } from "./useHostPermissionStore"; -interface HostPermissionListProps { - permissions: PermissionItem[]; - isLoading: boolean; -} +export const HostPermissionList = () => { + const { permissions, isLoadingPermissions } = useHostPermissionStore(); -export const HostPermissionList = ({ permissions, isLoading }: HostPermissionListProps) => { - if (isLoading) { + if (isLoadingPermissions) { return

Loading permissions...

; } @@ -23,7 +20,7 @@ export const HostPermissionList = ({ permissions, isLoading }: HostPermissionLis return (
{permissions.map((item) => ( - + ))}
); diff --git a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionItem.tsx b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionListItem.tsx similarity index 87% rename from webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionItem.tsx rename to webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionListItem.tsx index 315ed961..c053a53f 100644 --- a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionItem.tsx +++ b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionListItem.tsx @@ -4,7 +4,7 @@ interface HostPermissionItemProps { item: PermissionItem; } -export const HostPermissionItem = ({ item }: HostPermissionItemProps) => { +export const HostPermissionListItem = ({ item }: HostPermissionItemProps) => { return (
diff --git a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionWidget.tsx b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionWidget.tsx index 95fa6b9c..8e962086 100644 --- a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionWidget.tsx +++ b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/HostPermissionWidget.tsx @@ -1,18 +1,20 @@ -import { HostPermissionForm } from "./HostPermissionForm"; +import { useEffect } from "react"; +import { HostPermissionInput } from "./HostPermissionInput"; import { HostPermissionList } from "./HostPermissionList"; -import { useHostPermissionManager } from "./useHostPermissionManager"; +import { useHostPermissionStore } from "./useHostPermissionStore"; export const HostPermissionWidget = () => { - const { - permissionUrl, - setPermissionUrl, - permissions, - isSubmitting, - message, - isLoadingPermissions, - submitPermissionRequest, - getMessageClassName, - } = useHostPermissionManager(); + const { message, loadPermissions, clearMessage } = useHostPermissionStore(); + + useEffect(() => { + loadPermissions(); + }, [loadPermissions]); + + useEffect(() => { + if (!message) return; + const timer = setTimeout(() => clearMessage(), 5000); + return () => clearTimeout(timer); + }, [message, clearMessage]); return (
@@ -20,17 +22,10 @@ export const HostPermissionWidget = () => {

Add your self-hosted Overleaf domain so PaperDebugger can interact with it.

- +
- +
); diff --git a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/useHostPermissionManager.ts b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/useHostPermissionManager.ts deleted file mode 100644 index 96e8e287..00000000 --- a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/useHostPermissionManager.ts +++ /dev/null @@ -1,166 +0,0 @@ -import { useCallback, useEffect, useState } from "react"; -import { MessageType, PermissionItem, PermissionMessage } from "./hostPermissionTypes"; -import { requestHostPermission } from "../../../../intermediate"; - -const normalizeWildcardPattern = (url: string) => { - const trimmed = url.trim(); - if (!trimmed) { - return { valid: false as const, error: "Please enter a URL" }; - } - - // Allow Chrome host permission wildcard protocol "*://" - const starSchemeWildcardMatch = trimmed.match(/^\*:\/\/\*\.([^/\s]+)(?:\/\*)?\/?$/i); - if (starSchemeWildcardMatch) { - const host = starSchemeWildcardMatch[1]; - return { valid: true as const, origin: `*://*.${host}/*` }; - } - - const starSchemeHostMatch = trimmed.match(/^\*:\/\/([^/\s]+)(?:\/\*)?\/?$/i); - if (starSchemeHostMatch) { - const host = starSchemeHostMatch[1]; - return { valid: true as const, origin: `*://${host}/*` }; - } - - const wildcardMatch = trimmed.match(/^(https?):\/\/\*\.([^/\s]+)(?:\/\*)?\/?$/i); - if (wildcardMatch) { - const protocol = wildcardMatch[1].toLowerCase(); - const host = wildcardMatch[2]; - return { valid: true as const, origin: `${protocol}://*.${host}/*` }; - } - - try { - const urlObj = new URL(trimmed); - if (!["http:", "https:"].includes(urlObj.protocol)) { - return { valid: false as const, error: "URL must start with http://, https://, or *://" }; - } - return { valid: true as const, origin: `${urlObj.origin}/*` }; - } catch (e) { - return { - valid: false as const, - error: - "Invalid URL. Use a full URL (e.g., https://www.example.com/) or a wildcard host (e.g., https://*.example.com/* or *://*.example.com/*)", - }; - } -}; - -export const useHostPermissionManager = () => { - const [permissionUrl, setPermissionUrl] = useState(""); - const [permissions, setPermissions] = useState([]); - const [isSubmitting, setIsSubmitting] = useState(false); - const [message, setMessage] = useState(null); - const [isLoadingPermissions, setIsLoadingPermissions] = useState(true); - - const checkPermission = useCallback(async (origin: string): Promise => { - try { - return await chrome.permissions.contains({ origins: [origin] }); - } catch (error) { - console.error("Error checking permission:", error); - return false; - } - }, []); - - const loadPermissions = useCallback(async () => { - setIsLoadingPermissions(true); - try { - const chromePermissions = await chrome.permissions.getAll(); - const origins = chromePermissions.origins || []; - - if (origins.length === 0) { - setPermissions([]); - return; - } - - const items: PermissionItem[] = origins.map((origin) => ({ - origin, - granted: true, - })); - setPermissions(items); - } catch (error) { - console.error("Error loading permissions:", error); - setMessage({ text: "Error loading permissions.", type: "error" }); - } finally { - setIsLoadingPermissions(false); - } - }, []); - - const submitPermissionRequest = useCallback(async () => { - if (!permissionUrl) { - setMessage({ text: "Please enter a URL", type: "error" }); - setIsSubmitting(false); - return; - } - - setMessage(null); - setIsSubmitting(true); - - const validation = normalizeWildcardPattern(permissionUrl); - - if (!validation.valid) { - setMessage({ text: validation.error, type: "error" }); - setIsSubmitting(false); - return; - } - - const origin = validation.origin; - - try { - const alreadyGranted = await checkPermission(origin); - if (alreadyGranted) { - setMessage({ text: `Permission for ${origin} is already granted.`, type: "info" }); - await loadPermissions(); - return; - } - - const granted = await requestHostPermission(origin); - - if (granted) { - setMessage({ text: `Permission granted for ${origin}`, type: "success" }); - await loadPermissions(); - } else { - setMessage({ text: `Permission denied for ${origin}`, type: "error" }); - } - } catch (error) { - const errorMessage = error instanceof Error ? error.message : String(error); - setMessage({ text: `Error: ${errorMessage}`, type: "error" }); - } finally { - setIsSubmitting(false); - } - }, [permissionUrl, checkPermission, loadPermissions]); - - const getMessageClassName = useCallback((type: MessageType): string => { - switch (type) { - case "success": - return "bg-green-100 text-green-800 border border-green-300"; - case "error": - return "bg-red-100 text-red-800 border border-red-300"; - case "info": - return "bg-blue-100 text-blue-800 border border-blue-300"; - default: - return ""; - } - }, []); - - useEffect(() => { - if (message) { - const timer = setTimeout(() => { - setMessage(null); - }, 5000); - return () => clearTimeout(timer); - } - }, [message]); - - useEffect(() => { - loadPermissions(); - }, [loadPermissions]); - - return { - permissionUrl, - setPermissionUrl, - permissions, - isSubmitting, - message, - isLoadingPermissions, - submitPermissionRequest, - getMessageClassName, - }; -}; diff --git a/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/useHostPermissionStore.ts b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/useHostPermissionStore.ts new file mode 100644 index 00000000..780e91e9 --- /dev/null +++ b/webapp/_webapp/src/views/extension-settings/components/HostPermissionWidget/useHostPermissionStore.ts @@ -0,0 +1,139 @@ +import { create } from "zustand"; +import { requestHostPermission } from "../../../../intermediate"; +import { PermissionItem, PermissionMessage } from "./hostPermissionTypes"; + +const normalizeWildcardPattern = (url: string) => { + const trimmed = url.trim(); + if (!trimmed) { + return { valid: false as const, error: "Please enter a URL" }; + } + + // Chrome host permission pattern: :// + // scheme: *, http, https + // host: can include wildcard like *.example.com or specific domain + // path: must include at least /, typically /* + const hostPermissionPattern = /^(\*|https?):\/\/((?:\*\.)?[^/\s]+)(\/.*)?$/i; + const match = trimmed.match(hostPermissionPattern); + + if (match) { + const scheme = match[1].toLowerCase(); + const host = match[2]; + const path = match[3] || "/*"; + + // Normalize scheme (keep * as is, normalize http/https) + const normalizedScheme = scheme === "*" ? "*" : scheme; + // Ensure path ends with /* if it's just / + const normalizedPath = path === "/" ? "/*" : path.endsWith("/*") ? path : `${path}/*`; + + return { valid: true as const, origin: `${normalizedScheme}://${host}${normalizedPath}` }; + } + + // Try parsing as regular URL if pattern doesn't match + try { + const urlObj = new URL(trimmed); + if (!["http:", "https:"].includes(urlObj.protocol)) { + return { valid: false as const, error: "URL must start with http://, https://, or *://" }; + } + return { valid: true as const, origin: `${urlObj.protocol}//${urlObj.host}/*` }; + } catch (e) { + return { + valid: false as const, + error: + "Invalid URL. Use a full URL (e.g., https://example.com) or a wildcard pattern (e.g., https://*.example.com/*, *://*.example.com/*)", + }; + } +}; + +interface HostPermissionState { + permissionUrl: string; + permissions: PermissionItem[]; + isSubmitting: boolean; + isLoadingPermissions: boolean; + message: PermissionMessage | null; + setPermissionUrl: (value: string) => void; + clearMessage: () => void; + loadPermissions: () => Promise; + submitPermissionRequest: () => Promise; +} + +const handleError = (error: unknown, defaultMessage: string): string => { + console.error(defaultMessage, error); + return error instanceof Error ? error.message : defaultMessage; +}; + +export const useHostPermissionStore = create((set, get) => ({ + permissionUrl: "", + permissions: [], + isSubmitting: false, + isLoadingPermissions: true, + message: null, + setPermissionUrl: (value) => set({ permissionUrl: value }), + clearMessage: () => set({ message: null }), + loadPermissions: async () => { + set({ isLoadingPermissions: true }); + + const chromePermissions = await chrome.permissions.getAll().catch((error) => { + const errorMessage = handleError(error, "Error loading permissions."); + set({ message: { text: errorMessage, type: "error" } }); + return null; + }); + + const origins = chromePermissions?.origins || []; + const permissions: PermissionItem[] = origins.map((origin) => ({ origin, granted: true })); + + set({ permissions, isLoadingPermissions: false }); + }, + submitPermissionRequest: async () => { + const { permissionUrl } = get(); + + if (!permissionUrl) { + set({ message: { text: "Please enter a URL", type: "error" } }); + return; + } + + const validation = normalizeWildcardPattern(permissionUrl); + if (!validation.valid) { + set({ message: { text: validation.error, type: "error" } }); + return; + } + + set({ message: null, isSubmitting: true }); + const origin = validation.origin; + + const alreadyGranted = await chrome.permissions.contains({ origins: [origin] }).catch(() => false); + if (alreadyGranted) { + set({ message: { text: `Permission for ${origin} is already granted.`, type: "info" }, isSubmitting: false }); + await get().loadPermissions(); + return; + } + + const granted = await requestHostPermission(origin).catch((error) => { + const errorMessage = handleError(error, "Error requesting permission"); + set({ message: { text: `Error: ${errorMessage}`, type: "error" }, isSubmitting: false }); + return false; + }); + + if (granted) { + set({ message: { text: `Permission granted for ${origin}`, type: "success" } }); + await get().loadPermissions(); + } else { + set({ message: { text: `Permission denied for ${origin}`, type: "error" } }); + } + + set({ isSubmitting: false }); + }, +})); + +export const getMessageClassName = (type: PermissionMessage["type"]): string => { + switch (type) { + case "success": + return "bg-green-100 text-green-800 border border-green-300"; + case "error": + return "bg-red-100 text-red-800 border border-red-300"; + case "info": + return "bg-blue-100 text-blue-800 border border-blue-300"; + default: + return ""; + } +}; +