Skip to content

Releases: gabrielrubens/pensio-obsidian-sync

0.5.0: See where your vault is in the analysis queue

Choose a tag to compare

@github-actions github-actions released this 29 Jul 20:25

0.5.0 — See where your vault is in the analysis queue

Nothing to re-pair, and no change to how syncing works. This release answers a question the plugin used to leave hanging: you sync a few hundred notes, every one succeeds, and then nothing seems to happen for a long time.

Here is why. Syncing is instant and unlimited. The emotion and theme analysis that powers Pensio's insights is what runs on a daily allowance — 10 notes a day on the free plan, unlimited on Pro. So a 600-note vault finishes syncing in minutes but keeps analyzing for a few weeks. That was always how it worked; the plugin simply never said so, which made a healthy import look stuck.

Now it tells you:

  • A short note when the day's allowance runs out — how many were analyzed, how many are still waiting, and roughly how long the rest will take. Click it to see the plan options.
  • A status line in the plugin settings, with an upgrade button when the allowance is spent.
  • "Check sync status" now shows the analysis queue alongside your entry counts.

Deliberately quiet: the note appears at most once a day, not on every sync.

Your notes are never held back. Everything you sync is saved in Pensio and readable right away — it is only the emotional analysis that queues up.

If you point the plugin at your own Pensio server, this stays hidden until that server reports queue information.

0.4.4: Type-safety pass for Community Plugins review

Choose a tag to compare

@gabrielrubens gabrielrubens released this 10 Jul 22:47

0.4.4 — Type-safety pass for the Community Plugins review

No behavior changes, nothing to re-pair. Clears the remaining type-safety warnings from the review tooling.

  • Modernized the TypeScript config (target/lib → ES2018) to match what the plugin actually builds to, so modern APIs (Object.entries, crypto, typed arrays) are fully typed.
  • Made a few hashing / device-id / state-restore expressions explicitly typed so no checker can infer any.

Under the hood only — your setup, tokens, and sync history are untouched.

0.4.3: Code-quality pass for Community Plugins review

Choose a tag to compare

@gabrielrubens gabrielrubens released this 10 Jul 21:45

0.4.3 — Code-quality pass for the Community Plugins review

No behavior changes and nothing to re-pair. This release addresses the automated review feedback from the Obsidian Community Plugins submission.

  • Type-safe error handling throughout — every network/error path is now strictly typed (no any), with a small shared error helper
  • Popout-window compatibility — all timers use window.setTimeout/setInterval as Obsidian recommends
  • Promise safety — background tasks are explicitly handled (no floating/misused promises)
  • Tooling — migrated to ESLint flat config with the official eslint-plugin-obsidianmd ruleset (now enforced in CI), replaced the builtin-modules dependency with Node's built-in list
  • README — clarified the wiki-link example formatting

Under the hood only — your setup, tokens, and sync history are untouched.

0.4.2: Renamed to Pensio Journaling Sync

Choose a tag to compare

@gabrielrubens gabrielrubens released this 03 Jul 10:50

0.4.2 — Renamed to "Pensio Journaling Sync"

The plugin is now Pensio Journaling Sync (was "Pensio Sync"). Metadata-only release — no behavior changes, and nothing to re-pair. The rename makes the plugin easier to find in the Obsidian Community Plugins search and reads more clearly in the directory.

  • Display name → Pensio Journaling Sync
  • Sharper description: sync your journal to Pensio for AI-powered journaling insights — emotion and mood tracking, relationship mapping, and weekly reflections
  • The in-app settings entry now reads "Pensio Journaling Sync"; the setup instructions on the Pensio web app were updated to match

Installing via BRAT? This updates in place — the plugin id is unchanged, so your connection and settings are preserved.

0.4.1: Community Plugins submission prep + beta labeling

Choose a tag to compare

@gabrielrubens gabrielrubens released this 03 Jul 10:14

0.4.1 — Community Plugins submission prep + beta labeling

Metadata-only release, no behavior changes.

  • Plugin description and author link updated for the Obsidian Community Plugins directory submission
  • Beta badge in the settings header and a beta note in the README — Pensio Sync is in open beta while the directory listing is under review; BRAT is the recommended install until then
  • More precise token-storage wording: Obsidian SecretStorage is backed by the OS keychain on desktop and app-local storage on mobile — tokens never live inside your vault files either way

0.4.0: Reliable authentication + setup-code pairing

Choose a tag to compare

@gabrielrubens gabrielrubens released this 02 Jul 18:43

0.4.0 — Reliable authentication + setup-code pairing

The connection to Pensio now survives long gaps, force-quits, and server deploys — and pairing takes one short code instead of two pasted tokens.

Connect with a setup code

  • In Pensio, open Settings → API tokens → Connect Obsidian to generate a one-time 8-character code, then enter it in the plugin settings and click Connect.
  • Every pairing gets its own per-device credentials, so connecting a second device can never break the first.
  • Manual access/refresh token entry moved under Advanced (for self-hosted servers).

Authentication that doesn't die

  • No more "Session expired" after leaving Obsidian closed for a few days — token renewal is now forgiving by design (the server keeps the previous refresh token valid until it naturally expires).
  • Temporary problems (offline, server errors, deploys) retry with backoff and never log you out; the plugin never deletes tokens on failure — wiping is for explicit logout only.
  • If a session is genuinely revoked, the status bar shows Reconnect Pensio and settings ask for a new setup code. Your notes and sync history are untouched.
  • Token writes to Obsidian's encrypted SecretStorage are verified by read-back, with a final flush on plugin unload.
  • Each install now generates a stable device ID (fixes refresh failures on fresh installs).

Polish

  • Status bar uses proper icons instead of emoji.
  • Removed the "Pensio plugin loaded" startup notice.
  • 22 new authentication tests (suite: 120 tests).

Full docs: see TOKEN_REFRESH.md in the repo for the complete auth architecture.

0.3.0

Choose a tag to compare

@github-actions github-actions released this 18 Mar 23:10
0.3.0: Security hardening & token reliability

- Parse JWT exp claim for token expiry (instead of hardcoded 24h)
- Reduce refresh buffer from 1 hour to 2 minutes
- HTML sanitization (nh3) to prevent stored XSS
- Settings GUI redesign with Pensio branding
- Mirror delete safety with source filtering
- Simplified entry types (default to daily_journal)
- Fix npm flatted DoS vulnerability

0.2.0: Plugin release readiness

Choose a tag to compare

@github-actions github-actions released this 18 Mar 14:43
0.2.0: Plugin release readiness

0.1.7: Account Guard + Token Rotation Fix

Choose a tag to compare

@github-actions github-actions released this 16 Mar 12:35

What's New

Account Guard System

  • Pre-sync identity verification — the plugin now calls /api/v1/auth/me/ before every sync to confirm you're connected to the right account
  • Account switch detection — if you change credentials, the plugin detects the account mismatch and blocks sync until you confirm
  • Sync state reset on credential change — changing tokens automatically clears sync state so entries aren't incorrectly marked as "already synced"
  • Connected account display — settings page shows which account you're connected to

Token Rotation Fix

  • Refresh token rotation now works correctly — previously, rotated refresh tokens weren't captured, causing tokens to expire after extended inactivity
  • Plugin now sends device_id in refresh requests and captures rotated refresh tokens from the response

Backend (requires server update)

  • New /api/v1/auth/me/ endpoint
  • Fixed TokenRefreshSerializer to implement proper token rotation (blacklist old, return new)

0.1.6: Security — Dependency Update

Choose a tag to compare

@github-actions github-actions released this 03 Mar 17:41

Security

No user-facing changes.