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