You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Follow-up to the local-only change (see the PR from refactor/local-only-remove-cloud). That PR makes the shipped product local-only; this issue covers retiring the backend it used to talk to.
Deliberately kept out of that PR: none of the items below ship in the npm package (files: is bin/, src/, dashboard/dist/, two scripts, LICENSE, README), so a CLI user never sees them, and deleting the source here does not undeploy anything. Sequencing depends on whether the deployed backend must keep serving users still on a cloud build.
Scope
dashboard/edge-patches/ — 18 InsForge edge functions, including tokentracker-ingest.ts (the endpoint the removed CLI uploader POSTed to), tokentracker-leaderboard{,-refresh,-profile}.ts, the four tokentracker-device-* functions, and tokentracker-public-visibility.ts. They import npm:@insforge/sdk and read INSFORGE_SERVICE_ROLE_KEY.
CI still injects InsForge credentials into every build: .github/workflows/ci.yml:62-63, npm-publish.yml:38-39,82-83, release-dmg.yml:97-98, release-windows.yml:75-76. Comments there describe consequences that can no longer occur — release-dmg.yml:90-93 warns that omitting them "disables cloud OAuth (isCloudInsforgeConfigured() returns false)", referencing a deleted function. Also .env.example, dashboard/.env.example, dashboard/.mcp.json.
Native apps still ship a full OAuth flow against a server that will not answer: TokenTrackerBar/.../TokenTrackerBarApp.swift:78,80 and DashboardWindowController.swift:61,363-393; TokenTrackerWin/DashboardWindow.cs:197-201,266-281,503-516 and ServerManager.cs:159-168 (which pins a port "in InsForge's allowed-redirect-URL list").
dashboard/vercel.json — SPA rewrite config for a deploy that no longer exists.
dashboard/vite.config.js:1192-1200 — a working /api/auth proxy to InsForge with cookieDomainRewrite, dormant behind VITE_INSFORGE_BASE_URL. Dev-server only, does not ship, but it is the last live cloud code path in the repo.
SECURITY.md:34 describes an insforge/ directory that is not at that path; docs/npm-publish-checklist.md:74-78 still checks for device tokens and leaderboard absence.
The actual security action
Rotating or revoking the InsForge service-role key at the source is the real remediation — editing the YAML is not. Any key that has been in CI should be treated as exposed to everything that ever ran there.
Related, already handled in the PR: an upgrading install kept a live deviceToken in config.json because init spread the old config forward, and the same release removed the status/diagnostics lines that used to reveal it. init now scrubs it and unlinks relay-cookies.json, upload.throttle.json and auto.retry.json.
Also noted, low priority
Removed endpoints such as /api/auth/refresh return 200 with the SPA shell rather than 404, because src/commands/serve.js:141 has an unconditional SPA fallback for unmatched paths. Pre-existing and no caller remains, but a stale client would read 200 as success.
Follow-up to the local-only change (see the PR from
refactor/local-only-remove-cloud). That PR makes the shipped product local-only; this issue covers retiring the backend it used to talk to.Deliberately kept out of that PR: none of the items below ship in the npm package (
files:isbin/,src/,dashboard/dist/, two scripts, LICENSE, README), so a CLI user never sees them, and deleting the source here does not undeploy anything. Sequencing depends on whether the deployed backend must keep serving users still on a cloud build.Scope
dashboard/edge-patches/— 18 InsForge edge functions, includingtokentracker-ingest.ts(the endpoint the removed CLI uploader POSTed to),tokentracker-leaderboard{,-refresh,-profile}.ts, the fourtokentracker-device-*functions, andtokentracker-public-visibility.ts. They importnpm:@insforge/sdkand readINSFORGE_SERVICE_ROLE_KEY..github/workflows/ci.yml:62-63,npm-publish.yml:38-39,82-83,release-dmg.yml:97-98,release-windows.yml:75-76. Comments there describe consequences that can no longer occur —release-dmg.yml:90-93warns that omitting them "disables cloud OAuth (isCloudInsforgeConfigured()returns false)", referencing a deleted function. Also.env.example,dashboard/.env.example,dashboard/.mcp.json.TokenTrackerBar/.../TokenTrackerBarApp.swift:78,80andDashboardWindowController.swift:61,363-393;TokenTrackerWin/DashboardWindow.cs:197-201,266-281,503-516andServerManager.cs:159-168(which pins a port "in InsForge's allowed-redirect-URL list").dashboard/vercel.json— SPA rewrite config for a deploy that no longer exists.dashboard/vite.config.js:1192-1200— a working/api/authproxy to InsForge withcookieDomainRewrite, dormant behindVITE_INSFORGE_BASE_URL. Dev-server only, does not ship, but it is the last live cloud code path in the repo.SECURITY.md:34describes aninsforge/directory that is not at that path;docs/npm-publish-checklist.md:74-78still checks for device tokens and leaderboard absence.The actual security action
Rotating or revoking the InsForge service-role key at the source is the real remediation — editing the YAML is not. Any key that has been in CI should be treated as exposed to everything that ever ran there.
Related, already handled in the PR: an upgrading install kept a live
deviceTokeninconfig.jsonbecauseinitspread the old config forward, and the same release removed thestatus/diagnosticslines that used to reveal it.initnow scrubs it and unlinksrelay-cookies.json,upload.throttle.jsonandauto.retry.json.Also noted, low priority
Removed endpoints such as
/api/auth/refreshreturn 200 with the SPA shell rather than 404, becausesrc/commands/serve.js:141has an unconditional SPA fallback for unmatched paths. Pre-existing and no caller remains, but a stale client would read 200 as success.