social.colibri.sync.subscribeEvents

colibri.social

Schema Diff

+2 -1

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

Compare Other Versions

Lexicon Garden

@