social.colibri.sync.subscribeEvents

colibri.social

Schema Diff

+119 -5

From

CID
bafyreicpejvct5q...
Indexed At
2026-07-27 21:35 UTC
View this version

To

CID
bafyreiezrugguvg...
Indexed At
2026-07-29 16:12 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

10 breaking changes, 49 non-breaking changes.

Breaking Changes (10)
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEvent", src: "social.colibri.sync.subscribeEvents#voiceStateEvent", tgt: "social.colibri.sync.subscribeEvents#voiceStateEvent.data", kind: "prop", name: Some("data") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEvent", src: "social.colibri.sync.subscribeEvents#voiceStateEvent", tgt: "social.colibri.sync.subscribeEvents#voiceStateEvent.type", kind: "prop", name: Some("type") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember", src: "social.colibri.sync.subscribeEvents#memberEventMember", tgt: "social.colibri.sync.subscribeEvents#memberEventMember.did", kind: "prop", name: Some("did") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember", src: "social.colibri.sync.subscribeEvents#memberEventMember", tgt: "social.colibri.sync.subscribeEvents#memberEventMember.data", kind: "prop", name: Some("data") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember", src: "social.colibri.sync.subscribeEvents#memberEventMember", tgt: "social.colibri.sync.subscribeEvents#memberEventMember.handle", kind: "prop", name: Some("handle") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember", src: "social.colibri.sync.subscribeEvents#memberEventMember", tgt: "social.colibri.sync.subscribeEvents#memberEventMember.roles", kind: "prop", name: Some("roles") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEventData", src: "social.colibri.sync.subscribeEvents#voiceStateEventData", tgt: "social.colibri.sync.subscribeEvents#voiceStateEventData.channel", kind: "prop", name: Some("channel") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEventData", src: "social.colibri.sync.subscribeEvents#voiceStateEventData", tgt: "social.colibri.sync.subscribeEvents#voiceStateEventData.did", kind: "prop", name: Some("did") }
  • RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "social.colibri.sync.subscribeEvents#memberEventData", src: "social.colibri.sync.subscribeEvents#memberEventData", tgt: "social.colibri.sync.subscribeEvents#memberEventData.membership", kind: "prop", name: Some("membership") }
  • ConstraintTightened ConstraintTightened { vertex_id: "social.colibri.sync.subscribeEvents#memberEventData.event", sort: "knownValues", old_value: "[\"join\",\"leave\"]", new_value: "[\"join\",\"leave\",\"roles_updated\"]" }
Non-Breaking Changes (49)
  • AddedVertex AddedVertex { vertex_id: "lex:social.colibri.actor.defs#actorData" }
  • AddedVertex AddedVertex { vertex_id: "lex:social.colibri.sync.subscribeEvents#memberEventMember" }
  • AddedVertex AddedVertex { vertex_id: "lex:social.colibri.sync.subscribeEvents#voiceStateEvent" }
  • AddedVertex AddedVertex { vertex_id: "lex:social.colibri.sync.subscribeEvents#voiceStateEventData" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#communityEventData.banner" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#communityEventData.requiresApprovalToJoin" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#humEnvelope.event:variant3" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventData.member" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventData.memberDid" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.data" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.did" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.handle" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.joinedAt" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.nickname" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.roles" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.roles:items" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.vc" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.vcDeafened" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.vcMuted" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEvent" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEvent.data" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEvent.type" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEventData" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEventData.channel" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEventData.deafened" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEventData.did" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEventData.muted" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEventData.serverDeafened" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEventData.serverMuted" }
  • AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#communityEventData", tgt: "social.colibri.sync.subscribeEvents#communityEventData.banner", kind: "prop", name: Some("banner") }
  • AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#communityEventData", tgt: "social.colibri.sync.subscribeEvents#communityEventData.requiresApprovalToJoin", kind: "prop", name: Some("requiresApprovalToJoin") }
  • AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#humEnvelope.event", tgt: "social.colibri.sync.subscribeEvents#humEnvelope.event:variant3", kind: "variant", name: Some("lex:social.colibri.sync.subscribeEvents#voiceStateEvent") }
  • AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#humEnvelope.event:variant3", tgt: "lex:social.colibri.sync.subscribeEvents#voiceStateEvent", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#memberEventData", tgt: "social.colibri.sync.subscribeEvents#memberEventData.member", kind: "prop", name: Some("member") }
  • AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#memberEventData", tgt: "social.colibri.sync.subscribeEvents#memberEventData.memberDid", kind: "prop", name: Some("memberDid") }
  • AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#memberEventData.member", tgt: "lex:social.colibri.sync.subscribeEvents#memberEventMember", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#memberEventMember", tgt: "social.colibri.sync.subscribeEvents#memberEventMember.joinedAt", kind: "prop", name: Some("joinedAt") }
  • AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#memberEventMember", tgt: "social.colibri.sync.subscribeEvents#memberEventMember.nickname", kind: "prop", name: Some("nickname") }
  • AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#memberEventMember", tgt: "social.colibri.sync.subscribeEvents#memberEventMember.vc", kind: "prop", name: Some("vc") }
  • AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#memberEventMember", tgt: "social.colibri.sync.subscribeEvents#memberEventMember.vcDeafened", kind: "prop", name: Some("vcDeafened") }
  • AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#memberEventMember", tgt: "social.colibri.sync.subscribeEvents#memberEventMember.vcMuted", kind: "prop", name: Some("vcMuted") }
  • AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#memberEventMember.data", tgt: "lex:social.colibri.actor.defs#actorData", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#memberEventMember.roles", tgt: "social.colibri.sync.subscribeEvents#memberEventMember.roles:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#voiceStateEvent.data", tgt: "lex:social.colibri.sync.subscribeEvents#voiceStateEventData", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#voiceStateEventData", tgt: "social.colibri.sync.subscribeEvents#voiceStateEventData.deafened", kind: "prop", name: Some("deafened") }
  • AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#voiceStateEventData", tgt: "social.colibri.sync.subscribeEvents#voiceStateEventData.muted", kind: "prop", name: Some("muted") }
  • AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#voiceStateEventData", tgt: "social.colibri.sync.subscribeEvents#voiceStateEventData.serverDeafened", kind: "prop", name: Some("serverDeafened") }
  • AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#voiceStateEventData", tgt: "social.colibri.sync.subscribeEvents#voiceStateEventData.serverMuted", kind: "prop", name: Some("serverMuted") }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "lex:social.colibri.actor.defs#actorData" }
  • AddedVertex { vertex_id: "lex:social.colibri.sync.subscribeEvents#memberEventMember" }
  • AddedVertex { vertex_id: "lex:social.colibri.sync.subscribeEvents#voiceStateEvent" }
  • AddedVertex { vertex_id: "lex:social.colibri.sync.subscribeEvents#voiceStateEventData" }
  • AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#communityEventData.banner" }
  • AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#communityEventData.requiresApprovalToJoin" }
  • AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#humEnvelope.event:variant3" }
  • AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventData.member" }
  • AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventData.memberDid" }
  • AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember" }
  • AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.data" }
  • AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.did" }
  • AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.handle" }
  • AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.joinedAt" }
  • AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.nickname" }
  • AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.roles" }
  • AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.roles:items" }
  • AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.vc" }
  • AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.vcDeafened" }
  • AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#memberEventMember.vcMuted" }
  • AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEvent" }
  • AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEvent.data" }
  • AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEvent.type" }
  • AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEventData" }
  • AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEventData.channel" }
  • AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEventData.deafened" }
  • AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEventData.did" }
  • AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEventData.muted" }
  • AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEventData.serverDeafened" }
  • AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#voiceStateEventData.serverMuted" }

Constraint Changes

  • ConstraintTightened ConstraintTightened { vertex_id: "social.colibri.sync.subscribeEvents#memberEventData.event", sort: "knownValues", old_value: "[\"join\",\"leave\"]", new_value: "[\"join\",\"leave\",\"roles_updated\"]" }

Additional Notes

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

Compare Other Versions

Lexicon Garden

@