feat/granola connector#1007
Conversation
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ✅ Deployment successful! View logs |
supermemory-mcp | 63a90d1 | Jun 03 2026, 03:21 PM |
|
Claude finished @sreedharsreeram's task in 2m 13s —— View job Code Review: Granola Connector
Overview: Adds a Granola connector that allows users to sync AI meeting notes via API key authentication. Previous Review Issues - Status:
Security Review:
Code Quality:
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. |
Deploying with
|
| 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 |
There was a problem hiding this comment.
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"andautoComplete="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/expiresInoptional 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.
acf2e8b to
5a3f499
Compare
| @@ -158,6 +160,7 @@ export const apiSchema = createSchema({ | |||
| "github", | |||
| width="96" | ||
| height="96" | ||
| /> | ||
| </svg> |
There was a problem hiding this comment.
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, |
There was a problem hiding this comment.
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: { |
There was a problem hiding this comment.
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) |
There was a problem hiding this comment.
Dead code: disabled={!isMaxUser} on DropdownMenuItem already prevents clicks, so the if (isMaxUser) guard inside onClick is unreachable. Remove the inner check.
| @@ -158,6 +160,7 @@ export const apiSchema = createSchema({ | |||
| "github", | |||
There was a problem hiding this comment.
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.
Merge activity
|
2589519 to
63a90d1
Compare
No description provided.