social.colibri.sync.subscribeEvents

colibri.social

Schema Diff

+8 -2

From

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

To

CID
bafyreicpejvct5q...
Indexed At
2026-07-27 21:35 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

2 breaking changes, 2 non-breaking changes.

Breaking Changes (2)
  • ConstraintAdded ConstraintAdded { vertex_id: "social.colibri.sync.subscribeEvents#categoryEventData.channelOrder:items", sort: "format", value: "at-uri" }
  • ConstraintAdded ConstraintAdded { vertex_id: "social.colibri.sync.subscribeEvents#communityEventData.categoryOrder:items", sort: "format", value: "at-uri" }
Non-Breaking Changes (2)
  • AddedVertex AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#channelEventData.category" }
  • AddedEdge AddedEdge { src: "social.colibri.sync.subscribeEvents#channelEventData", tgt: "social.colibri.sync.subscribeEvents#channelEventData.category", kind: "prop", name: Some("category") }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "social.colibri.sync.subscribeEvents#channelEventData.category" }

Constraint Changes

  • ConstraintAdded ConstraintAdded { vertex_id: "social.colibri.sync.subscribeEvents#categoryEventData.channelOrder:items", sort: "format", value: "at-uri" }
  • ConstraintAdded ConstraintAdded { vertex_id: "social.colibri.sync.subscribeEvents#communityEventData.categoryOrder:items", sort: "format", value: "at-uri" }

Additional Notes

  • Non-breaking: AddedEdge { src: "social.colibri.sync.subscribeEvents#channelEventData", tgt: "social.colibri.sync.subscribeEvents#channelEventData.category", kind: "prop", name: Some("category") }
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 21
          "name": "AuthRequired"
22 22
        }
23 23
      ],
24 24
      "message": {
25 25
        "schema": {
26 26
          "refs": [
27 27
            "lex:social.colibri.sync.subscribeEvents#ack",
28 28
            "lex:social.colibri.sync.subscribeEvents#communityEvent",
29 29
            "lex:social.colibri.sync.subscribeEvents#memberEvent",
30 30
            "lex:social.colibri.sync.subscribeEvents#categoryEvent",
31 31
            "lex:social.colibri.sync.subscribeEvents#channelEvent",
32 32
            "lex:social.colibri.sync.subscribeEvents#messageEvent",
33 33
            "lex:social.colibri.sync.subscribeEvents#reactionEvent",
34 34
            "lex:social.colibri.sync.subscribeEvents#userEvent",
35 35
            "lex:social.colibri.sync.subscribeEvents#typingEvent",
36 36
            "lex:social.colibri.sync.subscribeEvents#voicePresenceEvent"
37 37
          ],
38 38
          "type": "union"
39 39
        }
40 40
      },
41 41
      "description": "Opens a WebSocket stream that transmits relevant events for the authenticated user."
42 42
    },
43 43
    "userEvent": {
44 44
      "type": "object",
45 45
      "required": [
46 46
        "type",
47 47
        "data"
48 48
      ],
49 49
      "properties": {
50 50
        "data": {
51 51
          "ref": "lex:social.colibri.sync.subscribeEvents#userEventData",
52 52
          "type": "ref"
53 53
        },
54 54
        "type": {
55 55
          "type": "string",
56 56
          "const": "user_event"
57 57
        }
58 58
      },
59 59
      "description": "Sent when a known user has updated their profile or Colibri status."
60 60
    },
61 61
    "userStatus": {
62 62
      "type": "object",
63 63
      "required": [
64 64
        "state",
65 65
        "text"
66 66
      ],
67 67
      "properties": {
68 68
        "text": {
69 69
          "type": "string"
70 70
        },
71 71
        "emoji": {
72 72
          "type": "string"
73 73
        },
74 74
        "state": {
75 75
          "type": "string",
76 76
          "knownValues": [
77 77
            "online",
78 78
            "away",
79 79
            "dnd",
80 80
            "offline"
81 81
          ]
82 82
        }
83 83
      }
84 84
    },
85 85
    "humEnvelope": {
86 86
      "type": "object",
87 87
      "required": [
88 88
        "origin",
89 89
        "id",
90 90
        "ttl",
91 91
        "subject",
92 92
        "community",
93 93
        "event"
94 94
      ],
95 95
      "properties": {
96 96
        "id": {
97 97
          "type": "string",
98 98
          "maxLength": 64,
99 99
          "description": "Unique id for this Hum, used by receivers to dedup across relay paths."
100 100
        },
101 101
        "ttl": {
102 102
          "type": "integer",
103 103
          "maximum": 8,
104 104
          "minimum": 0,
105 105
          "description": "Remaining relay hops. Decremented on each forward; a Hum at ttl 0 is delivered locally but never relayed."
106 106
        },
107 107
        "event": {
108 108
          "refs": [
109 109
            "lex:social.colibri.sync.subscribeEvents#userEvent",
110 110
            "lex:social.colibri.sync.subscribeEvents#typingEvent",
111 111
            "lex:social.colibri.sync.subscribeEvents#voicePresenceEvent"
112 112
          ],
113 113
          "type": "union",
114 114
          "description": "Ephemeral event payload. Only off-protocol types are permitted."
115 115
        },
116 116
        "origin": {
117 117
          "type": "string",
118 118
          "format": "did",
119 119
          "description": "DID of the AppView that first emitted this Hum."
120 120
        },
121 121
        "subject": {
122 122
          "type": "string",
123 123
          "format": "did",
124 124
          "description": "The user this event is about. Receiver MUST verify origin equals subject's declared presenceService before trusting or relaying."
125 125
        },
126 126
        "community": {
127 127
          "type": "string",
128 128
          "format": "at-uri",
129 129
          "description": "Community the event is scoped to. Receiver relays to local clients only if they are members of this community."
130 130
        }
131 131
      },
132 132
      "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."
133 133
    },
134 134
    "memberEvent": {
135 135
      "type": "object",
136 136
      "required": [
137 137
        "type",
138 138
        "data"
139 139
      ],
140 140
      "properties": {
141 141
        "data": {
142 142
          "ref": "lex:social.colibri.sync.subscribeEvents#memberEventData",
143 143
          "type": "ref"
144 144
        },
145 145
        "type": {
146 146
          "type": "string",
147 147
          "const": "member_event"
148 148
        }
149 149
      },
150 150
      "description": "Sent when a member has joined or left a community."
151 151
    },
152 152
    "typingEvent": {
153 153
      "type": "object",
154 154
      "required": [
155 155
        "type",
156 156
        "data"
157 157
      ],
158 158
      "properties": {
159 159
        "data": {
160 160
          "ref": "lex:social.colibri.sync.subscribeEvents#typingEventData",
161 161
          "type": "ref"
162 162
        },
163 163
        "type": {
164 164
          "type": "string",
165 165
          "const": "typing_event"
166 166
        }
167 167
      },
168 168
      "description": "Sent when a user is typing in a channel the client is viewing."
169 169
    },
170 170
    "userProfile": {
171 171
      "type": "object",
172 172
      "required": [
173 173
        "handle"
174 174
      ],
175 175
      "properties": {
176 176
        "avatar": {
177 177
          "type": "blob"
178 178
        },
179 179
        "banner": {
180 180
          "type": "blob"
181 181
        },
182 182
        "handle": {
183 183
          "type": "string",
184 184
          "format": "handle"
185 185
        },
186 186
        "description": {
187 187
          "type": "string"
188 188
        },
189 189
        "displayName": {
190 190
          "type": "string"
191 191
        }
192 192
      }
193 193
    },
194 194
    "channelEvent": {
195 195
      "type": "object",
196 196
      "required": [
197 197
        "type",
198 198
        "data"
199 199
      ],
200 200
      "properties": {
201 201
        "data": {
202 202
          "ref": "lex:social.colibri.sync.subscribeEvents#channelEventData",
203 203
          "type": "ref"
204 204
        },
205 205
        "type": {
206 206
          "type": "string",
207 207
          "const": "channel_event"
208 208
        }
209 209
      },
210 210
      "description": "Sent when a channel has been created, updated, or deleted."
211 211
    },
212 212
    "messageEvent": {
213 213
      "type": "object",
214 214
      "required": [
215 215
        "type",
216 216
        "data"
217 217
      ],
218 218
      "properties": {
219 219
        "data": {
220 220
          "ref": "lex:social.colibri.sync.subscribeEvents#messageEventData",
221 221
          "type": "ref"
222 222
        },
223 223
        "type": {
224 224
          "type": "string",
225 225
          "const": "message_event"
226 226
        }
227 227
      },
228 228
      "description": "Sent when a message has been sent, edited, or deleted."
229 229
    },
230 230
    "categoryEvent": {
231 231
      "type": "object",
232 232
      "required": [
233 233
        "type",
234 234
        "data"
235 235
      ],
236 236
      "properties": {
237 237
        "data": {
238 238
          "ref": "lex:social.colibri.sync.subscribeEvents#categoryEventData",
239 239
          "type": "ref"
240 240
        },
241 241
        "type": {
242 242
          "type": "string",
243 243
          "const": "category_event"
244 244
        }
245 245
      },
246 246
      "description": "Sent when a category has been created, updated, or deleted."
247 247
    },
248 248
    "reactionEvent": {
249 249
      "type": "object",
250 250
      "required": [
251 251
        "type",
252 252
        "data"
253 253
      ],
254 254
      "properties": {
255 255
        "data": {
256 256
          "ref": "lex:social.colibri.sync.subscribeEvents#reactionEventData",
257 257
          "type": "ref"
258 258
        },
259 259
        "type": {
260 260
          "type": "string",
261 261
          "const": "reaction_event"
262 262
        }
263 263
      },
264 264
      "description": "Sent when a reaction has been added to or removed from a message."
265 265
    },
266 266
    "userEventData": {
267 267
      "type": "object",
268 268
      "required": [
269 269
        "did",
270 270
        "profile"
271 271
      ],
272 272
      "properties": {
273 273
        "did": {
274 274
          "type": "string",
275 275
          "format": "did"
276 276
        },
277 277
        "status": {
278 278
          "ref": "lex:social.colibri.sync.subscribeEvents#userStatus",
279 279
          "type": "ref"
280 280
        },
281 281
        "profile": {
282 282
          "ref": "lex:social.colibri.sync.subscribeEvents#userProfile",
283 283
          "type": "ref"
284 284
        }
285 285
      }
286 286
    },
287 287
    "communityEvent": {
288 288
      "type": "object",
289 289
      "required": [
290 290
        "type",
291 291
        "data"
292 292
      ],
293 293
      "properties": {
294 294
        "data": {
295 295
          "ref": "lex:social.colibri.sync.subscribeEvents#communityEventData",
296 296
          "type": "ref"
297 297
        },
298 298
        "type": {
299 299
          "type": "string",
300 300
          "const": "community_event"
301 301
        }
302 302
      },
303 303
      "description": "Sent when a community has been updated or deleted."
304 304
    },
305 305
    "memberEventData": {
306 306
      "type": "object",
307 307
      "required": [
308 308
        "event",
309 309
        "community",
310 310
        "membership"
311 311
      ],
312 312
      "properties": {
313 313
        "event": {
314 314
          "type": "string",
315 315
          "knownValues": [
316 316
            "join",
317 317
            "leave"
318 318
          ]
319 319
        },
320 320
        "community": {
321 321
          "type": "string",
322 322
          "format": "at-uri"
323 323
        },
324 324
        "membership": {
325 325
          "type": "string",
326 326
          "format": "at-uri"
327 327
        }
328 328
      }
329 329
    },
330 330
    "typingEventData": {
331 331
      "type": "object",
332 332
      "required": [
333 333
        "event",
334 334
        "channel",
335 335
        "did"
336 336
      ],
337 337
      "properties": {
338 338
        "did": {
339 339
          "type": "string",
340 340
          "format": "did"
341 341
        },
342 342
        "event": {
343 343
          "type": "string",
344 344
          "knownValues": [
345 345
            "start",
346 346
            "stop"
347 347
          ]
348 348
        },
349 349
        "channel": {
350 350
          "type": "string",
351 351
          "format": "at-uri"
352 352
        }
353 353
      }
354 354
    },
355 355
    "channelEventData": {
356 356
      "type": "object",
357 357
      "required": [
358 358
        "event",
359 359
        "uri",
360 360
        "community"
361 361
      ],
362 362
      "properties": {
363 363
        "uri": {
364 364
          "type": "string",
365 365
          "format": "at-uri"
366 366
        },
367 367
        "name": {
368 368
          "type": "string"
369 369
        },
370 370
        "type": {
371 371
          "type": "string"
372 372
        },
373 373
        "event": {
374 374
          "type": "string",
375 375
          "knownValues": [
376 376
            "upsert",
377 377
            "delete"
378 378
          ]
379 379
        },
380 +
        "category": {
381 +
          "type": "string",
382 +
          "format": "at-uri"
383 +
        },
380 384
        "community": {
381 385
          "type": "string",
382 386
          "format": "at-uri"
383 387
        },
384 388
        "description": {
385 389
          "type": "string"
386 390
        }
387 391
      }
388 392
    },
389 393
    "messageEventData": {
390 394
      "type": "object",
391 395
      "required": [
392 396
        "event",
393 397
        "uri",
394 398
        "channel"
395 399
      ],
396 400
      "properties": {
397 401
        "uri": {
398 402
          "type": "string",
399 403
          "format": "at-uri"
400 404
        },
401 405
        "text": {
402 406
          "type": "string"
403 407
        },
404 408
        "event": {
405 409
          "type": "string",
406 410
          "knownValues": [
407 411
            "upsert",
408 412
            "delete"
409 413
          ]
410 414
        },
411 415
        "edited": {
412 416
          "type": "boolean"
413 417
        },
414 418
        "facets": {
415 419
          "type": "array",
416 420
          "items": {
417 421
            "ref": "lex:social.colibri.richtext.facet",
418 422
            "type": "ref"
419 423
          }
420 424
        },
421 425
        "parent": {
422 426
          "type": "string",
423 427
          "format": "at-uri"
424 428
        },
425 429
        "channel": {
426 430
          "type": "string",
427 431
          "format": "at-uri"
428 432
        },
429 433
        "createdAt": {
430 434
          "type": "string",
431 435
          "format": "datetime"
432 436
        },
433 437
        "indexedAt": {
434 438
          "type": "string",
435 439
          "format": "datetime"
436 440
        },
437 441
        "attachments": {
438 442
          "type": "array",
439 443
          "items": {
440 444
            "type": "blob"
441 445
          }
442 446
        }
443 447
      }
444 448
    },
445 449
    "categoryEventData": {
446 450
      "type": "object",
447 451
      "required": [
448 452
        "event",
449 453
        "uri",
450 454
        "community"
451 455
      ],
452 456
      "properties": {
453 457
        "uri": {
454 458
          "type": "string",
455 459
          "format": "at-uri"
456 460
        },
457 461
        "name": {
458 462
          "type": "string"
459 463
        },
460 464
        "event": {
461 465
          "type": "string",
462 466
          "knownValues": [
463 467
            "upsert",
464 468
            "delete"
465 469
          ]
466 470
        },
467 471
        "community": {
468 472
          "type": "string",
469 473
          "format": "at-uri"
470 474
        },
471 475
        "channelOrder": {
472 476
          "type": "array",
473 477
          "items": {
474 -
            "type": "string"
478 +
            "type": "string",
479 +
            "format": "at-uri"
475 480
          }
476 481
        }
477 482
      }
478 483
    },
479 484
    "reactionEventData": {
480 485
      "type": "object",
481 486
      "required": [
482 487
        "event",
483 488
        "uri",
484 489
        "emoji",
485 490
        "target",
486 491
        "channel"
487 492
      ],
488 493
      "properties": {
489 494
        "uri": {
490 495
          "type": "string",
491 496
          "format": "at-uri"
492 497
        },
493 498
        "emoji": {
494 499
          "type": "string"
495 500
        },
496 501
        "event": {
497 502
          "type": "string",
498 503
          "knownValues": [
499 504
            "added",
500 505
            "removed"
501 506
          ]
502 507
        },
503 508
        "target": {
504 509
          "type": "string",
505 510
          "format": "at-uri"
506 511
        },
507 512
        "channel": {
508 513
          "type": "string",
509 514
          "format": "at-uri"
510 515
        }
511 516
      }
512 517
    },
513 518
    "communityEventData": {
514 519
      "type": "object",
515 520
      "required": [
516 521
        "event",
517 522
        "uri"
518 523
      ],
519 524
      "properties": {
520 525
        "uri": {
521 526
          "type": "string",
522 527
          "format": "at-uri"
523 528
        },
524 529
        "name": {
525 530
          "type": "string"
526 531
        },
527 532
        "event": {
528 533
          "type": "string",
529 534
          "knownValues": [
530 535
            "upsert",
531 536
            "delete"
532 537
          ]
533 538
        },
534 539
        "picture": {
535 540
          "type": "blob"
536 541
        },
537 542
        "description": {
538 543
          "type": "string"
539 544
        },
540 545
        "categoryOrder": {
541 546
          "type": "array",
542 547
          "items": {
543 -
            "type": "string"
548 +
            "type": "string",
549 +
            "format": "at-uri"
544 550
          }
545 551
        }
546 552
      }
547 553
    },
548 554
    "voicePresenceEvent": {
549 555
      "type": "object",
550 556
      "required": [
551 557
        "type",
552 558
        "data"
553 559
      ],
554 560
      "properties": {
555 561
        "data": {
556 562
          "ref": "lex:social.colibri.sync.subscribeEvents#voicePresenceEventData",
557 563
          "type": "ref"
558 564
        },
559 565
        "type": {
560 566
          "type": "string",
561 567
          "const": "voice_presence_event"
562 568
        }
563 569
      },
564 570
      "description": "Sent when a user joins or leaves a voice channel."
565 571
    },
566 572
    "voicePresenceEventData": {
567 573
      "type": "object",
568 574
      "required": [
569 575
        "event",
570 576
        "channel",
571 577
        "did"
572 578
      ],
573 579
      "properties": {
574 580
        "did": {
575 581
          "type": "string",
576 582
          "format": "did"
577 583
        },
578 584
        "event": {
579 585
          "type": "string",
580 586
          "knownValues": [
581 587
            "join",
582 588
            "leave"
583 589
          ]
584 590
        },
585 591
        "channel": {
586 592
          "type": "string",
587 593
          "format": "at-uri"
588 594
        }
589 595
      }
590 596
    }
591 597
  },
592 598
  "$type": "com.atproto.lexicon.schema",
593 599
  "lexicon": 1,
594 600
  "revision": 1
595 601
}

Compare Other Versions

Lexicon Garden

@