super-productivity/electron/shared-with-frontend
Johannes Millan 95d3b212bc
fix(electron): gate Jira IPC behind a one-shot capability (#9008)
* docs(plugins): add microsoft 365 calendar provider plan

* fix(jira): gate Electron requests behind one-shot capability

Claim privileged Jira IPC before plugin startup and return responses through invoke instead of a broadcast event. Keep arbitrary HTTP(S) Jira hosts supported while rejecting redirects and bounding request resources.

* fix(jira): enforce Electron request capability

Bind privileged Jira IPC to a main-issued renderer-document token and strip raw Electron events from renderer callbacks. Scope image authentication by origin, base path, and resource type while preserving safe redirects and legacy configurations.

* fix(electron): handle payload-only IPC lifecycle

Clear Jira image authentication before replacement and when a new renderer document claims the capability. Parse before-close IDs from payload-only events so pending sync and finish-day hooks can complete.

* fix(electron): address Jira IPC capability review findings

- electron.effects: read ANY_FILE_DOWNLOADED payload at [0] after the
  payload-only IPC refactor (was [1], now undefined -> TypeError on every
  download); guard against a malformed payload
- jira-capability: rotate the token on re-register so a renderer reload
  that reuses the WebFrameMain object is not permanently locked out of
  Jira; invalidates any stale token
- document that the one-shot consumption order, not the bypassable
  main-frame check, is the real capability boundary
- jira-electron-bridge: skip the no-op clearImgHeaders IPC round-trip
  when image auth was never set up (non-Jira detail-panel open/close)
- jira-api: route a synchronous _toElectronRequestInit throw through
  _handleResponse instead of leaking a dangling request-log entry

* test(electron): cover ANY_FILE_DOWNLOADED payload parsing

Extract parseDownloadedFilePayload from ElectronEffects and add a
regression spec pinning the payload-only shape ([file], not [event,
file]) that caused a TypeError on every download. Hardened against
non-array input surfaced by the new test.

* fix(electron): restore Node ambient globals for frontend build
2026-07-14 21:02:27 +02:00
..
backup-file-cleanup.util.ts feat(backup): configure automatic backup file limit #6690 (#8094) 2026-06-08 12:09:49 +02:00
get-backup-timestamp.ts fix(backup): move shared timestamp util into electron/ for snap packaging 2026-04-22 16:14:56 +02:00
get-dist-channel.ts feat(electron): suffix version string per distribution target 2026-05-19 16:42:45 +02:00
ipc-events.const.ts fix(electron): gate Jira IPC behind a one-shot capability (#9008) 2026-07-14 21:02:27 +02:00
is-external-url-allowed.ts feat(notes): allow outlook: + note/task-app deep-links in URL-scheme allowlist (#8859) 2026-07-08 17:12:09 +02:00
jira-request.model.ts fix(electron): gate Jira IPC behind a one-shot capability (#9008) 2026-07-14 21:02:27 +02:00
keyboard-config.model.ts perf(planner): drop per-CD getters/allocations in planner-task and kb (#8808) 2026-07-07 11:49:46 +02:00
lazy-set-interval.ts refactor: improve typing 2 2025-08-12 15:27:48 +02:00
local-rest-api.model.ts fix(security): harden Local REST API against DNS rebinding and field injection (#6996) 2026-03-29 11:59:27 +02:00
mime-type-mapping.const.ts fix(security): restrict renderer-supplied filesystem IPC paths (#8223) 2026-06-09 18:16:22 +02:00
oauth-loopback.const.ts feat(plugins): generic OAuth hooks for issue-provider plugins (#8546) 2026-06-30 14:11:00 +02:00
one-shot-api-consumer.ts fix(electron): gate Jira IPC behind a one-shot capability (#9008) 2026-07-14 21:02:27 +02:00
plugin-node-execution.model.ts feat(plugins): persist nodeExecution consent per plugin (#8512) (#8600) 2026-06-29 16:12:00 +02:00
preload-api.ts fix(electron): gate Jira IPC behind a one-shot capability (#9008) 2026-07-14 21:02:27 +02:00
simple-store.const.ts fix(electron): remove exec IPC to close GHSA-256q (#8669) 2026-07-01 17:55:35 +02:00