Skip to content

feat(chat): invite links for hosts - #1149

Merged
bmc08gt merged 7 commits into
feat/group-invites-key-bundlefrom
feat/group-invites-host
Oct 29, 2026
Merged

bmc08gt merged 7 commits into
feat/group-invites-key-bundlefrom
feat/group-invites-host

Conversation

@bmc08gt

@bmc08gt bmc08gt commented Oct 28, 2026 •

Copy link
Copy Markdown
Collaborator

Second of three PRs for v1 invite links to private groups: the host side. It stacks on #1144, which carries the flipcash-shared-core 0.17.0 bump. C (feat/group-invites-joiner) stacks on this one.

Invite People

Hosts open Invite People from the group profile and from Join Requests. It's now an option sheet in the Group Money style (node 12844:60): a "Invite to {name}" title and three cards.

  • Share Invite Link opens ShareToChatsSheet with a new .inviteLink subject. The pill shows the invite URL with the middle elided, and the meta line comes from expires_at, use_count and max_uses ("Expires Nov 4 · 0 joined"). Recent Chats lists only private groups and E2EE DMs, and there's no Show Group Card.
    • Opening the sheet creates nothing (Decision 9). With no active link from this host, the tap runs CreateInvite (7 days, no limit) and the pill shows "Creating link…" with Copy and Share disabled until it returns.
    • A non-ACTIVE result restarts once with a new secret. DENIED doesn't retry; it shows 1e and offers the join link.
  • Share Join Link opens today's sheet for /chat/{uuid}, unchanged.
  • Manage Invites pushes the new Invite Links screen.

OptionCardSheet wraps the ActionCardRow from #1143 with an optional title, so the cards are the same view the money sheets use.

Manage Invites

InviteLinksScreen follows 2a, 2c, 2d and 2e. Tapping a link opens InviteLinkActionSheet (node 12886:56): a header with the link's meta line, Share Link, and a red Revoke Link that keeps the 2c confirm. A link whose secret envelope doesn't open on this device shows only Revoke. New Invite offers limits 1, 5, 10, 25 and No limit.

Secrets

InviteSealing in FlipcashCore makes and seals the per-link secret. It's a separate protocol from GroupKeySealing in #1144 so the two branches don't touch the same file. On device the secret is held in memory only, opened from its envelope when needed. It isn't put in a navigation destination or a log line.

Tests

GroupInviteLinksTests (17) covers picking the current link, create on first share, a transport retry reusing the secret, the non-ACTIVE restart with a new one, DENIED on create (no retry, new secret next time, the 1e dialog) and on load, revoke, the 2d limits, the meta line, and the invite sheet having no group card.

@bmc08gt bmc08gt self-assigned this Oct 28, 2026
@bmc08gt
bmc08gt force-pushed the feat/group-invites-host branch from 33fa42f to ab03306 Compare October 28, 2026 17:55
@bmc08gt
bmc08gt changed the base branch from main to feat/group-invites-key-bundle October 28, 2026 17:55
@bmc08gt
bmc08gt added this pull request to stack #1154 October 28, 2026 18:18
@bmc08gt
bmc08gt marked this pull request as ready for review October 28, 2026 18:47
@bmc08gt
bmc08gt force-pushed the feat/group-invites-host branch 5 times, most recently from e7bcf97 to 4b79363 Compare October 29, 2026 00:52
…icker

Moves the preset row's grey capsules and sliding white selection capsule into FlipcashUI so other sheets can use it. Time To Pay looks and animates as before.
…age Invites

The host's Invite People sheet now offers Share Invite Link, Share Join Link
and Manage Invites in the Group Money card style, using OptionCardSheet
extracted from MoneyActionsSheet. Both share options open the existing
ShareToChatsSheet: the invite subject shows the elided /chat/invite link and
its meta line, and makes the link on first tap.

A Manage Invites row opens a bottom sheet (node 12886:56) with Share Link and
Revoke Link, replacing the native action sheet and dropping Copy.
@bmc08gt
bmc08gt force-pushed the feat/group-invites-host branch from 4b79363 to 9a3e763 Compare October 29, 2026 01:16
@bmc08gt
bmc08gt merged commit 9de5aeb into main Oct 29, 2026
8 checks passed
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