The logs from this are already cleared on my server, but when I sent a private message (standard Create/Note with a single recipient who also has a Mention in the tag property) from my custom software to my account here, I received a 500 error saying something like "cc is not iterable" (though I don't know the exact phrasing). When I included cc as an empty array, it started working. Not sure whether it was missing on Create or Note, maybe it was both.
@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).
@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.
@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:
@julian Wouldn't ??
be better?
@rikudou maybe? Nullish coalescing sounds really cool, but I've avoided it for years because of browser compatibility.
Node has had support forever (since v14, I've discovered), but I just don't know how to use it is all :smile: