Skip to content

feat(lists): inbound shared-list viewer + web-accept for edit links - #30

Merged
Adron merged 1 commit into
mainfrom
feat/shared-list-inbound-viewer
Aug 31, 2026
Merged

feat(lists): inbound shared-list viewer + web-accept for edit links#30
Adron merged 1 commit into
mainfrom
feat/shared-list-inbound-viewer

Conversation

@Adron

@Adron Adron commented Aug 31, 2026

Copy link
Copy Markdown
Member

Summary

Adds an inbound viewer for shared lists, at parity with the existing shared-document viewer. Tapping a list share link (Universal Link or interlinedlist://lists/shared/:token) now opens a read-only list in the app. Previously such links did nothing.

What's included

  • Model: SharedListResolution/SharedListInfo.
  • API: resolveSharedList + sharedListData (GET /api/lists/shared/:token[/data]; anonymous read — the token is the capability).
  • Deep link: AppDeepLink.sharedList + parser routing for /lists/shared/:token (custom-scheme and https). A bare /lists/:id permalink stays deferred (backend-limited — no owner in the URL).
  • View: SharedListView renders rows read-only and schema-less (the token grants no schema access), with a headline heuristic over rowData.
  • Web-accept: edit-capable links can't be claimed natively (claim is session-cookie only), so SharedListView and SharedDocumentView now show an actionable "Open on interlinedlist.com to accept" button.

Testing

  • Build: succeeded.
  • Unit tests (isolated on this branch): 37 passed — resolve/data paths + decode, /lists/shared parse (both schemes), bare permalink still nil.
  • Runtime smoke: interlinedlist://lists/shared/<token> presents SharedListView and correctly renders the backend "not found" state for a fake token, while logged out.

Caveats

  • Rendering a real shared list's rows and the AASA tapped-link path warrant an on-device pass.

🤖 Generated with Claude Code

https://claude.ai/code/session_01V16mvNBWyYLncSQL8isDNF

Parity with the shared-document viewer: a tapped list share link
(interlinedlist://lists/shared/:token or the https permalink) now opens a
read-only viewer in the app.

- SharedListResolution/SharedListInfo + resolveSharedList/sharedListData
  (GET /api/lists/shared/:token[/data]; anonymous read, token is the capability).
- AppDeepLink.sharedList + parser routing for /lists/shared/:token; bare
  /lists/:id stays deferred (backend-limited — no owner in the URL).
- SharedListView renders rows read-only (schema-less; the token grants no schema
  access), with a headline heuristic over rowData.
- Edit-capable links can't be claimed natively (claim is session-only), so
  SharedListView and SharedDocumentView now show an actionable
  "Open on interlinedlist.com to accept" button (ILWebURL.sharedList/sharedDocument).
- Tests: resolve/data paths + decode; /lists/shared parse (both schemes).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V16mvNBWyYLncSQL8isDNF
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant