Skip to main content

max / makenotwork

Give the SyncKit keys endpoints their own credential /api/sync/keys/{claim,release,list} authenticated on the app's api_key alone. That value is compiled into every shipped client with include_str!, so it ships inside each binary and comes back out with `strings` -- anyone holding an AppImage or dmg could consume the app's key cap under per_key billing and pollute claim attribution under the app's identity. Split the two roles. api_key stays what it is, a public client identifier. The keys endpoints take an app_secret instead: generated from the dashboard, shown once, stored SHA-256 hashed, and meant only for a developer backend. No backfill and no fallback. An app that has not generated a secret cannot call those three routes at all; deriving one from the api_key would carry the same weakness forward. Nothing first-party calls them today. The dashboard action is a typed dispatcher module rather than another window.* global, per the frontend_globals ratchet.
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>
Author: Max Johnson <me@maxj.phd> · 2026-07-26 18:07 UTC
Signed with PGP, not checked
Commit: d9e243a3f3399d33083f8212b94bc8219b278826
Parent: a399abb
17 files changed, +428 insertions, -63 deletions