social.colibri.sync.subscribeEvents

colibri.social

Schema Diff

+129 -5

From

CID
bafyreieqxnnyqnm...
Indexed At
2026-07-24 14:44 UTC
View this version

To

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

Compatibility Analysis

Breaking Changes Detected

12 breaking changes, 53 non-breaking changes.

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

Migration Guidance

Added Elements

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

Constraint Changes

  • ConstraintAdded ConstraintAdded { vertex_id: "social.colibri.sync.subscribeEvents#communityEventData.categoryOrder:items", sort: "format", value: "at-uri" }
  • ConstraintAdded ConstraintAdded { vertex_id: "social.colibri.sync.subscribeEvents#categoryEventData.channelOrder:items", sort: "format", value: "at-uri" }
  • ConstraintTightened ConstraintTightened { vertex_id: "social.colibri.sync.subscribeEvents#memberEventData.event", sort: "knownValues", old_value: "[\"join\",\"leave\"]", new_value: "[\"join\",\"leave\",\"roles_updated\"]" }

Additional Notes

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

Compare Other Versions

Lexicon Garden

@