social.colibri.sync.subscribeEvents

colibri.social

Schema Diff

+123 -5

From

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

To

CID
bafyreihrarl3uu6...
Indexed At
2026-08-15 21:21 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

10 breaking changes, 51 non-breaking changes.

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

Migration Guidance

Added Elements

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

Constraint Changes

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

Additional Notes

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

Compare Other Versions

Lexicon Garden

@