馃帀 Huge shoutout to @2chanhaeng for implementing custom collection dispatchers in #Fedify through the Korean #OSSCA program!
This incredible contribution adds support for creating arbitrary collections beyond the built-in ones (e.g., outbox, inbox, following, followers). Now developers can expose custom collections like user bookmarks, post categories, or any grouped content through the #ActivityPub protocol:
federation .setCollectionDispatcher( "bookmarks", Article, "/users/{identifier}/bookmarks", async (ctx, values, cursor) => { const { posts, nextCursor } = await getBookmarkedPosts(values.identifier, cursor); return { items: posts, nextCursor }; } ) .setCounter(async (ctx, values) => getBookmarkCount(values.identifier) );
The implementation is technically excellent with full #TypeScript support, both Collection
and OrderedCollection
types, cursor-based pagination, authorization predicates, and zero breaking changes. @2chanhaeng delivered not just code but a complete feature with 313 lines of comprehensive documentation, practical examples, and thorough test coverage.
This opens up countless possibilities for ActivityPub applications built with Fedify. From user-specific collections to complex categorization systems, developers now have the flexibility to create any type of custom collection while maintaining full ActivityPub compliance.
Thank you @2chanhaeng for this outstanding contribution and to the OSSCA program for fostering such excellent open source collaboration! 馃殌