social.colibri.sync.subscribeEvents

colibri.social

Schema Diff

+6 -0

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

Compare Other Versions

Lexicon Garden

@