🚀 Granola Sync Plus 1.12.1
Fixed
- 🌐 API mode now works on machines where Obsidian's network stack is blocked: On some machines, Obsidian's
requestUrl()(Electron/Chromium's network stack) cannot reachpublic-api.granola.aiat all — it rejects with a barenet::ERR_FAILEDbefore any HTTP response — even thoughcurland Node succeed from the same machine and network. Diagnosed live with the reporting user, with VPN, proxy, and MDM/EDR causes individually ruled out; the remaining culprit is a client-side difference in how Electron negotiates with Granola's load balancer. WhenrequestUrlfails at the network level, the plugin now retries the request once through Node'shttpsmodule (a different network stack) before giving up. The fallback is bounded by a 30-second timeout and race-guarded against double settlement, and only engages afterrequestUrlhas already thrown, so machines where the existing path works are unaffected. Reported by @andrewsong-usm in #66; fixed by @andrewsong-tech in #68. - 🔎 Auth failures now show Granola's actual error: 401/403 responses from the official API carry a structured
{ code, message }body (e.g.MISSING_API_KEY,INVALID_API_KEY) that distinguishes "no key sent" from "malformed key" from "revoked key / wrong plan". The error notice now surfaces that message instead of only the status code.
Documentation
- The readme now documents the official API key auth mode (which shipped in 1.12.0 undocumented): setup steps, Business/Enterprise plan requirement, API-mode limitations, and a troubleshooting section for
net::ERR_FAILED-style connectivity failures. The "Network use & background activity" section correctly listspublic-api.granola.aias a contacted host in API mode.
Credits
- Thanks to @andrewsong-tech for diagnosing the Electron-vs-Node network stack issue directly with the affected user and contributing the fallback in #68.
📦 Installation
- Download
main.js,manifest.json, andstyles.cssbelow - Create folder
.obsidian/plugins/granola-sync-plus/in your vault - Place all three files in the folder
- Enable the plugin in Obsidian Settings → Community Plugins
Builds are signed with GitHub artifact attestations. Verify with gh attestation verify main.js --repo dannymcc/Granola-to-Obsidian.