Last Updated: March 20, 2026
ThunderSweep requests the minimum OAuth scopes necessary to deliver its core features. Each scope is justified below.
| Scope | Why It Is Required | Why a Narrower Scope Is Insufficient |
|---|---|---|
gmail.readonly |
Read email metadata (sender, subject, date) and download attachment content for local sensitive-data scanning. No content is stored or transmitted beyond the user's browser. | No narrower Gmail read scope exists. gmail.metadata is insufficient because
ThunderSweep must download attachment binary content to parse PDFs, DOCX files, and spreadsheets
locally for PII patterns. |
gmail.modify |
Required for user-triggered actions: deleting an email or marking it as read directly from the ThunderSweep scan results. ThunderSweep never modifies Gmail without an explicit user action. | gmail.readonly alone does not permit delete or label modifications. Users reasonably
expect to act on found sensitive emails without leaving the extension. No intermediate scope between
readonly and modify exists in the Gmail API. |
userinfo.email |
Identify which Google account is connected so users managing multiple accounts can see which account a scan applies to. | No narrower scope for reading the authenticated user's email address exists. |
drive |
Three distinct operations require this scope:
|
drive.readonly would cover scanning but not Vault write or delete.drive.file only grants access to files the extension itself created. It does not
permit reading or deleting pre-existing user files (uploaded by the user or received via Google
Workspace sharing), which is the core use case for both Drive scanning and secure-move.A combination of drive.readonly + drive.file still cannot delete
pre-existing files (only drive or drive.appdata permits this), so the
full drive scope is the minimum that satisfies all three operations.
|
chrome.storage.local (metadata only: email ID, subject, detected category) →
No content leaves the browser.
chrome.storage.local (file name, Drive file ID, detected category — no content)
→ No content leaves the browser.
crypto.subtle (Web Crypto API) with a
PBKDF2-derived key stored only in chrome.storage.local → Encrypted blob uploaded
back to user's Google Drive (ThunderSweep Vault folder) via Drive API → Original unencrypted file
deleted from Drive upon confirmation of successful upload →
Encryption key never leaves the browser. ThunderSweep servers never receive file content.
ts-transfer.thundersweep.com) via Worker → Claim token embedded in a one-time link
emailed to recipient via Resend (transactional email) → Recipient opens link, claim token sent to
Worker, blob downloaded and decrypted in recipient's browser → Blob auto-deleted from R2 within 7 days
or on claim, whichever is first →
ThunderSecurity LLC cannot decrypt transfer blobs; the claim token is never stored server-side.
thundersweep-feedback.lwang-evdy.workers.dev) → Message forwarded to developer email →
No email address or account information is included in the request.
Defined in manifest.json:
"content_security_policy": {
"extension_pages": "script-src 'self'; object-src 'self'; worker-src 'self'"
}
eval() or dynamic code execution.chrome.storage.local, which is isolated to the extension's origin and
not accessible to any web page.localStorage, cookies, or any mechanism accessible to web
content.accounts.google.com/o/oauth2/revoke when the user
disconnects an account.crypto.subtle Web Crypto API.onMessageExternal listener for TS Share deep links)
validate sender.origin against the allowlisted https://thundersweep.com
domain and check for required fields before acting.mail.google.com do not execute any content from Gmail
messages as code.clipboardRead, history,
bookmarks, cookies, geolocation, webRequest, or any
other permissions beyond those documented in Section 2.host_permissions are limited to Google APIs, the Gumroad license API, and the two
Cloudflare Worker endpoints operated by ThunderSecurity LLC.https://mail.google.com/*.If you discover a security vulnerability in ThunderSweep, please report it privately before public disclosure:
© 2026 ThunderSecurity LLC. All rights reserved. — Privacy Policy — Terms of Service — Data Deletion