fedipod 0.19.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +104 -134
- package/architecture.md +41 -0
- package/bin/fedipod.mjs +45 -2253
- package/browser.svg +72 -0
- package/cli.md +0 -4
- package/gateway.md +160 -0
- package/groups.md +0 -6
- package/gui.md +7 -11
- package/installed-agent.md +97 -0
- package/lib/{c2s.mjs → client/c2s.mjs} +8 -3
- package/lib/{localapi.mjs → client/localapi.mjs} +2 -2
- package/lib/client/masto/accounts.mjs +264 -0
- package/lib/client/masto/body.mjs +69 -0
- package/lib/client/masto/index.mjs +183 -0
- package/lib/client/masto/instance.mjs +104 -0
- package/lib/client/masto/media.mjs +133 -0
- package/lib/client/masto/oauth.mjs +599 -0
- package/lib/client/masto/render.mjs +459 -0
- package/lib/client/masto/statuses.mjs +331 -0
- package/lib/client/masto/timelines.mjs +316 -0
- package/lib/{streaming.mjs → client/streaming.mjs} +1 -1
- package/lib/{acctfeed.mjs → connections/acctfeed.mjs} +1 -1
- package/lib/{atproto.mjs → connections/atproto.mjs} +15 -16
- package/lib/{bskygroup.mjs → connections/bskygroup.mjs} +1 -1
- package/lib/{fediacct.mjs → connections/fediacct.mjs} +31 -35
- package/lib/{import.mjs → connections/import.mjs} +1 -1
- package/lib/{tagfeed.mjs → connections/tagfeed.mjs} +3 -3
- package/lib/connections/vault.mjs +114 -0
- package/lib/core/as2.mjs +124 -0
- package/lib/core/contexts/activitystreams.json +379 -0
- package/lib/core/contexts/did-v1.json +57 -0
- package/lib/core/contexts/fep-5711.json +36 -0
- package/lib/core/contexts/gotosocial.json +86 -0
- package/lib/core/contexts/identity-v1.json +152 -0
- package/lib/core/contexts/index.mjs +45 -0
- package/lib/core/contexts/join-lemmy.json +33 -0
- package/lib/core/contexts/joinmastodon.json +28 -0
- package/lib/core/contexts/map.json +16 -0
- package/lib/core/contexts/miscellany.json +19 -0
- package/lib/core/contexts/schemaorg.json +8845 -0
- package/lib/core/contexts/security-data-integrity-v1.json +78 -0
- package/lib/core/contexts/security-data-integrity-v2.json +81 -0
- package/lib/core/contexts/security-multikey-v1.json +35 -0
- package/lib/core/contexts/security-v1.json +74 -0
- package/lib/core/contexts/webfinger.json +10 -0
- package/lib/{deliver.mjs → core/deliver.mjs} +2 -2
- package/lib/core/intake/activities.mjs +437 -0
- package/lib/core/intake/activity.mjs +240 -0
- package/lib/core/intake/channel.mjs +144 -0
- package/lib/core/intake/group.mjs +222 -0
- package/lib/core/intake/index.mjs +629 -0
- package/lib/core/intake/notes.mjs +288 -0
- package/lib/core/intake/verify.mjs +141 -0
- package/lib/{keys.mjs → core/keys.mjs} +1 -1
- package/lib/core/publisher/collections.mjs +229 -0
- package/lib/core/publisher/index.mjs +421 -0
- package/lib/core/publisher/notes.mjs +188 -0
- package/lib/core/publisher/questions.mjs +233 -0
- package/lib/core/publisher/restore.mjs +196 -0
- package/lib/core/shapes/activitystreams.ttl +129 -0
- package/lib/core/shapes/index.mjs +107 -0
- package/lib/core/shapes/shapes-text.mjs +13 -0
- package/lib/{social.mjs → core/social.mjs} +2 -2
- package/lib/{store.mjs → core/store.mjs} +4 -0
- package/lib/{wire.mjs → core/wire.mjs} +2 -2
- package/lib/device/admin/index.mjs +13 -0
- package/lib/device/admin/origins.mjs +35 -0
- package/lib/device/admin/routes/connections.mjs +144 -0
- package/lib/device/admin/routes/gateway.mjs +199 -0
- package/lib/device/admin/routes/lifecycle.mjs +191 -0
- package/lib/device/admin/routes/owner.mjs +322 -0
- package/lib/device/admin/routes/setup.mjs +393 -0
- package/lib/device/admin/routes/social.mjs +188 -0
- package/lib/device/admin/server.mjs +95 -0
- package/lib/device/admin/static.mjs +244 -0
- package/lib/device/admin/surface.mjs +274 -0
- package/lib/device/cli/commands/account.mjs +586 -0
- package/lib/device/cli/commands/run.mjs +278 -0
- package/lib/device/cli/commands/service.mjs +221 -0
- package/lib/device/cli/commands/setup.mjs +410 -0
- package/lib/device/cli/commands/state.mjs +559 -0
- package/lib/device/cli/context.mjs +288 -0
- package/lib/{migrate.mjs → device/migrate.mjs} +1 -1
- package/lib/{remote.mjs → device/remote.mjs} +3 -3
- package/lib/{setup.mjs → device/setup.mjs} +3 -3
- package/lib/{update.mjs → device/update.mjs} +1 -1
- package/lib/{directory.mjs → gateway/directory.mjs} +1 -1
- package/lib/{front-core.mjs → gateway/front-core.mjs} +3 -3
- package/lib/{gateway-core.mjs → gateway/gateway-core.mjs} +1 -1
- package/lib/{httpsig.mjs → gateway/httpsig.mjs} +1 -1
- package/lib/{embed.mjs → server/embed.mjs} +131 -22
- package/lib/{links.mjs → shared/links.mjs} +1 -1
- package/lib/{ua.mjs → shared/ua.mjs} +1 -1
- package/package.json +16 -2
- package/run-agent.mjs +33 -25
- package/scripts/build-app.mjs +4 -0
- package/scripts/check-pod-calls.mjs +8 -2
- package/scripts/refresh-contexts.mjs +39 -0
- package/web/admin/actors.js +145 -0
- package/web/admin/common.js +23 -0
- package/web/admin/connections.js +112 -0
- package/web/admin/gateway.js +111 -0
- package/web/admin/group.js +258 -0
- package/web/admin/index.html +7 -1
- package/web/admin/record.js +378 -0
- package/web/admin/setup/index.html +1 -0
- package/web/admin/setup/setup.js +2 -13
- package/web/admin/upkeep.js +170 -0
- package/web/app/README.md +6 -6
- package/web/app/admin-facade.mjs +3 -3
- package/web/app/agent.mjs +12 -12
- package/web/app/atproto-browser.mjs +1 -1
- package/web/app/deliver-relay.mjs +1 -1
- package/web/app/dist/sw.js +21684 -5415
- package/web/app/dist/sw.js.map +4 -4
- package/web/app/fediacct-browser.mjs +1 -1
- package/web/app/shims/shapes-text.mjs +8 -0
- package/web/app/site/admin/actors.js +145 -0
- package/web/app/site/admin/common.js +23 -0
- package/web/app/site/admin/connections.js +112 -0
- package/web/app/site/admin/gateway.js +111 -0
- package/web/app/site/admin/group.js +258 -0
- package/web/app/site/admin/index.html +7 -1
- package/web/app/site/admin/record.js +378 -0
- package/web/app/site/admin/setup/index.html +1 -0
- package/web/app/site/admin/setup/setup.js +2 -13
- package/web/app/site/admin/upkeep.js +170 -0
- package/web/app/site/sw.js +21684 -5415
- package/web/app/sw-src.mjs +17 -2
- package/lib/admin.mjs +0 -1913
- package/lib/intake.mjs +0 -1981
- package/lib/mastoapi.mjs +0 -2284
- package/lib/publisher.mjs +0 -1192
- package/web/admin/admin.js +0 -1181
- package/web/app/site/admin/admin.js +0 -1181
- /package/lib/{oidc-auth.mjs → client/oidc-auth.mjs} +0 -0
- /package/lib/{webpush.mjs → client/webpush.mjs} +0 -0
- /package/lib/{bskyfeed.mjs → connections/bskyfeed.mjs} +0 -0
- /package/lib/{lease.mjs → core/lease.mjs} +0 -0
- /package/lib/{polls.mjs → core/polls.mjs} +0 -0
- /package/lib/{proof.mjs → core/proof.mjs} +0 -0
- /package/lib/{storage.mjs → core/storage.mjs} +0 -0
- /package/lib/{account.mjs → device/account.mjs} +0 -0
- /package/lib/{certs.mjs → device/certs.mjs} +0 -0
- /package/lib/{export-collections.mjs → device/export-collections.mjs} +0 -0
- /package/lib/{home.mjs → device/home.mjs} +0 -0
- /package/lib/{ports.mjs → device/ports.mjs} +0 -0
- /package/lib/{guard.mjs → shared/guard.mjs} +0 -0
- /package/lib/{safefetch.mjs → shared/safefetch.mjs} +0 -0
package/README.md
CHANGED
|
@@ -2,141 +2,111 @@
|
|
|
2
2
|
|
|
3
3
|
- access the Fediverse from a Solid pod
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
FediPod gives you a Fediverse account whose data lives on a Solid pod. You
|
|
6
|
+
follow people on Mastodon, Bluesky, and other Fediverse or ATProto servers in
|
|
7
|
+
one timeline. Your posts, followers and settings stay on your pod.
|
|
8
|
+
|
|
9
|
+
The easiest way to run FediPod is to use it in any browser at https://fedipod.net. Nothing to install. A wizard will walk you through getting a pod (you can also bring your own) and creating a Fediverse identity attached to the pod.
|
|
10
|
+
|
|
11
|
+
There are also a number of [other ways to run FediPod](#other-ways-to-run-fedipod) which offer a variety of scenarios. If interested in the code, see also : [architecture overview](architecture.md) and [files overview](files-overview.md).
|
|
12
|
+
|
|
13
|
+
## Requirements
|
|
14
|
+
|
|
15
|
+
- A current browser, on a desktop or a phone.
|
|
16
|
+
- A Solid pod with a host name of its own, such as
|
|
17
|
+
`https://alice.solidcommunity.net/`. Sign-up can create one for you at
|
|
18
|
+
solidcommunity.net or another provider, or use a pod you already have. A
|
|
19
|
+
pod that lives on a path of a shared host, like `https://server.example/alice/`,
|
|
20
|
+
cannot be a Fediverse address.
|
|
21
|
+
- Followers-only and direct posts need a pod that enforces WAC access control.
|
|
22
|
+
On one that does not, the composer refuses those two and says why. Public
|
|
23
|
+
and unlisted posts work on any pod.
|
|
24
|
+
|
|
25
|
+
## Getting an account
|
|
26
|
+
|
|
27
|
+
1. Open https://fedipod.net and choose **create an account**.
|
|
28
|
+
2. Choose a pod: a new one at the provider you name, or a pod you already have.
|
|
29
|
+
3. Choose your handle. Your address is `@handle@yourpod`. Both parts are
|
|
30
|
+
permanent; display name, bio and pictures are set later in the client.
|
|
31
|
+
4. Enter your pod password once. It creates the account and locks your
|
|
32
|
+
signing key. The password is not stored.
|
|
33
|
+
|
|
34
|
+
Your account then opens in the client. To use it from another browser, go to
|
|
35
|
+
https://fedipod.net, enter your address, sign in at your pod, and unlock your
|
|
36
|
+
key with your password once on that browser.
|
|
37
|
+
|
|
38
|
+
## What you can do
|
|
39
|
+
|
|
40
|
+
The client is [Phanpy](https://github.com/cheeaun/phanpy) (MIT, by Chee Aun),
|
|
41
|
+
served by fedipod.net. Through it you follow and unfollow, post, reply,
|
|
42
|
+
favourite, boost, attach media, edit and delete. Content warnings, polls with
|
|
43
|
+
up to four options and one or several answers, all four visibility levels, a
|
|
44
|
+
conversations view for direct messages, bookmarks, lists, keyword filters,
|
|
45
|
+
pinned posts that other servers can see, blocking and muting, and the custom
|
|
46
|
+
emojis other servers send.
|
|
47
|
+
|
|
48
|
+
**Bluesky.** Connect a Bluesky account, or any other ATProto account, from the
|
|
49
|
+
manage page. Your public posts are mirrored to it, Bluesky replies and
|
|
50
|
+
activity flow into your timeline, and you can like, repost and reply to
|
|
51
|
+
Bluesky posts. Direct messages to Bluesky are not supported. None of this
|
|
52
|
+
needs Bridgy Fed.
|
|
53
|
+
|
|
54
|
+
**Your other Fediverse accounts.** If you also hold an account on Mastodon,
|
|
55
|
+
or on any other server speaking the Mastodon API such as GoToSocial, Pleroma,
|
|
56
|
+
Akkoma, Pixelfed or Friendica, connect it from the manage page and read it
|
|
57
|
+
here. Its home timeline and notifications join the feed you already read,
|
|
58
|
+
interleaved by time, and a post both accounts see appears once. Favouriting,
|
|
59
|
+
boosting and replying act as the account the post came through. The token it
|
|
60
|
+
hands back stays in your browser unless you choose to keep it on your pod.
|
|
61
|
+
|
|
62
|
+
**Moving in.** Mastodon-format exports of follows, blocks, mutes, lists and
|
|
63
|
+
domain blocks import from the manage page. Your old account can be listed as
|
|
64
|
+
an alias, so a Move from it lands here.
|
|
65
|
+
|
|
66
|
+
**The manage page.** `manage account` in the bar opens it: your profile,
|
|
67
|
+
aliases, the gateway, key rotation, recovering posts, parking, moving to
|
|
68
|
+
another server, retiring, and clearing a backlog. It is the same interface
|
|
69
|
+
the installed agent has, described in [the admin interface](gui.md).
|
|
70
|
+
|
|
71
|
+
**More than one browser.** One browser runs your account at a time. Opening
|
|
72
|
+
it in a second browser shows your timeline read-only, and the moment you act
|
|
73
|
+
there it takes over; the first drops back to reading.
|
|
74
|
+
|
|
75
|
+
## What the browser version does not do
|
|
76
|
+
|
|
77
|
+
- **Scheduled posts.** Nothing runs between now and the time you picked, so
|
|
78
|
+
the composer refuses one rather than dropping it later.
|
|
79
|
+
- **Notifications while the client is closed.** There is no push service.
|
|
80
|
+
Open the tab and they are there.
|
|
81
|
+
- **Live updates.** The client refreshes by polling.
|
|
82
|
+
- **Hosting a group.** Joining one works.
|
|
83
|
+
- **Other clients.** A phone app or desktop client has nothing on the network
|
|
84
|
+
to connect to.
|
|
85
|
+
|
|
86
|
+
For these, see [Other ways to run FediPod](#other-ways-to-run-fedipod).
|
|
87
|
+
|
|
88
|
+
## Your data and your keys
|
|
89
|
+
|
|
90
|
+
Everything you publish and everything you read is stored on your pod. Your
|
|
91
|
+
signing key is stored there too, encrypted under your password, so nobody who
|
|
92
|
+
can read your pod, its host included, can post as you. fedipod.net holds no
|
|
93
|
+
key: it verifies incoming mail, drops the junk, forwards the rest to your pod,
|
|
94
|
+
and hands your browser the app. You can detach from it at any time and attach
|
|
95
|
+
to a gateway of your own. Your address and your data do not change.
|
|
96
|
+
|
|
97
|
+
## Other ways to run FediPod
|
|
98
|
+
|
|
99
|
+
- [The installed agent](installed-agent.md) runs on your own machine and
|
|
100
|
+
adds scheduled posts, push notifications, live updates, group hosting and
|
|
101
|
+
the use of any Mastodon client.
|
|
102
|
+
- [Groups](groups.md): hosting a discussion group of Fediverse and Bluesky
|
|
103
|
+
users from a pod.
|
|
104
|
+
- [The gateway](gateway.md): running an always-on door of your own, on
|
|
105
|
+
Netlify or any small host.
|
|
106
|
+
- [FediPod Server](packages/fedipod-server/README.md): a full ActivityPub
|
|
107
|
+
server as a Community Solid Server component, giving every pod on the server
|
|
108
|
+
the option of a Fediverse account.
|
|
6
109
|
|
|
7
|
-
| Kind of Account | Description | User requirements | Host requirements |
|
|
8
|
-
|---|---|---|---|
|
|
9
|
-
| FediPod Solo | Browse & interact with the Fediverse and ATProto from a Solid pod | an always-on pod, a usually on local agent | — |
|
|
10
|
-
| FediPod Group | Host a discussion group of Fediverse/ATProto users from a Solid pod | an always-on pod, a usually on local agent | — |
|
|
11
|
-
| FediPod Gateway | Solo or Group with spam filtering & optional community identity | same + gateway pass-through account | any always-on host, Netlify will do |
|
|
12
|
-
| FediPod Server | Full ActivityPub server as a CSS component | a pod on a CSS server implementing the FediPod component | a CSS server implementing the FediPod component |
|
|
13
|
-
|
|
14
|
-
## Installation & Setup
|
|
15
|
-
|
|
16
|
-
You may sign up for free for a solo, group, or gateway account at https://fedipod.net/ . Wizards will walk you through install and setup. If you want to host a community, instructions are available for [Fediverse User Group](https://github.com/jeff-zucker/FediPod/blob/main/groups.md), the lightweight [FediPod Gateway](https://github.com/jeff-zucker/FediPod/blob/main/gateway.md) and for the full CSS component [FediPod Server](https://github.com/jeff-zucker/FediPod/blob/main/packages/fedipod-server/README.md).
|
|
17
|
-
|
|
18
|
-
### Installing
|
|
19
|
-
|
|
20
|
-
```
|
|
21
|
-
npm install -g fedipod
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
Needs Node 20 or newer.
|
|
25
|
-
|
|
26
|
-
### Running the agent -
|
|
27
|
-
|
|
28
|
-
Run `fedipod start`. You may optionally add a port number (`fedipod start --port 8081`) to change your local agent's port (default is 8030).
|
|
29
|
-
|
|
30
|
-
Now point your browser (any) at `https://localhost:8030` — or your own port if you set one — and there you go!
|
|
31
|
-
|
|
32
|
-
### Running the agent as a service (recommended)
|
|
33
|
-
|
|
34
|
-
If you don't want to run the agent each time, you can install it as a system service. This is recommended as leaving the agent off causes your mail to pile up on the pod host. To create a system service :
|
|
35
|
-
```
|
|
36
|
-
fedipod install-service
|
|
37
|
-
```
|
|
38
|
-
It registers every identity on this machine, one service each, so all of your actors start at boot. An identity running in a terminal is stopped and taken over by its service.
|
|
39
|
-
|
|
40
|
-
`fedipod uninstall-service` reverses it.
|
|
41
|
-
|
|
42
|
-
## Managing your FediPod install
|
|
43
|
-
|
|
44
|
-
You can manage your posts, see logs, park, move, transfer your account and perform other actions. See the [GUI admin](https://github.com/jeff-zucker/FediPod/blob/main/gui.md) and [CLI admin](https://github.com/jeff-zucker/FediPod/blob/main/cli.md) pages.
|
|
45
|
-
|
|
46
|
-
You can also use the admin tools to create other actors, either groups or persons. You may have as many as you want on the local machine, but each one needs a separate pod.
|
|
47
|
-
|
|
48
|
-
Every agent checks once a day whether a newer FediPod is published. When one
|
|
49
|
-
exists, the record page offers **Update**, and `fedipod update`
|
|
50
|
-
does the same from the terminal. `AP_UPDATE_CHECK=0` turns the check off.
|
|
51
|
-
|
|
52
|
-
## A FediPod.net Gateway account (reccommended)
|
|
53
|
-
|
|
54
|
-
Most of what a Fediverse inbox receives is broadcast noise. A gateway is a
|
|
55
|
-
shared, always-on door that verifies each delivery, drops the junk, and
|
|
56
|
-
passes the rest to your pod — while your key and data stay on your own
|
|
57
|
-
pod. There is a free gateway at [fedipod.net](https://fedipod.net/). Attaching to it or detaching from it is a few wizard-guided clicks.
|
|
58
|
-
|
|
59
|
-
Users are recommended to associate with a gateway as it reduces the mail load on your pod host.
|
|
60
|
-
|
|
61
|
-
## Fediverse Clients
|
|
62
|
-
|
|
63
|
-
The UI is the bundled [Phanpy](https://github.com/cheeaun/phanpy)
|
|
64
|
-
client (MIT, by Chee Aun). It is served same-origin over the agent's Mastodon client-API facade, and logging in is one click — the instance is filled in for you. If you ever enter it by hand, use the address on the record's **local host** row.
|
|
65
|
-
|
|
66
|
-
The agent federates for real: follow/unfollow, post, reply, favourite,
|
|
67
|
-
boost, media, delete; incoming boosts from people you follow and a
|
|
68
|
-
configurable public-hashtag feed (`POST /tagfeed`) fill the timeline.
|
|
69
|
-
Also: editing posts, content warnings, voting in polls, all four visibility
|
|
70
|
-
levels (followers-only and direct posts work only on a pod that enforces
|
|
71
|
-
WAC access control — on one that doesn't, the composer refuses and says why),
|
|
72
|
-
a conversations view for direct messages, bookmarks, favourites, lists,
|
|
73
|
-
keyword filters, scheduled posts, pinned posts (visible from other servers),
|
|
74
|
-
blocking and muting from the client, custom emojis, and web-push
|
|
75
|
-
notifications that reach you while the client is closed.
|
|
76
|
-
|
|
77
|
-
<!-- CLAUDE 2026-09-09 — the browser build does not have three of the things
|
|
78
|
-
this paragraph promises, and it says so honestly now rather than
|
|
79
|
-
advertising them. Written as a first draft in your voice; rework or move
|
|
80
|
-
it wherever you think it belongs. Delete these markers when done. -->
|
|
81
|
-
Two of those are the installed agent only. **Scheduled posts** need something
|
|
82
|
-
running between now and the time you picked, and in the browser build nothing
|
|
83
|
-
is — so it refuses a scheduled post rather than accepting one it would silently
|
|
84
|
-
drop. **Web-push notifications** likewise: the browser build has no push
|
|
85
|
-
service behind it, so it does not advertise one and your client hides the
|
|
86
|
-
toggle instead of showing one that does nothing. Both work on the installed
|
|
87
|
-
agent. **Custom emojis** you receive are rendered everywhere; the picker for
|
|
88
|
-
sending your own is not built yet, on either.
|
|
89
|
-
<!-- /CLAUDE -->
|
|
90
|
-
|
|
91
|
-
Polls: up to four options, one answer or several, running from five minutes to
|
|
92
|
-
a month.
|
|
93
|
-
|
|
94
|
-
### Other clients
|
|
95
|
-
|
|
96
|
-
- **Web clients**: drop any static Mastodon client dist into `ui/<name>/`
|
|
97
|
-
and it is served at `/<name>/`, same-origin — see `ui/README.md`.
|
|
98
|
-
- **Desktop clients** (Tuba, Whalebird, …): add `https://localhost:8030` (or other port for other agent) as a
|
|
99
|
-
custom instance.
|
|
100
|
-
- **Streaming**: the agent serves the Mastodon streaming API
|
|
101
|
-
(`/api/v1/streaming`, WebSocket) so clients update live instead of polling.
|
|
102
|
-
<!-- CLAUDE 2026-09-09 — true of the installed agent; the browser build is a
|
|
103
|
-
service worker and cannot hold a socket. It advertises no streaming URL,
|
|
104
|
-
so clients fall back to polling on their own. Delete markers when done. -->
|
|
105
|
-
The browser build cannot: a service worker answers fetches, not sockets, so it
|
|
106
|
-
advertises no streaming URL and clients poll instead.
|
|
107
|
-
<!-- /CLAUDE -->
|
|
108
|
-
|
|
109
|
-
## Bluesky and ATProto
|
|
110
|
-
|
|
111
|
-
`FediPod` includes experimental support for ATProto. A Bluesky connection lets your `FediPod` agent drive an existing Bluesky (or other ATProto) account alongside your Fediverse identity. When you post a public post from `FediPod`, it will be cross-posted to Bluesky as a mirror (a toggle you can turn off). Private DMs from `FediPod` to Bluesky are not currently supported. Bluesky replies and activity flow into your timeline so you see, for example, a combined Bluesky and Mastodon feed. You can like, boost, and reply to Bluesky posts from within `FediPod`. None of these features require `Bridgy Fed`, however, fully joining a `FediPod` group from a Bluesky client other than `FediPod` does require a bridge.
|
|
112
|
-
|
|
113
|
-
## Your other Fediverse accounts
|
|
114
|
-
|
|
115
|
-
If you also hold an account on Mastodon — or on any other server speaking the Mastodon API, such as GoToSocial, Pleroma, Akkoma, Pixelfed or Friendica — you can connect it and read it here. Its home timeline and notifications join the feed you already read, interleaved by time, and a post both accounts see appears once rather than twice. Favouriting, boosting and replying act as the account the post came through, on its own server. Connect one from the **Other identities** row of the admin page: you sign in at that server, and the token it hands back stays on this machine.
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
## Architecture
|
|
119
|
-
|
|
120
|
-
`Activitypods` requires a server which provides both an ActivityPub server and a Solid server and thus requires a specific server setup. `FediPod Solo & FediPod Group`, can be installed on any subdomained https-served pod without any modification to the server. It does this by splitting the ActivityPub server into two parts. The pod part provides discovery (webfinger) and stores mostly public data while the local agent provides the ActivityPub actions and storage for most private data. The exception is private direct messages which are stored on the pod protected by ACL resources. The same protected area also holds followers-only posts, and the pending-follow
|
|
121
|
-
and blocked collections. [`FediPod Gateway`](https://github.com/jeff-zucker/FediPod/blob/main/gateway.md) can be supported from any lightweight Internet-facing box including Netlify, it does not require a full server and can work with any FediPod-capable pod. [`FediPod Server`](https://github.com/jeff-zucker/FediPod/blob/main/packages/fedipod-server/README.md) works as a CSS server component. If the pod host installs it, anyone with a pod on that server can opt-in to using their pod as a FediPod account fed by the server itself.
|
|
122
|
-
|
|
123
|
-

|
|
124
|
-
|
|
125
|
-
### Protocol conformance
|
|
126
|
-
|
|
127
|
-
FediPod is a full ActivityPub server, on both of the spec's profiles:
|
|
128
|
-
server-to-server (§7) and client-to-server (§6) — `POST /ap/outbox` on the
|
|
129
|
-
agent takes an activity (or a bare Note) and does the id-minting,
|
|
130
|
-
side-effects and delivery, authenticated by a Solid-OIDC token whose WebID is
|
|
131
|
-
the owner's. The Mastodon REST API is the everyday client interface; C2S is
|
|
132
|
-
the spec's own.
|
|
133
|
-
|
|
134
|
-
Group actors follow FEP-1b12: a carried post names the group as its
|
|
135
|
-
`audience`, the moderator roster is published as the actor's `attributedTo`,
|
|
136
|
-
a followed group's announced `Delete` of a post it carried is honoured, and
|
|
137
|
-
the group's own moderation is announced to the membership. The FEP-4ccd
|
|
138
|
-
pending-follow collections and the FEP-c648 blocked collection are published
|
|
139
|
-
as owner-only documents. See [Groups](https://github.com/jeff-zucker/FediPod/blob/main/groups.md).
|
|
140
110
|
|
|
141
111
|
## Acknowledgements
|
|
142
112
|
|
package/architecture.md
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Architecture
|
|
2
|
+
|
|
3
|
+
FediPod splits an ActivityPub server into two parts. The pod provides
|
|
4
|
+
discovery and stores the public record: the actor, its outbox, followers and
|
|
5
|
+
posts, and the inbox that receives deliveries. The agent provides the
|
|
6
|
+
ActivityPub actions: it drains the inbox, builds the timeline, signs and
|
|
7
|
+
delivers, and answers the Mastodon client. The agent runs either in your
|
|
8
|
+
browser, served by fedipod.net, or as [the installed agent](installed-agent.md)
|
|
9
|
+
on your own machine. Private direct messages, followers-only posts and the
|
|
10
|
+
pending-follow and blocked collections live on the pod in an area protected by
|
|
11
|
+
access control.
|
|
12
|
+
|
|
13
|
+
A [gateway](gateway.md) can stand in front of the pod: an always-on door that
|
|
14
|
+
verifies each delivery where the signature can still be checked, drops spam,
|
|
15
|
+
and forwards the rest to the pod inbox with a receipt. It holds no key. The
|
|
16
|
+
browser version always has one; the installed agent may use one. Any
|
|
17
|
+
lightweight host will do, Netlify included.
|
|
18
|
+
|
|
19
|
+
[FediPod Server](packages/fedipod-server/README.md) puts the agent inside a
|
|
20
|
+
Community Solid Server, so anyone with a pod on that server can opt in to a
|
|
21
|
+
Fediverse account fed by the server itself.
|
|
22
|
+
|
|
23
|
+

|
|
24
|
+
|
|
25
|
+

|
|
26
|
+
|
|
27
|
+
## Protocol conformance
|
|
28
|
+
|
|
29
|
+
FediPod is a full ActivityPub server, on both of the spec's profiles:
|
|
30
|
+
server-to-server (§7) and client-to-server (§6). `POST /ap/outbox` on the
|
|
31
|
+
installed agent takes an activity, or a bare Note, and does the id-minting,
|
|
32
|
+
side-effects and delivery, authenticated by a Solid-OIDC token whose WebID is
|
|
33
|
+
the owner's. The Mastodon REST API is the everyday client interface; C2S is
|
|
34
|
+
the spec's own.
|
|
35
|
+
|
|
36
|
+
Group actors follow FEP-1b12: a carried post names the group as its
|
|
37
|
+
`audience`, the moderator roster is published as the actor's `attributedTo`,
|
|
38
|
+
a followed group's announced `Delete` of a post it carried is honoured, and
|
|
39
|
+
the group's own moderation is announced to the membership. The FEP-4ccd
|
|
40
|
+
pending-follow collections and the FEP-c648 blocked collection are published
|
|
41
|
+
as owner-only documents. See [Groups](groups.md).
|