Skip to content

feat(extension): cross-browser secret-sharing extension#310

Merged
stophecom merged 3 commits into
devfrom
feat/browser-extension
Jul 7, 2026
Merged

feat(extension): cross-browser secret-sharing extension#310
stophecom merged 3 commits into
devfrom
feat/browser-extension

Conversation

@stophecom

Copy link
Copy Markdown
Owner

Summary

Adds apps/extension — a WXT + Svelte 5 browser extension (Chrome MV3 + Firefox) that lets users create an encrypted, one-time-view secret link in one click, without opening the site.

It's a thin UI over @scrt-link/client: all client-side crypto and the POST /api/v1/secrets call are reused. No backend changes.

How it works

  • Authenticates with a personal API key (created at scrt.link/account/api), stored in browser.storage.local only (never sync, never a content script).
  • Zero-knowledge preserved — the master key never leaves the client; the returned link is https://scrt.link/s#<masterKey>.
  • Three screens: API-key onboarding, create-secret (text + optional expiry / view-limit / password / public note), and key settings (view masked / replace / clear).
  • Brand-matched styling (navy / cream / red) reusing the tokens from src/app.css, with the inlined flame logo.

Scope / decisions

  • API-key only — there is no anonymous mode, so this is effectively a feature for plans that include API access (planLimits.apiAccess). A 403 surfaces an actionable message linking to the account page.
  • Text secrets only in v1 (the API path doesn't support files/snap).
  • No reusable web component / third-party embed — tracked separately for later.

Repo wiring

  • Adds apps/* to pnpm-workspace.yaml.
  • Ignores WXT-generated .wxt / .output dirs in the root ESLint config (only the root .gitignore is read by includeIgnoreFile).

Verification

  • pnpm --filter @scrt-link/extension build (Chrome MV3) and build:firefox both succeed with icons bundled
  • pnpm --filter @scrt-link/extension check — 0 type errors
  • pnpm lint clean across the repo
  • ⚠️ Runtime (actual secret creation) needs the unpacked extension loaded in a browser with a valid API key — not exercisable headlessly. Load steps are in apps/extension/README.md.

Follow-ups (not in this PR)

  • Store-listing assets (screenshots, promo tiles, privacy policy) before Chrome Web Store / AMO submission.

🤖 Generated with Claude Code

Adds apps/extension, a WXT + Svelte 5 browser extension (Chrome MV3 +
Firefox) that creates an encrypted, one-time-view secret link in one
click. It's a thin UI over @scrt-link/client — all client-side crypto and
the POST /api/v1/secrets call are reused, no backend changes.

- Authenticates with a personal API key stored in browser.storage.local
- Onboarding, create-secret, and key-settings screens
- Brand-matched styling (navy/cream/red) and inlined flame logo
- Wires apps/* into the pnpm workspace
- Ignores WXT-generated .wxt/.output dirs in the root ESLint config

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@vercel

vercel Bot commented Jul 7, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
scrt-link-v2 Ready Ready Preview, Comment Jul 7, 2026 6:53pm

Request Review

@socket-security

socket-security Bot commented Jul 7, 2026

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Added@​wxt-dev/​module-svelte@​2.0.5701007387100
Addedwxt@​0.20.27971009393100

View full report

@socket-security

socket-security Bot commented Jul 7, 2026

Copy link
Copy Markdown

Warning

Review the following alerts detected in dependencies.

According to your organization's Security Policy, it is recommended to resolve "Warn" alerts. Learn more about Socket for GitHub.

Action Severity Alert  (click "▶" to expand/collapse)
Warn High
Obfuscated code: npm @pnpm/network.ca-file is 90.0% likely obfuscated

Confidence: 0.90

Location: Package overview

From: pnpm-lock.yamlnpm/wxt@0.20.27npm/@pnpm/network.ca-file@1.0.2

ℹ Read more on: This package | This alert | What is obfuscated code?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should not obfuscate their code. Consider not using packages with obfuscated code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/@pnpm/network.ca-file@1.0.2. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn High
Obfuscated code: npm commander is 90.0% likely obfuscated

Confidence: 0.90

Location: Package overview

From: pnpm-lock.yamlnpm/wxt@0.20.27npm/commander@9.5.0

ℹ Read more on: This package | This alert | What is obfuscated code?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should not obfuscate their code. Consider not using packages with obfuscated code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/commander@9.5.0. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn High
Obfuscated code: npm cssom is 90.0% likely obfuscated

Confidence: 0.90

Location: Package overview

From: pnpm-lock.yamlnpm/wxt@0.20.27npm/cssom@0.5.0

ℹ Read more on: This package | This alert | What is obfuscated code?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should not obfuscate their code. Consider not using packages with obfuscated code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/cssom@0.5.0. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn High
Obfuscated code: npm htmlparser2 is 90.0% likely obfuscated

Confidence: 0.90

Location: Package overview

From: pnpm-lock.yamlnpm/wxt@0.20.27npm/htmlparser2@10.1.0

ℹ Read more on: This package | This alert | What is obfuscated code?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should not obfuscate their code. Consider not using packages with obfuscated code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/htmlparser2@10.1.0. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn High
Obfuscated code: npm node-fetch-native is 90.0% likely obfuscated

Confidence: 0.90

Location: Package overview

From: pnpm-lock.yamlnpm/wxt@0.20.27npm/node-fetch-native@1.6.7

ℹ Read more on: This package | This alert | What is obfuscated code?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should not obfuscate their code. Consider not using packages with obfuscated code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/node-fetch-native@1.6.7. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn High
Obfuscated code: npm node-forge is 90.0% likely obfuscated

Confidence: 0.90

Location: Package overview

From: pnpm-lock.yamlnpm/wxt@0.20.27npm/node-forge@1.4.0

ℹ Read more on: This package | This alert | What is obfuscated code?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should not obfuscate their code. Consider not using packages with obfuscated code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/node-forge@1.4.0. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn High
Obfuscated code: npm powershell-utils is 90.0% likely obfuscated

Confidence: 0.90

Location: Package overview

From: pnpm-lock.yamlnpm/wxt@0.20.27npm/powershell-utils@0.1.0

ℹ Read more on: This package | This alert | What is obfuscated code?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should not obfuscate their code. Consider not using packages with obfuscated code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/powershell-utils@0.1.0. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn High
Obfuscated code: npm yargs is 90.0% likely obfuscated

Confidence: 0.90

Location: Package overview

From: pnpm-lock.yamlnpm/wxt@0.20.27npm/yargs@17.7.3

ℹ Read more on: This package | This alert | What is obfuscated code?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should not obfuscate their code. Consider not using packages with obfuscated code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/yargs@17.7.3. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

View full report

stophecom and others added 2 commits July 7, 2026 20:50
Firefox now rejects new submissions without
browser_specific_settings.gecko.data_collection_permissions. scrt.link is
zero-knowledge (secrets are E2E-encrypted, API key stays local), so we
declare `required: ["none"]`. Scoped to the Firefox build via a
per-browser manifest so Chrome doesn't emit an unrecognized-key warning.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Icons are now included; the remaining store-listing items live in the PR
description.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@stophecom stophecom merged commit e5a8d5f into dev Jul 7, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant