Skip to content

feat(zoom): add KB connector for cloud recording transcripts, fix refresh token rotation#4735

Open
waleedlatif1 wants to merge 2 commits into
stagingfrom
waleedlatif1/kb-connector-suggestions
Open

feat(zoom): add KB connector for cloud recording transcripts, fix refresh token rotation#4735
waleedlatif1 wants to merge 2 commits into
stagingfrom
waleedlatif1/kb-connector-suggestions

Conversation

@waleedlatif1
Copy link
Copy Markdown
Collaborator

Summary

  • adds Zoom knowledge base connector — syncs cloud meeting transcripts (VTT) via OAuth, with TRANSCRIPT → CC fallback, incremental sync, and 30-day window pagination
  • fixes supportsRefreshTokenRotation for Zoom (was false) — Zoom rotates refresh tokens every refresh, so the old setting would force users to re-auth after first token refresh

Type of Change

  • New feature
  • Bug fix

Testing

Tested manually — type-check, lint, and connector test suite (86 tests) all pass. Live Zoom OAuth flow not exercised; needs sanity check with a real account that has cloud recordings.

Checklist

  • Code follows project style guidelines
  • Self-reviewed my changes
  • Tests added/updated and passing
  • No new warnings introduced
  • I confirm that I have read and agree to the terms outlined in the Contributor License Agreement (CLA)

@vercel
Copy link
Copy Markdown

vercel Bot commented May 24, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
docs Skipped Skipped May 24, 2026 9:20pm

Request Review

@cursor
Copy link
Copy Markdown

cursor Bot commented May 24, 2026

PR Summary

Medium Risk
New OAuth-backed external sync plus an auth refresh-token behavior change; incorrect rotation handling would break long-lived Zoom connections.

Overview
Adds a Zoom knowledge-base connector and registers it in CONNECTOR_REGISTRY, so users can ingest cloud recording transcripts via OAuth.

The connector lists the authenticated user’s recordings in 30-day windows (with cursor pagination), prefers TRANSCRIPT VTT files over CC, defers full text until getDocument (downloads VTT, parses to plain text), and supports incremental sync with a configurable lookback and optional max recordings cap. Meeting metadata is exposed as filterable tags (topic, host, duration, date).

Separately, Zoom OAuth is corrected so supportsRefreshTokenRotation is true, so rotated refresh tokens from Zoom are persisted instead of forcing re-auth after the first refresh.

Reviewed by Cursor Bugbot for commit 1b72668. Configure here.

Comment thread apps/sim/connectors/zoom/zoom.ts
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented May 24, 2026

Greptile Summary

This PR adds a Zoom knowledge-base connector that syncs cloud meeting transcripts (VTT) via OAuth, and fixes a refresh-token rotation bug that was forcing Zoom users to re-authenticate after every token refresh.

  • New Zoom KB connector (connectors/zoom/zoom.ts): lists cloud recordings in 30-day sliding windows over a configurable lookback period, picks TRANSCRIPT → CC transcript files, fetches and parses VTT content on demand (contentDeferred), enforces an optional maxRecordings cap per sync, and supports incremental sync by narrowing the lookback window to sinceLastSync + 7d.
  • OAuth fix (lib/oauth/oauth.ts): supportsRefreshTokenRotation for Zoom is corrected from false to true, matching Zoom's documented token-rotation behavior and preventing silent re-auth failures after the first refresh.
  • Registry wiring (connectors/registry.ts, connectors/zoom/index.ts): zoomConnector is imported and registered following the same barrel-export pattern used by all other connectors.

Confidence Score: 5/5

Safe to merge — the connector is well-structured, the maxRecordings cap fix from a prior review is already in place, and the refresh-token rotation correction unblocks Zoom OAuth users without touching any other provider.

The connector follows established patterns, window-based pagination and incremental sync are sound, and the VTT parser edge case from a prior review is already resolved. The two suggestions are hardening-only and do not affect correctness under normal Zoom API responses.

No files require special attention. The oauth.ts change is a single targeted line.

Important Files Changed

Filename Overview
apps/sim/connectors/zoom/zoom.ts New Zoom KB connector: implements listDocuments with 30-day window pagination, getDocument for deferred VTT content, validateConfig, and mapTags. The maxRecordings cap fix from a prior review is already applied.
apps/sim/lib/oauth/oauth.ts Single-line fix: supportsRefreshTokenRotation changed from false to true for Zoom, correctly reflecting that Zoom rotates refresh tokens on every refresh cycle.
apps/sim/connectors/registry.ts Adds the new zoomConnector import and entry to CONNECTOR_REGISTRY. Follows the established pattern exactly.
apps/sim/connectors/zoom/index.ts Barrel re-export for zoomConnector, consistent with how other connectors expose their export.

Reviews (2): Last reviewed commit: "fix(zoom): trim maxRecordings within pag..." | Re-trigger Greptile

Comment thread apps/sim/connectors/zoom/zoom.ts Outdated
Comment thread apps/sim/connectors/zoom/zoom.ts
@waleedlatif1
Copy link
Copy Markdown
Collaborator Author

@greptile

@waleedlatif1
Copy link
Copy Markdown
Collaborator Author

@cursor review

Copy link
Copy Markdown

@cursor cursor Bot left a comment

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 and found 1 potential issue.

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 1b72668. Configure here.


const sinceLastSync = Math.ceil((Date.now() - lastSyncAt.getTime()) / MS_PER_DAY)
const incremental = Math.max(sinceLastSync + INCREMENTAL_OVERLAP_DAYS, INCREMENTAL_OVERLAP_DAYS)
return Math.min(incremental, baseline)
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Incremental sync misses late transcripts

Medium Severity

With incremental sync, computeLookbackDays shrinks the recordings query to roughly days since lastSyncAt plus seven. Meetings outside that window are never listed again, so recordings that had no completed transcript on an earlier pass but later get one can be skipped permanently unless the user runs a full sync.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 1b72668. Configure here.

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.

1 participant