fedimovies/FEDERATION.md

3 KiB

ActivityPub federation in Mitra

Mitra largely follows the ActivityPub server-to-server specification but it makes uses of some non-standard extensions, some of which are required for interacting with it.

The following activities are supported:

  • Accept(Follow)
  • Reject(Follow)
  • Undo(Follow)
  • Create(Note)
  • Delete(Note)
  • Like(Note)
  • Undo(Like)
  • Announce(Note)
  • Undo(Announce)
  • Update(Note)
  • Follow(Person)
  • Update(Person)
  • Move(Person)
  • Delete(Person)
  • Add(Person)
  • Remove(Person)

And these additional standards:

Activities are implemented in way that is compatible with Pleroma, Mastodon and other popular ActivityPub servers.

Supported FEPs

Profile extensions

Cryptocurrency addresses

Cryptocurrency addresses are represented as PropertyValue attachments where name attribute is a currency symbol prefixed with $:

{
  "name": "$XMR",
  "type": "PropertyValue",
  "value": "8Ahza5RM4JQgtdqvpcF1U628NN5Q87eryXQad3Fy581YWTZU8o3EMbtScuioQZSkyNNEEE1Lkj2cSbG4VnVYCW5L1N4os5p"
}

Identity proofs

Identity proofs are represented as attachments of IdentityProof type:

{
  "name": "<did>",
  "type": "IdentityProof",
  "signatureAlgorithm": "<proof-type>",
  "signatureValue": "<proof>"
}

Subscription events

Local actor profiles have subscribers property which points to the collection of actor's paid subscribers.

The Add activity is used to notify the subscriber about successful subscription payment. Upon receipt of this activity, the receiving server should add specified object to actors's subscribers collection (specified in target property):

{
  "@context": [
    "https://www.w3.org/ns/activitystreams"
  ],
  "actor": "https://example.com/users/alice",
  "id": "https://example.com/activities/00000000-0000-0000-0000-000000000001",
  "object": "https://example.com/users/bob",
  "target": "https://example.com/users/alice/collections/subscribers",
  "to": [
    "https://example.com/users/bob"
  ],
  "type": "Add"
}

The Remove activity is used to notify the subscriber about expired subscription. Upon receipt of this activity, the receiving server should remove specified object from actors's subscribers collection (specified in target property):

{
  "@context": [
    "https://www.w3.org/ns/activitystreams"
  ],
  "actor": "https://example.com/users/alice",
  "id": "https://example.com/activities/00000000-0000-0000-0000-000000000002",
  "object": "https://example.com/users/bob",
  "target": "https://example.com/users/alice/collections/subscribers",
  "to": [
    "https://example.com/users/bob"
  ],
  "type": "Remove"
}