social.colibri.sync.subscribeEvents

colibri.social

Schema Diff

+3 -0

From

CID
bafyreievhjau2il...
Indexed At
2026-07-31 21:23 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 240
          "description": "Missing, malformed, or unverifiable service auth.",
241 241
          "name": "AuthRequired"
242 242
        }
243 243
      ],
244 244
      "message": {
245 245
        "schema": {
246 246
          "refs": [
247 247
            "lex:social.colibri.sync.subscribeEvents#ack",
248 248
            "lex:social.colibri.sync.subscribeEvents#communityEvent",
249 249
            "lex:social.colibri.sync.subscribeEvents#memberEvent",
250 250
            "lex:social.colibri.sync.subscribeEvents#categoryEvent",
251 251
            "lex:social.colibri.sync.subscribeEvents#channelEvent",
252 252
            "lex:social.colibri.sync.subscribeEvents#messageEvent",
253 253
            "lex:social.colibri.sync.subscribeEvents#reactionEvent",
254 254
            "lex:social.colibri.sync.subscribeEvents#userEvent",
255 255
            "lex:social.colibri.sync.subscribeEvents#typingEvent",
256 256
            "lex:social.colibri.sync.subscribeEvents#voicePresenceEvent",
257 257
            "lex:social.colibri.sync.subscribeEvents#voiceStateEvent"
258 258
          ],
259 259
          "type": "union"
260 260
        }
261 261
      },
262 262
      "type": "subscription"
263 263
    },
264 264
    "memberEvent": {
265 265
      "description": "Sent when a member has joined or left a community.",
266 266
      "properties": {
267 267
        "data": {
268 268
          "ref": "lex:social.colibri.sync.subscribeEvents#memberEventData",
269 269
          "type": "ref"
270 270
        },
271 271
        "type": {
272 272
          "const": "member_event",
273 273
          "type": "string"
274 274
        }
275 275
      },
276 276
      "required": [
277 277
        "type",
278 278
        "data"
279 279
      ],
280 280
      "type": "object"
281 281
    },
282 282
    "memberEventData": {
283 283
      "properties": {
284 284
        "community": {
285 285
          "format": "at-uri",
286 286
          "type": "string"
287 287
        },
288 288
        "event": {
289 289
          "knownValues": [
290 290
            "join",
291 291
            "leave",
292 292
            "roles_updated"
293 293
          ],
294 294
          "type": "string"
295 295
        },
296 296
        "member": {
297 297
          "description": "The affected member, hydrated. Present on `join` and `roles_updated`.",
298 298
          "ref": "lex:social.colibri.sync.subscribeEvents#memberEventMember",
299 299
          "type": "ref"
300 300
        },
301 301
        "memberDid": {
302 302
          "description": "DID of the member who left. Present on `leave`.",
303 303
          "format": "did",
304 304
          "type": "string"
305 305
        },
306 306
        "membership": {
307 307
          "format": "at-uri",
308 308
          "type": "string"
309 309
        }
310 310
      },
311 311
      "required": [
312 312
        "event",
313 313
        "community"
314 314
      ],
315 315
      "type": "object"
316 316
    },
317 317
    "memberEventMember": {
318 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 319
      "properties": {
320 320
        "data": {
321 321
          "ref": "lex:social.colibri.actor.defs#actorData",
322 322
          "type": "ref"
323 323
        },
324 324
        "did": {
325 325
          "format": "did",
326 326
          "type": "string"
327 327
        },
328 328
        "handle": {
329 329
          "format": "handle",
330 330
          "type": "string"
331 331
        },
332 332
        "joinedAt": {
333 333
          "format": "datetime",
334 334
          "type": "string"
335 335
        },
336 336
        "nickname": {
337 337
          "type": "string"
338 338
        },
339 339
        "roles": {
340 340
          "items": {
341 341
            "format": "at-uri",
342 342
            "type": "string"
343 343
          },
344 344
          "type": "array"
345 345
        },
346 346
        "vc": {
347 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 348
          "format": "at-uri",
349 349
          "type": "string"
350 350
        },
351 351
        "vcDeafened": {
352 352
          "type": "boolean"
353 353
        },
354 354
        "vcMuted": {
355 355
          "type": "boolean"
356 356
        }
357 357
      },
358 358
      "required": [
359 359
        "did",
360 360
        "handle",
361 361
        "roles",
362 362
        "data"
363 363
      ],
364 364
      "type": "object"
365 365
    },
366 366
    "messageEvent": {
367 367
      "description": "Sent when a message has been sent, edited, or deleted.",
368 368
      "properties": {
369 369
        "data": {
370 370
          "ref": "lex:social.colibri.sync.subscribeEvents#messageEventData",
371 371
          "type": "ref"
372 372
        },
373 373
        "type": {
374 374
          "const": "message_event",
375 375
          "type": "string"
376 376
        }
377 377
      },
378 378
      "required": [
379 379
        "type",
380 380
        "data"
381 381
      ],
382 382
      "type": "object"
383 383
    },
384 384
    "messageEventData": {
385 385
      "properties": {
386 386
        "attachments": {
387 387
          "items": {
388 388
            "type": "blob"
389 389
          },
390 390
          "type": "array"
391 391
        },
392 392
        "channel": {
393 393
          "format": "at-uri",
394 394
          "type": "string"
395 395
        },
396 396
        "createdAt": {
397 397
          "format": "datetime",
398 398
          "type": "string"
399 399
        },
400 400
        "edited": {
401 401
          "type": "boolean"
402 402
        },
403 403
        "event": {
404 404
          "knownValues": [
405 405
            "upsert",
406 406
            "delete"
407 407
          ],
408 408
          "type": "string"
409 409
        },
410 410
        "facets": {
411 411
          "items": {
412 412
            "ref": "lex:social.colibri.richtext.facet",
413 413
            "type": "ref"
414 414
          },
415 415
          "type": "array"
416 416
        },
417 417
        "indexedAt": {
418 418
          "format": "datetime",
419 419
          "type": "string"
420 420
        },
421 +
        "live": {
422 +
          "type": "boolean"
423 +
        },
421 424
        "parent": {
422 425
          "format": "at-uri",
423 426
          "type": "string"
424 427
        },
425 428
        "text": {
426 429
          "type": "string"
427 430
        },
428 431
        "uri": {
429 432
          "format": "at-uri",
430 433
          "type": "string"
431 434
        }
432 435
      },
433 436
      "required": [
434 437
        "event",
435 438
        "uri",
436 439
        "channel"
437 440
      ],
438 441
      "type": "object"
439 442
    },
440 443
    "reactionEvent": {
441 444
      "description": "Sent when a reaction has been added to or removed from a message.",
442 445
      "properties": {
443 446
        "data": {
444 447
          "ref": "lex:social.colibri.sync.subscribeEvents#reactionEventData",
445 448
          "type": "ref"
446 449
        },
447 450
        "type": {
448 451
          "const": "reaction_event",
449 452
          "type": "string"
450 453
        }
451 454
      },
452 455
      "required": [
453 456
        "type",
454 457
        "data"
455 458
      ],
456 459
      "type": "object"
457 460
    },
458 461
    "reactionEventData": {
459 462
      "properties": {
460 463
        "channel": {
461 464
          "format": "at-uri",
462 465
          "type": "string"
463 466
        },
464 467
        "emoji": {
465 468
          "type": "string"
466 469
        },
467 470
        "event": {
468 471
          "knownValues": [
469 472
            "added",
470 473
            "removed"
471 474
          ],
472 475
          "type": "string"
473 476
        },
474 477
        "target": {
475 478
          "format": "at-uri",
476 479
          "type": "string"
477 480
        },
478 481
        "uri": {
479 482
          "format": "at-uri",
480 483
          "type": "string"
481 484
        }
482 485
      },
483 486
      "required": [
484 487
        "event",
485 488
        "uri",
486 489
        "emoji",
487 490
        "target",
488 491
        "channel"
489 492
      ],
490 493
      "type": "object"
491 494
    },
492 495
    "typingEvent": {
493 496
      "description": "Sent when a user is typing in a channel the client is viewing.",
494 497
      "properties": {
495 498
        "data": {
496 499
          "ref": "lex:social.colibri.sync.subscribeEvents#typingEventData",
497 500
          "type": "ref"
498 501
        },
499 502
        "type": {
500 503
          "const": "typing_event",
501 504
          "type": "string"
502 505
        }
503 506
      },
504 507
      "required": [
505 508
        "type",
506 509
        "data"
507 510
      ],
508 511
      "type": "object"
509 512
    },
510 513
    "typingEventData": {
511 514
      "properties": {
512 515
        "channel": {
513 516
          "format": "at-uri",
514 517
          "type": "string"
515 518
        },
516 519
        "did": {
517 520
          "format": "did",
518 521
          "type": "string"
519 522
        },
520 523
        "event": {
521 524
          "knownValues": [
522 525
            "start",
523 526
            "stop"
524 527
          ],
525 528
          "type": "string"
526 529
        }
527 530
      },
528 531
      "required": [
529 532
        "event",
530 533
        "channel",
531 534
        "did"
532 535
      ],
533 536
      "type": "object"
534 537
    },
535 538
    "userEvent": {
536 539
      "description": "Sent when a known user has updated their profile or Colibri status.",
537 540
      "properties": {
538 541
        "data": {
539 542
          "ref": "lex:social.colibri.sync.subscribeEvents#userEventData",
540 543
          "type": "ref"
541 544
        },
542 545
        "type": {
543 546
          "const": "user_event",
544 547
          "type": "string"
545 548
        }
546 549
      },
547 550
      "required": [
548 551
        "type",
549 552
        "data"
550 553
      ],
551 554
      "type": "object"
552 555
    },
553 556
    "userEventData": {
554 557
      "properties": {
555 558
        "did": {
556 559
          "format": "did",
557 560
          "type": "string"
558 561
        },
559 562
        "profile": {
560 563
          "ref": "lex:social.colibri.sync.subscribeEvents#userProfile",
561 564
          "type": "ref"
562 565
        },
563 566
        "status": {
564 567
          "ref": "lex:social.colibri.sync.subscribeEvents#userStatus",
565 568
          "type": "ref"
566 569
        }
567 570
      },
568 571
      "required": [
569 572
        "did",
570 573
        "profile"
571 574
      ],
572 575
      "type": "object"
573 576
    },
574 577
    "userProfile": {
575 578
      "properties": {
576 579
        "avatar": {
577 580
          "type": "blob"
578 581
        },
579 582
        "banner": {
580 583
          "type": "blob"
581 584
        },
582 585
        "description": {
583 586
          "type": "string"
584 587
        },
585 588
        "displayName": {
586 589
          "type": "string"
587 590
        },
588 591
        "handle": {
589 592
          "format": "handle",
590 593
          "type": "string"
591 594
        }
592 595
      },
593 596
      "required": [
594 597
        "handle"
595 598
      ],
596 599
      "type": "object"
597 600
    },
598 601
    "userStatus": {
599 602
      "properties": {
600 603
        "emoji": {
601 604
          "type": "string"
602 605
        },
603 606
        "state": {
604 607
          "knownValues": [
605 608
            "online",
606 609
            "away",
607 610
            "dnd",
608 611
            "offline"
609 612
          ],
610 613
          "type": "string"
611 614
        },
612 615
        "text": {
613 616
          "type": "string"
614 617
        }
615 618
      },
616 619
      "required": [
617 620
        "state",
618 621
        "text"
619 622
      ],
620 623
      "type": "object"
621 624
    },
622 625
    "voicePresenceEvent": {
623 626
      "description": "Sent when a user joins or leaves a voice channel.",
624 627
      "properties": {
625 628
        "data": {
626 629
          "ref": "lex:social.colibri.sync.subscribeEvents#voicePresenceEventData",
627 630
          "type": "ref"
628 631
        },
629 632
        "type": {
630 633
          "const": "voice_presence_event",
631 634
          "type": "string"
632 635
        }
633 636
      },
634 637
      "required": [
635 638
        "type",
636 639
        "data"
637 640
      ],
638 641
      "type": "object"
639 642
    },
640 643
    "voicePresenceEventData": {
641 644
      "properties": {
642 645
        "channel": {
643 646
          "format": "at-uri",
644 647
          "type": "string"
645 648
        },
646 649
        "did": {
647 650
          "format": "did",
648 651
          "type": "string"
649 652
        },
650 653
        "event": {
651 654
          "knownValues": [
652 655
            "join",
653 656
            "leave"
654 657
          ],
655 658
          "type": "string"
656 659
        }
657 660
      },
658 661
      "required": [
659 662
        "event",
660 663
        "channel",
661 664
        "did"
662 665
      ],
663 666
      "type": "object"
664 667
    },
665 668
    "voiceStateEvent": {
666 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.",
667 670
      "properties": {
668 671
        "data": {
669 672
          "ref": "lex:social.colibri.sync.subscribeEvents#voiceStateEventData",
670 673
          "type": "ref"
671 674
        },
672 675
        "type": {
673 676
          "const": "voice_state_event",
674 677
          "type": "string"
675 678
        }
676 679
      },
677 680
      "required": [
678 681
        "type",
679 682
        "data"
680 683
      ],
681 684
      "type": "object"
682 685
    },
683 686
    "voiceStateEventData": {
684 687
      "properties": {
685 688
        "channel": {
686 689
          "format": "at-uri",
687 690
          "type": "string"
688 691
        },
689 692
        "deafened": {
690 693
          "type": "boolean"
691 694
        },
692 695
        "did": {
693 696
          "format": "did",
694 697
          "type": "string"
695 698
        },
696 699
        "muted": {
697 700
          "type": "boolean"
698 701
        },
699 702
        "serverDeafened": {
700 703
          "type": "boolean"
701 704
        },
702 705
        "serverMuted": {
703 706
          "type": "boolean"
704 707
        }
705 708
      },
706 709
      "required": [
707 710
        "channel",
708 711
        "did"
709 712
      ],
710 713
      "type": "object"
711 714
    }
712 715
  },
713 716
  "id": "social.colibri.sync.subscribeEvents",
714 717
  "lexicon": 1,
715 718
  "revision": 1
716 719
}

Compare Other Versions

Lexicon Garden

@