rowboat/apps/x/packages/shared/src
Ramnique Singh 50bce6c1d6 feat(oauth): switch Google OAuth from PKCE to authorization code flow with client secret
Previously, the Google OAuth integration used a PKCE-only flow (no client
secret). This switches to a standard authorization code flow where the user
provides both a Client ID and Client Secret from a "Web application" type
OAuth client in Google Cloud Console. PKCE is retained alongside the secret
for defense in depth.

Key changes:

- oauth-client.ts: discoverConfiguration() and createStaticConfiguration()
  now accept an optional clientSecret param. When provided, uses
  ClientSecretPost instead of None() for client authentication.

- oauth-handler.ts: connectProvider() takes a credentials object
  ({clientId, clientSecret}) instead of a bare clientId. Removed eager
  persistence of clientId before flow completion — credentials are now
  only saved after successful token exchange. Renamed resolveClientId to
  resolveClientCredentials to return both values from a single repo read.

- google-client-factory.ts: same resolveClientId → resolveCredentials
  rename. Passes clientSecret to OAuth2Client constructor and
  discoverConfiguration for token refresh.

- repo.ts: added clientSecret to ProviderConnectionSchema. Not exposed
  to renderer via ClientFacingConfigSchema (stays main-process only).

- IPC: added clientSecret to oauth:connect request schema. Handler builds
  a credentials object and passes it through.

- UI: GoogleClientIdModal now collects both Client ID and Client Secret
  (password field). Always shown on connect — no in-memory credential
  caching. Renamed google-client-id-store to google-credentials-store
  with a unified {clientId, clientSecret} object.

- google-setup.md: updated to instruct users to create a "Web application"
  type OAuth client (instead of UWP), add the localhost redirect URI, and
  copy both Client ID and Client Secret. Added credentials modal screenshot.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 00:43:34 +05:30
..
agent-schedule-state.ts feat: add background agents with scheduling support 2026-02-05 16:43:09 +05:30
agent-schedule.ts feat: add background agents with scheduling support 2026-02-05 16:43:09 +05:30
agent.ts bootstrap new electron app 2026-01-16 12:05:33 +05:30
bases.ts app navigation 2026-03-13 10:39:05 +05:30
blocks.ts Daily5 (#457) 2026-03-31 16:07:41 +05:30
composio.ts Feature/composio tools library (#461) 2026-04-06 13:30:46 +05:30
example.ts bootstrap new electron app 2026-01-16 12:05:33 +05:30
frontmatter.ts app navigation 2026-03-13 10:39:05 +05:30
index.ts Blocks (#439) 2026-03-18 23:33:12 +05:30
inline-task.ts Livenote2 (#440) 2026-03-19 01:34:10 +05:30
ipc.ts feat(oauth): switch Google OAuth from PKCE to authorization code flow with client secret 2026-04-10 00:43:34 +05:30
llm-step-events.ts feat(ui): surface LLM stream errors in chat 2026-02-16 08:34:51 +05:30
mcp.ts bootstrap new electron app 2026-01-16 12:05:33 +05:30
message.ts Add plus button to prompt input for file and image attachments (#381) 2026-02-26 21:41:17 +05:30
models.ts configure per-service model defaults for signed-in users 2026-03-24 23:04:49 +05:30
prefix-logger.ts bootstrap new electron app 2026-01-16 12:05:33 +05:30
rowboat-account.ts use deepgram ws proxy, simplify env vars 2026-03-24 11:50:22 +05:30
runs.ts add session and always permission scopes for command execution 2026-02-24 13:00:08 +05:30
service-events.ts Memory2 (#444) 2026-03-23 22:30:02 +05:30
workspace.ts bootstrap new electron app 2026-01-16 12:05:33 +05:30