social.colibri.sync.subscribeEvents
Schema Diff
+123 -5
Compatibility Analysis
Breaking Changes Detected
10 breaking changes, 51 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 (51)
- 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#messageEventData.live" }
- 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#messageEventData", tgt: "social.colibri.sync.subscribeEvents#messageEventData.live", kind: "prop", name: Some("live") }
- 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#messageEventData.live" }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#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: 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#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: 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#messageEventData", tgt: "social.colibri.sync.subscribeEvents#messageEventData.live", kind: "prop", name: Some("live") }
- 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
{
240
+
"description": "Missing, malformed, or unverifiable service auth.",
233
241
"name": "AuthRequired"
234
242
}
235
243
],
236
244
"message": {
237
245
"schema": {
238
246
"refs": [
239
247
"lex:social.colibri.sync.subscribeEvents#ack",
240
248
"lex:social.colibri.sync.subscribeEvents#communityEvent",
241
249
"lex:social.colibri.sync.subscribeEvents#memberEvent",
242
250
"lex:social.colibri.sync.subscribeEvents#categoryEvent",
243
251
"lex:social.colibri.sync.subscribeEvents#channelEvent",
244
252
"lex:social.colibri.sync.subscribeEvents#messageEvent",
245
253
"lex:social.colibri.sync.subscribeEvents#reactionEvent",
246
254
"lex:social.colibri.sync.subscribeEvents#userEvent",
247
255
"lex:social.colibri.sync.subscribeEvents#typingEvent",
248
-
"lex:social.colibri.sync.subscribeEvents#voicePresenceEvent"
256
+
"lex:social.colibri.sync.subscribeEvents#voicePresenceEvent",
257
+
"lex:social.colibri.sync.subscribeEvents#voiceStateEvent"
249
258
],
250
259
"type": "union"
251
260
}
252
261
},
253
262
"type": "subscription"
254
263
},
255
264
"memberEvent": {
256
265
"description": "Sent when a member has joined or left a community.",
257
266
"properties": {
258
267
"data": {
259
268
"ref": "lex:social.colibri.sync.subscribeEvents#memberEventData",
260
269
"type": "ref"
261
270
},
262
271
"type": {
263
272
"const": "member_event",
264
273
"type": "string"
265
274
}
266
275
},
267
276
"required": [
268
277
"type",
269
278
"data"
270
279
],
271
280
"type": "object"
272
281
},
273
282
"memberEventData": {
274
283
"properties": {
275
284
"community": {
276
285
"format": "at-uri",
277
286
"type": "string"
278
287
},
279
288
"event": {
280
289
"knownValues": [
281
290
"join",
282
-
"leave"
291
+
"leave",
292
+
"roles_updated"
283
293
],
284
294
"type": "string"
285
295
},
296
+
"member": {
297
+
"description": "The affected member, hydrated. Present on `join` and `roles_updated`.",
298
+
"ref": "lex:social.colibri.sync.subscribeEvents#memberEventMember",
299
+
"type": "ref"
300
+
},
301
+
"memberDid": {
302
+
"description": "DID of the member who left. Present on `leave`.",
303
+
"format": "did",
304
+
"type": "string"
305
+
},
286
306
"membership": {
287
307
"format": "at-uri",
288
308
"type": "string"
289
309
}
290
310
},
291
311
"required": [
292
312
"event",
293
-
"community",
294
-
"membership"
313
+
"community"
314
+
],
315
+
"type": "object"
316
+
},
317
+
"memberEventMember": {
318
+
"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.",
319
+
"properties": {
320
+
"data": {
321
+
"ref": "lex:social.colibri.actor.defs#actorData",
322
+
"type": "ref"
323
+
},
324
+
"did": {
325
+
"format": "did",
326
+
"type": "string"
327
+
},
328
+
"handle": {
329
+
"format": "handle",
330
+
"type": "string"
331
+
},
332
+
"joinedAt": {
333
+
"format": "datetime",
334
+
"type": "string"
335
+
},
336
+
"nickname": {
337
+
"type": "string"
338
+
},
339
+
"roles": {
340
+
"items": {
341
+
"format": "at-uri",
342
+
"type": "string"
343
+
},
344
+
"type": "array"
345
+
},
346
+
"vc": {
347
+
"description": "AT-URI of the voice channel the member is currently connected to, if any. Only set when that channel belongs to `community`.",
348
+
"format": "at-uri",
349
+
"type": "string"
350
+
},
351
+
"vcDeafened": {
352
+
"type": "boolean"
353
+
},
354
+
"vcMuted": {
355
+
"type": "boolean"
356
+
}
357
+
},
358
+
"required": [
359
+
"did",
360
+
"handle",
361
+
"roles",
362
+
"data"
295
363
],
296
364
"type": "object"
297
365
},
298
366
"messageEvent": {
299
367
"description": "Sent when a message has been sent, edited, or deleted.",
300
368
"properties": {
301
369
"data": {
302
370
"ref": "lex:social.colibri.sync.subscribeEvents#messageEventData",
303
371
"type": "ref"
304
372
},
305
373
"type": {
306
374
"const": "message_event",
307
375
"type": "string"
308
376
}
309
377
},
310
378
"required": [
311
379
"type",
312
380
"data"
313
381
],
314
382
"type": "object"
315
383
},
316
384
"messageEventData": {
317
385
"properties": {
318
386
"attachments": {
319
387
"items": {
320
388
"type": "blob"
321
389
},
322
390
"type": "array"
323
391
},
324
392
"channel": {
325
393
"format": "at-uri",
326
394
"type": "string"
327
395
},
328
396
"createdAt": {
329
397
"format": "datetime",
330
398
"type": "string"
331
399
},
332
400
"edited": {
333
401
"type": "boolean"
334
402
},
335
403
"event": {
336
404
"knownValues": [
337
405
"upsert",
338
406
"delete"
339
407
],
340
408
"type": "string"
341
409
},
342
410
"facets": {
343
411
"items": {
344
412
"ref": "lex:social.colibri.richtext.facet",
345
413
"type": "ref"
346
414
},
347
415
"type": "array"
348
416
},
349
417
"indexedAt": {
350
418
"format": "datetime",
351
419
"type": "string"
352
420
},
421
+
"live": {
422
+
"type": "boolean"
423
+
},
353
424
"parent": {
354
425
"format": "at-uri",
355
426
"type": "string"
356
427
},
357
428
"text": {
358
429
"type": "string"
359
430
},
360
431
"uri": {
361
432
"format": "at-uri",
362
433
"type": "string"
363
434
}
364
435
},
365
436
"required": [
366
437
"event",
367
438
"uri",
368
439
"channel"
369
440
],
370
441
"type": "object"
371
442
},
372
443
"reactionEvent": {
373
444
"description": "Sent when a reaction has been added to or removed from a message.",
374
445
"properties": {
375
446
"data": {
376
447
"ref": "lex:social.colibri.sync.subscribeEvents#reactionEventData",
377
448
"type": "ref"
378
449
},
379
450
"type": {
380
451
"const": "reaction_event",
381
452
"type": "string"
382
453
}
383
454
},
384
455
"required": [
385
456
"type",
386
457
"data"
387
458
],
388
459
"type": "object"
389
460
},
390
461
"reactionEventData": {
391
462
"properties": {
392
463
"channel": {
393
464
"format": "at-uri",
394
465
"type": "string"
395
466
},
396
467
"emoji": {
397
468
"type": "string"
398
469
},
399
470
"event": {
400
471
"knownValues": [
401
472
"added",
402
473
"removed"
403
474
],
404
475
"type": "string"
405
476
},
406
477
"target": {
407
478
"format": "at-uri",
408
479
"type": "string"
409
480
},
410
481
"uri": {
411
482
"format": "at-uri",
412
483
"type": "string"
413
484
}
414
485
},
415
486
"required": [
416
487
"event",
417
488
"uri",
418
489
"emoji",
419
490
"target",
420
491
"channel"
421
492
],
422
493
"type": "object"
423
494
},
424
495
"typingEvent": {
425
496
"description": "Sent when a user is typing in a channel the client is viewing.",
426
497
"properties": {
427
498
"data": {
428
499
"ref": "lex:social.colibri.sync.subscribeEvents#typingEventData",
429
500
"type": "ref"
430
501
},
431
502
"type": {
432
503
"const": "typing_event",
433
504
"type": "string"
434
505
}
435
506
},
436
507
"required": [
437
508
"type",
438
509
"data"
439
510
],
440
511
"type": "object"
441
512
},
442
513
"typingEventData": {
443
514
"properties": {
444
515
"channel": {
445
516
"format": "at-uri",
446
517
"type": "string"
447
518
},
448
519
"did": {
449
520
"format": "did",
450
521
"type": "string"
451
522
},
452
523
"event": {
453
524
"knownValues": [
454
525
"start",
455
526
"stop"
456
527
],
457
528
"type": "string"
458
529
}
459
530
},
460
531
"required": [
461
532
"event",
462
533
"channel",
463
534
"did"
464
535
],
465
536
"type": "object"
466
537
},
467
538
"userEvent": {
468
539
"description": "Sent when a known user has updated their profile or Colibri status.",
469
540
"properties": {
470
541
"data": {
471
542
"ref": "lex:social.colibri.sync.subscribeEvents#userEventData",
472
543
"type": "ref"
473
544
},
474
545
"type": {
475
546
"const": "user_event",
476
547
"type": "string"
477
548
}
478
549
},
479
550
"required": [
480
551
"type",
481
552
"data"
482
553
],
483
554
"type": "object"
484
555
},
485
556
"userEventData": {
486
557
"properties": {
487
558
"did": {
488
559
"format": "did",
489
560
"type": "string"
490
561
},
491
562
"profile": {
492
563
"ref": "lex:social.colibri.sync.subscribeEvents#userProfile",
493
564
"type": "ref"
494
565
},
495
566
"status": {
496
567
"ref": "lex:social.colibri.sync.subscribeEvents#userStatus",
497
568
"type": "ref"
498
569
}
499
570
},
500
571
"required": [
501
572
"did",
502
573
"profile"
503
574
],
504
575
"type": "object"
505
576
},
506
577
"userProfile": {
507
578
"properties": {
508
579
"avatar": {
509
580
"type": "blob"
510
581
},
511
582
"banner": {
512
583
"type": "blob"
513
584
},
514
585
"description": {
515
586
"type": "string"
516
587
},
517
588
"displayName": {
518
589
"type": "string"
519
590
},
520
591
"handle": {
521
592
"format": "handle",
522
593
"type": "string"
523
594
}
524
595
},
525
596
"required": [
526
597
"handle"
527
598
],
528
599
"type": "object"
529
600
},
530
601
"userStatus": {
531
602
"properties": {
532
603
"emoji": {
533
604
"type": "string"
534
605
},
535
606
"state": {
536
607
"knownValues": [
537
608
"online",
538
609
"away",
539
610
"dnd",
540
611
"offline"
541
612
],
542
613
"type": "string"
543
614
},
544
615
"text": {
545
616
"type": "string"
546
617
}
547
618
},
548
619
"required": [
549
620
"state",
550
621
"text"
551
622
],
552
623
"type": "object"
553
624
},
554
625
"voicePresenceEvent": {
555
626
"description": "Sent when a user joins or leaves a voice channel.",
556
627
"properties": {
557
628
"data": {
558
629
"ref": "lex:social.colibri.sync.subscribeEvents#voicePresenceEventData",
559
630
"type": "ref"
560
631
},
561
632
"type": {
562
633
"const": "voice_presence_event",
563
634
"type": "string"
564
635
}
565
636
},
566
637
"required": [
567
638
"type",
568
639
"data"
569
640
],
570
641
"type": "object"
571
642
},
572
643
"voicePresenceEventData": {
573
644
"properties": {
574
645
"channel": {
575
646
"format": "at-uri",
576
647
"type": "string"
577
648
},
578
649
"did": {
579
650
"format": "did",
580
651
"type": "string"
581
652
},
582
653
"event": {
583
654
"knownValues": [
584
655
"join",
585
656
"leave"
586
657
],
587
658
"type": "string"
588
659
}
589
660
},
590
661
"required": [
591
662
"event",
592
663
"channel",
593
664
"did"
594
665
],
595
666
"type": "object"
667
+
},
668
+
"voiceStateEvent": {
669
+
"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.",
670
+
"properties": {
671
+
"data": {
672
+
"ref": "lex:social.colibri.sync.subscribeEvents#voiceStateEventData",
673
+
"type": "ref"
674
+
},
675
+
"type": {
676
+
"const": "voice_state_event",
677
+
"type": "string"
678
+
}
679
+
},
680
+
"required": [
681
+
"type",
682
+
"data"
683
+
],
684
+
"type": "object"
685
+
},
686
+
"voiceStateEventData": {
687
+
"properties": {
688
+
"channel": {
689
+
"format": "at-uri",
690
+
"type": "string"
691
+
},
692
+
"deafened": {
693
+
"type": "boolean"
694
+
},
695
+
"did": {
696
+
"format": "did",
697
+
"type": "string"
698
+
},
699
+
"muted": {
700
+
"type": "boolean"
701
+
},
702
+
"serverDeafened": {
703
+
"type": "boolean"
704
+
},
705
+
"serverMuted": {
706
+
"type": "boolean"
707
+
}
708
+
},
709
+
"required": [
710
+
"channel",
711
+
"did"
712
+
],
713
+
"type": "object"
596
714
}
597
715
},
598
716
"id": "social.colibri.sync.subscribeEvents",
599
717
"lexicon": 1,
600
718
"revision": 1
601
719
}