From 7bd4eb728d27636321e9ac6dadd764ef5fa95af1 Mon Sep 17 00:00:00 2001 From: Raphael Kabo Date: Fri, 2 Feb 2024 12:14:38 +0000 Subject: refactor: send and accept only spec-compliant AP headers --- src/lib/activitypub.ts | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) (limited to 'src/lib') diff --git a/src/lib/activitypub.ts b/src/lib/activitypub.ts index 0a3db7b..11f0770 100644 --- a/src/lib/activitypub.ts +++ b/src/lib/activitypub.ts @@ -1,9 +1,22 @@ -import { Request } from "express"; +import { Request, Response } from "express"; +// From https://www.w3.org/TR/activitypub/#client-to-server-interactions: +// "Servers MAY interpret a Content-Type or Accept header of application/activity+json +// as equivalent to application/ld+json; profile="https://www.w3.org/ns/activitystreams" +// for client-to-server interactions. +// For best compatibility, we always send application/ld+json; profile="https://www.w3.org/ns/activitystreams" +// and accept both application/ld+json; profile="https://www.w3.org/ns/activitystreams" and application/activity+json. +export const activityPubContentType = + 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"'; +export const alternateActivityPubContentType = "application/activity+json"; + +// Cf. https://www.w3.org/TR/activitypub/#retrieving-objects export const acceptsActivityPub = (req: Request) => { - return ( - req.headers.accept && - (req.headers.accept.includes("application/activity+json") || - req.headers.accept.includes("application/ld+json")) + const validAcceptHeaders = [ + activityPubContentType, + alternateActivityPubContentType, + ]; + return validAcceptHeaders.some( + (header) => req.headers.accept?.includes(header), ); }; -- cgit v1.2.3