social.colibri.sync.subscribeEvents

colibri.social

Schema Diff

+4 -0

From

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

To

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

Compatibility Analysis

Backward Compatible

Backward compatible. 2 non-breaking changes.

Non-Breaking Changes (2)
  • AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#messageEventData.live" }
  • AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#messageEventData", tgt: "social.colibri.sync.subscribeEvents#messageEventData.live", kind: "prop", name: Some("live") }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#messageEventData.live" }

Additional Notes

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

Compare Other Versions

Lexicon Garden

@