social.colibri.sync.subscribeEvents
Schema Diff
+3 -0
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
}