From d791010e42c6b0c511af40a2bfec6612ce1afbc3 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Sat, 5 Jul 2025 18:01:48 +0200 Subject: [PATCH] FEP 4ccd update (#640) There are a few updates in this PR. - Two new inverse properties, `pendingFollowersOf` and `pendingFollowingOf` - Semantically versioned aliases for the context for future-proofing - One section per term - Implementations list - Clarified examples Reviewed-on: https://codeberg.org/fediverse/fep/pulls/640 Co-authored-by: Evan Prodromou Co-committed-by: Evan Prodromou --- fep/4ccd/Follow-State-Diagram.drawio | 125 +++++++++++++++++ fep/4ccd/Follow-State-Diagram.drawio.png | Bin 0 -> 77207 bytes fep/4ccd/fep-4ccd.md | 167 +++++++++++++++++++---- 3 files changed, 263 insertions(+), 29 deletions(-) create mode 100644 fep/4ccd/Follow-State-Diagram.drawio create mode 100644 fep/4ccd/Follow-State-Diagram.drawio.png diff --git a/fep/4ccd/Follow-State-Diagram.drawio b/fep/4ccd/Follow-State-Diagram.drawio new file mode 100644 index 0000000..10baa30 --- /dev/null +++ b/fep/4ccd/Follow-State-Diagram.drawio @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fep/4ccd/Follow-State-Diagram.drawio.png b/fep/4ccd/Follow-State-Diagram.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..f3fef5518d94e5b38d02c7f3fe58be8cafd66a44 GIT binary patch literal 77207 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 status: DRAFT dateReceived: 2023-06-21 trackingIssue: https://codeberg.org/fediverse/fep/issues/129 -discussionsTo: https://codeberg.org/fediverse/fep/issues/129 +discussionsTo: https://codeberg.org/evanp/fep/issues --- # FEP-4ccd: Pending Followers Collection and Pending Following Collection ## Summary -This specification defines two collections, `pendingFollowers` and `pendingFollowing`, with which users can review and manage their pending follow requests. +This ActivityPub extension defines two collections, `pendingFollowers` and `pendingFollowing`, with which users can review and manage their pending follow requests. ## Motivation @@ -24,27 +24,13 @@ The new `pendingFollowing` collection can be used to review outgoing `Follow` ac Because the full activity data is needed to `Accept`, `Reject` or `Undo`, these collections should include `Follow` activities, and not just the actors requesting to follow. -## Details - -`pendingFollowers` is a property of an actor. It is a collection of `Follow` activities that have been sent **to** the actor, but not yet been accepted or rejected. - -`pendingFollowing` is a property of an actor. It is a collection of `Follow` activities that have been sent **by** the actor, but not yet been accepted or rejected. - -Both properties MUST be an `OrderedCollection` or `Collection`. Items in the collection MUST be in reverse chronological order. - -Items in the collections MUST be `Follow` activities. They MUST be unique by `id`. - -Each `object` of a `Follow` activity in the `pendingFollowing` collection MUST be unique by `id`. - -Each `actor` of a `Follow` activity in the `pendingFollowers` collection MUST be unique by `id`. - -When an `Accept`, `Reject`, or `Undo` activity with a `Follow` activity as `object` is processed, that `Follow` activity MUST NOT be included in the `pendingFollowers` and `pendingFollowing` collections in the future. +Note that this extension is primarily useful for clients and servers that implement the ActivityPub API. Furthermore, it is primarily useful for actors that manually approve followers. The [manuallyApprovesFollowers](https://swicg.github.io/miscellany#manuallyApprovesFollowers) property in the [ActivityPub Miscellaneous Terms][miscellany] can be used to indicate that an actor manually approves followers. ## Context -The context document for this specification is `https://purl.archive.org/socialweb/pending`. Its contents are as follows: +The context document for this ActivityPub extension is at `https://purl.archive.org/socialweb/pending`. Its contents are as follows: -``` +```json { "@context": { "pdg": "https://purl.archive.org/socialweb/pending#", @@ -55,20 +41,85 @@ The context document for this specification is `https://purl.archive.org/socialw "pendingFollowing": { "@id": "pdg:pendingFollowing", "@type": "@id" + }, + "pendingFollowersOf": { + "@id": "pdg:pendingFollowersOf", + "@type": "@id" + }, + "pendingFollowingOf": { + "@id": "pdg:pendingFollowingOf", + "@type": "@id" } } } ``` +### Semantic versioning + +For compatibility, the context document for this extension has aliases using [semantic versioning][semver]. + +- `https://purl.archive.org/socialweb/pending/1.1.0`. This version is immutable. +- `https://purl.archive.org/socialweb/pending/1.1`. This version may be updated with bug fixes, documentation, or minor changes, but no new terms. +- `https://purl.archive.org/socialweb/pending/1`. This version may be updated with bug fixes or minor changes, and may include new terms, but will not include breaking changes. +- `https://purl.archive.org/socialweb/pending`. This version may be updated with bug fixes or minor changes, may include new terms, and may include breaking changes. It is the latest version of the context document. + +All terms in the context document use the same namespace, `https://purl.archive.org/socialweb/pending#`. + +## Properties + +As with other ActivityPub properties, the values of these properties can be included by a reference URL, or by an [embedded node object](https://www.w3.org/TR/json-ld11/#embedding). + +### `pendingFollowers` + +| | | +|---|---| +| URI | `https://purl.archive.org/socialweb/pending#pendingFollowers` | +| Notes | `pendingFollowers` is a collection of `Follow` activities that have been sent **to** the actor, but have not yet been accepted or rejected. Items in the collection MUST be in reverse chronological order. Items in the collections MUST be `Follow` activities. They MUST be unique by `id`. Each `actor` of a `Follow` activity in the collection MUST be unique by `id`. | +| Domain | Object (ActivityPub actor) | +| Range | `OrderedCollection` or `Collection` | +| Functional | Yes | + +### `pendingFollowing` + +| | | +|---|---| +| URI | `https://purl.archive.org/socialweb/pending#pendingFollowing` | +| Notes | `pendingFollowing` is a property of an actor. It is a collection of `Follow` activities that have been sent **by** the actor, but have not yet been accepted or rejected. They MUST be unique by `id`. Each `object` of a `Follow` activity in the collection MUST be unique by `id`.| +| Domain | Object (ActivityPub actor) | +| Range | `OrderedCollection` or `Collection` | +| Functional | Yes | + +### `pendingFollowersOf` + +| | | +|---|---| +| URI | `https://purl.archive.org/socialweb/pending#pendingFollowersOf` | +| Notes | This property identifies the actor for which the specified collection is the `pendingFollowers` collection. It is an inverse property of `pendingFollowers`. | +| Domain | `Collection` or `OrderedCollection` | +| Range | Object (ActivityPub actor) | +| Functional | Yes | + +### `pendingFollowingOf` + +| | | +|---|---| +| URI | `https://purl.archive.org/socialweb/pending#pendingFollowingOf` | +| Notes | This property identifies the actor for which the specified collection is the `pendingFollowing` collection. It is an inverse property of `pendingFollowing`. | +| Domain | `Collection` or `OrderedCollection` | +| Range | Object (ActivityPub actor) | +| Functional | Yes | + ## Examples A publisher can include the `pendingFollowers` and `pendingFollowing` collection in the properties of an actor. -``` +### Actor with `pendingFollowers` and `pendingFollowing` + +```json { "@context": [ "https://www.w3.org/ns/activitystreams", - "https://purl.archive.org/socialweb/pending" + "https://purl.archive.org/socialweb/pending/1" ], "id": "https://example.com/evanp", "type": "Person", @@ -79,21 +130,34 @@ A publisher can include the `pendingFollowers` and `pendingFollowing` collection "followers": "https://example.com/evanp/followers", "liked": "https://example.com/evanp/liked", "pendingFollowers": "https://example.com/evanp/pendingFollowers", - "pendingFollowing": "https://example.com/evanp/pendingFollowing" + "pendingFollowing": { + "id": "https://example.com/evanp/pendingFollowing", + "type": "Collection", + "name": "Pending following for Evan Prodromou", + "totalItems": 2 + }, + "manuallyApprovesFollowers": true, + "to": ["as:Public"] } ``` -Retrieving the `pendingFollowers` collection would show incoming follow requests +Notice that the `pendingFollowers` property is a URL, while the `pendingFollowing` property is an embedded object with useful additional properties. + +### `pendingFollowers` collection + +Retrieving the `pendingFollowers` collection shows incoming follow requests for this actor. -``` +```json { "@context": [ "https://www.w3.org/ns/activitystreams", - "https://purl.archive.org/socialweb/pending" + "https://purl.archive.org/socialweb/pending/1" ], "id": "https://example.com/evanp/pendingFollowers", "type": "OrderedCollection", + "attributedTo": "https://example.com/evanp", + "pendingFollowersOf": "https://example.com/evanp", "name": "Pending followers for Evan Prodromou", "orderedItems": [ { @@ -106,6 +170,8 @@ for this actor. "type": "Person", "name": "Alyssa P. Hacker" }, + "to": "https://example.com/evanp", + "cc": "as:Public", "published": "2023-06-21T12:00:00Z" }, { @@ -117,6 +183,8 @@ for this actor. "type": "Application", "name": "Jokebot 3000" }, + "to": "https://example.com/evanp", + "cc": "as:Public", "published": "2023-05-07T12:00:00Z" } ] @@ -125,44 +193,74 @@ for this actor. Note that the second, earlier `Follow` activity has a custom `type` property. Note also that the `object` of the `Follow` activities, which will be the same for every activity, is elided for clarity and space. -``` +### `pendingFollowing` collection + +```json { "@context": [ "https://www.w3.org/ns/activitystreams", - "https://purl.archive.org/socialweb/pending", + "https://purl.archive.org/socialweb/pending/1", {"sports": "https://sports.example/ns#"} ], "id": "https://example.com/evanp/pendingFollowing", "type": "Collection", + "attributedTo": "https://example.com/evanp", + "pendingFollowingOf": "https://example.com/evanp", "name": "Pending following for Evan Prodromou", "items": [ { "type": ["sports:Fan", "Follow"], "id": "https://example.com/evanp/fan/309", "summary": "Evan is a fan of Jimena", + "actor": "https://example.com/evanp", "object": { "id": "https://tennis.example/jimena", "type": "Person", "name": "Jimena Suarez" }, + "to": "https://tennis.example/jimena", + "cc": "as:Public", "published": "2023-04-19T12:00:00Z" }, { "type": "Follow", "id": "https://example.net/evanp/follow/214", "summary": "Evan wants to follow Montreal Weather Updates", + "actor": "https://example.com/evanp", "object": { "id": "https://weather.example/canada/quebec/montreal", "type": "Service", "name": "Montreal Weather Updates" }, + "to": "https://weather.example/canada/quebec/montreal", + "cc": "as:Public", "published": "2023-02-11T12:00:00Z" } ] } ``` -Note that the first `Follow` activity has a custom `type` property. Note also that the `actor` of the `Follow` activities, which will be the same for every activity, is elided for clarity and space. Finally, note that even though the collection's type is `Collection` and the items property is `items`, the activities still must be in reverse chronological order. +Note that the first `Follow` activity has a custom `type` property. Also note that even though the collection's type is `Collection` and the items property is `items`, the activities still must be in reverse chronological order. + +## Processing requirements + +An actor that manually approves followers SHOULD include the `manuallyApprovesFollowers` property in their actor object, with a value of `true`. This indicates that the actor will review and approve or reject incoming follow requests. + +When a server receives an otherwise valid `Follow` activity from a client, it SHOULD add that activity to the `pendingFollowing` collection of the sending actor. The server SHOULD also add the `Follow` activity to the `pendingFollowers` collection of the actor that is being followed, if the followed actor is on the same server. + +When a server receives an otherwise valid `Follow` activity from another server, it SHOULD add that activity to the `pendingFollowers` collection of the followed actor. + +When a server receives an `Accept` or `Reject` activity with a `Follow` activity as `object` from a client, it SHOULD remove that `Follow` activity from the `pendingFollowers` collection of the actor. The server SHOULD also remove the `Follow` activity from the `pendingFollowing` collection of the actor that initiated the follow, if the following actor is on the same server. + +When a server receives an `Accept` or `Reject` activity with a `Follow` activity as `object` from another server, it SHOULD remove that `Follow` activity from the `pendingFollowing` collection of the receiving actor. + +When a server receives an `Undo` activity with a `Follow` activity as `object` from a client, it SHOULD remove that `Follow` activity from the `pendingFollowing` collection of the actor that sent the `Follow`. It SHOULD also remove the `Follow` activity from the `pendingFollowers` collection of the actor that was followed, if the followed actor is on the same server. + +When a server receives an `Undo` activity with a `Follow` activity as `object` from another server, it SHOULD remove that `Follow` activity from the `pendingFollowers` collection of the receiving actor. + +The following [Harel statechart](https://www.sciencedirect.com/science/article/pii/0167642387900359) illustrates the state transitions for a `Follow` activity between actors A1 and A2. The states show which objects belong to which collections, and the transitions show when activities are received and processed via the client API and then the server federation protocol. + +![Pending Followers and Following Statechart](./Follow-State-Diagram.drawio.png) ## Security considerations @@ -173,9 +271,20 @@ Some services or actors do not forward `Reject` activities to the actor of a `Fo For these reasons, publishers SHOULD NOT make the `pendingFollowers` and `pendingFollowing` collections visible to unauthenticated users. Publishers SHOULD NOT make the `pendingFollowers` and `pendingFollowing` collections visible to authenticated users who are not the actor. +## Implementations + +- [onepage.pub](https://github.com/evanp/onepage.pub/) is a simple ActivityPub server that implements the `pendingFollowers` and `pendingFollowing` collections. +- [ap](https://github.com/evanp/ap) is a command-line ActivityPub client. It has commands to list and manage the `pendingFollowers` and `pendingFollowing` collections. + ## References -- [ActivityPub] Christine Lemmer Webber, Jessica Tallon, [ActivityPub](https://www.w3.org/TR/activitypub/), 2018 +- Christine Lemmer Webber, Jessica Tallon, [ActivityPub][ActivityPub], 2018 +- Evan Prodromou, [ActivityPub Miscellaneous Terms][miscellany], 2023 +- Tom Preston-Werner, [Semantic Versioning 2.0.0][semver], 2017 + +[ActivityPub]: https://www.w3.org/TR/activitypub/ +[semver]: https://semver.org/ +[miscellany]: https://swicg.github.io/miscellany/ ## Copyright