Joining & invites
One method to get in, three join policies, and invites delivered to a space the invitee owns.
Join policy
A group’s profile sets its joinPolicy:
| Policy | What requestJoin does |
|---|---|
open |
Admits the person immediately. |
request |
Queues a request for someone with the admit action to decide. |
invite |
Admits only someone holding an outstanding invite. Anyone else gets InviteRequired. |
One way in: requestJoin
Every path into a group goes through requestJoin, called by the person who wants to join. No role is needed. It either admits them (admitted) or leaves a request pending (pending).
An invite is pre-approval. If the person has an outstanding invite, requestJoin redeems it and admits them whatever the policy.
However they got in, the group writes their membership and the new member writes their acceptance.
Requests
listJoinRequests(requiresadmit): the queue.admitMember(requiresadmit): approve, optionally with roles limited by the caller’sassignable, or deny.cancelJoinRequest: the requester withdraws before a decision.
Invites
An invite is an interesting case: it has to reach someone who isn’t yet a member, so they may have no access to any of the group’s spaces. And invites usually shouldn’t be broadcast publicly.
So each person who wants to receive invites hosts an invites space under their own DID, of type group.opensocial.invites. A group delivers an invite by writing an invite record into that space.
- A member with the
inviteaction callscreateInvite. - The group writes an
inviterecord into the invitee’sinvitesspace. - The group notifies the invitee’s PDS of the write, and the PDS forwards the notification to any services that present it to the person.
- The invitee reads it and accepts by calling
requestJoin, which redeems it.
Only the owner (and apps they authorize) may read the space. The inviting group can write into it but can’t read other invites there, including its own once written.
Outstanding invites are managed with listInvites and revokeInvite.