feat(invite-links): real deep links via jorkonvo.szabotar.dev + auto-join on open #6
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/invite-deep-links"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Real, multi-user-testing bug fix + the project owner's explicit domain/hosting request from the 2026-09-16 late-night session.
The bug
Clicking a
matrix.toinvite link never opened JorKonvo — no deep-link registration existed anywhere (Android manifest, iOS Info.plist, Tauri config), and the web app never parsed amatrix.toURL fromwindow.locationeither. Copy-paste into "Join a room" was the only working path.The fix
The owner registered
jorkonvo.szabotar.dev(DNS already resolves here) specifically so real, silently-verified deep links become possible —matrix.tois a third party JorKonvo doesn't control, so links on it can only ever prompt a disambiguation dialog, never open silently.packages/matrix-core/src/inviteLinks.ts:getRoomInviteLink()now mintshttps://jorkonvo.szabotar.dev/join#/<target>?via=...links. NewparseInviteLink()accepts that domain, plainmatrix.to(other Matrix clients still generate those — still supported), and ajorkonvo://custom-scheme fallback for iOS.room-admin.ts's old private parser is gone, replaced by this shared one everywhere.android:autoVerify="true"intent-filter for/join*, plus a best-effort non-verified filter formatrix.totoo. Addedapps/web/public/.well-known/assetlinks.json— uses the DEBUG keystore's fingerprint for now (no real upload keystore exists yet, seedocs/ANDROID.md"Release signing" from earlier tonight) — must be swapped for the real release cert fingerprint before shipping, or verification silently fails and falls back to a chooser dialog.App.entitlements(associated-domains) wired into both build configs. Addedapps/web/public/.well-known/apple-app-site-association— Team ID is aTEAMID_PLACEHOLDER, since it isn't recorded anywhere in this repo (only Codemagic's App Store Connect integration knows it) — owner must fill in the real Team ID. Ajorkonvo://custom-scheme fallback (CFBundleURLTypes) covers the gap until then.lib/inviteLinkHandler.ts+state/pendingInviteStore.tscatch the link (cold web load at/join, or Capacitor'sappUrlOpennatively — cold start or already-running), stash the target until auth is ready, thenApp.tsxopensJoinRoomModalwith it. The modal now auto-attempts the join immediately when opened this way instead of requiring one more click — "click a link, you're in," matching Discord.Also done tonight, separately hosted (not part of this PR's diff)
The web app is now actually served at
127.0.0.1:8181on the dev box via a new~/jorkonvo-web/nginx setup (outside this repo, sibling to it — see that directory's own README). One remaining manual step for the owner: add a Proxy Host in Nginx Proxy Manager (jorkonvo.szabotar.dev→127.0.0.1:8181, Let's Encrypt on) — I don't have NPM admin credentials, everything up to that point is built and verified working.Known gaps for the owner to close before this fully works end-to-end
assetlinks.jsonfor the real upload keystore's, once one exists.apple-app-site-association.https://jorkonvo.szabotar.devactually resolves to the running container.Until all three are done, invite links still work — they just fall back to a disambiguation dialog (Android) or the
jorkonvo://custom scheme (iOS) instead of opening silently, and the in-app join flow (auto-join on open) works today via the web build regardless.Gate
npm run buildclean,npm test(476 passed + 1 skipped — 5 newparseInviteLinktests),npm run lint0 errors, full Playwright e2e suite run in the worktree.Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com
Merged into main at
5f65115(merge commit onto PR #7 + PR #8). Two real conflicts, both resolved by inspection:isSpaceKnockingAllowed/SPACE_SETTINGS_EVENTimport for createRoom/createSpace, PR #6 added aparseInviteLinkimport for resolveRoomTarget/joinRoomByIdOrAlias. No functional overlap - both imports kept, verified the full file afterward.Gate results on the merged tree: build clean, 476 unit tests passed (1 skipped, +5 from inviteLinks.test.ts), lint 0 errors, e2e 15/15 passed in isolation (no port collisions this time - confirms the earlier 7-passed/6-failed report was the documented environmental sibling-branch port collision, not a real regression).
Known gaps carried forward as documented in the PR (expected, not blockers): Android assetlinks.json uses the debug keystore fingerprint (no upload keystore exists yet), iOS apple-app-site-association has a literal TEAMID_PLACEHOLDER (owner fills in the real Apple Team ID later). Closing.
Pull request closed