Permissions, justified
The complete, authoritative permissions reference. For each item we state why it's needed, the concrete feature it enables, and the exact chrome.* API it backs.
Convert and normalize web links into affiliate links per the user's configured rules, and optionally broadcast them to user-configured destinations (Telegram bots and HTTP webhooks).
Every permission maps directly to this purpose or to an ancillary feature (Deal Feed, Mobile Preview, Redirect Tracer, reminders, built-in tools) that supports the same workflow.
Exact manifest declaration
"permissions": [ "storage", "tabs", "scripting", "contextMenus", "clipboardWrite", "notifications", "alarms", "webNavigation", "webRequest", "sidePanel", "offscreen", "declarativeNetRequest" ], "host_permissions": ["<all_urls>"]
activeTab permission. The active tab's URL is read via the already-declared tabs permission for explicit user actions only.Permissions at a glance
Why. The extension keeps all of your configuration, history, reminders, and a redirect cache on your own device. Nothing is synced to a server and there is no login — the foundation of the "local-first" design.
Feature. Persisting store rules, networks, shorteners, integrations (Telegram/webhooks), reminders, conversion history, and the random analytics client id. Transient cross-worker state lives in session storage so it does not survive a browser restart.
chrome.storage.sync and no unlimitedStorage. Stored credentials stay on your device and are never uploaded.Why. To convert the page you're looking at, the extension reads the active tab's URL. To resolve JavaScript-driven redirects accurately, it opens and then closes short-lived hidden background tabs. Reminder "Open URL" buttons open that URL in a tab.
Feature. Prefill/convert the current tab's link; open a reminder's URL on notification click; create/update/remove hidden tabs to follow JS redirects in the Convert pipeline and Redirect Tracer; query the active tab for keyboard shortcuts.
Why. Copying the converted link must work even where the primary offscreen-document clipboard path is unavailable.
Feature. Fallback clipboard write — inject navigator.clipboard.writeText into the active tab only, and only when the offscreen path cannot be used.
Why. So you can act on a link or page directly from the right-click menu without first opening the popup.
Feature. Three explicit right-click items: Process with dealsgroup, Preview in Mobile Sidebar, and Remind Me….
Why. The core output of a conversion is a link you can paste anywhere.
Feature. Copy the converted affiliate link (and, in the rich-text editor, copy-as WhatsApp / Telegram / Markdown / Plain). The primary path uses a short-lived offscreen document calling execCommand('copy').
clipboardRead permission is requested.Why. To tell you the result of a conversion and to deliver reminders even when the popup is closed.
Feature. Show a conversion/result notification, show reminder notifications (with an "Open URL" action button), and check the OS-level permission state before notifying.
Why. Reminders and scheduled messages must fire at the times you choose, surviving service-worker shutdowns. A watchdog timer also guarantees hidden trace tabs are cleaned up.
Feature. Schedule reminders and scheduled messages with repeat options (none/hourly/daily/weekly/monthly/custom); missed reminders fire on startup within a 24-hour grace window. A watchdog alarm closes any orphaned hidden trace tab after a restart. Alarm ids are namespaced (dg.reminder.*, dg.tracer.watchdog).
Why. Some links redirect via JavaScript rather than an HTTP header. To show an accurate redirect chain, the extension observes navigation events on a tab it opened for that trace.
Feature. Detect JS-driven redirects in the Redirect Tracer by listening for committed navigations on the hidden tab the user initiated.
Why. For cross-origin 3xx redirects, fetch hides the destination as an opaque redirect. To follow the chain the extension reads the Location response header on those hops.
Feature. Read the Location header on cross-origin 3xx redirects so the Redirect Tracer / Resolver can follow the chain. The listener is added and removed per hop.
Location header, only during a user-initiated resolve/trace. Blocking/modifying webRequest is not used.Why. Mobile Preview renders sites in a side panel so you can see how a destination page looks on a phone.
Feature. Open the Mobile Preview side panel from the keyboard shortcut, the context menu, or the Tools area.
Why. MV3 service workers have no DOM and cannot use the Clipboard API directly. An offscreen document provides the minimal DOM required to write to the clipboard reliably.
Feature. Spawn a short-lived offscreen document to perform the primary clipboard write.
Why. Many sites send X-Frame-Options / Content-Security-Policy headers that forbid being shown in a frame. To preview those sites at real device dimensions, the extension uses a dynamic rule that relaxes those headers only for frames its own pages create.
Feature. A single dynamic rule that strips X-Frame-Options and Content-Security-Policy and injects a mobile user-agent + sec-ch-ua-mobile, applied only to sub_frame requests initiated by the extension's own pages. Registered only when you open Mobile Preview and removed afterward.
initiatorDomains = extension id) and never affects your normal browsing of any other site.Why. The core workflow is "convert any link." Because deals can come from any retailer or domain, the extension cannot enumerate hosts in advance: you must be able to right-click any link or page, Mobile Preview must navigate to any user-supplied URL, and webRequest / webNavigation must observe the user-initiated redirect-trace tab, which may land on any host.
Feature. Convert from any page (content script + context menu), Mobile Preview of any URL, and redirect tracing across any host. The content script matches <all_urls>, runs at document_idle, in all_frames.
<all_urls> is requested because the set of retailer domains is open-ended and user-defined; narrowing it would break the single purpose.Keyboard commands (commands)
Four user-customizable shortcuts (remappable at chrome://extensions/shortcuts). They use chrome.commands plus chrome.tabs.query for the convert/preview shortcuts.
| Windows / Linux | macOS | Action |
|---|---|---|
| Alt+Shift+L | Command+Shift+L | Open the popup |
| Alt+Shift+K | Command+Shift+K | Convert the current tab's link |
| Alt+Shift+M | Command+Shift+M | Open Mobile Preview |
| Alt+Shift+O | Command+Shift+O | Open the dashboard |
Permissions we deliberately do NOT request
To minimize attack surface and respect privacy, the extension intentionally omits the following:
Not requested. The active tab's URL is read via tabs for explicit user actions only.
Config and credentials stay on your device, never synced to Google's servers.
Operates within the standard ~10 MB quota and prunes history + redirect cache.
Never accesses your location.
Does not read, write, or enumerate cookies via the cookies API. Session cookies are sent only to a hardcoded shortener host allowlist.
Used read-only (onHeadersReceived); framing handled by a scoped DNR rule.
Clipboard access is write-only.
None requested; none needed for the single purpose.
Review follow-ups
For permission-related questions during Chrome Web Store review or general support:
[email protected]