warriordog / ActivityPubSharp

Modular implementation of ActivityPub in C#
https://warriordog.github.io/ActivityPubSharp/
Mozilla Public License 2.0
45 stars 9 forks source link

Core feature: Server Metadata #129

Open warriordog opened 9 months ago

warriordog commented 9 months ago

Background

ActivityPubSharp is designed to work with many different AP applications, even those that aren't spec-compliant (like fediverse sofware). This has historically been a huge pain point that every AP project must address. While many varied solutions exist, we are taking an entirely different approach from any other known implementation.

Overview

APS will implement a concept called "Server Metadata", which represents auto-detected metadata about a particular domain. Server Metadata, or server meta, will contain information like this:

This information will be made useful by a process known as rewriting. The rewrite process involves middleware that analyzes an object intended for delivery and compares it against the recipient's server meta. All fields and data in the object are checked, and anything incompatible is "rewritten" to a supported format. The actual changes made will vary based on the type and version of software running on the target domain.

Challenges

Obviously, this is not simple to do. There are concerns to keep in mind and many challenges to overcome:

This is not an easy or trivial project. We need extensive research and design, and probably a prototype phase too. We should also ensure that the Type Model and Use Case architecture are nailed down first.

Expectations and Assumptions

This concept and design make several assumptions about existing and future AP implementations. While it's true that every guess is a potential bug, there's unfortunately no other option for this project. The best we can do is recognize and document all expectations.

Example Flow (very old and incomplete)

image