diff --git a/internal/atproto/lexicon/social/coves/actor/membership.json b/internal/atproto/lexicon/social/coves/actor/membership.json index 9b9c5f7..d8f481c 100644 --- a/internal/atproto/lexicon/social/coves/actor/membership.json +++ b/internal/atproto/lexicon/social/coves/actor/membership.json @@ -4,7 +4,7 @@ "defs": { "main": { "type": "record", - "description": "Membership in a community (has reputation)", + "description": "Membership in a community", "key": "tid", "record": { "type": "object", @@ -21,15 +21,10 @@ "default": 0, "description": "Reputation score within the community" }, - "subscribedAt": { - "type": "string", - "format": "datetime", - "description": "When the user subscribed to a community" - }, "createdAt": { "type": "string", "format": "datetime", - "description": "When the user was created" + "description": "When the user's membership started" }, "endedAt": { "type": "string", diff --git a/internal/atproto/lexicon/social/coves/actor/subscription.json b/internal/atproto/lexicon/social/coves/actor/subscription.json index e3fd602..81b4537 100644 --- a/internal/atproto/lexicon/social/coves/actor/subscription.json +++ b/internal/atproto/lexicon/social/coves/actor/subscription.json @@ -17,7 +17,8 @@ }, "createdAt": { "type": "string", - "format": "datetime" + "format": "datetime", + "description": "When the subscription started" }, "endedAt": { "type": "string", diff --git a/internal/atproto/lexicon/social/coves/community/rules.json b/internal/atproto/lexicon/social/coves/community/rules.json index 0948e7e..407c5cd 100644 --- a/internal/atproto/lexicon/social/coves/community/rules.json +++ b/internal/atproto/lexicon/social/coves/community/rules.json @@ -59,22 +59,25 @@ "type": "object", "description": "Allowed post types in the community", "properties": { - "textOnly": { + "allowText": { "type": "boolean", - "default": false, - "description": "Restrict to text posts only" + "default": true, + "description": "Allow text posts" }, "allowVideo": { "type": "boolean", - "default": true + "default": true, + "description": "Allow video posts" }, "allowImage": { "type": "boolean", - "default": true + "default": true, + "description": "Allow image posts" }, "allowArticle": { "type": "boolean", - "default": true + "default": true, + "description": "Allow Article posts" } } }, @@ -130,13 +133,13 @@ "tagThreshold": { "type": "integer", "minimum": 1, - "default": 5, + "default": 15, "description": "Number of tags needed to trigger action" }, "tribunalThreshold": { "type": "integer", "minimum": 1, - "default": 3, + "default": 50, "description": "Number of tags to trigger tribunal review" }, "jurySize": { @@ -146,6 +149,38 @@ "description": "Number of jurors for tribunal" } } + }, + "rule": { + "type": "object", + "description": "A text-based community rule for display purposes", + "required": ["title", "description", "createdAt", "isActive"], + "properties": { + "title": { + "type": "string", + "maxLength": 256, + "description": "Short rule title (e.g., 'No Editorialized Titles')" + }, + "description": { + "type": "string", + "maxLength": 2000, + "description": "Detailed explanation of the rule" + }, + "createdAt": { + "type": "string", + "format": "datetime", + "description": "When the rule was created" + }, + "isActive": { + "type": "boolean", + "default": true, + "description": "Whether the rule is currently active" + }, + "disabledAt": { + "type": "string", + "format": "datetime", + "description": "When the rule was disabled (optional)" + } + } } } } \ No newline at end of file diff --git a/internal/atproto/lexicon/social/coves/post/article.json b/internal/atproto/lexicon/social/coves/post/article.json index 4880334..7c7b63c 100644 --- a/internal/atproto/lexicon/social/coves/post/article.json +++ b/internal/atproto/lexicon/social/coves/post/article.json @@ -86,6 +86,19 @@ "type": "ref", "ref": "social.coves.actor.profile#geoLocation" }, + "crosspostOf": { + "type": "string", + "format": "at-uri", + "description": "If this is a crosspost, AT-URI of the post this is a crosspost of" + }, + "crosspostChain": { + "type": "array", + "description": "Array of AT-URIs of all posts in the crosspost chain (including this one)", + "items": { + "type": "string", + "format": "at-uri" + } + }, "createdAt": { "type": "string", "format": "datetime" diff --git a/internal/atproto/lexicon/social/coves/post/crosspost.json b/internal/atproto/lexicon/social/coves/post/crosspost.json new file mode 100644 index 0000000..5f338ab --- /dev/null +++ b/internal/atproto/lexicon/social/coves/post/crosspost.json @@ -0,0 +1,39 @@ +{ + "lexicon": 1, + "id": "social.coves.post.crosspost", + "defs": { + "main": { + "type": "record", + "description": "A record tracking crosspost relationships between posts", + "key": "tid", + "record": { + "type": "object", + "required": ["originalPost", "crosspostOf", "createdAt"], + "properties": { + "originalPost": { + "type": "string", + "format": "at-uri", + "description": "AT-URI of the original post in the crosspost chain" + }, + "crosspostOf": { + "type": "string", + "format": "at-uri", + "description": "AT-URI of the immediate parent this is a crosspost of" + }, + "allCrossposts": { + "type": "array", + "description": "Array of AT-URIs of all posts in the crosspost chain", + "items": { + "type": "string", + "format": "at-uri" + } + }, + "createdAt": { + "type": "string", + "format": "datetime" + } + } + } + } + } +} \ No newline at end of file diff --git a/internal/atproto/lexicon/social/coves/post/getCrosspostChain.json b/internal/atproto/lexicon/social/coves/post/getCrosspostChain.json new file mode 100644 index 0000000..03552c9 --- /dev/null +++ b/internal/atproto/lexicon/social/coves/post/getCrosspostChain.json @@ -0,0 +1,99 @@ +{ + "lexicon": 1, + "id": "social.coves.post.getCrosspostChain", + "defs": { + "main": { + "type": "procedure", + "description": "Get all crossposts in a crosspost chain for a given post", + "input": { + "encoding": "application/json", + "schema": { + "type": "object", + "required": ["uri"], + "properties": { + "uri": { + "type": "string", + "format": "at-uri", + "description": "AT-URI of any post in the crosspost chain" + } + } + } + }, + "output": { + "encoding": "application/json", + "schema": { + "type": "object", + "required": ["crossposts"], + "properties": { + "crossposts": { + "type": "array", + "description": "All posts in the crosspost chain", + "items": { + "type": "ref", + "ref": "#crosspostView" + } + } + } + } + } + }, + "crosspostView": { + "type": "object", + "required": ["uri", "community", "author", "createdAt"], + "properties": { + "uri": { + "type": "string", + "format": "at-uri", + "description": "AT-URI of the post" + }, + "community": { + "type": "object", + "required": ["uri", "name"], + "properties": { + "uri": { + "type": "string", + "format": "at-uri", + "description": "AT-URI of the community" + }, + "name": { + "type": "string", + "description": "Display name of the community" + }, + "handle": { + "type": "string", + "description": "Handle of the community" + } + } + }, + "author": { + "type": "object", + "required": ["did", "handle"], + "properties": { + "did": { + "type": "string", + "format": "did" + }, + "handle": { + "type": "string" + }, + "displayName": { + "type": "string" + }, + "avatar": { + "type": "string", + "format": "uri" + } + } + }, + "isOriginal": { + "type": "boolean", + "description": "Whether this is the original post in the chain" + }, + "createdAt": { + "type": "string", + "format": "datetime" + } + } + } + } +} \ No newline at end of file diff --git a/internal/atproto/lexicon/social/coves/post/image.json b/internal/atproto/lexicon/social/coves/post/image.json index b77f115..c1339d5 100644 --- a/internal/atproto/lexicon/social/coves/post/image.json +++ b/internal/atproto/lexicon/social/coves/post/image.json @@ -73,6 +73,19 @@ "type": "ref", "ref": "social.coves.actor.profile#geoLocation" }, + "crosspostOf": { + "type": "string", + "format": "at-uri", + "description": "If this is a crosspost, AT-URI of the post this is a crosspost of" + }, + "crosspostChain": { + "type": "array", + "description": "Array of AT-URIs of all posts in the crosspost chain (including this one)", + "items": { + "type": "string", + "format": "at-uri" + } + }, "createdAt": { "type": "string", "format": "datetime" diff --git a/internal/atproto/lexicon/social/coves/post/microblog.json b/internal/atproto/lexicon/social/coves/post/microblog.json index 651d8a5..2b908a5 100644 --- a/internal/atproto/lexicon/social/coves/post/microblog.json +++ b/internal/atproto/lexicon/social/coves/post/microblog.json @@ -119,6 +119,19 @@ "maxLength": 10, "description": "Language code (e.g., 'en', 'es', 'fr')" }, + "crosspostOf": { + "type": "string", + "format": "at-uri", + "description": "If this is a crosspost, AT-URI of the post this is a crosspost of" + }, + "crosspostChain": { + "type": "array", + "description": "Array of AT-URIs of all posts in the crosspost chain (including this one)", + "items": { + "type": "string", + "format": "at-uri" + } + }, "createdAt": { "type": "string", "format": "datetime" diff --git a/internal/atproto/lexicon/social/coves/post/text.json b/internal/atproto/lexicon/social/coves/post/text.json index ca71552..3a98bf8 100644 --- a/internal/atproto/lexicon/social/coves/post/text.json +++ b/internal/atproto/lexicon/social/coves/post/text.json @@ -74,6 +74,19 @@ "social.coves.embed.post" ] }, + "crosspostOf": { + "type": "string", + "format": "at-uri", + "description": "If this is a crosspost, AT-URI of the post this is a crosspost of" + }, + "crosspostChain": { + "type": "array", + "description": "Array of AT-URIs of all posts in the crosspost chain (including this one)", + "items": { + "type": "string", + "format": "at-uri" + } + }, "createdAt": { "type": "string", "format": "datetime" diff --git a/internal/atproto/lexicon/social/coves/post/video.json b/internal/atproto/lexicon/social/coves/post/video.json index fa39cd9..331e793 100644 --- a/internal/atproto/lexicon/social/coves/post/video.json +++ b/internal/atproto/lexicon/social/coves/post/video.json @@ -72,6 +72,19 @@ "type": "ref", "ref": "social.coves.actor.profile#geoLocation" }, + "crosspostOf": { + "type": "string", + "format": "at-uri", + "description": "If this is a crosspost, AT-URI of the post this is a crosspost of" + }, + "crosspostChain": { + "type": "array", + "description": "Array of AT-URIs of all posts in the crosspost chain (including this one)", + "items": { + "type": "string", + "format": "at-uri" + } + }, "createdAt": { "type": "string", "format": "datetime"