social.colibri.sync.subscribeEvents

colibri.social

Schema Diff

+1 -0

From

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

To

CID
bafyreievhjau2il...
Indexed At
2026-07-31 21:23 UTC
View this version

Compatibility Analysis

Backward Compatible

No changes detected.

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
        },
420 421
        "parent": {
421 422
          "format": "at-uri",
422 423
          "type": "string"
423 424
        },
424 425
        "text": {
425 426
          "type": "string"
426 427
        },
427 428
        "uri": {
428 429
          "format": "at-uri",
429 430
          "type": "string"
430 431
        }
431 432
      },
432 433
      "required": [
433 434
        "event",
434 435
        "uri",
435 436
        "channel"
436 437
      ],
437 438
      "type": "object"
438 439
    },
439 440
    "reactionEvent": {
440 441
      "description": "Sent when a reaction has been added to or removed from a message.",
441 442
      "properties": {
442 443
        "data": {
443 444
          "ref": "lex:social.colibri.sync.subscribeEvents#reactionEventData",
444 445
          "type": "ref"
445 446
        },
446 447
        "type": {
447 448
          "const": "reaction_event",
448 449
          "type": "string"
449 450
        }
450 451
      },
451 452
      "required": [
452 453
        "type",
453 454
        "data"
454 455
      ],
455 456
      "type": "object"
456 457
    },
457 458
    "reactionEventData": {
458 459
      "properties": {
459 460
        "channel": {
460 461
          "format": "at-uri",
461 462
          "type": "string"
462 463
        },
463 464
        "emoji": {
464 465
          "type": "string"
465 466
        },
466 467
        "event": {
467 468
          "knownValues": [
468 469
            "added",
469 470
            "removed"
470 471
          ],
471 472
          "type": "string"
472 473
        },
473 474
        "target": {
474 475
          "format": "at-uri",
475 476
          "type": "string"
476 477
        },
477 478
        "uri": {
478 479
          "format": "at-uri",
479 480
          "type": "string"
480 481
        }
481 482
      },
482 483
      "required": [
483 484
        "event",
484 485
        "uri",
485 486
        "emoji",
486 487
        "target",
487 488
        "channel"
488 489
      ],
489 490
      "type": "object"
490 491
    },
491 492
    "typingEvent": {
492 493
      "description": "Sent when a user is typing in a channel the client is viewing.",
493 494
      "properties": {
494 495
        "data": {
495 496
          "ref": "lex:social.colibri.sync.subscribeEvents#typingEventData",
496 497
          "type": "ref"
497 498
        },
498 499
        "type": {
499 500
          "const": "typing_event",
500 501
          "type": "string"
501 502
        }
502 503
      },
503 504
      "required": [
504 505
        "type",
505 506
        "data"
506 507
      ],
507 508
      "type": "object"
508 509
    },
509 510
    "typingEventData": {
510 511
      "properties": {
511 512
        "channel": {
512 513
          "format": "at-uri",
513 514
          "type": "string"
514 515
        },
515 516
        "did": {
516 517
          "format": "did",
517 518
          "type": "string"
518 519
        },
519 520
        "event": {
520 521
          "knownValues": [
521 522
            "start",
522 523
            "stop"
523 524
          ],
524 525
          "type": "string"
525 526
        }
526 527
      },
527 528
      "required": [
528 529
        "event",
529 530
        "channel",
530 531
        "did"
531 532
      ],
532 533
      "type": "object"
533 534
    },
534 535
    "userEvent": {
535 536
      "description": "Sent when a known user has updated their profile or Colibri status.",
536 537
      "properties": {
537 538
        "data": {
538 539
          "ref": "lex:social.colibri.sync.subscribeEvents#userEventData",
539 540
          "type": "ref"
540 541
        },
541 542
        "type": {
542 543
          "const": "user_event",
543 544
          "type": "string"
544 545
        }
545 546
      },
546 547
      "required": [
547 548
        "type",
548 549
        "data"
549 550
      ],
550 551
      "type": "object"
551 552
    },
552 553
    "userEventData": {
553 554
      "properties": {
554 555
        "did": {
555 556
          "format": "did",
556 557
          "type": "string"
557 558
        },
558 559
        "profile": {
559 560
          "ref": "lex:social.colibri.sync.subscribeEvents#userProfile",
560 561
          "type": "ref"
561 562
        },
562 563
        "status": {
563 564
          "ref": "lex:social.colibri.sync.subscribeEvents#userStatus",
564 565
          "type": "ref"
565 566
        }
566 567
      },
567 568
      "required": [
568 569
        "did",
569 570
        "profile"
570 571
      ],
571 572
      "type": "object"
572 573
    },
573 574
    "userProfile": {
574 575
      "properties": {
575 576
        "avatar": {
576 577
          "type": "blob"
577 578
        },
578 579
        "banner": {
579 580
          "type": "blob"
580 581
        },
581 582
        "description": {
582 583
          "type": "string"
583 584
        },
584 585
        "displayName": {
585 586
          "type": "string"
586 587
        },
587 588
        "handle": {
588 589
          "format": "handle",
589 590
          "type": "string"
590 591
        }
591 592
      },
592 593
      "required": [
593 594
        "handle"
594 595
      ],
595 596
      "type": "object"
596 597
    },
597 598
    "userStatus": {
598 599
      "properties": {
599 600
        "emoji": {
600 601
          "type": "string"
601 602
        },
602 603
        "state": {
603 604
          "knownValues": [
604 605
            "online",
605 606
            "away",
606 607
            "dnd",
607 608
            "offline"
608 609
          ],
609 610
          "type": "string"
610 611
        },
611 612
        "text": {
612 613
          "type": "string"
613 614
        }
614 615
      },
615 616
      "required": [
616 617
        "state",
617 618
        "text"
618 619
      ],
619 620
      "type": "object"
620 621
    },
621 622
    "voicePresenceEvent": {
622 623
      "description": "Sent when a user joins or leaves a voice channel.",
623 624
      "properties": {
624 625
        "data": {
625 626
          "ref": "lex:social.colibri.sync.subscribeEvents#voicePresenceEventData",
626 627
          "type": "ref"
627 628
        },
628 629
        "type": {
629 630
          "const": "voice_presence_event",
630 631
          "type": "string"
631 632
        }
632 633
      },
633 634
      "required": [
634 635
        "type",
635 636
        "data"
636 637
      ],
637 638
      "type": "object"
638 639
    },
639 640
    "voicePresenceEventData": {
640 641
      "properties": {
641 642
        "channel": {
642 643
          "format": "at-uri",
643 644
          "type": "string"
644 645
        },
645 646
        "did": {
646 647
          "format": "did",
647 648
          "type": "string"
648 649
        },
649 650
        "event": {
650 651
          "knownValues": [
651 652
            "join",
652 653
            "leave"
653 654
          ],
654 655
          "type": "string"
655 656
        }
656 657
      },
657 658
      "required": [
658 659
        "event",
659 660
        "channel",
660 661
        "did"
661 662
      ],
662 663
      "type": "object"
663 664
    },
664 665
    "voiceStateEvent": {
665 666
      "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 667
      "properties": {
667 668
        "data": {
668 669
          "ref": "lex:social.colibri.sync.subscribeEvents#voiceStateEventData",
669 670
          "type": "ref"
670 671
        },
671 672
        "type": {
672 673
          "const": "voice_state_event",
673 674
          "type": "string"
674 675
        }
675 676
      },
676 677
      "required": [
677 678
        "type",
678 679
        "data"
679 680
      ],
680 681
      "type": "object"
681 682
    },
682 683
    "voiceStateEventData": {
683 684
      "properties": {
684 685
        "channel": {
685 686
          "format": "at-uri",
686 687
          "type": "string"
687 688
        },
688 689
        "deafened": {
689 690
          "type": "boolean"
690 691
        },
691 692
        "did": {
692 693
          "format": "did",
693 694
          "type": "string"
694 695
        },
695 696
        "muted": {
696 697
          "type": "boolean"
697 698
        },
698 699
        "serverDeafened": {
699 700
          "type": "boolean"
700 701
        },
701 702
        "serverMuted": {
702 703
          "type": "boolean"
703 704
        }
704 705
      },
705 706
      "required": [
706 707
        "channel",
707 708
        "did"
708 709
      ],
709 710
      "type": "object"
710 711
    }
711 712
  },
712 713
  "id": "social.colibri.sync.subscribeEvents",
713 714
  "lexicon": 1,
714 715
  "revision": 1
715 716
}

Compare Other Versions

Lexicon Garden

@