com.getorbyt.community.manageMember
Schema Diff
+30 -4
Compatibility Analysis
Breaking Changes Detected
3 breaking changes, 8 non-breaking changes.
Breaking Changes (3)
- RemovedVertex RemovedVertex { vertex_id: "com.getorbyt.community.manageMember:input.reason" }
- RemovedEdge RemovedEdge { src: "com.getorbyt.community.manageMember:input", tgt: "com.getorbyt.community.manageMember:input.reason", kind: "prop", name: Some("reason") }
- ConstraintTightened ConstraintTightened { vertex_id: "com.getorbyt.community.manageMember:input.role", sort: "knownValues", old_value: "[\"moderator\",\"member\"]", new_value: "[\"owner\",\"moderator\",\"member\"]" }
Non-Breaking Changes (8)
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.community.manageMember:input.durationDays" }
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.community.manageMember:input.message" }
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.community.manageMember:input.roleKey" }
- AddedVertex AddedVertex { vertex_id: "com.getorbyt.community.manageMember:output.restrictedUntil" }
- AddedEdge AddedEdge { src: "com.getorbyt.community.manageMember:input", tgt: "com.getorbyt.community.manageMember:input.durationDays", kind: "prop", name: Some("durationDays") }
- AddedEdge AddedEdge { src: "com.getorbyt.community.manageMember:input", tgt: "com.getorbyt.community.manageMember:input.message", kind: "prop", name: Some("message") }
- AddedEdge AddedEdge { src: "com.getorbyt.community.manageMember:input", tgt: "com.getorbyt.community.manageMember:input.roleKey", kind: "prop", name: Some("roleKey") }
- AddedEdge AddedEdge { src: "com.getorbyt.community.manageMember:output", tgt: "com.getorbyt.community.manageMember:output.restrictedUntil", kind: "prop", name: Some("restrictedUntil") }
Migration Guidance
Removed Elements
RemovedVertex { vertex_id: "com.getorbyt.community.manageMember:input.reason" }
Added Elements
AddedVertex { vertex_id: "com.getorbyt.community.manageMember:input.durationDays" }AddedVertex { vertex_id: "com.getorbyt.community.manageMember:input.message" }AddedVertex { vertex_id: "com.getorbyt.community.manageMember:input.roleKey" }AddedVertex { vertex_id: "com.getorbyt.community.manageMember:output.restrictedUntil" }
Constraint Changes
- ConstraintTightened ConstraintTightened { vertex_id: "com.getorbyt.community.manageMember:input.role", sort: "knownValues", old_value: "[\"moderator\",\"member\"]", new_value: "[\"owner\",\"moderator\",\"member\"]" }
Additional Notes
- Breaking: RemovedEdge { src: "com.getorbyt.community.manageMember:input", tgt: "com.getorbyt.community.manageMember:input.reason", kind: "prop", name: Some("reason") }
- Non-breaking: AddedEdge { src: "com.getorbyt.community.manageMember:input", tgt: "com.getorbyt.community.manageMember:input.durationDays", kind: "prop", name: Some("durationDays") }
- Non-breaking: AddedEdge { src: "com.getorbyt.community.manageMember:input", tgt: "com.getorbyt.community.manageMember:input.message", kind: "prop", name: Some("message") }
- Non-breaking: AddedEdge { src: "com.getorbyt.community.manageMember:input", tgt: "com.getorbyt.community.manageMember:input.roleKey", kind: "prop", name: Some("roleKey") }
- Non-breaking: AddedEdge { src: "com.getorbyt.community.manageMember:output", tgt: "com.getorbyt.community.manageMember:output.restrictedUntil", kind: "prop", name: Some("restrictedUntil") }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"main": {
5
-
"description": "Mute, ban, or re-role a member. Only an owner may set a role; a moderator may mute and ban, but never a peer or the owner.",
5
+
"description": "Mute, ban, or re-role a member. Only an administrator may set a role; a moderator may mute and ban, but never a peer or an administrator. Administration is service state and may be granted to an account that does not hold the declaration record; authority over the record itself is never transferable and always belongs to the repository that holds it.",
6
6
"errors": [
7
7
{
8
8
"name": "CommunityNotFound"
9
9
},
10
10
{
11
11
"name": "InsufficientRole"
12
12
},
13
13
{
14
14
"name": "InvalidAction"
15
+
},
16
+
{
17
+
"description": "roleKey names no role the Community defined.",
18
+
"name": "RoleNotFound"
19
+
},
20
+
{
21
+
"description": "The request carried no service-auth token, or one this service could not verify for the method. Distinct from InsufficientRole: the caller's identity was never established, so no role decision was made. A client should reauthorize and retry once rather than tell the viewer they lack access.",
22
+
"name": "AuthenticationRequired"
15
23
}
16
24
],
17
25
"input": {
18
26
"encoding": "application/json",
19
27
"schema": {
20
28
"properties": {
21
29
"action": {
22
30
"knownValues": [
23
31
"setRole",
24
32
"mute",
25
33
"unmute",
26
34
"ban",
27
35
"unban"
28
36
],
29
37
"type": "string"
30
38
},
31
39
"community": {
32
40
"format": "at-uri",
33
41
"type": "string"
34
42
},
35
43
"did": {
36
44
"format": "did",
37
45
"type": "string"
38
46
},
39
-
"reason": {
40
-
"description": "Recorded on the membership row for the acting moderator's own reference. Orbyt keeps no moderation audit log.",
41
-
"maxLength": 1000,
47
+
"durationDays": {
48
+
"description": "For mute and ban: how many days it lasts. Absent means until a moderator lifts it.",
49
+
"maximum": 999,
50
+
"minimum": 1,
51
+
"type": "integer"
52
+
},
53
+
"message": {
54
+
"description": "For mute and ban: what the member is told.",
55
+
"maxLength": 2000,
42
56
"type": "string"
43
57
},
44
58
"role": {
59
+
"description": "The role to set. Granting owner grants administration — moderation and role assignment — to another account; it does not move the declaration record, which stays in the repository that holds it, and the holder's own administration can never be revoked.",
45
60
"knownValues": [
61
+
"owner",
46
62
"moderator",
47
63
"member"
48
64
],
49
65
"type": "string"
66
+
},
67
+
"roleKey": {
68
+
"description": "With role moderator, the Community-defined role to give. Absent gives the built-in moderator role. Someone who is not an administrator may only give a role whose permissions they hold themselves, and never owner.",
69
+
"maxLength": 64,
70
+
"type": "string"
50
71
}
51
72
},
52
73
"required": [
53
74
"community",
54
75
"did",
55
76
"action"
56
77
],
57
78
"type": "object"
58
79
}
59
80
},
60
81
"output": {
61
82
"encoding": "application/json",
62
83
"schema": {
63
84
"properties": {
85
+
"restrictedUntil": {
86
+
"description": "When a timed mute or ban ends.",
87
+
"format": "datetime",
88
+
"type": "string"
89
+
},
64
90
"status": {
65
91
"knownValues": [
66
92
"none",
67
93
"active",
68
94
"muted",
69
95
"banned"
70
96
],
71
97
"type": "string"
72
98
}
73
99
},
74
100
"required": [
75
101
"status"
76
102
],
77
103
"type": "object"
78
104
}
79
105
},
80
106
"type": "procedure"
81
107
}
82
108
},
83
109
"id": "com.getorbyt.community.manageMember",
84
110
"lexicon": 1
85
111
}