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