Skip to content

feat/granola connector#1007

Merged
graphite-app[bot] merged 1 commit into
mainfrom
feat/granola-connector
Jun 3, 2026
Merged

feat/granola connector#1007
graphite-app[bot] merged 1 commit into
mainfrom
feat/granola-connector

Conversation

@sreedharsreeram
Copy link
Copy Markdown
Member

No description provided.

@cloudflare-workers-and-pages
Copy link
Copy Markdown

cloudflare-workers-and-pages Bot commented May 26, 2026

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Updated (UTC)
✅ Deployment successful!
View logs
supermemory-mcp 63a90d1 Jun 03 2026, 03:21 PM

@claude
Copy link
Copy Markdown

claude Bot commented May 26, 2026

Claude finished @sreedharsreeram's task in 2m 13s —— View job


Code Review: Granola Connector

  • Fetch PR diff and existing review comments
  • Analyze changed files for bugs and security issues
  • Check if previous review issues have been addressed
  • Submit review summary

Overview: Adds a Granola connector that allows users to sync AI meeting notes via API key authentication.

Previous Review Issues - Status:

Issue Status
redirectUrl: window.location.href unused ✅ Fixed - removed from code
Dead code if (isMaxUser) guard ✅ Fixed - removed
granola not in import provider enum ✅ Fixed - added at packages/lib/api.ts:163
GranolaConnectModal not wired in settings ⚪ Not a bug - Settings uses AddDocumentModal which properly includes GranolaConnectModal
Base64 PNG icon instead of SVG paths ⚪ Minor - works correctly, just suboptimal for bundle size/scaling

Security Review:

  • ✅ API key input uses type="password" and autoComplete="off"
  • ✅ Form state properly cleared when modal opens
  • ✅ Error messages rendered as text (no XSS risk)
  • ✅ Key transmitted in POST body over HTTPS

Code Quality:

  • ✅ API schema correctly makes authLink/expiresIn optional for credential-based providers
  • ✅ Follows existing connector patterns
  • ✅ Proper React Query cache invalidation
  • getConnectionSubtitle() handles Granola's lack of email gracefully

Issues found: None that would cause production incidents.

Score: 10/10

Clean implementation. The previous review issues have been addressed. The icon using a base64 PNG is suboptimal but functional - can be improved in a follow-up if desired.

@cloudflare-workers-and-pages
Copy link
Copy Markdown

cloudflare-workers-and-pages Bot commented May 26, 2026

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
supermemory-app 63a90d1 Commit Preview URL

Branch Preview URL
Jun 03 2026, 03:22 PM

Copy link
Copy Markdown

@claude claude Bot left a comment

Choose a reason for hiding this comment

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

Code Review: Granola Connector

Overview: Adds a Granola connector that allows users to sync AI meeting notes and transcripts via API key authentication.

Security Review:

  • ✅ API key input uses type="password" and autoComplete="off" — prevents visibility and browser caching
  • ✅ Form state is properly cleared when modal opens via useEffect
  • ✅ Error messages are rendered as text content (no XSS risk)
  • ✅ Key is transmitted in POST body over HTTPS

Code Quality:

  • ✅ API schema correctly makes authLink/expiresIn optional for credential-based providers
  • ✅ Follows existing connector patterns in the codebase
  • ✅ Proper error handling with user-friendly error messages
  • ✅ Clean integration with React Query for cache invalidation
  • getConnectionSubtitle() helper handles Granola's lack of email gracefully

Issues found: None — this looks good to ship.

Score: 10/10

Clean implementation that follows established patterns. The credential-based authentication flow is handled correctly, and security best practices are followed for API key handling.

@sreedharsreeram sreedharsreeram requested review from MaheshtheDev and removed request for Dhravya May 26, 2026 03:36
Comment thread apps/web/components/granola-connect-modal.tsx
@sreedharsreeram sreedharsreeram force-pushed the feat/granola-connector branch from acf2e8b to 5a3f499 Compare June 3, 2026 05:23
Copy link
Copy Markdown
Contributor

@vorflux vorflux Bot left a comment

Choose a reason for hiding this comment

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

Comment thread packages/lib/api.ts
@@ -158,6 +160,7 @@ export const apiSchema = createSchema({
"github",
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

test comment

Copy link
Copy Markdown
Contributor

@vorflux vorflux Bot left a comment

Choose a reason for hiding this comment

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

Overall solid — modal flow, plan-gating, API schema changes, and subtitle helper are well done. A few issues below.


Review with Vorflux

width="96"
height="96"
/>
</svg>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The Granola icon embeds a base64 PNG inside an SVG <image> element, while every other icon in this file uses native SVG paths. This adds ~3KB to the bundle and the raster won't scale cleanly. Replace with proper inline SVG path data from the Granola brand kit.

body: {
containerTags,
metadata: { apiKey: key },
redirectUrl: window.location.href,
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

redirectUrl: window.location.href is copied from OAuth providers. Granola is credential-based with no redirect flow, so this field is unused — remove it.

icon: OneDrive,
documentLabel: "documents",
},
granola: {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Granola is added to CONNECTORS here but GranolaConnectModal is not imported or wired up in this file. Users on the Settings page will see the row but cannot connect. Mirror the modal state and rendering from connections.tsx.

<DropdownMenuItem
disabled={!isMaxUser}
onClick={() => {
if (isMaxUser) setGranolaModalOpen(true)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Dead code: disabled={!isMaxUser} on DropdownMenuItem already prevents clicks, so the if (isMaxUser) guard inside onClick is unreachable. Remove the inner check.

Comment thread packages/lib/api.ts
@@ -158,6 +160,7 @@ export const apiSchema = createSchema({
"github",
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The @post/connections/:provider/import provider enum does not include granola. If Granola supports manual re-syncs, add it here — otherwise the trigger-sync button will be broken for Granola rows.

@graphite-app
Copy link
Copy Markdown

graphite-app Bot commented Jun 3, 2026

Merge activity

@graphite-app graphite-app Bot force-pushed the feat/granola-connector branch from 2589519 to 63a90d1 Compare June 3, 2026 15:19
@graphite-app graphite-app Bot merged commit 63a90d1 into main Jun 3, 2026
6 of 7 checks passed
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