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#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
}

Compare Other Versions

Lexicon Garden

@