Summary
Since ~2026-09-11 the extension no longer captures a Bearer ya29.* token, even with PR #13 applied (flow.google.com host permissions, captcha on /project/<id> tabs). Every request then fails with NO_FLOW_KEY while /health still reports has_flow_key: true (stale cache).
What I measured (headed Chrome 151, Xvfb, real logged-in PRO profile, PR #13 at c8216f5 plus the sticky-tab fix)
chrome.storage.local of the extension service worker: flowKeyStored: false, tokenCapturedAt: null, metrics.lastError: "NO_FLOW_KEY".
- Driving the handoff manually (
labs.google/fx/tools/flow) now lands directly on https://flow.google.com/ (server redirect). No request to aisandbox-pa.googleapis.com carrying Authorization: Bearer was observed during the handoff nor on a full reload of a /project/<id> page (Playwright request listener on the same tab).
- On project load the app issues only
POST flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute (16x) plus SAPISIDHASH-authenticated calls to ogads-pa.clients6.google.com and play.google.com/log. So the page-level RPCs moved to a cookie-authenticated batchexecute path.
POST /v1/refresh-tokens nudges the extension (nudged: 1), the extension logs refresh_flow_tab: forcing tab reload + re-capture, but no bearer appears afterwards.
- The Flow web UI itself keeps working in the same profile (composer with Frames/Start/End, Omni 1.1 Flash, 720p, credits shown), so the account and session are fine; only the token surface the extension relies on is gone.
Why it matters
The webRequest.onBeforeSendHeaders capture (background.js, startsWith('Bearer ya29.')) assumes the ya29 bearer is sent by the page during the labs.google handoff. That assumption no longer holds for this account/region, which makes flow image / flow video unusable even with PR #13.
Possible directions
- Check whether the generation call issued from the UI (composer "Start generation") still goes to
aisandbox-pa.googleapis.com with a bearer minted elsewhere (I did not trigger a paid generation while sniffing). If it does, the capture could hook that request instead of the handoff.
- Otherwise the bridge would need to speak the
batchexecute dialect with cookies (SAPISIDHASH), which is a larger change.
- Meanwhile,
/health should not report has_flow_key: true when the extension has no stored key; that masked the failure for me for a while.
Happy to run more measurements on this profile if useful.
Summary
Since ~2026-09-11 the extension no longer captures a
Bearer ya29.*token, even with PR #13 applied (flow.google.com host permissions, captcha on/project/<id>tabs). Every request then fails withNO_FLOW_KEYwhile/healthstill reportshas_flow_key: true(stale cache).What I measured (headed Chrome 151, Xvfb, real logged-in PRO profile, PR #13 at
c8216f5plus the sticky-tab fix)chrome.storage.localof the extension service worker:flowKeyStored: false,tokenCapturedAt: null,metrics.lastError: "NO_FLOW_KEY".labs.google/fx/tools/flow) now lands directly onhttps://flow.google.com/(server redirect). No request toaisandbox-pa.googleapis.comcarryingAuthorization: Bearerwas observed during the handoff nor on a full reload of a/project/<id>page (Playwright request listener on the same tab).POST flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute(16x) plusSAPISIDHASH-authenticated calls toogads-pa.clients6.google.comandplay.google.com/log. So the page-level RPCs moved to a cookie-authenticatedbatchexecutepath.POST /v1/refresh-tokensnudges the extension (nudged: 1), the extension logsrefresh_flow_tab: forcing tab reload + re-capture, but no bearer appears afterwards.Why it matters
The
webRequest.onBeforeSendHeaderscapture (background.js,startsWith('Bearer ya29.')) assumes the ya29 bearer is sent by the page during the labs.google handoff. That assumption no longer holds for this account/region, which makesflow image/flow videounusable even with PR #13.Possible directions
aisandbox-pa.googleapis.comwith a bearer minted elsewhere (I did not trigger a paid generation while sniffing). If it does, the capture could hook that request instead of the handoff.batchexecutedialect with cookies (SAPISIDHASH), which is a larger change./healthshould not reporthas_flow_key: truewhen the extension has no stored key; that masked the failure for me for a while.Happy to run more measurements on this profile if useful.