id = "proxyman" name = "Proxyman" homepage = "https://proxyman.com" # The sentence proxyman.com publishes about itself in its own SoftwareApplication # metadata, first clause. description = "Proxyman is a native, high-performance HTTP debugging proxy app for macOS, iOS, Android, Windows, and Linux." # The app icon, from the apple-touch-icon on proxyman.com. icon = "https://proxyman.com/favicon/apple-touch-icon.png?v=4" # `proxyman-cli` is the command line the app ships — the Homebrew cask links # $APPDIR/Proxyman.app/Contents/MacOS/proxyman-cli into the Homebrew prefix — # and com.proxyman.NSProxy is the bundle identifier, from the same cask's quit # and launchctl stanzas (https://formulae.brew.sh/api/cask/proxyman.json). The # `-setapp` variant is the Setapp build; this Mac's copy at # /Applications/Setapp/Proxyman.app reports CFBundleIdentifier # com.proxyman.NSProxy-setapp. executables = ["proxyman-cli"] [installation] macos_bundle_ids = ["com.proxyman.NSProxy", "com.proxyman.NSProxy-setapp"] [dotfiles] # Only the macOS locations are listed. Proxyman also ships Windows and Linux # builds, and where those keep their data is not verified here, so the paths # below are written with the macOS spellings rather than a named root that # would claim a location on the other two. # # The directories come from the cask's zap stanza and were checked against this # Mac's Setapp install: # ~/Library/Application Support/com.proxyman.NSProxy/user-data — the rules # the user builds: MapLocalFiles, MapRemoteService, BreakpointFiles-RuleTree, # ScriptService-RuleTree, BlacklistFiles, SSLList-, SourceList-, # SavedRequests and WorkspaceList, all JSON. # .../scripts and .../map-local — the script and map-local bodies those rules # point at. # ~/Library/Preferences/com.proxyman.NSProxy.plist — the app's NSUserDefaults # domain. [preferences] is macOS-only, so it names one place either way. # The `*` after NSProxy is the `-setapp` suffix: a Mac has whichever build was # installed, and both hold the same settings. paths = [ "~/Library/Application Support/com.proxyman.NSProxy*/user-data/", "~/Library/Application Support/com.proxyman.NSProxy*/scripts/", "~/Library/Application Support/com.proxyman.NSProxy*/map-local/", "[preferences]/com.proxyman.NSProxy.plist", ] # The sibling `addons` directory is the JavaScript snippet library Proxyman # ships with the app (Base64.js, FormatJSON.js and so on) rather than anything # the user wrote, and `certificates`, `protobuf` and `user-data-backups` are # generated; none of them is named above, so there is nothing to carve out. # Two whole-file credentials: # ~/.proxyman/proxyman-key.pem is the private key of the man-in-the-middle # certificate authority Proxyman generates for this machine. Verified on # this Mac, where ~/.proxyman holds proxyman-ca.pem and proxyman-key.pem; # the cask's zap stanza names the `~/.proxyman*` directories too. Anyone # holding that key can decrypt traffic trusted by this machine's keychain. # The `.keychain` beside user-data is Proxyman's own keychain file — this Mac # has com.proxyman.NSProxy-setapp.Proxyman.keychain — which is a credential # store end to end. secret = [ "~/.proxyman/proxyman-key.pem", "~/Library/Application Support/com.proxyman.NSProxy*/*.keychain", ] # No machine_lines: the rule files are JSON, but every field in them is a # hostname pattern, a status code or a response body the user authored, which # is the reason to carry them; and the preferences file is a property list, # which `match` cannot read at all.