1.0.1 • Published 5 months ago
distributed-press-social v1.0.1
social.distributed.press
A Social Inbox for Decentralized Publishing and ActivityPub
How it works
This server runs a minimal implementation of an ActivityPub Inbox and Outbox.
Here's how to use it:
- Publish a static site that contains your ActivityPub Actor, Outbox, and Posts. You can fork our staticpub example or use this Jekyll Plugin. Make sure you set up the webfinger endpoint!
- Generate a keypair using either OpenSSL or
npm run generate-keypair
in this repo - Add the public key to your ActivityPub Actor
- Set up the social inbox server somewhere like
httpa://social.example.com
- Note the WebMention compatible format of your account like
@username@social.example.com
which will be used as theusername
in parameters - Register your ActorInfo by doing a Signed HTTP POST to
/v1/:username/
with JSON that looks like{actorURL, publicKeyId, keypair: {publicKeyPEM,privateKeyPem}}
to initialize your inbox. The server will use your keypair to sign HTTP requests for activities you send to your outbox. You can also use theclient.setInfo()
API. - Set your Actor's
inbox
property to point athttps://yourserver/v1/:username/inbox
- Send any Activities you want to notify your followers with by doing a Signed HTTP POST to
/v1/:username/outbox
Check out the available API endpoints either in the swagger docs at the https://yourserver/v1/docs/
or in the JS client API in /src/client/index.js
.
Development
This project requires Node.js Version 19.x and NPM.
The code is written using TypeScript in the src
folder which gets compiled into the dist
folder.
- Run server right from the source:
npm run dev
- Lint the code to catch common mistakes and maintain code style:
npm run lint
- Build JS files to
dist
:npm run build
- Build and run server:
npm run start
Project structure
/scripts
: Scripts for doing tasks like importing blocklists/admins or generating keypairs/src/
Main folder for source code/src/server/
Source code for the inbox server/src/server/api/
HTTP routes/src/client/
Implementation of a JS client to talk to the inbox viafetch