diff --git a/app/changelog/page.mdx b/app/changelog/page.mdx index bc745c0..162a632 100644 --- a/app/changelog/page.mdx +++ b/app/changelog/page.mdx @@ -18,7 +18,9 @@ This page lists changes since Working Draft 3. {{ className: 'lead' }} - `X-Signed-By` to `Versia-Signed-By` - Removed the nonce from the [signature system](/signatures), replaced with `Versia-Signed-At` (timestamps). - Standardize rate limits with [IETF draft draft-polli-ratelimit-headers-02](https://www.ietf.org/archive/id/draft-polli-ratelimit-headers-02.html). -- Properly documented [Group](/entities/group) federation and subscribing. +- Properly documented [Group](/extensions/groups) federation and subscribing. +- Moved [Groups](/extensions/groups) to an extension, as they were getting too complex for the core protocol. + - The [Note](/entities/note) `group` field documentation has been updated to reflect this. - Added [Versia Links](/links). - Switched from ISO 8601 to [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) for timestamps. - In most cases, the two are interchangeable, but RFC 3339 is more strict. Most implementations should not need to change anything. diff --git a/app/entities/note/page.mdx b/app/entities/note/page.mdx index 79f71a5..f86e22f 100644 --- a/app/entities/note/page.mdx +++ b/app/entities/note/page.mdx @@ -73,11 +73,15 @@ Notes represent a piece of content on a Versia instance. They can be posted by [ ``` - URI of a [Group](/entities/group) that the note is only visible in, or one of the following strings: + URI of a [Group](/extensions/groups) that the note is only visible in, or one of the following strings: - `public`: The note is visible to anyone. - `followers`: The note is visible only to the author's followers. - If not provided, the note is only visible to the author and those mentioned in the note. + If not provided, the note is only visible to the author and those mentioned in the note. If missing, the note is only visible to any mentioned users. + + + If the implementation does not support the [Groups Extension](/extensions/groups), any value other than `public` or `followers` should be treated as `null`. + Whether the note contains "sensitive content". This can be used with `subject` as a "content warning" feature. diff --git a/app/entities/group/page.mdx b/app/extensions/groups/page.mdx similarity index 88% rename from app/entities/group/page.mdx rename to app/extensions/groups/page.mdx index df8d46d..e0fdca8 100644 --- a/app/entities/group/page.mdx +++ b/app/extensions/groups/page.mdx @@ -1,9 +1,9 @@ export const metadata = { - title: 'Groups', + title: 'Groups Extension', description: 'Groups are a way to organize users and notes into communities.' } -# Groups +# Groups Extension Groups are a way to organize users and notes into communities. They can be used for any purpose, such as forums, blogs, image galleries, video sharing, audio sharing, and messaging. They are similar to Discord's channels or Matrix's rooms. {{ className: 'lead' }} @@ -14,6 +14,9 @@ Refer to [Note](/entities/note#entity-definition)'s `group` property for how not + + Must be `pub.versia:groups/Group`. + Group name/title. @@ -46,7 +49,7 @@ Refer to [Note](/entities/note#entity-definition)'s `group` property for how not ```jsonc {{ title: "Example Group" }} { - "type": "Group", + "type": "pub.versia:groups/Group", "id": "ed480922-b095-4f09-9da5-c995be8f5960", "uri": "https://example.com/groups/ed480922-b095-4f09-9da5-c995be8f5960", "name": { @@ -82,6 +85,9 @@ Indicates that a [User](/entities/user) wishes to subscribe to a group. + + Must be `pub.versia:groups/Subscribe`. + This is a [**Transient Entity**](/entities#transient-entities) and does not have a URI. @@ -98,7 +104,7 @@ Indicates that a [User](/entities/user) wishes to subscribe to a group. ```jsonc {{ title: "Example GroupSubscribe" }} { - "type": "GroupSubscribe", + "type": "pub.versia:groups/Subscribe", "id": "9a7e9345-4e4a-4d5a-8301-4dbbfe777ca0", "subscriber": "https://bob.social/users/e9277471-8aa1-4d40-a3d0-0878e818ccdc", "group": "https://example.com/groups/ed480922-b095-4f09-9da5-c995be8f5960", @@ -116,6 +122,9 @@ Indicates that a [User](/entities/user) wishes to unsubscribe from a group. + + Must be `pub.versia:groups/Unsubscribe`. + This is a [**Transient Entity**](/entities#transient-entities) and does not have a URI. @@ -132,7 +141,7 @@ Indicates that a [User](/entities/user) wishes to unsubscribe from a group. ```jsonc {{ title: "Example GroupUnsubscribe" }} { - "type": "GroupUnsubscribe", + "type": "pub.versia:groups/Unsubscribe", "id": "9a7e9345-4e4a-4d5a-8301-4dbbfe777ca0", "subscriber": "https://bob.social/users/e9277471-8aa1-4d40-a3d0-0878e818ccdc", "group": "https://example.com/groups/ed480922-b095-4f09-9da5-c995be8f5960", @@ -150,6 +159,9 @@ Indicates that a [Group](#entity-definition) has accepted a [User](/entities/use + + Must be `pub.versia:groups/SubscribeAccept`. + This is a [**Transient Entity**](/entities#transient-entities) and does not have a URI. @@ -166,7 +178,7 @@ Indicates that a [Group](#entity-definition) has accepted a [User](/entities/use ```jsonc {{ title: "Example GroupSubscribeAccept" }} { - "type": "GroupSubscribeAccept", + "type": "pub.versia:groups/SubscribeAccept", "id": "9a7e9345-4e4a-4d5a-8301-4dbbfe777ca0", "subscriber": "https://bob.social/users/e9277471-8aa1-4d40-a3d0-0878e818ccdc", "group": "https://example.com/groups/ed480922-b095-4f09-9da5-c995be8f5960", @@ -184,6 +196,9 @@ Indicates that a [Group](#entity-definition) has rejected a [User](/entities/use + + Must be `pub.versia:groups/SubscribeReject`. + This is a [**Transient Entity**](/entities#transient-entities) and does not have a URI. @@ -200,7 +215,7 @@ Indicates that a [Group](#entity-definition) has rejected a [User](/entities/use ```jsonc {{ title: "Example GroupSubscribeReject" }} { - "type": "GroupSubscribeReject", + "type": "pub.versia:groups/SubscribeReject", "id": "9a7e9345-4e4a-4d5a-8301-4dbbfe777ca0", "subscriber": "https://bob.social/users/e9277471-8aa1-4d40-a3d0-0878e818ccdc", "group": "https://example.com/groups/ed480922-b095-4f09-9da5-c995be8f5960", @@ -226,6 +241,9 @@ The `GroupFederate` entity allows a group to federate a note to all of its membe + + Must be `pub.versia:groups/Federate`. + This is a [**Transient Entity**](/entities#transient-entities) and does not have a URI. @@ -242,7 +260,7 @@ The `GroupFederate` entity allows a group to federate a note to all of its membe ```jsonc {{ title: "Example GroupFederate" }} { - "type": "GroupFederate", + "type": "pub.versia:groups/Federate", "id": "9a7e9345-4e4a-4d5a-8301-4dbbfe777ca0", "note": "https://example.com/notes/ed480922-b095-4f09-9da5-c995be8f5960", "group": "https://example.com/groups/ed480922-b095-4f09-9da5-c995be8f5960", diff --git a/app/extensions/interaction-controls/page.mdx b/app/extensions/interaction-controls/page.mdx index 12931da..5e8eae0 100644 --- a/app/extensions/interaction-controls/page.mdx +++ b/app/extensions/interaction-controls/page.mdx @@ -66,7 +66,7 @@ The entity defined in this document must be inserted in the `pub.versia:interact - `followers`: Includes every follower of the author. - `following`: Includes every User that the author follows. - `mutuals`: Includes every mutual of the author (that is, every User that is both a follower and followed by the author). - - `group`: Includes every User in the [Group](/entities/group) that this Note was posted to, if any. If Note is not posted to a [Group](/entities/group), this value has no effect. + - `group`: Includes every User in the [Group](/extensions/groups) that this Note was posted to, if any. If Note is not posted to a [Group](/extensions/groups), this value has no effect. Permission groups are evaluated from highest to lowest priority: if two groups conflict each other, the group with the highest priority must be used. diff --git a/app/extensions/page.mdx b/app/extensions/page.mdx index 54b6b6e..36e126b 100644 --- a/app/extensions/page.mdx +++ b/app/extensions/page.mdx @@ -59,7 +59,7 @@ Extensions can be found in two places: an [Entity](/entities#entity-definition)' ```jsonc {{ title: "Example Entity Extension" }} { - "type": "Group", + "type": "pub.versia:groups/Group", "id": "ed480922-b095-4f09-9da5-c995be8f5960", "uri": "https://example.com/groups/ed480922-b095-4f09-9da5-c995be8f5960", "name": null, diff --git a/components/Navigation.tsx b/components/Navigation.tsx index 370a3a3..d66a944 100644 --- a/components/Navigation.tsx +++ b/components/Navigation.tsx @@ -284,7 +284,6 @@ export const navigation: NavGroup[] = [ { title: "Follow", href: "/entities/follow" }, { title: "FollowAccept", href: "/entities/follow-accept" }, { title: "FollowReject", href: "/entities/follow-reject" }, - { title: "Group", href: "/entities/group" }, { title: "Notes", href: "/entities/note" }, { title: "InstanceMetadata", href: "/entities/instance-metadata" }, { title: "Unfollow", href: "/entities/unfollow" }, @@ -295,6 +294,7 @@ export const navigation: NavGroup[] = [ title: "Extensions", links: [ { title: "Custom Emojis", href: "/extensions/custom-emojis" }, + { title: "Groups", href: "/extensions/groups" }, { title: "Instance Messaging", href: "/extensions/instance-messaging",