social.colibri.sync.subscribeEvents
Schema Diff
+119 -5
Compatibility Analysis
Breaking Changes Detected
10 breaking changes, 49 non-breaking changes.
Breaking Changes (10)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEvent", src: "social.colibri.sync.subscribeEvents#voiceStateEvent", tgt: "social.colibri.sync.subscribeEvents#voiceStateEvent.data", kind: "prop", name: Some("data") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEvent", src: "social.colibri.sync.subscribeEvents#voiceStateEvent", tgt: "social.colibri.sync.subscribeEvents#voiceStateEvent.type", kind: "prop", name: Some("type") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember", src: "social.colibri.sync.subscribeEvents#memberEventMember", tgt: "social.colibri.sync.subscribeEvents#memberEventMember.did", kind: "prop", name: Some("did") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember", src: "social.colibri.sync.subscribeEvents#memberEventMember", tgt: "social.colibri.sync.subscribeEvents#memberEventMember.data", kind: "prop", name: Some("data") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember", src: "social.colibri.sync.subscribeEvents#memberEventMember", tgt: "social.colibri.sync.subscribeEvents#memberEventMember.handle", kind: "prop", name: Some("handle") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember", src: "social.colibri.sync.subscribeEvents#memberEventMember", tgt: "social.colibri.sync.subscribeEvents#memberEventMember.roles", kind: "prop", name: Some("roles") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEventData", src: "social.colibri.sync.subscribeEvents#voiceStateEventData", tgt: "social.colibri.sync.subscribeEvents#voiceStateEventData.channel", kind: "prop", name: Some("channel") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEventData", src: "social.colibri.sync.subscribeEvents#voiceStateEventData", tgt: "social.colibri.sync.subscribeEvents#voiceStateEventData.did", kind: "prop", name: Some("did") }
- RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "social.colibri.sync.subscribeEvents#memberEventData", src: "social.colibri.sync.subscribeEvents#memberEventData", tgt: "social.colibri.sync.subscribeEvents#memberEventData.membership", kind: "prop", name: Some("membership") }
- ConstraintTightened ConstraintTightened { vertex_id: "social.colibri.sync.subscribeEvents#memberEventData.event", sort: "knownValues", old_value: "[\"join\",\"leave\"]", new_value: "[\"join\",\"leave\",\"roles_updated\"]" }
Non-Breaking Changes (49)
- AddedVertex AddedVertex { vertex_id: "lex:social.colibri.actor.defs#actorData" }
- AddedVertex AddedVertex { vertex_id: "lex:social.colibri.sync.subscribeEvents#memberEventMember" }
- AddedVertex AddedVertex { vertex_id: "lex:social.colibri.sync.subscribeEvents#voiceStateEvent" }
- AddedVertex AddedVertex { vertex_id: "lex:social.colibri.sync.subscribeEvents#voiceStateEventData" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#communityEventData.banner" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#communityEventData.requiresApprovalToJoin" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#humEnvelope.event:variant3" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventData.member" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventData.memberDid" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.data" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.did" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.handle" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.joinedAt" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.nickname" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.roles" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.roles:items" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.vc" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.vcDeafened" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.vcMuted" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEvent" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEvent.data" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEvent.type" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEventData" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEventData.channel" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEventData.deafened" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEventData.did" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEventData.muted" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEventData.serverDeafened" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEventData.serverMuted" }
- AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#communityEventData", tgt: "social.colibri.sync.subscribeEvents#communityEventData.banner", kind: "prop", name: Some("banner") }
- AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#communityEventData", tgt: "social.colibri.sync.subscribeEvents#communityEventData.requiresApprovalToJoin", kind: "prop", name: Some("requiresApprovalToJoin") }
- AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#humEnvelope.event", tgt: "social.colibri.sync.subscribeEvents#humEnvelope.event:variant3", kind: "variant", name: Some("lex:social.colibri.sync.subscribeEvents#voiceStateEvent") }
- AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#humEnvelope.event:variant3", tgt: "lex:social.colibri.sync.subscribeEvents#voiceStateEvent", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#memberEventData", tgt: "social.colibri.sync.subscribeEvents#memberEventData.member", kind: "prop", name: Some("member") }
- AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#memberEventData", tgt: "social.colibri.sync.subscribeEvents#memberEventData.memberDid", kind: "prop", name: Some("memberDid") }
- AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#memberEventData.member", tgt: "lex:social.colibri.sync.subscribeEvents#memberEventMember", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#memberEventMember", tgt: "social.colibri.sync.subscribeEvents#memberEventMember.joinedAt", kind: "prop", name: Some("joinedAt") }
- AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#memberEventMember", tgt: "social.colibri.sync.subscribeEvents#memberEventMember.nickname", kind: "prop", name: Some("nickname") }
- AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#memberEventMember", tgt: "social.colibri.sync.subscribeEvents#memberEventMember.vc", kind: "prop", name: Some("vc") }
- AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#memberEventMember", tgt: "social.colibri.sync.subscribeEvents#memberEventMember.vcDeafened", kind: "prop", name: Some("vcDeafened") }
- AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#memberEventMember", tgt: "social.colibri.sync.subscribeEvents#memberEventMember.vcMuted", kind: "prop", name: Some("vcMuted") }
- AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#memberEventMember.data", tgt: "lex:social.colibri.actor.defs#actorData", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#memberEventMember.roles", tgt: "social.colibri.sync.subscribeEvents#memberEventMember.roles:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#voiceStateEvent.data", tgt: "lex:social.colibri.sync.subscribeEvents#voiceStateEventData", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#voiceStateEventData", tgt: "social.colibri.sync.subscribeEvents#voiceStateEventData.deafened", kind: "prop", name: Some("deafened") }
- AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#voiceStateEventData", tgt: "social.colibri.sync.subscribeEvents#voiceStateEventData.muted", kind: "prop", name: Some("muted") }
- AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#voiceStateEventData", tgt: "social.colibri.sync.subscribeEvents#voiceStateEventData.serverDeafened", kind: "prop", name: Some("serverDeafened") }
- AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#voiceStateEventData", tgt: "social.colibri.sync.subscribeEvents#voiceStateEventData.serverMuted", kind: "prop", name: Some("serverMuted") }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "lex:social.colibri.actor.defs#actorData" }AddedVertex { vertex_id: "lex:social.colibri.sync.subscribeEvents#memberEventMember" }AddedVertex { vertex_id: "lex:social.colibri.sync.subscribeEvents#voiceStateEvent" }AddedVertex { vertex_id: "lex:social.colibri.sync.subscribeEvents#voiceStateEventData" }AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#communityEventData.banner" }AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#communityEventData.requiresApprovalToJoin" }AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#humEnvelope.event:variant3" }AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventData.member" }AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventData.memberDid" }AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember" }AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.data" }AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.did" }AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.handle" }AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.joinedAt" }AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.nickname" }AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.roles" }AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.roles:items" }AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.vc" }AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.vcDeafened" }AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.vcMuted" }AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEvent" }AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEvent.data" }AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEvent.type" }AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEventData" }AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEventData.channel" }AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEventData.deafened" }AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEventData.did" }AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEventData.muted" }AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEventData.serverDeafened" }AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEventData.serverMuted" }
Constraint Changes
- ConstraintTightened ConstraintTightened { vertex_id: "social.colibri.sync.subscribeEvents#memberEventData.event", sort: "knownValues", old_value: "[\"join\",\"leave\"]", new_value: "[\"join\",\"leave\",\"roles_updated\"]" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember", src: "social.colibri.sync.subscribeEvents#memberEventMember", tgt: "social.colibri.sync.subscribeEvents#memberEventMember.did", kind: "prop", name: Some("did") }
- Breaking: RequiredEdgeAdded { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember", src: "social.colibri.sync.subscribeEvents#memberEventMember", tgt: "social.colibri.sync.subscribeEvents#memberEventMember.data", kind: "prop", name: Some("data") }
- Breaking: RequiredEdgeAdded { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember", src: "social.colibri.sync.subscribeEvents#memberEventMember", tgt: "social.colibri.sync.subscribeEvents#memberEventMember.handle", kind: "prop", name: Some("handle") }
- Breaking: RequiredEdgeAdded { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember", src: "social.colibri.sync.subscribeEvents#memberEventMember", tgt: "social.colibri.sync.subscribeEvents#memberEventMember.roles", kind: "prop", name: Some("roles") }
- Breaking: RequiredEdgeAdded { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEventData", src: "social.colibri.sync.subscribeEvents#voiceStateEventData", tgt: "social.colibri.sync.subscribeEvents#voiceStateEventData.channel", kind: "prop", name: Some("channel") }
- Breaking: RequiredEdgeAdded { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEventData", src: "social.colibri.sync.subscribeEvents#voiceStateEventData", tgt: "social.colibri.sync.subscribeEvents#voiceStateEventData.did", kind: "prop", name: Some("did") }
- Breaking: RequiredEdgeAdded { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEvent", src: "social.colibri.sync.subscribeEvents#voiceStateEvent", tgt: "social.colibri.sync.subscribeEvents#voiceStateEvent.data", kind: "prop", name: Some("data") }
- Breaking: RequiredEdgeAdded { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEvent", src: "social.colibri.sync.subscribeEvents#voiceStateEvent", tgt: "social.colibri.sync.subscribeEvents#voiceStateEvent.type", kind: "prop", name: Some("type") }
- Breaking: RequiredEdgeRemoved { vertex_id: "social.colibri.sync.subscribeEvents#memberEventData", src: "social.colibri.sync.subscribeEvents#memberEventData", tgt: "social.colibri.sync.subscribeEvents#memberEventData.membership", kind: "prop", name: Some("membership") }
- Non-breaking: AddedEdge { src: "social.colibri.sync.subscribeEvents#communityEventData", tgt: "social.colibri.sync.subscribeEvents#communityEventData.banner", kind: "prop", name: Some("banner") }
- Non-breaking: AddedEdge { src: "social.colibri.sync.subscribeEvents#communityEventData", tgt: "social.colibri.sync.subscribeEvents#communityEventData.requiresApprovalToJoin", kind: "prop", name: Some("requiresApprovalToJoin") }
- Non-breaking: AddedEdge { src: "social.colibri.sync.subscribeEvents#humEnvelope.event", tgt: "social.colibri.sync.subscribeEvents#humEnvelope.event:variant3", kind: "variant", name: Some("lex:social.colibri.sync.subscribeEvents#voiceStateEvent") }
- Non-breaking: AddedEdge { src: "social.colibri.sync.subscribeEvents#humEnvelope.event:variant3", tgt: "lex:social.colibri.sync.subscribeEvents#voiceStateEvent", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "social.colibri.sync.subscribeEvents#memberEventData", tgt: "social.colibri.sync.subscribeEvents#memberEventData.member", kind: "prop", name: Some("member") }
- Non-breaking: AddedEdge { src: "social.colibri.sync.subscribeEvents#memberEventData", tgt: "social.colibri.sync.subscribeEvents#memberEventData.memberDid", kind: "prop", name: Some("memberDid") }
- Non-breaking: AddedEdge { src: "social.colibri.sync.subscribeEvents#memberEventData.member", tgt: "lex:social.colibri.sync.subscribeEvents#memberEventMember", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "social.colibri.sync.subscribeEvents#memberEventMember", tgt: "social.colibri.sync.subscribeEvents#memberEventMember.joinedAt", kind: "prop", name: Some("joinedAt") }
- Non-breaking: AddedEdge { src: "social.colibri.sync.subscribeEvents#memberEventMember", tgt: "social.colibri.sync.subscribeEvents#memberEventMember.nickname", kind: "prop", name: Some("nickname") }
- Non-breaking: AddedEdge { src: "social.colibri.sync.subscribeEvents#memberEventMember", tgt: "social.colibri.sync.subscribeEvents#memberEventMember.vc", kind: "prop", name: Some("vc") }
- Non-breaking: AddedEdge { src: "social.colibri.sync.subscribeEvents#memberEventMember", tgt: "social.colibri.sync.subscribeEvents#memberEventMember.vcDeafened", kind: "prop", name: Some("vcDeafened") }
- Non-breaking: AddedEdge { src: "social.colibri.sync.subscribeEvents#memberEventMember", tgt: "social.colibri.sync.subscribeEvents#memberEventMember.vcMuted", kind: "prop", name: Some("vcMuted") }
- Non-breaking: AddedEdge { src: "social.colibri.sync.subscribeEvents#memberEventMember.data", tgt: "lex:social.colibri.actor.defs#actorData", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "social.colibri.sync.subscribeEvents#memberEventMember.roles", tgt: "social.colibri.sync.subscribeEvents#memberEventMember.roles:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "social.colibri.sync.subscribeEvents#voiceStateEvent.data", tgt: "lex:social.colibri.sync.subscribeEvents#voiceStateEventData", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "social.colibri.sync.subscribeEvents#voiceStateEventData", tgt: "social.colibri.sync.subscribeEvents#voiceStateEventData.deafened", kind: "prop", name: Some("deafened") }
- Non-breaking: AddedEdge { src: "social.colibri.sync.subscribeEvents#voiceStateEventData", tgt: "social.colibri.sync.subscribeEvents#voiceStateEventData.muted", kind: "prop", name: Some("muted") }
- Non-breaking: AddedEdge { src: "social.colibri.sync.subscribeEvents#voiceStateEventData", tgt: "social.colibri.sync.subscribeEvents#voiceStateEventData.serverDeafened", kind: "prop", name: Some("serverDeafened") }
- Non-breaking: AddedEdge { src: "social.colibri.sync.subscribeEvents#voiceStateEventData", tgt: "social.colibri.sync.subscribeEvents#voiceStateEventData.serverMuted", kind: "prop", name: Some("serverMuted") }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"ack": {
5
5
"description": "Sent in response to a heartbeat message.",
6
6
"properties": {
7
7
"type": {
8
8
"const": "ack",
9
9
"type": "string"
10
10
}
11
11
},
12
12
"required": [
13
13
"type"
14
14
],
15
15
"type": "object"
16
16
},
17
17
"categoryEvent": {
18
18
"description": "Sent when a category has been created, updated, or deleted.",
19
19
"properties": {
20
20
"data": {
21
21
"ref": "lex:social.colibri.sync.subscribeEvents#categoryEventData",
22
22
"type": "ref"
23
23
},
24
24
"type": {
25
25
"const": "category_event",
26
26
"type": "string"
27
27
}
28
28
},
29
29
"required": [
30
30
"type",
31
31
"data"
32
32
],
33
33
"type": "object"
34
34
},
35
35
"categoryEventData": {
36
36
"properties": {
37
37
"channelOrder": {
38
38
"items": {
39
39
"format": "at-uri",
40
40
"type": "string"
41
41
},
42
42
"type": "array"
43
43
},
44
44
"community": {
45
45
"format": "at-uri",
46
46
"type": "string"
47
47
},
48
48
"event": {
49
49
"knownValues": [
50
50
"upsert",
51
51
"delete"
52
52
],
53
53
"type": "string"
54
54
},
55
55
"name": {
56
56
"type": "string"
57
57
},
58
58
"uri": {
59
59
"format": "at-uri",
60
60
"type": "string"
61
61
}
62
62
},
63
63
"required": [
64
64
"event",
65
65
"uri",
66
66
"community"
67
67
],
68
68
"type": "object"
69
69
},
70
70
"channelEvent": {
71
71
"description": "Sent when a channel has been created, updated, or deleted.",
72
72
"properties": {
73
73
"data": {
74
74
"ref": "lex:social.colibri.sync.subscribeEvents#channelEventData",
75
75
"type": "ref"
76
76
},
77
77
"type": {
78
78
"const": "channel_event",
79
79
"type": "string"
80
80
}
81
81
},
82
82
"required": [
83
83
"type",
84
84
"data"
85
85
],
86
86
"type": "object"
87
87
},
88
88
"channelEventData": {
89
89
"properties": {
90
90
"category": {
91
91
"format": "at-uri",
92
92
"type": "string"
93
93
},
94
94
"community": {
95
95
"format": "at-uri",
96
96
"type": "string"
97
97
},
98
98
"description": {
99
99
"type": "string"
100
100
},
101
101
"event": {
102
102
"knownValues": [
103
103
"upsert",
104
104
"delete"
105
105
],
106
106
"type": "string"
107
107
},
108
108
"name": {
109
109
"type": "string"
110
110
},
111
111
"type": {
112
112
"type": "string"
113
113
},
114
114
"uri": {
115
115
"format": "at-uri",
116
116
"type": "string"
117
117
}
118
118
},
119
119
"required": [
120
120
"event",
121
121
"uri",
122
122
"community"
123
123
],
124
124
"type": "object"
125
125
},
126
126
"communityEvent": {
127
127
"description": "Sent when a community has been updated or deleted.",
128
128
"properties": {
129
129
"data": {
130
130
"ref": "lex:social.colibri.sync.subscribeEvents#communityEventData",
131
131
"type": "ref"
132
132
},
133
133
"type": {
134
134
"const": "community_event",
135
135
"type": "string"
136
136
}
137
137
},
138
138
"required": [
139
139
"type",
140
140
"data"
141
141
],
142
142
"type": "object"
143
143
},
144
144
"communityEventData": {
145
145
"properties": {
146
+
"banner": {
147
+
"type": "blob"
148
+
},
146
149
"categoryOrder": {
147
150
"items": {
148
151
"format": "at-uri",
149
152
"type": "string"
150
153
},
151
154
"type": "array"
152
155
},
153
156
"description": {
154
157
"type": "string"
155
158
},
156
159
"event": {
157
160
"knownValues": [
158
161
"upsert",
159
162
"delete"
160
163
],
161
164
"type": "string"
162
165
},
163
166
"name": {
164
167
"type": "string"
165
168
},
166
169
"picture": {
167
170
"type": "blob"
168
171
},
172
+
"requiresApprovalToJoin": {
173
+
"type": "boolean"
174
+
},
169
175
"uri": {
170
176
"format": "at-uri",
171
177
"type": "string"
172
178
}
173
179
},
174
180
"required": [
175
181
"event",
176
182
"uri"
177
183
],
178
184
"type": "object"
179
185
},
180
186
"humEnvelope": {
181
187
"description": "An off-protocol event relayed between AppViews. The authenticated sender (inter-service auth JWT: aud = receiving AppView did:web, lxm = social.colibri.sync.sendHum) is the origin of record; `origin` is echoed for relay/loop control and MUST match the JWT issuer. Only off-protocol event types are permitted — on-protocol events are never carried by a Hum and are derived from the firehose instead.",
182
188
"properties": {
183
189
"community": {
184
190
"description": "Community the event is scoped to. Receiver relays to local clients only if they are members of this community.",
185
191
"format": "at-uri",
186
192
"type": "string"
187
193
},
188
194
"event": {
189
195
"description": "Ephemeral event payload. Only off-protocol types are permitted.",
190
196
"refs": [
191
197
"lex:social.colibri.sync.subscribeEvents#userEvent",
192
198
"lex:social.colibri.sync.subscribeEvents#typingEvent",
193
-
"lex:social.colibri.sync.subscribeEvents#voicePresenceEvent"
199
+
"lex:social.colibri.sync.subscribeEvents#voicePresenceEvent",
200
+
"lex:social.colibri.sync.subscribeEvents#voiceStateEvent"
194
201
],
195
202
"type": "union"
196
203
},
197
204
"id": {
198
205
"description": "Unique id for this Hum, used by receivers to dedup across relay paths.",
199
206
"maxLength": 64,
200
207
"type": "string"
201
208
},
202
209
"origin": {
203
210
"description": "DID of the AppView that first emitted this Hum.",
204
211
"format": "did",
205
212
"type": "string"
206
213
},
207
214
"subject": {
208
215
"description": "The user this event is about. Receiver MUST verify origin equals subject's declared presenceService before trusting or relaying.",
209
216
"format": "did",
210
217
"type": "string"
211
218
},
212
219
"ttl": {
213
220
"description": "Remaining relay hops. Decremented on each forward; a Hum at ttl 0 is delivered locally but never relayed.",
214
221
"maximum": 8,
215
222
"minimum": 0,
216
223
"type": "integer"
217
224
}
218
225
},
219
226
"required": [
220
227
"origin",
221
228
"id",
222
229
"ttl",
223
230
"subject",
224
231
"community",
225
232
"event"
226
233
],
227
234
"type": "object"
228
235
},
229
236
"main": {
230
237
"description": "Opens a WebSocket stream that transmits relevant events for the authenticated user.",
231
238
"errors": [
232
239
{
233
240
"name": "AuthRequired"
234
241
}
235
242
],
236
243
"message": {
237
244
"schema": {
238
245
"refs": [
239
246
"lex:social.colibri.sync.subscribeEvents#ack",
240
247
"lex:social.colibri.sync.subscribeEvents#communityEvent",
241
248
"lex:social.colibri.sync.subscribeEvents#memberEvent",
242
249
"lex:social.colibri.sync.subscribeEvents#categoryEvent",
243
250
"lex:social.colibri.sync.subscribeEvents#channelEvent",
244
251
"lex:social.colibri.sync.subscribeEvents#messageEvent",
245
252
"lex:social.colibri.sync.subscribeEvents#reactionEvent",
246
253
"lex:social.colibri.sync.subscribeEvents#userEvent",
247
254
"lex:social.colibri.sync.subscribeEvents#typingEvent",
248
-
"lex:social.colibri.sync.subscribeEvents#voicePresenceEvent"
255
+
"lex:social.colibri.sync.subscribeEvents#voicePresenceEvent",
256
+
"lex:social.colibri.sync.subscribeEvents#voiceStateEvent"
249
257
],
250
258
"type": "union"
251
259
}
252
260
},
253
261
"type": "subscription"
254
262
},
255
263
"memberEvent": {
256
264
"description": "Sent when a member has joined or left a community.",
257
265
"properties": {
258
266
"data": {
259
267
"ref": "lex:social.colibri.sync.subscribeEvents#memberEventData",
260
268
"type": "ref"
261
269
},
262
270
"type": {
263
271
"const": "member_event",
264
272
"type": "string"
265
273
}
266
274
},
267
275
"required": [
268
276
"type",
269
277
"data"
270
278
],
271
279
"type": "object"
272
280
},
273
281
"memberEventData": {
274
282
"properties": {
275
283
"community": {
276
284
"format": "at-uri",
277
285
"type": "string"
278
286
},
279
287
"event": {
280
288
"knownValues": [
281
289
"join",
282
-
"leave"
290
+
"leave",
291
+
"roles_updated"
283
292
],
284
293
"type": "string"
285
294
},
295
+
"member": {
296
+
"description": "The affected member, hydrated. Present on `join` and `roles_updated`.",
297
+
"ref": "lex:social.colibri.sync.subscribeEvents#memberEventMember",
298
+
"type": "ref"
299
+
},
300
+
"memberDid": {
301
+
"description": "DID of the member who left. Present on `leave`.",
302
+
"format": "did",
303
+
"type": "string"
304
+
},
286
305
"membership": {
287
306
"format": "at-uri",
288
307
"type": "string"
289
308
}
290
309
},
291
310
"required": [
292
311
"event",
293
-
"community",
294
-
"membership"
312
+
"community"
313
+
],
314
+
"type": "object"
315
+
},
316
+
"memberEventMember": {
317
+
"description": "The affected member as carried by a member event. Mirrors `social.colibri.community.defs#memberView`, including the member's current voice channel state so a receiving client can place them in a voice channel without refetching.",
318
+
"properties": {
319
+
"data": {
320
+
"ref": "lex:social.colibri.actor.defs#actorData",
321
+
"type": "ref"
322
+
},
323
+
"did": {
324
+
"format": "did",
325
+
"type": "string"
326
+
},
327
+
"handle": {
328
+
"format": "handle",
329
+
"type": "string"
330
+
},
331
+
"joinedAt": {
332
+
"format": "datetime",
333
+
"type": "string"
334
+
},
335
+
"nickname": {
336
+
"type": "string"
337
+
},
338
+
"roles": {
339
+
"items": {
340
+
"format": "at-uri",
341
+
"type": "string"
342
+
},
343
+
"type": "array"
344
+
},
345
+
"vc": {
346
+
"description": "AT-URI of the voice channel the member is currently connected to, if any. Only set when that channel belongs to `community`.",
347
+
"format": "at-uri",
348
+
"type": "string"
349
+
},
350
+
"vcDeafened": {
351
+
"type": "boolean"
352
+
},
353
+
"vcMuted": {
354
+
"type": "boolean"
355
+
}
356
+
},
357
+
"required": [
358
+
"did",
359
+
"handle",
360
+
"roles",
361
+
"data"
295
362
],
296
363
"type": "object"
297
364
},
298
365
"messageEvent": {
299
366
"description": "Sent when a message has been sent, edited, or deleted.",
300
367
"properties": {
301
368
"data": {
302
369
"ref": "lex:social.colibri.sync.subscribeEvents#messageEventData",
303
370
"type": "ref"
304
371
},
305
372
"type": {
306
373
"const": "message_event",
307
374
"type": "string"
308
375
}
309
376
},
310
377
"required": [
311
378
"type",
312
379
"data"
313
380
],
314
381
"type": "object"
315
382
},
316
383
"messageEventData": {
317
384
"properties": {
318
385
"attachments": {
319
386
"items": {
320
387
"type": "blob"
321
388
},
322
389
"type": "array"
323
390
},
324
391
"channel": {
325
392
"format": "at-uri",
326
393
"type": "string"
327
394
},
328
395
"createdAt": {
329
396
"format": "datetime",
330
397
"type": "string"
331
398
},
332
399
"edited": {
333
400
"type": "boolean"
334
401
},
335
402
"event": {
336
403
"knownValues": [
337
404
"upsert",
338
405
"delete"
339
406
],
340
407
"type": "string"
341
408
},
342
409
"facets": {
343
410
"items": {
344
411
"ref": "lex:social.colibri.richtext.facet",
345
412
"type": "ref"
346
413
},
347
414
"type": "array"
348
415
},
349
416
"indexedAt": {
350
417
"format": "datetime",
351
418
"type": "string"
352
419
},
353
420
"parent": {
354
421
"format": "at-uri",
355
422
"type": "string"
356
423
},
357
424
"text": {
358
425
"type": "string"
359
426
},
360
427
"uri": {
361
428
"format": "at-uri",
362
429
"type": "string"
363
430
}
364
431
},
365
432
"required": [
366
433
"event",
367
434
"uri",
368
435
"channel"
369
436
],
370
437
"type": "object"
371
438
},
372
439
"reactionEvent": {
373
440
"description": "Sent when a reaction has been added to or removed from a message.",
374
441
"properties": {
375
442
"data": {
376
443
"ref": "lex:social.colibri.sync.subscribeEvents#reactionEventData",
377
444
"type": "ref"
378
445
},
379
446
"type": {
380
447
"const": "reaction_event",
381
448
"type": "string"
382
449
}
383
450
},
384
451
"required": [
385
452
"type",
386
453
"data"
387
454
],
388
455
"type": "object"
389
456
},
390
457
"reactionEventData": {
391
458
"properties": {
392
459
"channel": {
393
460
"format": "at-uri",
394
461
"type": "string"
395
462
},
396
463
"emoji": {
397
464
"type": "string"
398
465
},
399
466
"event": {
400
467
"knownValues": [
401
468
"added",
402
469
"removed"
403
470
],
404
471
"type": "string"
405
472
},
406
473
"target": {
407
474
"format": "at-uri",
408
475
"type": "string"
409
476
},
410
477
"uri": {
411
478
"format": "at-uri",
412
479
"type": "string"
413
480
}
414
481
},
415
482
"required": [
416
483
"event",
417
484
"uri",
418
485
"emoji",
419
486
"target",
420
487
"channel"
421
488
],
422
489
"type": "object"
423
490
},
424
491
"typingEvent": {
425
492
"description": "Sent when a user is typing in a channel the client is viewing.",
426
493
"properties": {
427
494
"data": {
428
495
"ref": "lex:social.colibri.sync.subscribeEvents#typingEventData",
429
496
"type": "ref"
430
497
},
431
498
"type": {
432
499
"const": "typing_event",
433
500
"type": "string"
434
501
}
435
502
},
436
503
"required": [
437
504
"type",
438
505
"data"
439
506
],
440
507
"type": "object"
441
508
},
442
509
"typingEventData": {
443
510
"properties": {
444
511
"channel": {
445
512
"format": "at-uri",
446
513
"type": "string"
447
514
},
448
515
"did": {
449
516
"format": "did",
450
517
"type": "string"
451
518
},
452
519
"event": {
453
520
"knownValues": [
454
521
"start",
455
522
"stop"
456
523
],
457
524
"type": "string"
458
525
}
459
526
},
460
527
"required": [
461
528
"event",
462
529
"channel",
463
530
"did"
464
531
],
465
532
"type": "object"
466
533
},
467
534
"userEvent": {
468
535
"description": "Sent when a known user has updated their profile or Colibri status.",
469
536
"properties": {
470
537
"data": {
471
538
"ref": "lex:social.colibri.sync.subscribeEvents#userEventData",
472
539
"type": "ref"
473
540
},
474
541
"type": {
475
542
"const": "user_event",
476
543
"type": "string"
477
544
}
478
545
},
479
546
"required": [
480
547
"type",
481
548
"data"
482
549
],
483
550
"type": "object"
484
551
},
485
552
"userEventData": {
486
553
"properties": {
487
554
"did": {
488
555
"format": "did",
489
556
"type": "string"
490
557
},
491
558
"profile": {
492
559
"ref": "lex:social.colibri.sync.subscribeEvents#userProfile",
493
560
"type": "ref"
494
561
},
495
562
"status": {
496
563
"ref": "lex:social.colibri.sync.subscribeEvents#userStatus",
497
564
"type": "ref"
498
565
}
499
566
},
500
567
"required": [
501
568
"did",
502
569
"profile"
503
570
],
504
571
"type": "object"
505
572
},
506
573
"userProfile": {
507
574
"properties": {
508
575
"avatar": {
509
576
"type": "blob"
510
577
},
511
578
"banner": {
512
579
"type": "blob"
513
580
},
514
581
"description": {
515
582
"type": "string"
516
583
},
517
584
"displayName": {
518
585
"type": "string"
519
586
},
520
587
"handle": {
521
588
"format": "handle",
522
589
"type": "string"
523
590
}
524
591
},
525
592
"required": [
526
593
"handle"
527
594
],
528
595
"type": "object"
529
596
},
530
597
"userStatus": {
531
598
"properties": {
532
599
"emoji": {
533
600
"type": "string"
534
601
},
535
602
"state": {
536
603
"knownValues": [
537
604
"online",
538
605
"away",
539
606
"dnd",
540
607
"offline"
541
608
],
542
609
"type": "string"
543
610
},
544
611
"text": {
545
612
"type": "string"
546
613
}
547
614
},
548
615
"required": [
549
616
"state",
550
617
"text"
551
618
],
552
619
"type": "object"
553
620
},
554
621
"voicePresenceEvent": {
555
622
"description": "Sent when a user joins or leaves a voice channel.",
556
623
"properties": {
557
624
"data": {
558
625
"ref": "lex:social.colibri.sync.subscribeEvents#voicePresenceEventData",
559
626
"type": "ref"
560
627
},
561
628
"type": {
562
629
"const": "voice_presence_event",
563
630
"type": "string"
564
631
}
565
632
},
566
633
"required": [
567
634
"type",
568
635
"data"
569
636
],
570
637
"type": "object"
571
638
},
572
639
"voicePresenceEventData": {
573
640
"properties": {
574
641
"channel": {
575
642
"format": "at-uri",
576
643
"type": "string"
577
644
},
578
645
"did": {
579
646
"format": "did",
580
647
"type": "string"
581
648
},
582
649
"event": {
583
650
"knownValues": [
584
651
"join",
585
652
"leave"
586
653
],
587
654
"type": "string"
588
655
}
589
656
},
590
657
"required": [
591
658
"event",
592
659
"channel",
593
660
"did"
594
661
],
595
662
"type": "object"
663
+
},
664
+
"voiceStateEvent": {
665
+
"description": "Sent when a user's voice state changes within a voice channel. `muted` and `deafened` are the user's own choices; `serverMuted` and `serverDeafened` are moderator-applied and enforced by the SFU. Each field is absent when unchanged.",
666
+
"properties": {
667
+
"data": {
668
+
"ref": "lex:social.colibri.sync.subscribeEvents#voiceStateEventData",
669
+
"type": "ref"
670
+
},
671
+
"type": {
672
+
"const": "voice_state_event",
673
+
"type": "string"
674
+
}
675
+
},
676
+
"required": [
677
+
"type",
678
+
"data"
679
+
],
680
+
"type": "object"
681
+
},
682
+
"voiceStateEventData": {
683
+
"properties": {
684
+
"channel": {
685
+
"format": "at-uri",
686
+
"type": "string"
687
+
},
688
+
"deafened": {
689
+
"type": "boolean"
690
+
},
691
+
"did": {
692
+
"format": "did",
693
+
"type": "string"
694
+
},
695
+
"muted": {
696
+
"type": "boolean"
697
+
},
698
+
"serverDeafened": {
699
+
"type": "boolean"
700
+
},
701
+
"serverMuted": {
702
+
"type": "boolean"
703
+
}
704
+
},
705
+
"required": [
706
+
"channel",
707
+
"did"
708
+
],
709
+
"type": "object"
596
710
}
597
711
},
598
712
"id": "social.colibri.sync.subscribeEvents",
599
713
"lexicon": 1,
600
714
"revision": 1
601
715
}