8.9 KiB
Federation
This document is meant to be a reference for all the ActivityPub federation-related behavior that Tavern implements. This includes every user action that can trigger an Activity, as well as every Object that is create, federated, or stored.
Documentation conventions
Activity and object pairs are formatted as Activity/Object
. For example:
Create/Note
: aCreate
activity pertaining to aNote
object.Follow/Person
: aFollow
activity pertaining to aPerson
object.
Supported Activities and Objects
Activity | Object | Object |
---|---|---|
Create | Note | |
Announce | Note | |
Follow | Actor | |
Undo | Follow | Actor |
Accept | Follow | Actor |
Reject | Follow | Actor |
Follow | Note | |
Undo | Follow | Note |
Accept | Follow | Note |
Reject | Follow | Note |
Follow | Group | |
Undo | Follow | Group |
Data Retention
When activity is received by Tavern through activity federation, a determination is made as to if the activity is relevant to any users. Relevant activity and corresponding objects and actor references, along with their meta-data, are stored locally.
Users and Actors
A user is a first-class actor and activities are a result of direct and indirect actions. Actors may generate activity immediately, but activity creation and federation may also be differed. An example would be sending a status update immediately, versus scheduling a status update to be published at a later time.
User discovery occurs through GET /.well-known/webfinger
requests.
Network
Tavern makes every effort to acknowledge follow activity through Accept
and Reject
responses. Users may configure "auto-follow" to immediately accept follow requests. Alternatively, users have the ability to ignore, accept, or reject follow activities.
Collections
Requests to the user outbox returns a paginated ordered list of objects that have been published to the default public location.
Following and Unfollowing Actors
Tavern implements the following behavior for both inbound and outbound follow and unfollow actions:
To follow an actor, send a Follow
activity with the object attribute set to the actor's inbox.
To unfollow an actor, send a Undo
activity with the object being the previously sent Follow
activity.
When a Follow
activity is received, a Accept
or Reject
activity is expected.
Deleting Actors
Tavern implements the following behavior for inbound Delete/Actor
activities:
When a server broadcasts a Delete/Actor
activity, tavern will tombstone the local actor reference as well as all activities associated with the actor.
Groups
A group is effectively a distribution list with roles.
Groups have followers but do not follow anyone.
Joining a group
To join a group, an actor sends a Follow/Group
activity to the group inbox.
Groups may be configured to auto accept followers.
Configuration
Group owners may configure the default member role for new followers:
- Viewer (can receive announcements but cannot publish)
- Member (can receive announcements and publish activities)
- Owner (can receive announcements, publish activities, and manage the group)
Group owners can also configure the group to automatically accept new followers.
Leaving a group
To leave a group, an actor sends a Undo/Follow/Group
activity to the group inbox.
Group change notifications
When an actor joins a group, a Join
activity is created for the actor and group and published to all of the group's followers.
When an actor leaves a group, a Leave
activity is created for the actor and group and published to all of the group's followers.
Invitations
Persons may be invited to the group. When an Invite/Person
activity is published to the group's inbox, the group will accept the next follow request from the invited actor.
{
"@context": "https://www.w3.org/ns/activitystreams",
"summary": "",
"type": "Invite",
"actor": "https://tavern.town/users/nick",
"object": "https://tavern.town/groups/hiking",
"target": "https://tavern.town/users/mason",
"to": [
"https://tavern.town/groups/hiking",
"https://tavern.town/users/mason"
]
}
When the actor receives that activity, the actor (sender) and object (group) are cached, and then a Follow/Group
activity sent to the group from the invited actor. The group that has received the invitation for the actor will respond to the invited actor with an Accept/Follow
activity.
Publishing to a group
When an actor sends a Create/Note
or Announce/Note
activity to a group's inbox, the group will create an Announce/Note
activity and publish it to all of the followers of the group.
Activities are published only to group followers, regardless of who the activity is sent to (to, cc, bto, or bcc). The public destination is not added to group announcements.
Note: Members must have either the "member" or "owner" role within the group to publish to the group, otherwise the activity will be denied as unauthorized.
Limitations
Groups record their announcements and will not publish Announce/Note
activities for objects more than once a day (configurable).
Use Cases
Public Group
A "public group" is a group that is configured to auto-accept new followers with the "member" role.
This is useful for:
- Providing
Broadcast Group
A "broadcast group" is a group that has one central creator of activities, and many followers that are only viewers. New followers may be auto-accepted with the "viewer" role.
This is useful for:
- Providing "top down" updates for projects, teams, or organizations
Working Group
A "working group" (or committee) is a group has a mix of both viewers and contributors. New followers may be auto-accepted with the "viewer" role.
This is useful for:
- Public project groups where discussions are visible, but contributions limited to a select number of individuals.
Private Group
A "private group" is a group that is limited to contributors who are invited to the group. New followers are kept as "pending" until accepted.
Public vs Private Activity
Public activities include the https://www.w3.org/ns/activitystreams#Public destination in the to
and will always be the first element of that list.
Private activities will not include the above destination. It is presumed that all federated systems make best effort to respect privacy, however we encourage all Tavern users to acknowledge the inherent risk in using Activity Pub for private, secure, or otherwise confidential data transmission.
Language
All content is presumed in English at this time. The content
and contentMap
attributes are set in activity.
Notes
User "statuses" are created as "Note" activity objects.
Create/Note
Announce/Note
All notes are given a "context" attribute which is used to refer to the thread that the note is related to. Additionally, if the note is created as a "reply" to a specific object, the "inReplyTo" attribute is set to that object's ID (URL).
Created notes are public, by default, and federated to the inbox location of all acknowledged followers of the creator of the note.
Boosts (Announce/Note
)
Tavern recognizes the common practice of "boosting" notes to increase the potential reach of that note.
Boosted notes are public, by default, with the activity federated to the inbox location of all acknowledged followers of the user boosting the object.
Following and Unfollowing Notes
Tavern implements the following behavior for both inbound and outbound follow and unfollow actions:
To follow a note, send a Follow
activity with the object attribute set to the object id of the note.
To unfollow a note, send a Undo
activity with the object being the previously sent Follow
activity.
When Tavern creates or receives a Create/Note
or Announce/Note
activity, it will attempt to forward the activity to all followers of as an inbox forwarding behavior.
Important: Tavern makes no effort to ensure the validity of the forwarded activity. It is up to recipient activity pub servers to verify the authenticity of forwarded activities and objects.
Deleting Notes
When a Delete/Note
activity is received, a tombstone is recorded for the activity.
When Tavern receives a Delete/Note
activity, it will attempt to forward the activity to all followers of as an inbox forwarding behavior for the parent, if the note is a reply.
Update
Update is not implemented at this time.
Delete
Supported delete activity includes Delete/Note
and Delete/Actor
.
No other delete activities are implemented at this time.
Add
Add is not implemented at this time.
Remove
Remove is not implemented at this time.
Like
Like is not implemented at this time.
Undo
Supported undo activity includes Undo/Follow
and Undo/Follow/Note
.
No other Undo activity, including Undo/Create
and Undo/Announce
are implemented at this time.