Skip to content

fix(macos): scope App Transport Security exception - #122

Merged
SarthakWade merged 3 commits into
mainfrom
fix/macos-transport-security
Aug 12, 2026
Merged

fix(macos): scope App Transport Security exception#122
SarthakWade merged 3 commits into
mainfrom
fix/macos-transport-security

Conversation

@SarthakWade

Copy link
Copy Markdown
Collaborator

Summary

  • remove the process-wide NSAllowsArbitraryLoads exception from the macOS app
  • retain HTTP compatibility only inside WKWebView with NSAllowsArbitraryLoadsInWebContent
  • add a packaging invariant that validates the plist and rejects any future blanket ATS exception
  • document the scoped macOS HTTP boundary and mark backlog item E8 complete

Security rationale

Apple documents NSAllowsArbitraryLoadsInWebContent as the scoped way to allow web-view HTTP while keeping ATS enabled for native application networking. This preserves Headless's HTTP/HTTPS browser contract without weakening unrelated app connections.

Reference: https://developer.apple.com/documentation/bundleresources/information-property-list/nsapptransportsecurity/nsallowsarbitraryloadsinwebcontent

Verification

  • macOS production app build and positive plist invariant
  • negative plist mutation proving NSAllowsArbitraryLoads is rejected
  • pnpm test (44/44 protocol tests and MCP integration)
  • pnpm test:runtime
  • pnpm --filter @headless/web lint
  • pnpm --filter @headless/web build
  • Prettier check on all changed Markdown files
  • pnpm test:e2e:mac over the local HTTP fixture
  • pnpm test:e2e:linux

Closes #46

@SarthakWade
SarthakWade marked this pull request as ready for review August 12, 2026 16:06
@SarthakWade
SarthakWade merged commit d45b66b into main Aug 12, 2026
12 checks passed
@SarthakWade
SarthakWade deleted the fix/macos-transport-security branch August 12, 2026 16:06
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.

E8 — Scope NSAllowsArbitraryLoads instead of blanket-true

1 participant