-1
26

Multiple handles for Activity Intents

1mon 4d ago by activitypub.space/uid/1 in technical-discussion@activitypub.space

Hi @benpate@mastodon.social I've got a question about Activity Intents!

I'm implementing it now (as you noticed) and have run into an interesting issue. The wording of 3b86 suggests that the intents are distinct between users. That is, the end user inputs their handle, the handle is queried via webfinger, and supported Intents are returned.

However, the intents themselves don't really distinguish between users.

So I could have a localStorage session with multiple handles registered (e.g. julian@activitypub.space, nodebb@fosstodon.org), etc. — this works fine.

But if I had two handles with the same domain, alice@example.social and bob@example.social, then my intents can't be targeted, can they... I just fire off the request (or rather, I have the end user's browser navigate) to the intent URL and whatever account is logged in will be the actor.

Did I miss something, or was there a way to distinguish actors in Activity Intents?

P.S. I find it highly amusing that you had to click through to activitypub.space to read my whole post, but because I don't support Activity Intents yet, you can't reply properly :rolling_on_the_floor_laughing:

@julian

Also, how far along are you? If you’d like, you’re welcome to use, fork, or be inspired by my JS library - https://github.com/EmissarySocial/camperjs

I still need to do some better documentation for it, but let me know if you’re interested and I’ll get writing today.

@benpate@mastodon.social too bad I didn't know about camperjs and hand rolled my own dialogs.

Just as well, I'd want them to look like my own dialogs anyway 😁

@benpate@mastodon.social focused on it today. Mostly been working on the handle registration and integration into existing action flows for guests.

On the receiving side, I have my users' webfinger supporting the Object intent.

Here are some screenshots :eyes: and yes, I am pretending to be @pfefferle@mastodon.social because I don't have an account on mastodon.social LOL... I think at the end of the day the handle doesn't really matter if it's open-ended like that... like you said, you end up with whichever user is "signed in".

2fa4b888-3ca7-4917-a84d-c798cd1704ad-image.jpeg

f7c3258b-8022-4b01-ac47-220c8425084d-image.jpeg

2fa4b888-3ca7-4917-a84d-c798cd1704ad-image.jpeg f7c3258b-8022-4b01-ac47-220c8425084d-image.jpeg

@julian @pfefferle

It looks beautiful! Well done! I can't wait to try it out, as soon as you have it live :)

And, I'd love to hear how it goes - if there are things we can make easier, document better, whatever. I still need to make an implementation guide, but just haven't been able to get it to the top of my stack.

One thing I've been focused on recently is including a signup link in the workflow to help brand new people. Here's a silly demo of my latest: https://qwertylicious.dev/have-you-heard-of-qwertylicious

@benpate@mastodon.social well, the flow does work, although Mastodon's implementation is barebones.

They support create, but only with a single argument {content}. No {inReplyTo} which severely hampers utility since any content posted will be a top-level toot. This isn't a criticism of 3b86, it is just what it is :smile:

I might just have to test NodeBB-to-NodeBB instead.

@julian

You’re exactly right, and I don’t see it as a criticism at all. It’s an on-ramp that lets people explore slowly, then add capabilities gradually. It’s a checked-and-egg problem.

I also want a “reply” activity as well, but I’m afraid nobody would support it yet.

So I look for {inReplyTo} in the create response to see if replies are possible, then register a “synthetic” activity for the application to discover. This lets me turn buttons on and off based on your servers abilities.

@benpate@mastodon.social "You’re exactly right" triggered :scream:

I think it's wise to be hesitant about it. I think a Create intent with inReplyTo does already mean "Reply", so right now I don't see any reason to introduce a new intent.

I had a similar thought about unvoting, which is something NodeBB does but isn't captured by ActivityStreams. We had to map it to Undo(Vote). So I was wondering if Undo would make sense in 3b86, but the Undo Intent already exists and would be more cromulent.

@julian

I know.. agreement on the Fediverse is so rare, it’s almost scary 😉

Yeah, Undo sounds like it makes sense in your case. I didn’t think of any in the beginning, so just overlooked it.

One complicating factor is in showing the “state” of things in the remote site - we’d need a way to know that you voted for something first, so then we could undo it.

But yeah, let’s add that into 3b86 as well. What kinds of parameters would you want to pass? Or, would you just want to write a PR?

> @benpate@mastodon.social said: > > But yeah, let’s add that into 3b86 as well. What kinds of parameters would you want to pass? Or, would you just want to write a PR?

No, I think we'd want to KISS. If you upvote something with your fediverse account, and it doesn't "show" on the site that you upvoted, I think that's ok.

The "you're exactly right" thing was an LLM joke :laughing:

Okay. One-way 3b86 support is pushed to activitypub.space. Excuse the occasional broken language string, that'll get fixed up later. NodeBB will now let you register handles and can redirect to supported Like, Dislike, Create, and Follow handlers. @benpate@mastodon.social if you could give it a whirl.

The other direction, there's almost no support right now. We just expose Object intent, but I will flesh out the same intents soon, so NodeBB users can consume Activity Intents too.

@benpate@mastodon.social in 4.6 Create Intent, can you add a new parameter {audience}? I will use it to target a specific category/community for threadiverse posting.

@julian I'm writing this up now. Do you also use the {context} property? Should I include this as well?

@benpate@mastodon.social it wouldn't hurt, but no, I don't use it. However, I can use it! So it would be helpful :smile:

When you reply to a topic, it's easiest to reply to a specific post, so that's why I'm using {inReplyTo}. When composing a new topic, {audience} is used to target the category.

Replying to a topic isn't really supported on the fediverse (usually you just reply to the root-level post), but it is supported in NodeBB.

@benpate@mastodon.social unrelatedly, I don't know why I am not receiving your posts... I re-followed you again just in case.

@julian

That makes sense. I’ve been building out contexts for conversations, so it’s top of mind for me. But it makes sense that audience and inReplyTo might be enough. If the context is missing, I’d probably just fill in the context from the parent anyway.

@benpate@mastodon.social I think sending context makes a lot of sense, but technically context and audience used in those specific ways are not ActivityStreams "proper". Their association with topics and categories come from FEPs 7888 and 1b12, respectively.

However because I implement both of them, I would love both added to your FEP 😝 — it might mean you'll need to put a note beside each linking to their FEPs.

@julian I can do that. Both terms *are* in the Activity Vocabulary, so we're well within the spec to include them here. But yeah, it would be good to include a note that points to the FEPs where they're really defined.

Ok. More to do... 😅

@benpate@mastodon.social while you do that, do you know any implementors that I can test against that aren't NodeBB (:stuck_out_tongue_closed_eyes:)?

I don't know where other apps' Intent buttons are...

@julian You can certainly use the intent buttons on Bandwagon and the Qwertylicious demo site. They're actually two different implementations, so it might be valid to try both of them.

I'm pretty sure that @pfefferle has implemented some buttons in the WordPress plugin - Matthias, do you have a demo site we can test with?

And, I know Mastodon's Activity Intent work has landed, but I'm not familiar enough with their buttons to say which is being powered by Activity Intents, or how.

@benpate@mastodon.social I wasn't able to find any buttons, though of course I'm not very familiar with their UI.

I'll take a look at your demos 👍

@julian @benpate seem to be a wordpress.com specific issue. you can try the like button here: https://notiz.blog/2025/03/24/blogtastisch-2-blogs-und-das-fediverse/

@julian @benpate 😱

I think I broke something!?

@julian @benpate will fix it tomorrow! 🫣

@julian @benpate fixed on WordPress.com! (it was a CORS issue, because the API runs under a different domain on DotCom).

You should now be able to test on activitypub.blog

@julian This is fantastic. You're awesome, Julian!

I'll try to take a look at this tonight/tomorrow.

Once you're at a stopping point, would it be possible for you to list out the intents you publish and receive? I'd love to include that in the Implementations section at the bottom of the document.