The Agora supports a basic level of ActivityPub federation, allowing users from other federated platforms (like Mastodon, Pleroma, etc.) to follow and receive updates from users within the Agora.
This document outlines the current implementation.
/.well-known/webfinger?resource=acct:<user>@<domain>@<user>@<your.agora.domain>, their server queries this endpoint.actor) URL./users/<username> (also aliased to /u/<username>)id.preferredUsername.inbox and outbox./u/<user>).publicKeyPem) for verifying signed requests./u/<user>/inbox (POST)Follow, Like, Create (Reply), and Announce (Boost) activities.Accept activity back.reactions table in SQLite./u/<user>/outbox (GET)OrderedCollection of the user’s 20 most recent subnodes, formatted as Create activities wrapping a Note object.Note object has a stable, unique ID (/u/<user>/note/<path>) that returns the ActivityPub JSON representation, ensuring compatibility with Mastodon and other platforms.Follow activity to the Agora user’s inbox.Accept activity back to the remote server.Accept, the Agora sends the new follower the 5 most recent subnodes from the followed user. This is to populate the new follower’s timeline with some initial content.federated_subnodes). This prevents sending the same subnode to the same follower multiple times.The federation worker is a separate process that polls the Git repositories for new commits and broadcasts them to followers.
Manual Run (Single Pass):
uv run python3 scripts/federation_worker.py --once
Continuous Loop (Default Interval: 5 minutes):
uv run python3 scripts/federation_worker.py
Systemd Service:
It is recommended to run this as a systemd service (e.g., agora-federation.service) to ensure it runs continuously in the background.
private.pem and public.pem key pair on first run if they don’t exist.Accept and Create) are signed with the user’s private key. Remote servers can fetch the public key from the actor profile to verify that the requests are legitimate.RT @dakkar@s.thenautilus.net CW: meta, #federation explanation
Aha! Finally found a clear and complete diagram of activity dissemination in #ActivityPub! It uses Mastodon-specific terms, but the logic works and matches both the code and the behaviour I’ve seen. From (1/2)
A #Flancian believes it is through a [[re evolution]] ~ #reevolution of the #base and [[super structure]] that we will unlock the true potential of humanity and our allies in the #Commons and its #Federation.
Rendering context...