Skip to content

feat(imports): connect meeting history via OAuth and CLI - #6949

Merged
ComputelessComputer merged 3 commits into
mainfrom
cursor/zoom-oauth-connection-0bb4
Aug 20, 2026
Merged

feat(imports): connect meeting history via OAuth and CLI#6949
ComputelessComputer merged 3 commits into
mainfrom
cursor/zoom-oauth-connection-0bb4

Conversation

@ComputelessComputer

@ComputelessComputer ComputelessComputer commented Aug 20, 2026

Copy link
Copy Markdown
Collaborator

Zoom, Fathom, Notion AI Meeting Notes, Webex, Microsoft Teams, and Google Meet now use Connect & import via Nango OAuth. Plaud, the only CLI-only source, now uses the same button by running the official plaud CLI locally — no agent loop.

What changed

  • Desktop rows for these sources use Connect & import, then sync meetings in the background while Anarlog is running.
  • OAuth import endpoints fetch recent transcripts/notes through the existing meeting-import pipeline:
    • POST /zoom/import-meetings — Zoom cloud recordings, optional AI summaries, VTT transcripts (~6 months)
    • POST /fathom/import-meetings — Fathom meetings plus per-recording transcript/summary
    • POST /notion/import-meetings — Notion AI meeting notes (reuses the existing Notion connection; uses Notion-Version 2026-03-11 for this path only)
    • POST /webex/import-meetings — Webex meeting transcripts (VTT)
    • POST /google-meet/import-meetings — Google Meet conference records and transcript entries (~30 day retention)
    • POST /microsoft-teams/import-meetings — Teams calendar online meetings and VTT transcripts
  • Plaud CLI: Anarlog resolves plaud on PATH (and common Node.js bin folders), runs plaud login when needed, then plaud files / file / transcript / summary. Output is parsed deterministically into the existing import JSON. Requires @plaud-ai/cli (npm install -g @plaud-ai/cli).
  • File import remains available from each connected row menu.
  • Web integration connect/disconnect pages label the OAuth sources instead of falling back to the raw integration id.
  • Google Meet is always listed because it is typically used in the browser rather than as a native app.

Nango session creation and the OAuth import routes are Pro-gated, like other Nango integrations. Plaud stays local (CLI tokens in ~/.plaud).

Scopes / ops notes

  • Zoom: user:read:user cloud_recording:read:list_user_recordings meeting:read:summary (user-managed OAuth app)
  • Fathom: public_api (Nango fathom; OAuth apps cannot inline transcript/summary on list)
  • Webex: spark:people_read meeting:schedules_read meeting:transcripts_read
  • Google Meet: https://www.googleapis.com/auth/meetings.space.readonly
  • Microsoft Teams: offline_access User.Read Calendars.Read OnlineMeetings.Read OnlineMeetingTranscript.Read.All (work/school accounts; OnlineMeetingTranscript.Read.All needs admin consent)
  • Notion: existing dashboard scopes; meeting-notes query requires Read content and AI meeting notes for the connected user
  • Plaud: local CLI only. Allowlisted plaud binary; does not shell out to arbitrary commands.

Testing

  • cargo test -p meeting-import --lib
  • cargo clippy -p meeting-import --locked -- -D warnings
  • cargo test -p api-nango --lib
  • cargo clippy -p meeting-import -p api-meeting-import -p api-notion -p api-nango --locked -- -D warnings
  • cargo test -p api gen_openapi_json and openapi::tests::nango_meeting_import_paths_are_protected
  • pnpm -F desktop typecheck and pnpm -F desktop test (3222 passed)
  • pnpm exec oxlint --quiet --format=github apps/desktop/src/
  • pnpm -F web typecheck and pnpm -F desktop i18n:check

cargo clippy -p tauri-plugin-importer was skipped here (this pod has GTK runtime but not gdk-3.0.pc / gtk-dev headers). CI macOS/Linux desktop jobs have those libs.

Open in Web Open in Cursor 

Add a Nango Zoom OAuth flow on the meeting-import screen so Zoom can
Connect & import like Granola, fetching cloud recordings, transcripts,
and summaries through POST /zoom/import-meetings.

Co-authored-by: John Jeong <ComputelessComputer@users.noreply.github.com>
@netlify

netlify Bot commented Aug 20, 2026

Copy link
Copy Markdown

Deploy Preview for anarlog canceled.

Name Link
🔨 Latest commit 373bbd5
🔍 Latest deploy log https://app.netlify.com/projects/anarlog/deploys/6a86b7815f48e400096a7e07

Add Nango OAuth Connect & import for the remaining transcript sources, using the same desktop sync path as Zoom. Fathom, Webex, Google Meet, and Teams get dedicated import routes; Notion meeting notes reuse the existing Notion connection with a newer API version.

Co-authored-by: John Jeong <ComputelessComputer@users.noreply.github.com>
@cursor cursor Bot changed the title feat(imports): connect Zoom history via OAuth feat(imports): connect meeting history via OAuth Aug 20, 2026
Plaud is the only CLI-only source. Connect & import now resolves `plaud`,
runs login when needed, then lists recordings and pulls transcript/summary
stdout into the existing import parser. No agent loop.

Co-authored-by: John Jeong <ComputelessComputer@users.noreply.github.com>
@cursor cursor Bot changed the title feat(imports): connect meeting history via OAuth feat(imports): connect meeting history via OAuth and CLI Aug 20, 2026
@ComputelessComputer
ComputelessComputer marked this pull request as ready for review August 20, 2026 08:17
@ComputelessComputer
ComputelessComputer merged commit 660bf9f into main Aug 20, 2026
18 checks passed

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using default effort and found 2 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 373bbd5. Configure here.

headers,
);
await cancelNangoConnectionIfRequested(signal);
return waitForNangoConnection(provider.name, integrationId, headers, signal);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Failed OAuth still waits five minutes

Medium Severity

connectNangoImport always polls Nango after openIntegrationUrl, but that helper swallows failures (toast only, no throw). If session creation or the browser open fails, the UI still waits until the five-minute timeout instead of stopping on the error already shown.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 373bbd5. Configure here.

}
tokio::time::sleep(Duration::from_millis(100)).await;
}
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Plaud login URL wait is too short

Medium Severity

Plaud login is spawned with piped stdio and CI=1 so the CLI should print a URL instead of opening a browser, but the URL is only waited on for five seconds. If the line is delayed or stdout-buffered, authorizationUrl stays empty, the desktop app never opens the link, and login waits until it times out.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 373bbd5. Configure here.

@ComputelessComputer
ComputelessComputer deleted the cursor/zoom-oauth-connection-0bb4 branch August 20, 2026 17:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants