- From: Lisa Dusseault <lisa@dtinit.org>
- Date: Mon, 6 May 2024 09:40:04 -0700
- To: Evan Prodromou <evan@prodromou.name>
- Cc: public-swicg@w3c.org
- Message-ID: <CAH212UPtPJm8eEvPXmL4DLgGxCAzBZJJsEzquFuyMV0u9K_A1w@mail.gmail.com>
This is a great idea. The fact that other servers can understand just the "Create" activity is critical. I'll incorporate all of this. Lisa On Fri, May 3, 2024 at 5:49 PM Evan Prodromou <evan@prodromou.name> wrote: > Lisa, > > How would you feel about a `Copy` activity? I think that matches what > you're proposing better than `Import`. > > Let's say you wanted to make a copy of this object, a private note to the > old user's followers: > > { > "@context": [ > "https://www.w3.org/ns/activitystreams" <https://www.w3.org/ns/activitystreams>, > "https://namespace.example/ns/copy" <https://namespace.example/ns/copy> > ], > "id": "https://source.example/user/olduser/note/1" <https://source.example/user/olduser/note/1>, > "attributedTo": "https://source.example/user/olduser" <https://source.example/user/olduser>, > "to": "https://source.example/user/olduser/followers" <https://source.example/user/olduser/followers>, > "type": "Note", > "content": "Hello World" > } > > The activity to make a copy might look like this: > > { > "@context": [ > "https://www.w3.org/ns/activitystreams" <https://www.w3.org/ns/activitystreams>, > "https://namespace.example/ns/copy" <https://namespace.example/ns/copy> > ], > "id": "https://destination.example/user/newuser/copy/1" <https://destination.example/user/newuser/copy/1>, > "actor": "https://destination.example/user/newuser" <https://destination.example/user/newuser>, > "to": ["https://source.example/user/olduser" <https://source.example/user/olduser>, > "https://source.example/user/olduser/followers" <https://source.example/user/olduser/followers>, > "https://source.example/user/newuser/followers" <https://source.example/user/newuser/followers>] > "type": ["Copy", "Create"], > "origin": "https://source.example/user/olduser/note/1" <https://source.example/user/olduser/note/1>, > "object": "https://destination.example/user/newuser/note/5" <https://destination.example/user/newuser/note/5> > } > > This format lets us identify the new note as a copy. I've used `origin` to > say where the object came from, and `object` for the destination. Using > these properties, I can dual-type the activity so it works as both a `Copy` > and a `Create` for fallback. A client that only recognizes the `Create` > activity type will do the right thing with this activity. > > Note that the addressees are different; the new Copy activity is addressed > to the old user, to the the old user's followers, and to the new user's > followers. > > The resulting note might look something like this: > > { > "@context": [ > "https://www.w3.org/ns/activitystreams" <https://www.w3.org/ns/activitystreams>, > "https://namespace.example/ns/copy" <https://namespace.example/ns/copy> > ], > "id": "https://destination.example/user/newuser/note/5" <https://destination.example/user/newuser/note/5>, > "attributedTo": "https://destination.example/user/newuser" <https://destination.example/user/newuser>, > "to": ["https://source.example/user/olduser" <https://source.example/user/olduser>, > "https://source.example/user/olduser/followers" <https://source.example/user/olduser/followers>, > "https://source.example/user/newuser/followers" <https://source.example/user/newuser/followers>], > "type": "Note", > "content": "Hello World", > "copyOf": "https://source.example/user/olduser/note/1" <https://source.example/user/olduser/note/1> > } > > The original note might also be changed to include a list of all the > copies: > > { > "@context": [ > "https://www.w3.org/ns/activitystreams" <https://www.w3.org/ns/activitystreams>, > "https://namespace.example/ns/copy" <https://namespace.example/ns/copy> > ], > "id": "https://source.example/user/olduser/note/1" <https://source.example/user/olduser/note/1>, > "attributedTo": "https://source.example/user/olduser" <https://source.example/user/olduser>, > "to": "https://source.example/user/olduser/followers" <https://source.example/user/olduser/followers>, > "type": "Note", > "content": "Hello World", > "copies": [ > "https://destination.example/user/newuser/note/5" <https://destination.example/user/newuser/note/5> > ] > } > > Evan > > On 2024-05-03 4:01 p.m., Lisa Dusseault wrote: > > Here are my followups from today's call. Note the first one allows folks > to have a peek at LOLA as it stands even before the PR is merged, but you > might also wait for the next version after I work on the issues listed > below. > > 1. Create a PR for EvanP: Done > * https://github.com/swicg/activitypub-data-portability/pull/16 > > 2. Add a section that explains how to copy from the outbox to handle > “unaugmented” source servers > https://github.com/swicg/activitypub-data-portability/issues/17 > > 3. Do more work on use cases to motivate the choices especially make > sure the support for defederation is explained and what that means for > content copy models > https://github.com/swicg/activitypub-data-portability/issues/19 > > 4. Suggestion to have a new "Import" activity: *I'd love more feedback*. > Is anybody in a position to be able to create a wrapper of type "Import" > around content of type "Note" and test that out in the context of an > outbox? > * if this works, it can be used for importing content through other > mechanisms besides LOLA. > > 5. Add to the spec that there are legitimate use cases to BLOCK accounts > from export or move - e.g. in the case of CSAM reports > https://github.com/swicg/activitypub-data-portability/issues/18 > > Lisa > >
Received on Monday, 6 May 2024 16:40:19 UTC