Skip to content

Image Relay 1.2.1

Choose a tag to compare

@oliverames oliverames released this 17 May 23:38
· 114 commits to main since this release

Image Relay 1.2.1

A small polish patch on top of 1.2.0 stable. The headline change is a third Finder right-click action that takes you from the selection to the matching page in your Image Relay web app. The rest of the release is a code-path audit confirming the 1.2 sync surface still has no data-loss regressions.

Open Folder in Image Relay Web

  • A new right-click action in Finder's Quick Actions submenu, alongside Refresh from Image Relay and Copy Public Link introduced in 1.2.0.
  • Right-click any tracked folder and choose Open Folder in Image Relay Web to jump straight to that folder's page in your account's web app (https://<your-subdomain>.imagerelay.com/folders/<id>).
  • Right-click any tracked file and the action opens the file's containing folder, so you can find the asset in its native Image Relay context.
  • Your account's web base URL is discovered automatically from GET /users/me.json on first invocation and cached locally so later invocations skip the round-trip.
  • If macOS declines to open the URL from the File Provider extension's sandbox, the action falls back to copying the URL to your clipboard so you always get something useful from the click.

Data-loss audit (no changes shipped)

An 8-checkpoint audit of every safety-critical sync code path that touches 1.2 territory ran clean:

  • The Enumerator deletion-protection set still wraps both the standard listing path and the working-set path; transient 404s or parent-id mismatches still avoid reporting deletions until the failures are explained.
  • didDeleteItems is still only called from the incremental enumerateChanges path, never from a fresh enumeration.
  • CollectionsService.removeItem still throws removeNotSupported immediately rather than calling the API; CollectionsBrowserView keeps the inline note where the minus-circle button used to be.
  • addItems PUT still uses the v2 API's delta-add semantics, with no TOCTOU read-then-write window.
  • The defensive {"key": [...]} fallback in getAllPages still emits a logger.warning canary so the branch is observable in diagnostics if a real endpoint ever takes it.
  • The upload version-confirmation cross-check still requires folder membership on top of the size match, so a soft-deleted or relocated file with the right ID and size can't pass.
  • Folder rename still sends a resolved parent_id: Int (the request field is non-optional), preserving the 1.1.2 fix for the historical ambiguous parent_id: null bug.

Under the hood

  • New UserInfo model in ImageRelayKit decodes the subdomain block of /users/me.json; intentionally ignores the wider payload (login, email, permissions, etc.) because the desktop client has no use for it.
  • AppConfiguration.webBaseURL is a new optional field persisted as web_base_url in config.json; legacy configs without it decode cleanly.
  • User-Agent defaults advance from ImageRelayClient/1.2.0 to ImageRelayClient/1.2.1; 1.2.0 is added to the legacy migration list so existing installs roll forward without a reset.
  • Test suite grows from 163 to 168 (5 new: 3 UserInfo decoding pinned against the live /users/me.json shape, 2 AppConfiguration round-trip / backward-compat). Suites go 22 → 23 with a new UserInfo decoding suite.

System requirements

  • macOS 26 (Tahoe). Same as 1.2.0; the File Provider features 1.2 depends on are 26-only.