@rikudou As far as I understand things, a 'private message' in ActivityPub is Create / ChatMessage, not Create / Note. I think NodeBB wouldn't be the only software to complain if 'cc' is missing from either part of Create / Note (although it's not expected in either part of Create / ChatMessage).
ActivityPub
Focused discussion related to ActivityPub integration in NodeBB
This is a forum category containing topical discussion. You can start new discussions by mentioning this category.
@freamon Create(ChatMessage)
is not part of ActivityPub. From my light research online it is something added by a Pleroma extension and possibly supported by Lemmy.
NodeBB will automatically slot received non-public notes as chat messages.
FYI the next Lemmy version will use Create/Note
for private messages. You can test it on voyager.lemmy.ml
@nutomic@lemmy.ml thanks for the update! That's awesome to hear
@julian I've added support to PieFed to successfully receive Create / Note as a PM from NodeBB.
From Nutomic's PR, it looks like you'll continue you get Create / ChatMessage from them, as also you will from PieFed. This currently fails, as I guess that it converts them into a Create / Note, but then complains of there being no 'cc'.
It doesn't make sense for PMs to be 'carbon copied' to anyone, so I'll raise an Issue at your repo.
@freamon thanks! Happy to look into handling Create(ChatMessage)
... I think the error aside, NodeBB would drop it anyway since ChatMessage
isn't an expected post type.
@julian Oh, I've just realised I read Nutomic's PR the wrong way around. After 2.0, you'll start getting Notes from them. If 'ChatMessage' processing isn't worth handling by NodeBB, I can change PieFed to send you Notes instead.
It seems all of the test instances are down? I get a 502 no matter which of voyager.lemmy.ml, enterprise.lemmy.ml, and ds9.lemmy.ml I try to open
Yes not sure whats wrong there, the server was using a lot of cpu for no reason. Restart fixed it for now, let me know if it happens again.
Voyager still has an issue, but the others seem to work now
That instance runs Lemmy 1.0 which is still in alpha state, and the frontend is not compatible yet. So only the api works there.
@julian Oh, right. Thanks. But yeah, it's what Lemmy (and PieFed) uses, so I just assumed it was part of AP, and never looked into it any further.
I was thinking while typing this "I bet that means that chat messages from NodeBB to PieFed will fail", which I just tested, and sure enough they do (I'll make an Issue for it on PieFed's repo).
Ah, that's unfortunate. When NodeBB sends a chat message out, it is just a regular Note with the recipients directly addressed, with no as:Public
pseudo-user.
So as long as PieFed handles mentioned-only notes the activity should be processed...
@julian It currently doesn't. If someone is Mentioned, the assumption is that it was part of post / comment in a community, and it fails because it can't find the community. I know that, for Lemmy, if you Mention someone in a comment, and they don't have a copy of the community (or they do and there's no local subscribers to it), then it will reject it. I don't know what it does if there's no community at all (I'll figure out a way to test it, on a server I can control).
@freamon Update: no, Lemmy doesn't understand them either. It rejects Create / Note without a community with the usual "did not match any variant of untagged enum AnnouncableActivities"
@freamon As others have said, ChatMessage is non-standard. The Create/Note is not particularly great for private messages, but whatever. Anyway, cc is not a required field of Note nor Create, so any software that would complain has a bug.
@rikudou Yeah, sorry, I didn't mean to derail this thread. The GitHub issue was intended to only really be about the 'cc' problem, because it looks like PieFed will have to start sending Create/Note to non-Lemmy platforms anyway, but it'd easier if 'cc' doesn't have to be artificially included to keep NodeBB happy.
In a bit of code that is too clever for my own good, I collapse to
and cc
into a single deduplicated array with:
const recipients = new Set([...object.to, ...object.cc]);
Which of course assumes that both properties are iterable. That has now been changed to an even clever-er (and less readable):
const recipients = new Set([...(object.to || []), ...(object.cc || [])]);
:sunglasses: