Commit Graph
2450 Commits
Author SHA1 Message Date
Linus Rath 437bb1d11a test: require every plugin permission to gate a method, hook or slot 2026-10-14 04:28:24 +02:00
Linus Rath 3a65964d26 feat: let plugins show notifications that name the plugin 2026-10-14 04:26:16 +02:00
Linus Rath ead925c1b8 feat: let plugins open a filled-in composer and save drafts 2026-10-14 04:23:17 +02:00
Linus Rath 08e2d65944 feat: let untrusted plugins save attachments and message sources of a given message 2026-10-14 04:16:31 +02:00
Linus Rath 8fd6bc42c3 feat: let plugins read any message, list a folder and see the folders 2026-10-14 04:13:33 +02:00
Linus Rath 121d8ba30c feat: let plugins manage templates, sender signatures and the out-of-office reply 2026-10-14 04:06:06 +02:00
Linus Rath 3df031edd1 feat: let plugins read and change calendar events and tasks 2026-10-14 04:02:47 +02:00
Linus Rath adf5ad6c16 test: require every calendar and task hook to have a call site 2026-10-14 03:46:11 +02:00
Linus Rath be26f96bea Merge branch 'hooks/calendar' into feat/plugin-system-audit 2026-10-14 03:44:13 +02:00
Linus Rath 348ec1d399 feat: let plugins stop app shortcuts and hear when one ran 2026-10-14 03:44:09 +02:00
Linus Rath 0cf80c1689 feat: tell plugins when tasks are loaded, created, changed, checked off, deleted or filtered, and let them stop changes 2026-10-14 03:43:33 +02:00
Linus Rath e16e8946a8 test: require every contact and file hook to have a call site 2026-10-14 03:42:34 +02:00
Linus Rath 89452871fb feat: tell plugins when an event reminder fires and when it is dismissed 2026-10-14 03:40:19 +02:00
Linus Rath 77c7589e04 Merge branch 'hooks/contacts' into feat/plugin-system-audit 2026-10-14 03:40:05 +02:00
Linus Rath 051e82b487 feat: tell plugins about layout changes, drag and drop, and sidebar apps 2026-10-14 03:40:04 +02:00
Linus Rath 6b98fccead feat: tell plugins when a folder is opened, files are selected or starred, and an action is undone 2026-10-14 03:39:30 +02:00
Linus Rath 8e2f9d7c94 feat: tell plugins when the calendar view, its calendars or subscriptions change 2026-10-14 03:36:35 +02:00
Linus Rath 96f0681ab5 feat: tell plugins when files are uploaded, downloaded, deleted, renamed, moved or copied, and let them stop it 2026-10-14 03:36:13 +02:00
Linus Rath e62553642f feat: tell plugins about sign-in, token renewal and account changes 2026-10-14 03:32:58 +02:00
Linus Rath 8ec7dc54ab feat: tell plugins when contacts are opened, selected, moved or imported and when groups change 2026-10-14 03:27:50 +02:00
Linus Rath c5dc263259 fix: stop plugins from blocking or stalling sign-out 2026-10-14 03:27:34 +02:00
Linus Rath 1ae73ceac1 feat: tell plugins when events are opened, created, changed, deleted, answered or imported, and let them stop changes 2026-10-14 03:26:39 +02:00
Linus Rath 77088a6008 feat: tell plugins when toasts are shown and dismissed 2026-10-14 03:25:53 +02:00
Linus Rath 96f8aa6a63 feat: tell plugins when contacts are created, changed or deleted, and let them stop it 2026-10-14 03:24:19 +02:00
Linus Rath 02a7dfab16 feat: tell plugins when the colour scheme or theme changes 2026-10-14 03:24:00 +02:00
Linus Rath 606861eb71 feat: tell plugins about the app's lifecycle and navigation on every page, not only in mail 2026-10-14 03:19:54 +02:00
Linus Rath af53675191 feat: add plain-data views of messages, events, contacts, tasks and files for plugin hooks 2026-10-14 03:16:25 +02:00
Linus Rath a3cb9e630e refactor: describe every plugin hook in one catalogue
The hook buses, the permission each hook needs and the docs were three
separate lists that had drifted: 145 of 198 hooks were never fired and
nothing noticed. `lib/plugin-hook-catalog.ts` now names each hook with
its kind, permission, payload and when it fires; the permission check
reads it, and a test fails for any catalogued hook without a call site.
Groups still being wired in this branch are listed in that test.

Also:
- new before-hooks for archive, spam, read state, star, keywords, folder
  changes, RSVP, event import, tasks, file moves, settings, identities,
  filters and out-of-office, plus onComposerClose and onSyncStateChange
- removed hooks that can never fire: the S/MIME group (S/MIME is a
  plugin now), onMobileViewSwitch, onSidebarAppChange and the
  registerShortcut pseudo-hook
- smime:read no longer grants anything; manifests that name it still
  install, with a warning
2026-10-14 03:14:29 +02:00
Linus Rath 480a1bb226 fix: clear a plugin's stored data when the admin removes it, not only on uninstall 2026-10-14 03:05:05 +02:00
Linus Rath 8ef7ec022f fix: deliver a plugin OAuth callback only to the plugin that started the flow 2026-10-14 03:04:17 +02:00
Linus Rath bf1d8fd2c3 fix: stop keeping unanswered plugin hook calls and old slot callbacks around 2026-10-14 03:02:12 +02:00
Linus Rath ada81d5f8f fix: hide the Next.js dev badge inside plugin slots and warn that dev sandboxes are not isolated 2026-10-14 03:01:13 +02:00
Linus Rath fe4f809092 fix: keep a plugin side panel from squeezing the message too narrow to read 2026-10-14 03:00:46 +02:00
Linus Rath 3bfc0e69d0 fix: check attachments a plugin adds to the composer and keep callbacks out of shouldShow 2026-10-14 02:58:47 +02:00
Linus Rath 03e9846758 fix: stop remounting message-details plugin slots on every render 2026-10-14 02:56:15 +02:00
Linus Rath 2adb1e2b12 fix: size toolbar plugin slots to their content and give composer plugin buttons their own row 2026-10-14 02:53:46 +02:00
Linus Rath cef2438c33 fix: let untrusted plugins upload attachments for the composer again 2026-10-14 02:34:31 +02:00
Linus Rath f048db7b52 fix: count each plugin hook failure once and keep a plugin that kept failing turned off 2026-10-14 02:33:45 +02:00
Linus Rath a491eab317 fix: hash WKD names with WebCrypto instead of shipping a Node crypto polyfill to the browser 2026-10-14 02:31:39 +02:00
Linus Rath 23c4c654d7 fix: limit what a plugin can store, download, toast and send to a WKD lookup, and report refused admin config writes 2026-10-14 02:30:54 +02:00
Linus Rath 22846b4a9b fix: keep blob uploads privileged-only and derive the WebAuthn salt from the calling plugin 2026-10-14 02:28:11 +02:00
Linus Rath 15cec58a46 fix: serve plugin bundles only to signed-in users 2026-10-14 02:27:35 +02:00
Linus Rath c4853a4bba fix: check dev-directory plugins like uploads and keep their files inside the plugin folder 2026-10-14 02:26:56 +02:00
Linus Rath 9408daaf5e fix: keep an extension's admin state on re-upload and remove its config when it is deleted 2026-10-14 02:25:45 +02:00
Linus Rath bb562362b8 fix: lay out plugin slots right-to-left in Arabic, Hebrew and Persian and use the app font size 2026-10-14 02:24:45 +02:00
Linus Rath a21dbc92ec fix: switch running plugins to a new language right away and fall back from de-CH to de 2026-10-14 02:23:40 +02:00
Linus Rath 8f70951555 fix: give plugins their default settings and apply setting changes without a reload 2026-10-14 02:21:45 +02:00
Linus Rath eadff464a3 fix: keep plugin shortcuts behind ui:keyboard and off the keys the app and browser use 2026-10-14 02:19:10 +02:00
Linus Rath ff1d1f399d fix: limit plugin dialogs to one at a time, name the plugin in each and offer to turn it off 2026-10-14 02:15:45 +02:00
Linus Rath be3debdcb4 fix: never send a message when a plugin that checks it before sending fails or does not answer 2026-10-14 02:11:59 +02:00