mirror of
https://codeberg.org/fediverse/fep.git
synced 2026-08-05 19:55:46 +00:00
Update FEP-82f6 (#601)
I'm clarifying some things and adding an example status object. Co-authored-by: Grishka <git@grishka.me> Reviewed-on: https://codeberg.org/fediverse/fep/pulls/601 Co-authored-by: grishka <grishka@noreply.codeberg.org> Co-committed-by: grishka <grishka@noreply.codeberg.org>
This commit is contained in:
+28
-6
@@ -21,8 +21,9 @@ The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL
|
||||
|
||||
## Representation of statuses
|
||||
|
||||
A status object is of type `sm:ActorStatus`, which extends the ActivityPub `Object`. It has the following fields:
|
||||
A status object is of type `ActorStatus`, which extends the ActivityPub `Object`. It has the following fields:
|
||||
|
||||
- `attributedTo`: the ID of the actor whose status this is. REQUIRED.
|
||||
- `content`: the plain text content of the status. REQUIRED.
|
||||
- `published`: the timestamp when this status update was created. REQUIRED.
|
||||
- `id`: a unique identifier for this status update. REQUIRED.
|
||||
@@ -33,22 +34,24 @@ A status object is of type `sm:ActorStatus`, which extends the ActivityPub `Obje
|
||||
|
||||
The following two OPTIONAL fields are added to actors:
|
||||
|
||||
- `sm:status`: the last, or current, status update of this actor. SHOULD NOT be present if the last status has expired. SHOULD contain an inlined `sm:ActorStatus`.
|
||||
- `sm:statusHistory`: a collection of all past status updates of this actor. If present, implementations MAY provide a UI to view this actor's status history. If absent, implementations SHOULD NOT store this actor's past status updates and MUST NOT expose them in the UI.
|
||||
- `status`: the last, or current, status update of this actor. MUST NOT be present if the last status has expired. MUST contain an inlined `ActorStatus`.
|
||||
- `statusHistory`: a collection of all past status updates of this actor. If present, implementations MAY provide a UI to view this actor's status history. If absent, implementations SHOULD NOT store this actor's past status updates and MUST NOT expose them in the UI.
|
||||
|
||||
## Activities
|
||||
|
||||
### Creating a status update
|
||||
|
||||
A status update is created by sending a `Create{sm:ActorStatus}` activity to followers. Upon receiving this activity, an implementation updates the actor's latest status, and, if it has the `sm:statusHistory` collection, adds it to the history. After sending this activity, the `sm:status` field of the actor object MUST be updated with this new status. An `Update{Actor}` MUST NOT be sent because the `Create` already implicitly updates that field in the copies of this actor stored on remote servers.
|
||||
A status update is created by sending a `Create{ActorStatus}` activity to followers. Upon receiving this activity, an implementation updates the actor's latest status, and, if it has the `statusHistory` collection, adds it to the history. After sending this activity, the `status` field of the actor object MUST be updated with this new status. An `Update{Actor}` MUST NOT be sent because the `Create` already implicitly updates that field in the copies of this actor stored on remote servers.
|
||||
|
||||
If the actor does not have a `statusHistory`, the previous status is considered no longer existing, as if it was `Delete`d.
|
||||
|
||||
### Clearing the status
|
||||
|
||||
The latest status is cleared by sending a `Remove{sm:ActorStatus}` activity to followers. Upon receiving this activity, if the ID of the `object` matches the actor's current status, an implementation removes the actor's current status. If the actor has the `sm:statusHistory` collection, it keeps it there. Same considerations for `sm:status` apply here.
|
||||
The latest status is cleared by sending a `Remove{ActorStatus}` activity to followers. Upon receiving this activity, if the ID of the `object` matches the actor's current status, an implementation removes the actor's current status. If the actor has the `statusHistory` collection, it keeps it there. Same considerations for `status` apply here.
|
||||
|
||||
### Deleting the status
|
||||
|
||||
A status is completely deleted by sending a `Delete{sm:ActorStatus}` activity to followers. If the actor has the `sm:statusHistory` collection, the status is removed from there as well as being cleared from the profile. Otherwise, this is activity is identical to `Remove`.
|
||||
A status is completely deleted by sending a `Delete{ActorStatus}` activity to followers. If the actor has the `statusHistory` collection, the status is removed from there as well as being cleared from the profile. Otherwise, this is activity is identical to `Remove`.
|
||||
|
||||
### Other activities in relation to statuses
|
||||
|
||||
@@ -97,6 +100,25 @@ Updating one's status, with the ability to set it to expire:
|
||||
UI with history, similar to early Facebook:
|
||||

|
||||
|
||||
## Example status object
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "ActorStatus",
|
||||
"id": "https://example.social/users/1/statuses/1747286633",
|
||||
"attributedTo": "https://example.social/users/1",
|
||||
"content": "is desperately trying to bring the old internet back",
|
||||
"published": "2025-05-15T05:23:53.539Z",
|
||||
"@context": [
|
||||
"https://www.w3.org/ns/activitystreams",
|
||||
{
|
||||
"sm": "http://smithereen.software/ns#",
|
||||
"ActorStatus": "sm:ActorStatus"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## References
|
||||
|
||||
- Christine Lemmer-Webber, Jessica Tallon, Erin Shepherd, Amy Guy, Evan Prodromou, [ActivityPub], 2018
|
||||
|
||||
Reference in New Issue
Block a user