MenuJoining & invites

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

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.

  1. A member with the invite action calls createInvite.
  2. The group writes an invite record into the invitee’s invites space.
  3. 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.
  4. 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.