social.colibri.beta.actor.defs
Schema Diff
+45 -5
Compatibility Analysis
Breaking Changes Detected
3 breaking changes, 15 non-breaking changes.
Breaking Changes (3)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "social.colibri.beta.actor.defs#mutedActor", src: "social.colibri.beta.actor.defs#mutedActor", tgt: "social.colibri.beta.actor.defs#mutedActor.did", kind: "prop", name: Some("did") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "social.colibri.beta.actor.defs#mutedChannel", src: "social.colibri.beta.actor.defs#mutedChannel", tgt: "social.colibri.beta.actor.defs#mutedChannel.channel", kind: "prop", name: Some("channel") }
- KindChanged KindChanged { vertex_id: "social.colibri.beta.actor.defs#mute.subject", old_kind: "string", new_kind: "union" }
Non-Breaking Changes (15)
- AddedVertex AddedVertex { vertex_id: "social.colibri.beta.actor.defs#mute.subject:variant0" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.beta.actor.defs#mute.subject:variant1" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.beta.actor.defs#mutedActor" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.beta.actor.defs#mutedActor.did" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.beta.actor.defs#mutedChannel" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.beta.actor.defs#mutedChannel.channel" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.beta.actor.defs#voiceState.serverDeafened" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.beta.actor.defs#voiceState.serverMuted" }
- AddedEdge AddedEdge { src: "social.colibri.beta.actor.defs#mute.subject", tgt: "social.colibri.beta.actor.defs#mute.subject:variant0", kind: "variant", name: Some("#mutedActor") }
- AddedEdge AddedEdge { src: "social.colibri.beta.actor.defs#mute.subject", tgt: "social.colibri.beta.actor.defs#mute.subject:variant1", kind: "variant", name: Some("#mutedChannel") }
- AddedEdge AddedEdge { src: "social.colibri.beta.actor.defs#mute.subject:variant0", tgt: "social.colibri.beta.actor.defs#mutedActor", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "social.colibri.beta.actor.defs#mute.subject:variant1", tgt: "social.colibri.beta.actor.defs#mutedChannel", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "social.colibri.beta.actor.defs#voiceState", tgt: "social.colibri.beta.actor.defs#voiceState.serverDeafened", kind: "prop", name: Some("serverDeafened") }
- AddedEdge AddedEdge { src: "social.colibri.beta.actor.defs#voiceState", tgt: "social.colibri.beta.actor.defs#voiceState.serverMuted", kind: "prop", name: Some("serverMuted") }
- ConstraintRemoved ConstraintRemoved { vertex_id: "social.colibri.beta.actor.defs#mute.subject", sort: "format" }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "social.colibri.beta.actor.defs#mute.subject:variant0" }AddedVertex { vertex_id: "social.colibri.beta.actor.defs#mute.subject:variant1" }AddedVertex { vertex_id: "social.colibri.beta.actor.defs#mutedActor" }AddedVertex { vertex_id: "social.colibri.beta.actor.defs#mutedActor.did" }AddedVertex { vertex_id: "social.colibri.beta.actor.defs#mutedChannel" }AddedVertex { vertex_id: "social.colibri.beta.actor.defs#mutedChannel.channel" }AddedVertex { vertex_id: "social.colibri.beta.actor.defs#voiceState.serverDeafened" }AddedVertex { vertex_id: "social.colibri.beta.actor.defs#voiceState.serverMuted" }
Constraint Changes
- ConstraintRemoved ConstraintRemoved { vertex_id: "social.colibri.beta.actor.defs#mute.subject", sort: "format" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "social.colibri.beta.actor.defs#mutedActor", src: "social.colibri.beta.actor.defs#mutedActor", tgt: "social.colibri.beta.actor.defs#mutedActor.did", kind: "prop", name: Some("did") }
- Breaking: RequiredEdgeAdded { vertex_id: "social.colibri.beta.actor.defs#mutedChannel", src: "social.colibri.beta.actor.defs#mutedChannel", tgt: "social.colibri.beta.actor.defs#mutedChannel.channel", kind: "prop", name: Some("channel") }
- Breaking: KindChanged { vertex_id: "social.colibri.beta.actor.defs#mute.subject", old_kind: "string", new_kind: "union" }
- Non-breaking: AddedEdge { src: "social.colibri.beta.actor.defs#mute.subject", tgt: "social.colibri.beta.actor.defs#mute.subject:variant0", kind: "variant", name: Some("#mutedActor") }
- Non-breaking: AddedEdge { src: "social.colibri.beta.actor.defs#mute.subject", tgt: "social.colibri.beta.actor.defs#mute.subject:variant1", kind: "variant", name: Some("#mutedChannel") }
- Non-breaking: AddedEdge { src: "social.colibri.beta.actor.defs#mute.subject:variant0", tgt: "social.colibri.beta.actor.defs#mutedActor", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "social.colibri.beta.actor.defs#mute.subject:variant1", tgt: "social.colibri.beta.actor.defs#mutedChannel", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "social.colibri.beta.actor.defs#voiceState", tgt: "social.colibri.beta.actor.defs#voiceState.serverDeafened", kind: "prop", name: Some("serverDeafened") }
- Non-breaking: AddedEdge { src: "social.colibri.beta.actor.defs#voiceState", tgt: "social.colibri.beta.actor.defs#voiceState.serverMuted", kind: "prop", name: Some("serverMuted") }
1
1
{
2
2
"id": "social.colibri.beta.actor.defs",
3
3
"defs": {
4
4
"mute": {
5
5
"type": "object",
6
6
"required": [
7
7
"subject",
8
8
"createdAt"
9
9
],
10
10
"properties": {
11
11
"subject": {
12
-
"type": "string",
13
-
"format": "did",
14
-
"description": "The muted user or community."
12
+
"refs": [
13
+
"#mutedActor",
14
+
"#mutedChannel"
15
+
],
16
+
"type": "union",
17
+
"closed": true,
18
+
"description": "What is muted. A user or a community is named by DID, a channel by its space."
15
19
},
16
20
"createdAt": {
17
21
"type": "string",
18
22
"format": "datetime",
19
23
"description": "When the mute was created."
20
24
}
21
25
},
22
26
"description": "A muted subject."
23
27
},
24
28
"status": {
25
29
"type": "object",
26
30
"required": [
27
31
"text"
28
32
],
29
33
"properties": {
30
34
"text": {
31
35
"type": "string",
32
36
"maxLength": 32,
33
37
"description": "The status text."
34
38
},
35
39
"emoji": {
36
40
"type": "string",
37
41
"description": "An emoji shown beside the status."
38
42
}
39
43
},
40
44
"description": "A user's status line."
41
45
},
42
46
"presence": {
43
47
"type": "object",
44
48
"required": [
45
49
"onlineState"
46
50
],
47
51
"properties": {
48
52
"voice": {
49
53
"ref": "#voiceState",
50
54
"type": "ref",
51
55
"description": "Where the user is connected for voice, if anywhere."
52
56
},
53
57
"status": {
54
58
"ref": "#status",
55
59
"type": "ref",
56
60
"description": "The user's status line."
57
61
},
58
62
"onlineState": {
59
63
"type": "string",
60
64
"description": "Derived online state.",
61
65
"knownValues": [
62
66
"online",
63
67
"away",
64
68
"dnd",
65
69
"offline"
66
70
]
67
71
}
68
72
},
69
73
"description": "A user's live, off-protocol state."
70
74
},
75
+
"mutedActor": {
76
+
"type": "object",
77
+
"required": [
78
+
"did"
79
+
],
80
+
"properties": {
81
+
"did": {
82
+
"type": "string",
83
+
"format": "did",
84
+
"description": "The muted user or community."
85
+
}
86
+
},
87
+
"description": "A muted user or community."
88
+
},
71
89
"voiceState": {
72
90
"type": "object",
73
91
"required": [
74
92
"channel"
75
93
],
76
94
"properties": {
77
95
"muted": {
78
96
"type": "boolean",
79
-
"description": "Whether the user has muted their microphone."
97
+
"description": "Whether the user's microphone is muted, for any reason."
80
98
},
81
99
"channel": {
82
100
"type": "string",
83
101
"format": "space-ref",
84
102
"description": "The voice channel the user is connected to."
85
103
},
86
104
"deafened": {
87
105
"type": "boolean",
88
-
"description": "Whether the user has deafened themselves."
106
+
"description": "Whether the user has incoming audio silenced, for any reason."
107
+
},
108
+
"serverMuted": {
109
+
"type": "boolean",
110
+
"description": "Whether a moderator muted them. When this is true they cannot unmute themselves, and a client must not offer them the control."
111
+
},
112
+
"serverDeafened": {
113
+
"type": "boolean",
114
+
"description": "Whether a moderator deafened them. When this is true they cannot undeafen themselves."
89
115
}
90
116
},
91
117
"description": "A user's voice connection."
92
118
},
93
119
"preferences": {
94
120
"type": "object",
95
121
"required": [
96
122
"notificationLevel",
97
123
"communityOrder",
98
124
"mutes",
99
125
"gifFavorites"
100
126
],
101
127
"properties": {
102
128
"mutes": {
103
129
"type": "array",
104
130
"items": {
105
131
"ref": "#mute",
106
132
"type": "ref"
107
133
},
108
134
"description": "Subjects the user has muted."
109
135
},
110
136
"gifFavorites": {
111
137
"type": "array",
112
138
"items": {
113
139
"ref": "social.colibri.beta.embed.defs#gifView",
114
140
"type": "ref"
115
141
},
116
142
"description": "GIFs saved from the picker, stored whole."
117
143
},
118
144
"communityOrder": {
119
145
"type": "array",
120
146
"items": {
121
147
"type": "string",
122
148
"format": "did",
123
149
"description": "A community."
124
150
},
125
151
"description": "Communities in preferred sidebar order."
126
152
},
127
153
"notificationLevel": {
128
154
"type": "string",
129
155
"description": "Which messages produce a notification.",
130
156
"knownValues": [
131
157
"all",
132
158
"mentionsAndReplies"
133
159
]
134
160
}
135
161
},
136
162
"description": "The authenticated user's own settings, as the AppView currently holds them."
137
163
},
138
164
"profileView": {
139
165
"type": "object",
140
166
"required": [
141
167
"did",
142
168
"handle",
143
169
"displayName",
144
170
"isBot",
145
171
"syncBluesky"
146
172
],
147
173
"properties": {
148
174
"did": {
149
175
"type": "string",
150
176
"format": "did",
151
177
"description": "The user's DID."
152
178
},
153
179
"isBot": {
154
180
"type": "boolean",
155
181
"description": "Whether the account is labelled as an automated account."
156
182
},
157
183
"theme": {
158
184
"ref": "social.colibri.beta.actor.profile#theme",
159
185
"type": "ref",
160
186
"description": "Colibri-only profile theming, read from the profile record even when the mirrored fields come from Bluesky."
161
187
},
162
188
"avatar": {
163
189
"type": "string",
164
190
"format": "uri",
165
191
"description": "URL of the user's avatar, served by this AppView's blob proxy."
166
192
},
167
193
"banner": {
168
194
"type": "string",
169
195
"format": "uri",
170
196
"description": "URL of the user's profile banner, served by this AppView's blob proxy."
171
197
},
172
198
"handle": {
173
199
"type": "string",
174
200
"format": "handle",
175
201
"description": "The user's handle, or 'handle.invalid' when it does not resolve."
176
202
},
177
203
"presence": {
178
204
"ref": "#presence",
179
205
"type": "ref",
180
206
"description": "Live presence, when the AppView is tracking any."
181
207
},
182
208
"description": {
183
209
"type": "string",
184
210
"description": "Resolved bio."
185
211
},
186
212
"displayName": {
187
213
"type": "string",
188
214
"description": "Resolved display name, falling back to the handle."
189
215
},
190
216
"syncBluesky": {
191
217
"type": "boolean",
192
218
"description": "Whether the mirrored profile fields come from app.bsky.actor.profile."
193
219
},
194
220
"preferredBadge": {
195
221
"type": "string",
196
222
"description": "Label value of the badge the user chose to display."
197
223
}
198
224
},
199
225
"description": "A Colibri user as the AppView serves them: identity, resolved profile, and presence."
226
+
},
227
+
"mutedChannel": {
228
+
"type": "object",
229
+
"required": [
230
+
"channel"
231
+
],
232
+
"properties": {
233
+
"channel": {
234
+
"type": "string",
235
+
"format": "space-ref",
236
+
"description": "The muted channel's space."
237
+
}
238
+
},
239
+
"description": "A muted channel. Muting a channel silences it without leaving the community it belongs to."
200
240
}
201
241
},
202
242
"$type": "com.atproto.lexicon.schema",
203
243
"lexicon": 1
204
244
}